cx-viewer 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1440) hide show
  1. package/README.md +75 -28
  2. package/build.js +15 -0
  3. package/cli.js +108 -38
  4. package/concepts/ar/BodyDiffJSON.md +1 -1
  5. package/concepts/ar/BodyFields.md +30 -33
  6. package/concepts/ar/GlobalSettings.md +165 -167
  7. package/concepts/ar/MainAgent.md +3 -4
  8. package/concepts/ar/ProxySwitch.md +3 -3
  9. package/concepts/ar/QRCode.md +1 -1
  10. package/concepts/ar/ResponseFields.md +29 -41
  11. package/concepts/ar/SubAgent-Search.md +12 -12
  12. package/concepts/ar/Teammate.md +16 -16
  13. package/concepts/ar/ToolsFirst.md +42 -48
  14. package/concepts/ar/TranslateContextPollution.md +9 -9
  15. package/concepts/ar/UltraPlan.md +38 -38
  16. package/concepts/da/BodyDiffJSON.md +2 -2
  17. package/concepts/da/BodyFields.md +30 -33
  18. package/concepts/da/GlobalSettings.md +165 -167
  19. package/concepts/da/MainAgent.md +3 -4
  20. package/concepts/da/ProxySwitch.md +3 -3
  21. package/concepts/da/QRCode.md +1 -1
  22. package/concepts/da/ResponseFields.md +29 -41
  23. package/concepts/da/SubAgent-Search.md +11 -11
  24. package/concepts/da/Teammate.md +16 -16
  25. package/concepts/da/ToolsFirst.md +42 -48
  26. package/concepts/da/TranslateContextPollution.md +9 -9
  27. package/concepts/da/UltraPlan.md +38 -38
  28. package/concepts/de/BodyDiffJSON.md +2 -2
  29. package/concepts/de/BodyFields.md +30 -33
  30. package/concepts/de/GlobalSettings.md +165 -167
  31. package/concepts/de/MainAgent.md +3 -4
  32. package/concepts/de/ProxySwitch.md +3 -3
  33. package/concepts/de/QRCode.md +1 -1
  34. package/concepts/de/ResponseFields.md +29 -41
  35. package/concepts/de/SubAgent-Search.md +11 -11
  36. package/concepts/de/Teammate.md +15 -15
  37. package/concepts/de/ToolsFirst.md +41 -47
  38. package/concepts/de/TranslateContextPollution.md +9 -9
  39. package/concepts/de/UltraPlan.md +38 -38
  40. package/concepts/en/BodyDiffJSON.md +5 -5
  41. package/concepts/en/BodyFields.md +17 -20
  42. package/concepts/en/GlobalSettings.md +49 -51
  43. package/concepts/en/MainAgent.md +8 -8
  44. package/concepts/en/ProxySwitch.md +3 -3
  45. package/concepts/en/QRCode.md +6 -6
  46. package/concepts/en/ResponseFields.md +7 -19
  47. package/concepts/en/SubAgent-Search.md +2 -2
  48. package/concepts/en/Teammate.md +4 -4
  49. package/concepts/en/Tool-apply_patch.md +11 -0
  50. package/concepts/en/Tool-create_goal.md +8 -0
  51. package/concepts/en/Tool-exec.md +88 -0
  52. package/concepts/en/Tool-followup_task.md +10 -0
  53. package/concepts/en/Tool-get_goal.md +5 -0
  54. package/concepts/en/Tool-image_generation.md +5 -0
  55. package/concepts/en/Tool-interrupt_agent.md +9 -0
  56. package/concepts/en/Tool-list_agents.md +9 -0
  57. package/concepts/en/Tool-list_mcp_resource_templates.md +8 -0
  58. package/concepts/en/Tool-list_mcp_resources.md +8 -0
  59. package/concepts/en/Tool-read_mcp_resource.md +10 -0
  60. package/concepts/en/Tool-request_user_input.md +9 -0
  61. package/concepts/en/Tool-send_message.md +10 -0
  62. package/concepts/en/Tool-shell_command.md +12 -0
  63. package/concepts/en/Tool-spawn_agent.md +11 -0
  64. package/concepts/en/Tool-tool_search.md +12 -0
  65. package/concepts/en/Tool-update_goal.md +9 -0
  66. package/concepts/en/Tool-update_plan.md +9 -0
  67. package/concepts/en/Tool-view_image.md +10 -0
  68. package/concepts/en/Tool-wait.md +12 -0
  69. package/concepts/en/Tool-wait_agent.md +9 -0
  70. package/concepts/en/Tool-web_search.md +11 -0
  71. package/concepts/en/Tools.md +29 -58
  72. package/concepts/en/ToolsFirst.md +24 -30
  73. package/concepts/en/TranslateContextPollution.md +10 -38
  74. package/concepts/en/UltraPlan.md +7 -7
  75. package/concepts/es/BodyDiffJSON.md +1 -1
  76. package/concepts/es/BodyFields.md +35 -38
  77. package/concepts/es/GlobalSettings.md +165 -167
  78. package/concepts/es/MainAgent.md +3 -4
  79. package/concepts/es/ProxySwitch.md +3 -3
  80. package/concepts/es/QRCode.md +1 -1
  81. package/concepts/es/ResponseFields.md +28 -40
  82. package/concepts/es/SubAgent-Search.md +12 -12
  83. package/concepts/es/Teammate.md +17 -17
  84. package/concepts/es/ToolsFirst.md +41 -47
  85. package/concepts/es/TranslateContextPollution.md +9 -9
  86. package/concepts/es/UltraPlan.md +38 -38
  87. package/concepts/fr/BodyDiffJSON.md +2 -2
  88. package/concepts/fr/BodyFields.md +35 -38
  89. package/concepts/fr/GlobalSettings.md +165 -167
  90. package/concepts/fr/MainAgent.md +3 -4
  91. package/concepts/fr/ProxySwitch.md +3 -3
  92. package/concepts/fr/QRCode.md +1 -1
  93. package/concepts/fr/ResponseFields.md +25 -37
  94. package/concepts/fr/SubAgent-Search.md +12 -12
  95. package/concepts/fr/Teammate.md +16 -16
  96. package/concepts/fr/ToolsFirst.md +40 -46
  97. package/concepts/fr/TranslateContextPollution.md +9 -9
  98. package/concepts/fr/UltraPlan.md +38 -38
  99. package/concepts/it/BodyDiffJSON.md +2 -2
  100. package/concepts/it/BodyFields.md +35 -38
  101. package/concepts/it/GlobalSettings.md +165 -167
  102. package/concepts/it/MainAgent.md +3 -4
  103. package/concepts/it/ProxySwitch.md +3 -3
  104. package/concepts/it/QRCode.md +1 -1
  105. package/concepts/it/ResponseFields.md +28 -40
  106. package/concepts/it/SubAgent-Search.md +12 -12
  107. package/concepts/it/Teammate.md +17 -17
  108. package/concepts/it/ToolsFirst.md +41 -47
  109. package/concepts/it/TranslateContextPollution.md +9 -9
  110. package/concepts/it/UltraPlan.md +38 -38
  111. package/concepts/ja/BodyDiffJSON.md +1 -1
  112. package/concepts/ja/BodyFields.md +30 -33
  113. package/concepts/ja/GlobalSettings.md +165 -167
  114. package/concepts/ja/MainAgent.md +3 -4
  115. package/concepts/ja/ProxySwitch.md +3 -3
  116. package/concepts/ja/QRCode.md +1 -1
  117. package/concepts/ja/ResponseFields.md +29 -41
  118. package/concepts/ja/SubAgent-Search.md +12 -12
  119. package/concepts/ja/Teammate.md +17 -17
  120. package/concepts/ja/ToolsFirst.md +41 -47
  121. package/concepts/ja/TranslateContextPollution.md +9 -9
  122. package/concepts/ja/UltraPlan.md +38 -38
  123. package/concepts/ko/BodyDiffJSON.md +1 -1
  124. package/concepts/ko/BodyFields.md +30 -33
  125. package/concepts/ko/GlobalSettings.md +165 -167
  126. package/concepts/ko/MainAgent.md +3 -4
  127. package/concepts/ko/ProxySwitch.md +3 -3
  128. package/concepts/ko/QRCode.md +1 -1
  129. package/concepts/ko/ResponseFields.md +29 -41
  130. package/concepts/ko/SubAgent-Search.md +12 -12
  131. package/concepts/ko/Teammate.md +17 -17
  132. package/concepts/ko/ToolsFirst.md +41 -47
  133. package/concepts/ko/TranslateContextPollution.md +9 -9
  134. package/concepts/ko/UltraPlan.md +38 -38
  135. package/concepts/no/BodyDiffJSON.md +2 -2
  136. package/concepts/no/BodyFields.md +30 -33
  137. package/concepts/no/GlobalSettings.md +165 -167
  138. package/concepts/no/MainAgent.md +3 -4
  139. package/concepts/no/ProxySwitch.md +3 -3
  140. package/concepts/no/QRCode.md +1 -1
  141. package/concepts/no/ResponseFields.md +29 -41
  142. package/concepts/no/SubAgent-Search.md +12 -12
  143. package/concepts/no/Teammate.md +17 -17
  144. package/concepts/no/ToolsFirst.md +42 -48
  145. package/concepts/no/TranslateContextPollution.md +9 -9
  146. package/concepts/no/UltraPlan.md +38 -38
  147. package/concepts/pl/BodyDiffJSON.md +2 -2
  148. package/concepts/pl/BodyFields.md +30 -33
  149. package/concepts/pl/GlobalSettings.md +165 -167
  150. package/concepts/pl/MainAgent.md +3 -4
  151. package/concepts/pl/ProxySwitch.md +3 -3
  152. package/concepts/pl/QRCode.md +1 -1
  153. package/concepts/pl/ResponseFields.md +29 -41
  154. package/concepts/pl/SubAgent-Search.md +12 -12
  155. package/concepts/pl/Teammate.md +17 -17
  156. package/concepts/pl/ToolsFirst.md +42 -48
  157. package/concepts/pl/TranslateContextPollution.md +9 -9
  158. package/concepts/pl/UltraPlan.md +38 -38
  159. package/concepts/pt-BR/BodyDiffJSON.md +2 -2
  160. package/concepts/pt-BR/BodyFields.md +30 -33
  161. package/concepts/pt-BR/GlobalSettings.md +165 -167
  162. package/concepts/pt-BR/MainAgent.md +3 -4
  163. package/concepts/pt-BR/ProxySwitch.md +3 -3
  164. package/concepts/pt-BR/QRCode.md +1 -1
  165. package/concepts/pt-BR/ResponseFields.md +29 -41
  166. package/concepts/pt-BR/SubAgent-Search.md +12 -12
  167. package/concepts/pt-BR/Teammate.md +17 -17
  168. package/concepts/pt-BR/ToolsFirst.md +41 -47
  169. package/concepts/pt-BR/TranslateContextPollution.md +9 -9
  170. package/concepts/pt-BR/UltraPlan.md +38 -38
  171. package/concepts/ru/BodyDiffJSON.md +1 -1
  172. package/concepts/ru/BodyFields.md +30 -33
  173. package/concepts/ru/GlobalSettings.md +165 -167
  174. package/concepts/ru/MainAgent.md +3 -4
  175. package/concepts/ru/ProxySwitch.md +3 -3
  176. package/concepts/ru/QRCode.md +1 -1
  177. package/concepts/ru/ResponseFields.md +29 -41
  178. package/concepts/ru/SubAgent-Search.md +12 -12
  179. package/concepts/ru/Teammate.md +17 -17
  180. package/concepts/ru/ToolsFirst.md +41 -47
  181. package/concepts/ru/TranslateContextPollution.md +9 -9
  182. package/concepts/ru/UltraPlan.md +38 -38
  183. package/concepts/th/BodyDiffJSON.md +1 -1
  184. package/concepts/th/BodyFields.md +30 -33
  185. package/concepts/th/GlobalSettings.md +165 -167
  186. package/concepts/th/MainAgent.md +3 -4
  187. package/concepts/th/ProxySwitch.md +3 -3
  188. package/concepts/th/QRCode.md +1 -1
  189. package/concepts/th/ResponseFields.md +29 -41
  190. package/concepts/th/SubAgent-Search.md +12 -12
  191. package/concepts/th/Teammate.md +17 -17
  192. package/concepts/th/ToolsFirst.md +42 -48
  193. package/concepts/th/TranslateContextPollution.md +9 -9
  194. package/concepts/th/UltraPlan.md +38 -38
  195. package/concepts/tr/BodyDiffJSON.md +1 -1
  196. package/concepts/tr/BodyFields.md +30 -33
  197. package/concepts/tr/GlobalSettings.md +165 -167
  198. package/concepts/tr/MainAgent.md +3 -4
  199. package/concepts/tr/ProxySwitch.md +3 -3
  200. package/concepts/tr/QRCode.md +1 -1
  201. package/concepts/tr/ResponseFields.md +29 -41
  202. package/concepts/tr/SubAgent-Search.md +12 -12
  203. package/concepts/tr/Teammate.md +16 -16
  204. package/concepts/tr/ToolsFirst.md +42 -48
  205. package/concepts/tr/TranslateContextPollution.md +9 -9
  206. package/concepts/tr/UltraPlan.md +38 -38
  207. package/concepts/uk/BodyDiffJSON.md +1 -1
  208. package/concepts/uk/BodyFields.md +30 -33
  209. package/concepts/uk/GlobalSettings.md +165 -167
  210. package/concepts/uk/MainAgent.md +3 -4
  211. package/concepts/uk/ProxySwitch.md +3 -3
  212. package/concepts/uk/QRCode.md +1 -1
  213. package/concepts/uk/ResponseFields.md +29 -41
  214. package/concepts/uk/SubAgent-Search.md +12 -12
  215. package/concepts/uk/Teammate.md +17 -17
  216. package/concepts/uk/ToolsFirst.md +42 -48
  217. package/concepts/uk/TranslateContextPollution.md +9 -9
  218. package/concepts/uk/UltraPlan.md +38 -38
  219. package/concepts/zh/BodyDiffJSON.md +4 -4
  220. package/concepts/zh/BodyFields.md +17 -20
  221. package/concepts/zh/GlobalSettings.md +26 -28
  222. package/concepts/zh/MainAgent.md +6 -6
  223. package/concepts/zh/ProxySwitch.md +1 -1
  224. package/concepts/zh/ResponseFields.md +7 -18
  225. package/concepts/zh/SubAgent-Search.md +2 -2
  226. package/concepts/zh/Teammate.md +4 -4
  227. package/concepts/zh/Tool-apply_patch.md +11 -0
  228. package/concepts/zh/Tool-create_goal.md +8 -0
  229. package/concepts/zh/Tool-exec.md +88 -0
  230. package/concepts/zh/Tool-followup_task.md +10 -0
  231. package/concepts/zh/Tool-get_goal.md +5 -0
  232. package/concepts/zh/Tool-image_generation.md +5 -0
  233. package/concepts/zh/Tool-interrupt_agent.md +9 -0
  234. package/concepts/zh/Tool-list_agents.md +9 -0
  235. package/concepts/zh/Tool-list_mcp_resource_templates.md +8 -0
  236. package/concepts/zh/Tool-list_mcp_resources.md +8 -0
  237. package/concepts/zh/Tool-read_mcp_resource.md +10 -0
  238. package/concepts/zh/Tool-request_user_input.md +9 -0
  239. package/concepts/zh/Tool-send_message.md +10 -0
  240. package/concepts/zh/Tool-shell_command.md +12 -0
  241. package/concepts/zh/Tool-spawn_agent.md +11 -0
  242. package/concepts/zh/Tool-tool_search.md +12 -0
  243. package/concepts/zh/Tool-update_goal.md +9 -0
  244. package/concepts/zh/Tool-update_plan.md +9 -0
  245. package/concepts/zh/Tool-view_image.md +10 -0
  246. package/concepts/zh/Tool-wait.md +12 -0
  247. package/concepts/zh/Tool-wait_agent.md +9 -0
  248. package/concepts/zh/Tool-web_search.md +11 -0
  249. package/concepts/zh/Tools.md +29 -58
  250. package/concepts/zh/ToolsFirst.md +21 -27
  251. package/concepts/zh/TranslateContextPollution.md +10 -38
  252. package/concepts/zh/UltraPlan.md +7 -7
  253. package/concepts/zh-TW/BodyFields.md +27 -30
  254. package/concepts/zh-TW/GlobalSettings.md +26 -28
  255. package/concepts/zh-TW/MainAgent.md +0 -1
  256. package/concepts/zh-TW/ProxySwitch.md +22 -22
  257. package/concepts/zh-TW/ResponseFields.md +29 -40
  258. package/concepts/zh-TW/SubAgent-Search.md +12 -12
  259. package/concepts/zh-TW/Teammate.md +16 -16
  260. package/concepts/zh-TW/ToolsFirst.md +41 -47
  261. package/concepts/zh-TW/UltraPlan.md +38 -38
  262. package/dist/assets/App-BZ9oclBj.js +2 -0
  263. package/dist/assets/App-rWON7PuS.css +1 -0
  264. package/dist/assets/MdxEditorPanel-B4lZ7Z_A.js +1 -0
  265. package/dist/assets/MdxEditorPanel-Da_ceLFo.css +1 -0
  266. package/dist/assets/Mobile-B5V_-6Hc.css +1 -0
  267. package/dist/assets/Mobile-C7Hy-TIM.js +1 -0
  268. package/dist/assets/abnfDiagram-VRR7QNED-DYYppIQV.js +1 -0
  269. package/dist/assets/apl-B8ZmNFqK.js +1 -0
  270. package/dist/assets/arc-BT3um7r4.js +1 -0
  271. package/dist/assets/architectureDiagram-ZJ3FMSHR-uweBqnh-.js +1 -0
  272. package/dist/assets/asciiarmor-CIte6N-S.js +1 -0
  273. package/dist/assets/asn1-Ax1-z1nk.js +1 -0
  274. package/dist/assets/asterisk-CLHf-iRz.js +1 -0
  275. package/dist/assets/blockDiagram-677ZJIJ3-DzeI4GyV.js +1 -0
  276. package/dist/assets/brainfuck-CdLnmYpe.js +1 -0
  277. package/dist/assets/c4Diagram-LMCZKHZV-DBI0K7wS.js +1 -0
  278. package/dist/assets/channel-BrN6yx0e.js +1 -0
  279. package/dist/assets/chunk-2Q5K7J3B-DK9JA8Ct.js +1 -0
  280. package/dist/assets/chunk-32BRIVSS-VNg3Ylzs.js +1 -0
  281. package/dist/assets/chunk-5VM5RSS4-DFhufY9o.js +1 -0
  282. package/dist/assets/chunk-EX3LRPZG-B93MHNBT.js +1 -0
  283. package/dist/assets/chunk-JWPE2WC7-C54OW1iN.js +1 -0
  284. package/dist/assets/chunk-MOJQB5TN-lKhWWIDe.js +1 -0
  285. package/dist/assets/chunk-RYQCIY6F-BK2jDXwB.js +1 -0
  286. package/dist/assets/chunk-V7JOEXUC-aLHBmfOc.js +1 -0
  287. package/dist/assets/chunk-VR4S4FIN-Bomuor1h.js +1 -0
  288. package/dist/assets/chunk-XXDRQBXY-BPj05P7g.js +1 -0
  289. package/dist/assets/classDiagram-OUVF2IWQ-COm0X4uJ.js +1 -0
  290. package/dist/assets/classDiagram-v2-EOCWNBFH-COm0X4uJ.js +1 -0
  291. package/dist/assets/clike-BDgEuk0n.js +1 -0
  292. package/dist/assets/clojure-CrPxgQZl.js +1 -0
  293. package/dist/assets/cmake-BknZiLBu.js +1 -0
  294. package/dist/assets/cobol-DN1mHbgw.js +1 -0
  295. package/dist/assets/coffeescript-DTAwRC7M.js +1 -0
  296. package/dist/assets/commonlisp-B4DJ--Bo.js +1 -0
  297. package/dist/assets/cose-bilkent-JH36ORCC-DU44QHSb.js +1 -0
  298. package/dist/assets/crystal-DoipYOOv.js +1 -0
  299. package/dist/assets/css-BeQRP3p5.js +1 -0
  300. package/dist/assets/cynefin-VYW2F7L2-C0dowxsF.js +15 -0
  301. package/dist/assets/cynefinDiagram-TSTJHNR4-C6vNWPUV.js +1 -0
  302. package/dist/assets/cypher-BzELKutH.js +1 -0
  303. package/dist/assets/cytoscape.esm-D0POlJZ1.js +9 -0
  304. package/dist/assets/d-Mh2Rawoc.js +1 -0
  305. package/dist/assets/dagre-VKFMJZFB-aLG4uEb-.js +1 -0
  306. package/dist/assets/defaultLocale-DZ7E7S9R.js +1 -0
  307. package/dist/assets/diagram-FQU43EPY-D5C8GfdU.js +1 -0
  308. package/dist/assets/diagram-G47NLZAW-C9tRw_xi.js +1 -0
  309. package/dist/assets/diagram-NH7WQ7WH-AYxTxwJ2.js +1 -0
  310. package/dist/assets/diagram-OA4YK3LP-BuBE5n9n.js +1 -0
  311. package/dist/assets/diagram-WEI45ONY-Cda7zYeO.js +1 -0
  312. package/dist/assets/diff-B1OtBbfz.js +1 -0
  313. package/dist/assets/dockerfile-Du7niAGi.js +1 -0
  314. package/dist/assets/dtd-So5hjSa8.js +1 -0
  315. package/dist/assets/dylan-Co15g-RX.js +1 -0
  316. package/dist/assets/ebnf-DWrAnno4.js +1 -0
  317. package/dist/assets/ebnfDiagram-CCIWWBDH-DC_OGyoh.js +1 -0
  318. package/dist/assets/ecl-8tbf0rUT.js +1 -0
  319. package/dist/assets/eiffel-BXtlUtEg.js +1 -0
  320. package/dist/assets/elm-BwiUluiH.js +1 -0
  321. package/dist/assets/erDiagram-Q63AITRT-D2G21PVY.js +1 -0
  322. package/dist/assets/erlang-CrHBLi-m.js +1 -0
  323. package/dist/assets/factor-C7nC06Ta.js +1 -0
  324. package/dist/assets/fcl-DKWfryFT.js +1 -0
  325. package/dist/assets/flowDiagram-23GEKE2U-CEQPYHrk.js +1 -0
  326. package/dist/assets/forth-Cg8ASoTj.js +1 -0
  327. package/dist/assets/fortran-BHf_qfFx.js +1 -0
  328. package/dist/assets/ganttDiagram-NO4QXBWP-JStxUtFR.js +1 -0
  329. package/dist/assets/gas-cj_2N_z1.js +1 -0
  330. package/dist/assets/gherkin-BiuTaH40.js +1 -0
  331. package/dist/assets/gitGraphDiagram-IHSO6WYX-BiojPH-V.js +1 -0
  332. package/dist/assets/graph-CnJdn47S.js +1 -0
  333. package/dist/assets/groovy-Bq8cXYUU.js +1 -0
  334. package/dist/assets/haskell-1ANuaeie.js +1 -0
  335. package/dist/assets/haxe-BUNSvWf_.js +1 -0
  336. package/dist/assets/html2canvas.esm-HFdlUwfn.js +20 -0
  337. package/dist/assets/http-DPC2IRQA.js +1 -0
  338. package/dist/assets/idl-DDbIciu_.js +1 -0
  339. package/dist/assets/index-BEyKG3O5.css +1 -0
  340. package/dist/assets/index-BduJoLQ5.js +1 -0
  341. package/dist/assets/index-BqwR8F0v.js +1 -0
  342. package/dist/assets/index-BsycQyrv.js +1 -0
  343. package/dist/assets/index-CFSDxZyA.js +1 -0
  344. package/dist/assets/index-CunNLTHc.js +1 -0
  345. package/dist/assets/index-OGkDFNTK.js +1 -0
  346. package/dist/assets/index-oxOyrL07.js +2 -0
  347. package/dist/assets/index-wvaycTGT.js +1 -0
  348. package/dist/assets/infoDiagram-FWYZ7A6U-Csl_aBIC.js +1 -0
  349. package/dist/assets/init-DMZMl1PR.js +1 -0
  350. package/dist/assets/ishikawaDiagram-FXEZZL3T-CjgGuMwr.js +1 -0
  351. package/dist/assets/javascript-Cet1BUca.js +1 -0
  352. package/dist/assets/journeyDiagram-5HDEW3XC-DUOy1PCq.js +1 -0
  353. package/dist/assets/jszip.min-BxIXdRg4.js +12 -0
  354. package/dist/assets/julia-CdxLCr68.js +1 -0
  355. package/dist/assets/kanban-definition-HUTT4EX6-Cx7GSrSj.js +1 -0
  356. package/dist/assets/katex-CfXf84Fz.js +1 -0
  357. package/dist/assets/layout-CCUE9ZRw.js +1 -0
  358. package/dist/assets/linear-GeBi6jJp.js +1 -0
  359. package/dist/assets/livescript-Bw1Vw7Ae.js +1 -0
  360. package/dist/assets/lua-DM1wbcnc.js +1 -0
  361. package/dist/assets/map-DQeg2hXV.js +1 -0
  362. package/dist/assets/mathematica-BXSv1_O1.js +1 -0
  363. package/dist/assets/mbox-CWY0keg3.js +1 -0
  364. package/dist/assets/mermaid.core-Cy9iVxov.js +7 -0
  365. package/dist/assets/mindmap-definition-LN4V7U3C-CUVxVkK5.js +1 -0
  366. package/dist/assets/mirc-CMLrLVMT.js +1 -0
  367. package/dist/assets/mllike-naqhAFf1.js +1 -0
  368. package/dist/assets/modelica-BvadsaHY.js +1 -0
  369. package/dist/assets/mscgen-DOr-Q10p.js +1 -0
  370. package/dist/assets/mumps-DKTl5Nyj.js +1 -0
  371. package/dist/assets/nginx-DWR90-d1.js +1 -0
  372. package/dist/assets/nsis-ooFGduGn.js +1 -0
  373. package/dist/assets/ntriples-q5jkU4X1.js +1 -0
  374. package/dist/assets/octave-Deu9Ci7_.js +1 -0
  375. package/dist/assets/orbiting-BCD4Vuij.svg +7 -0
  376. package/dist/assets/ordinal-DA-_8pMy.js +1 -0
  377. package/dist/assets/oz-cTQm1aoB.js +1 -0
  378. package/dist/assets/pascal-Oh3VmczP.js +1 -0
  379. package/dist/assets/pegDiagram-2B236MQR-BCF1byLY.js +1 -0
  380. package/dist/assets/perl-BddWF1HQ.js +1 -0
  381. package/dist/assets/pieDiagram-ENE6RG2P-D2cZTo8-.js +1 -0
  382. package/dist/assets/pig-g5ZQNIDr.js +1 -0
  383. package/dist/assets/powershell-CNmQNFVJ.js +1 -0
  384. package/dist/assets/properties-B41DXfv6.js +1 -0
  385. package/dist/assets/protobuf-eEBl31OJ.js +1 -0
  386. package/dist/assets/pug-DRSo4eCK.js +1 -0
  387. package/dist/assets/puppet-ClfRubAD.js +1 -0
  388. package/dist/assets/python-BSflc812.js +1 -0
  389. package/dist/assets/q-BBDx3N9Y.js +1 -0
  390. package/dist/assets/quadrantDiagram-ABIIQ3AL-Bwsn2--F.js +1 -0
  391. package/dist/assets/r-CByC1eO8.js +1 -0
  392. package/dist/assets/railroadDiagram-RFXS5EU6-CLGLpWHs.js +1 -0
  393. package/dist/assets/requirementDiagram-TGXJPOKE-BfmBYwZl.js +1 -0
  394. package/dist/assets/rpm-8t935XkD.js +1 -0
  395. package/dist/assets/ruby-CAgbkLZh.js +1 -0
  396. package/dist/assets/sankeyDiagram-HTMAVEWB-CqZhbyFn.js +1 -0
  397. package/dist/assets/sas-C-JWcRvo.js +1 -0
  398. package/dist/assets/scheme-D7o9RjUX.js +1 -0
  399. package/dist/assets/seqResourceLoaders-Bkh2Rb9i.js +2 -0
  400. package/dist/assets/seqResourceLoaders-Do7Kqg3B.css +41 -0
  401. package/dist/assets/sequenceDiagram-DBY2YBRQ-CcOdXkN2.js +1 -0
  402. package/dist/assets/shell-BXA79DV6.js +1 -0
  403. package/dist/assets/shimmer-BBDejmDf.svg +7 -0
  404. package/dist/assets/sieve-DNwyl0rd.js +1 -0
  405. package/dist/assets/simple-mode-CoQRusFX.js +1 -0
  406. package/dist/assets/sizeCapture-X5ZJPWSS-B4OVmPqu.js +1 -0
  407. package/dist/assets/smalltalk-DggktV6S.js +1 -0
  408. package/dist/assets/solr-D7NRuIPM.js +1 -0
  409. package/dist/assets/sparql-Cr71deJQ.js +1 -0
  410. package/dist/assets/spreadsheet-BMD3tYqw.js +1 -0
  411. package/dist/assets/sql-CbOjXfBR.js +1 -0
  412. package/dist/assets/stateDiagram-2N3HPSRC-Dysun0oO.js +1 -0
  413. package/dist/assets/stateDiagram-v2-6OUMAXLB-BFet8xAz.js +1 -0
  414. package/dist/assets/stex-iDPIkRmr.js +1 -0
  415. package/dist/assets/stylus-nWZizI-c.js +1 -0
  416. package/dist/assets/swift-DOhLK5SG.js +1 -0
  417. package/dist/assets/swimlanes-5IMT3BWC-_30OXwXy.js +2 -0
  418. package/dist/assets/swimlanesDiagram-G3AALYLV-C19viY0G.js +1 -0
  419. package/dist/assets/tcl-CQhJd1WY.js +1 -0
  420. package/dist/assets/textile-D9XqfVtL.js +1 -0
  421. package/dist/assets/tiddlywiki-DfOYgVky.js +1 -0
  422. package/dist/assets/tiki-a0_YLWvV.js +1 -0
  423. package/dist/assets/timeline-definition-FHXFAJF6-X1Xk3onD.js +1 -0
  424. package/dist/assets/toml-ekl3F1YB.js +1 -0
  425. package/dist/assets/troff-Bh_pcXF1.js +1 -0
  426. package/dist/assets/ttcn-M6363IRW.js +1 -0
  427. package/dist/assets/ttcn-cfg-7I2DgJEN.js +1 -0
  428. package/dist/assets/turtle-B5jdxH6D.js +1 -0
  429. package/dist/assets/vb-DM-xPmVv.js +1 -0
  430. package/dist/assets/vbscript-B0qu41Yc.js +1 -0
  431. package/dist/assets/velocity-FCgsuVHf.js +1 -0
  432. package/dist/assets/vendor-antd-Bzi1WuBb.js +17 -0
  433. package/dist/assets/vendor-codemirror-CKTrJd47.js +1 -0
  434. package/dist/assets/vendor-highlight-IFTJ9nxW.js +1 -0
  435. package/dist/assets/vendor-markdown-BN3QLsBu.js +3 -0
  436. package/dist/assets/vendor-mdxeditor-4PbKH6K7.js +2 -0
  437. package/dist/assets/vendor-qrcode-Bnjm0rcu.js +6 -0
  438. package/dist/assets/vendor-react-l0sNRNKZ.js +1 -0
  439. package/dist/assets/vendor-virtuoso-2P4SowHC.js +1 -0
  440. package/dist/assets/vendor-xterm-DckPrCx1.js +37 -0
  441. package/dist/assets/vennDiagram-L72KCM5P-D3fQnGq7.js +1 -0
  442. package/dist/assets/verilog-nrfFvR12.js +1 -0
  443. package/dist/assets/vhdl-WlDXtV-W.js +1 -0
  444. package/dist/assets/wardleyDiagram-EHGQE667-CRhqI6-g.js +1 -0
  445. package/dist/assets/webidl-RIQoSXDx.js +1 -0
  446. package/dist/assets/xquery-BN45G3lJ.js +1 -0
  447. package/dist/assets/xychartDiagram-FW5EYKEG-Cmtgmmtg.js +1 -0
  448. package/dist/assets/yacas-U6gaIVhD.js +1 -0
  449. package/dist/assets/z80-CFe5BHbK.js +1 -0
  450. package/dist/index.html +25 -6
  451. package/dist/voice-packs/default/A_choice_for_your_consideration_sir.MP3 +0 -0
  452. package/dist/voice-packs/default/It_is_done_sir.MP3 +0 -0
  453. package/dist/voice-packs/default/The_plan_awaits_your_approval_sir.MP3 +0 -0
  454. package/dist/voice-packs/default/pack.json +24 -0
  455. package/dist/voice-packs/sanguo/ask.MP3 +0 -0
  456. package/dist/voice-packs/sanguo/end.MP3 +0 -0
  457. package/dist/voice-packs/sanguo/pack.json +24 -0
  458. package/dist/voice-packs/sanguo/plan.MP3 +0 -0
  459. package/electron/diag.js +110 -0
  460. package/electron/main.js +1432 -0
  461. package/electron/menu-model.js +107 -0
  462. package/electron/tab-bar.html +575 -0
  463. package/electron/tab-content-preload.js +66 -0
  464. package/electron/tab-preload.js +24 -0
  465. package/electron/tab-worker.js +142 -0
  466. package/electron/window-state.js +60 -0
  467. package/electron/workspace-preload.js +19 -0
  468. package/findcx.js +4 -0
  469. package/i18n.js +3 -423
  470. package/index.html +30 -0
  471. package/interceptor.js +144 -70
  472. package/jsconfig.json +25 -0
  473. package/lib/approval-reviewer.js +23 -0
  474. package/lib/appserver-bridge.js +1753 -237
  475. package/lib/ask-bridge.js +5 -5
  476. package/lib/cli-args.js +57 -0
  477. package/lib/codex-config.js +157 -18
  478. package/lib/context-watcher.js +6 -65
  479. package/lib/delta-reconstructor.js +74 -52
  480. package/lib/ensure-hooks.js +37 -30
  481. package/lib/interceptor-core.js +490 -43
  482. package/lib/log-watcher.js +3 -8
  483. package/lib/main-agent-entry.js +68 -0
  484. package/lib/openai-body.js +95 -0
  485. package/lib/otel-adapter.js +3 -2
  486. package/lib/otel-receiver.js +1 -2
  487. package/lib/perm-bridge.js +84 -44
  488. package/lib/proxy-env.js +45 -1
  489. package/lib/sdk-adapter.js +241 -51
  490. package/lib/sdk-manager.js +523 -370
  491. package/lib/skills-api.js +364 -0
  492. package/lib/stats-worker.js +21 -21
  493. package/lib/token-usage.js +29 -0
  494. package/lib/updater.js +3 -7
  495. package/package.json +27 -6
  496. package/plugins/.gitkeep +0 -0
  497. package/plugins/README.md +8 -0
  498. package/proxy.js +187 -241
  499. package/pty-manager.js +17 -1
  500. package/public/favicon.ico +0 -0
  501. package/public/voice-packs/default/A_choice_for_your_consideration_sir.MP3 +0 -0
  502. package/public/voice-packs/default/It_is_done_sir.MP3 +0 -0
  503. package/public/voice-packs/default/The_plan_awaits_your_approval_sir.MP3 +0 -0
  504. package/public/voice-packs/default/pack.json +24 -0
  505. package/public/voice-packs/sanguo/ask.MP3 +0 -0
  506. package/public/voice-packs/sanguo/end.MP3 +0 -0
  507. package/public/voice-packs/sanguo/pack.json +24 -0
  508. package/public/voice-packs/sanguo/plan.MP3 +0 -0
  509. package/scripts/check-no-control-bytes.js +130 -0
  510. package/scripts/check-sign-config.sh +85 -0
  511. package/scripts/gen-default-voicepack.js +176 -0
  512. package/scripts/mac-sign.sh +47 -0
  513. package/scripts/npm-pack-dry-run.mjs +20 -0
  514. package/server/lib/approval-modal-prefs.js +72 -0
  515. package/server/lib/context-rules.js +70 -0
  516. package/server/lib/delta-reconstructor.js +403 -0
  517. package/server/lib/tools-xml-formatter.js +91 -0
  518. package/server/lib/voice-pack-events.js +79 -0
  519. package/server.js +420 -86
  520. package/src/App.jsx +638 -0
  521. package/src/App.module.css +1088 -0
  522. package/src/AppBase.jsx +2803 -0
  523. package/src/Mobile.jsx +1348 -0
  524. package/src/components/approval/ApprovalModal.jsx +319 -0
  525. package/src/components/approval/ApprovalModal.module.css +160 -0
  526. package/src/components/approval/ToolApprovalPanel.jsx +111 -0
  527. package/src/components/approval/ToolApprovalPanel.module.css +250 -0
  528. package/src/components/chat/ApprovalPortalContext.js +26 -0
  529. package/src/components/chat/AskQuestionForm.jsx +279 -0
  530. package/src/components/chat/AskTimeoutCountdown.jsx +113 -0
  531. package/src/components/chat/ChatInputBar.jsx +584 -0
  532. package/src/components/chat/ChatInputBar.module.css +656 -0
  533. package/src/components/chat/ChatMessage.jsx +1587 -0
  534. package/src/components/chat/ChatMessage.module.css +1560 -0
  535. package/src/components/chat/ChatView.jsx +3533 -0
  536. package/src/components/chat/ChatView.module.css +418 -0
  537. package/src/components/chat/DiffView.jsx +111 -0
  538. package/src/components/chat/DiffView.module.css +141 -0
  539. package/src/components/chat/RoleFilterBar.jsx +35 -0
  540. package/src/components/chat/RoleFilterBar.module.css +62 -0
  541. package/src/components/chat/controllers/askFlowController.js +789 -0
  542. package/src/components/chat/controllers/permissionController.js +84 -0
  543. package/src/components/chat/controllers/ptyPromptController.js +166 -0
  544. package/src/components/chat/controllers/scrollHighlightController.js +50 -0
  545. package/src/components/chat/controllers/splitDragController.js +135 -0
  546. package/src/components/chat/controllers/toolFileChangeController.js +216 -0
  547. package/src/components/chat/interactionOwnership.js +106 -0
  548. package/src/components/chat/uploadDeferLogic.js +46 -0
  549. package/src/components/common/ConceptHelp.jsx +97 -0
  550. package/src/components/common/ConceptHelp.module.css +151 -0
  551. package/src/components/common/ConfirmRemoveButton.jsx +78 -0
  552. package/src/components/common/CountryFlag.jsx +105 -0
  553. package/src/components/common/CountryFlag.module.css +36 -0
  554. package/src/components/common/DingTalkIcon.jsx +20 -0
  555. package/src/components/common/DiscordIcon.jsx +21 -0
  556. package/src/components/common/FeishuIcon.jsx +23 -0
  557. package/src/components/common/HoverPreviewTip.jsx +62 -0
  558. package/src/components/common/HoverPreviewTip.module.css +21 -0
  559. package/src/components/common/ImageLightbox.jsx +244 -0
  560. package/src/components/common/ImageLightbox.module.css +120 -0
  561. package/src/components/common/MemoryDetailModal.jsx +75 -0
  562. package/src/components/common/OpenFolderIcon.jsx +53 -0
  563. package/src/components/common/OpenFolderIcon.module.css +7 -0
  564. package/src/components/common/PanelResizer.jsx +48 -0
  565. package/src/components/common/PanelResizer.module.css +11 -0
  566. package/src/components/common/QuickAutoApproveRows.jsx +66 -0
  567. package/src/components/common/RefreshIcon.jsx +50 -0
  568. package/src/components/common/RefreshIcon.module.css +26 -0
  569. package/src/components/common/SnapLineOverlay.jsx +47 -0
  570. package/src/components/common/SnapLineOverlay.module.css +31 -0
  571. package/src/components/common/ToolsHelp.jsx +113 -0
  572. package/src/components/common/ToolsHelp.module.css +85 -0
  573. package/src/components/common/WeComIcon.jsx +22 -0
  574. package/src/components/common/quickMenuIcons.jsx +99 -0
  575. package/src/components/common/sharedChrome.module.css +274 -0
  576. package/src/components/dashboard/AppHeader.jsx +2085 -0
  577. package/src/components/dashboard/AppHeader.module.css +676 -0
  578. package/src/components/dashboard/CachePopoverContent.jsx +538 -0
  579. package/src/components/dashboard/CachePopoverContent.module.css +191 -0
  580. package/src/components/dashboard/ContextTab.jsx +769 -0
  581. package/src/components/dashboard/ContextTab.module.css +565 -0
  582. package/src/components/dashboard/DetailPanel.jsx +813 -0
  583. package/src/components/dashboard/DetailPanel.module.css +513 -0
  584. package/src/components/dashboard/LiveTagPopover.jsx +89 -0
  585. package/src/components/dashboard/LiveTagPopover.module.css +67 -0
  586. package/src/components/dashboard/RequestList.jsx +146 -0
  587. package/src/components/dashboard/RequestList.module.css +146 -0
  588. package/src/components/dashboard/TeamSessionPanel.jsx +584 -0
  589. package/src/components/dashboard/TeamSessionPanel.module.css +457 -0
  590. package/src/components/dashboard/UsageWindowPill.jsx +166 -0
  591. package/src/components/dashboard/UsageWindowPill.module.css +140 -0
  592. package/src/components/dashboard/WorkflowRunsPanel.jsx +108 -0
  593. package/src/components/dashboard/WorkflowRunsPanel.module.css +72 -0
  594. package/src/components/dashboard/WorkspaceList.jsx +410 -0
  595. package/src/components/dashboard/WorkspaceList.module.css +254 -0
  596. package/src/components/files/FileContentView.jsx +1013 -0
  597. package/src/components/files/FileContentView.module.css +418 -0
  598. package/src/components/files/FileExplorer.jsx +937 -0
  599. package/src/components/files/FileExplorer.module.css +173 -0
  600. package/src/components/files/MdxEditorPanel.base.css +9 -0
  601. package/src/components/files/MdxEditorPanel.jsx +181 -0
  602. package/src/components/files/MdxEditorPanel.module.css +917 -0
  603. package/src/components/git/DiffMiniMap.jsx +98 -0
  604. package/src/components/git/DiffMiniMap.module.css +17 -0
  605. package/src/components/git/FullFileDiffView.jsx +265 -0
  606. package/src/components/git/FullFileDiffView.module.css +176 -0
  607. package/src/components/git/GitChanges.jsx +461 -0
  608. package/src/components/git/GitChanges.module.css +337 -0
  609. package/src/components/git/GitDiffView.jsx +161 -0
  610. package/src/components/git/GitDiffView.module.css +205 -0
  611. package/src/components/mobile/MobileDrawerCloseButton.jsx +18 -0
  612. package/src/components/mobile/MobileFileExplorer.jsx +231 -0
  613. package/src/components/mobile/MobileFileExplorer.module.css +171 -0
  614. package/src/components/mobile/MobileGitDiff.jsx +293 -0
  615. package/src/components/mobile/MobileGitDiff.module.css +317 -0
  616. package/src/components/mobile/MobileStats.jsx +211 -0
  617. package/src/components/mobile/MobileStats.module.css +75 -0
  618. package/src/components/settings/ImAppendSystemModal.jsx +104 -0
  619. package/src/components/settings/ImConversationModal.jsx +328 -0
  620. package/src/components/settings/ImConversationModal.module.css +49 -0
  621. package/src/components/settings/ImPlatformSettings.jsx +453 -0
  622. package/src/components/settings/ImPlatformSettings.module.css +110 -0
  623. package/src/components/settings/ImSkillsModal.jsx +94 -0
  624. package/src/components/settings/ImStatusChip.jsx +80 -0
  625. package/src/components/settings/ImStatusChip.module.css +36 -0
  626. package/src/components/settings/MessagingModal.jsx +65 -0
  627. package/src/components/settings/MessagingModal.module.css +95 -0
  628. package/src/components/settings/ModelPromptTabs.jsx +118 -0
  629. package/src/components/settings/PluginModal.jsx +423 -0
  630. package/src/components/settings/PluginModal.module.css +136 -0
  631. package/src/components/settings/PreferencesForm.jsx +104 -0
  632. package/src/components/settings/PreferencesForm.module.css +27 -0
  633. package/src/components/settings/ProcessModal.jsx +175 -0
  634. package/src/components/settings/ProcessModal.module.css +21 -0
  635. package/src/components/settings/ProjectAliasEditor.jsx +138 -0
  636. package/src/components/settings/ProjectAliasEditor.module.css +87 -0
  637. package/src/components/settings/ProjectPrefsManagerModal.jsx +123 -0
  638. package/src/components/settings/ProjectPrefsManagerModal.module.css +52 -0
  639. package/src/components/settings/ProxyModal.jsx +286 -0
  640. package/src/components/settings/ProxyModal.module.css +141 -0
  641. package/src/components/settings/SkillsManagerModal.jsx +143 -0
  642. package/src/components/settings/SkillsManagerModal.module.css +143 -0
  643. package/src/components/settings/SystemTextModal.jsx +312 -0
  644. package/src/components/settings/SystemTextModal.module.css +331 -0
  645. package/src/components/settings/VoicePackSettings.jsx +319 -0
  646. package/src/components/settings/VoicePackSettings.module.css +151 -0
  647. package/src/components/settings/imPlatforms.js +177 -0
  648. package/src/components/terminal/CustomUltraplanEditModal.jsx +227 -0
  649. package/src/components/terminal/CustomUltraplanEditModal.module.css +189 -0
  650. package/src/components/terminal/PresetExpertPickerModal.jsx +116 -0
  651. package/src/components/terminal/PresetExpertPickerModal.module.css +90 -0
  652. package/src/components/terminal/PresetModal.jsx +118 -0
  653. package/src/components/terminal/ScratchTerminal.jsx +359 -0
  654. package/src/components/terminal/TerminalPanel.jsx +2021 -0
  655. package/src/components/terminal/TerminalPanel.module.css +872 -0
  656. package/src/components/terminal/TerminalWsContext.jsx +226 -0
  657. package/src/components/terminal/UltraPlanModal.jsx +328 -0
  658. package/src/components/terminal/UltraPlanModal.module.css +527 -0
  659. package/src/components/terminal/UltraplanExpertManagerModal.jsx +114 -0
  660. package/src/components/terminal/UltraplanExpertManagerModal.module.css +91 -0
  661. package/src/components/terminal/UltraplanPanel.jsx +307 -0
  662. package/src/components/terminal/UltraplanPanel.module.css +540 -0
  663. package/src/components/terminal/terminalThemes.js +33 -0
  664. package/src/components/viewers/ImageViewer.jsx +288 -0
  665. package/src/components/viewers/ImageViewer.module.css +203 -0
  666. package/src/components/viewers/JsonViewer.jsx +40 -0
  667. package/src/components/viewers/JsonViewer.module.css +9 -0
  668. package/src/components/viewers/LogTable.jsx +131 -0
  669. package/src/components/viewers/MarkdownBlock.jsx +112 -0
  670. package/src/components/viewers/MarkdownBlock.module.css +157 -0
  671. package/src/components/viewers/ToolResultView.jsx +389 -0
  672. package/src/components/viewers/ToolResultView.module.css +108 -0
  673. package/src/components/viewers/WebResultsView.jsx +74 -0
  674. package/src/components/viewers/WebResultsView.module.css +85 -0
  675. package/src/components/viewers/WorkflowLiveHud.jsx +153 -0
  676. package/src/components/viewers/WorkflowLiveHud.module.css +256 -0
  677. package/src/components/viewers/WorkflowPanel.jsx +243 -0
  678. package/src/components/viewers/WorkflowPanel.module.css +265 -0
  679. package/src/components/viewers/WorkflowTimeline.jsx +83 -0
  680. package/src/components/viewers/WorkflowTimeline.module.css +116 -0
  681. package/src/contexts/SettingsContext.jsx +140 -0
  682. package/src/env.js +54 -0
  683. package/src/global.css +607 -0
  684. package/src/hooks/useMarkdownExport.js +146 -0
  685. package/src/hooks/useMermaidRender.js +193 -0
  686. package/src/hooks/useProjectAlias.js +29 -0
  687. package/src/hooks/useSessionStoragePersistedSet.js +41 -0
  688. package/src/i18n/mdxTranslations.js +472 -0
  689. package/src/i18n.js +12409 -0
  690. package/src/img/ccv-logo.png +0 -0
  691. package/src/img/codex/entrance.svg +7 -0
  692. package/src/img/codex/exit.svg +7 -0
  693. package/src/img/codex/orbiting.svg +7 -0
  694. package/src/img/codex/shimmer.svg +7 -0
  695. package/src/img/codex/thinking.svg +7 -0
  696. package/src/img/codex/tickle.svg +7 -0
  697. package/src/img/codex/waiting.svg +7 -0
  698. package/src/img/codex/writing.svg +7 -0
  699. package/src/img/default-avatar.svg +1 -0
  700. package/src/img/default-model-avatar.svg +1 -0
  701. package/src/img/loading-pet.gif +0 -0
  702. package/src/img/model-codex.svg +2 -0
  703. package/src/img/model-deepseek.svg +2 -0
  704. package/src/img/model-gemini.svg +2 -0
  705. package/src/img/model-glm.svg +2 -0
  706. package/src/img/model-kimi.svg +2 -0
  707. package/src/img/model-minimax.svg +2 -0
  708. package/src/img/model-openai.svg +2 -0
  709. package/src/img/model-qwen.svg +2 -0
  710. package/src/img/teammates/DESIGN.md +165 -0
  711. package/src/img/teammates/analyst.svg +32 -0
  712. package/src/img/teammates/auditor.svg +28 -0
  713. package/src/img/teammates/builder.svg +33 -0
  714. package/src/img/teammates/default.svg +25 -0
  715. package/src/img/teammates/designer.svg +25 -0
  716. package/src/img/teammates/executor.svg +31 -0
  717. package/src/img/teammates/expert.svg +30 -0
  718. package/src/img/teammates/explorer.svg +30 -0
  719. package/src/img/teammates/implementer.svg +34 -0
  720. package/src/img/teammates/investigator.svg +29 -0
  721. package/src/img/teammates/marvel/analyst.svg +26 -0
  722. package/src/img/teammates/marvel/auditor.svg +28 -0
  723. package/src/img/teammates/marvel/builder.svg +15 -0
  724. package/src/img/teammates/marvel/default.svg +25 -0
  725. package/src/img/teammates/marvel/designer.svg +21 -0
  726. package/src/img/teammates/marvel/executor.svg +25 -0
  727. package/src/img/teammates/marvel/expert.svg +31 -0
  728. package/src/img/teammates/marvel/explorer.svg +22 -0
  729. package/src/img/teammates/marvel/implementer.svg +30 -0
  730. package/src/img/teammates/marvel/investigator.svg +21 -0
  731. package/src/img/teammates/marvel/researcher.svg +30 -0
  732. package/src/img/teammates/marvel/reviewer.svg +21 -0
  733. package/src/img/teammates/marvel/scanner.svg +23 -0
  734. package/src/img/teammates/marvel/security.svg +30 -0
  735. package/src/img/teammates/marvel/tracer.svg +19 -0
  736. package/src/img/teammates/marvel/translator.svg +24 -0
  737. package/src/img/teammates/marvel/worker.svg +16 -0
  738. package/src/img/teammates/researcher.svg +35 -0
  739. package/src/img/teammates/reviewer.svg +23 -0
  740. package/src/img/teammates/scanner.svg +31 -0
  741. package/src/img/teammates/security.svg +31 -0
  742. package/src/img/teammates/tracer.svg +30 -0
  743. package/src/img/teammates/translator.svg +32 -0
  744. package/src/img/teammates/worker.svg +29 -0
  745. package/src/main.jsx +30 -0
  746. package/src/tokenInterceptor.js +60 -0
  747. package/src/utils/apiUrl.js +26 -0
  748. package/src/utils/approvalReviewerOptions.js +27 -0
  749. package/src/utils/askFallback.js +21 -0
  750. package/src/utils/askOptionDesc.js +55 -0
  751. package/src/utils/askPortalMatcher.js +54 -0
  752. package/src/utils/autoApproveOptions.js +23 -0
  753. package/src/utils/avatarAnimationPostPass.js +46 -0
  754. package/src/utils/builtinPresets.js +18 -0
  755. package/src/utils/clearCheckpoint.js +154 -0
  756. package/src/utils/commandValidator.js +45 -0
  757. package/src/utils/contentFilter.js +675 -0
  758. package/src/utils/contextRaw.js +17 -0
  759. package/src/utils/contextSidebarNavigation.js +16 -0
  760. package/src/utils/conversationEntryNormalize.js +497 -0
  761. package/src/utils/displayScaleHelper.js +47 -0
  762. package/src/utils/entry-slim.js +594 -0
  763. package/src/utils/entryCache.js +179 -0
  764. package/src/utils/errorReport.js +40 -0
  765. package/src/utils/fileExpandedPathsStorage.js +70 -0
  766. package/src/utils/fileIcons.jsx +36 -0
  767. package/src/utils/fileOpen.js +37 -0
  768. package/src/utils/formatters.js +48 -0
  769. package/src/utils/gitApi.js +50 -0
  770. package/src/utils/gitTreeBuilder.js +19 -0
  771. package/src/utils/helpers.js +462 -0
  772. package/src/utils/identityHeal.js +83 -0
  773. package/src/utils/imOrigin.js +24 -0
  774. package/src/utils/imTr.js +7 -0
  775. package/src/utils/imageCompress.js +83 -0
  776. package/src/utils/imageDownscale.js +28 -0
  777. package/src/utils/imageResize.js +112 -0
  778. package/src/utils/ingestPipeline.js +47 -0
  779. package/src/utils/lazyWithReload.js +53 -0
  780. package/src/utils/markdown.js +30 -0
  781. package/src/utils/markdownIncremental.js +39 -0
  782. package/src/utils/markdownProfiler.js +113 -0
  783. package/src/utils/mdExtensionDetect.js +64 -0
  784. package/src/utils/memoryLinkParser.js +44 -0
  785. package/src/utils/modalMask.js +15 -0
  786. package/src/utils/monotime.js +6 -0
  787. package/src/utils/pinnedMenu.js +55 -0
  788. package/src/utils/presetShortcuts.js +14 -0
  789. package/src/utils/projectAlias.js +135 -0
  790. package/src/utils/promptClassifier.js +111 -0
  791. package/src/utils/promptDetect.js +196 -0
  792. package/src/utils/promptNav.js +60 -0
  793. package/src/utils/ptyChunkBuilder.js +251 -0
  794. package/src/utils/quickMenuHoverIntent.js +35 -0
  795. package/src/utils/rateLimitParser.js +249 -0
  796. package/src/utils/readResultPool.js +106 -0
  797. package/src/utils/refreshCachedItemProp.js +32 -0
  798. package/src/utils/requestTools.js +19 -0
  799. package/src/utils/requestType.js +284 -0
  800. package/src/utils/resizeCalc.js +21 -0
  801. package/src/utils/resolveLocalized.js +17 -0
  802. package/src/utils/seqResourceLoaders.js +79 -0
  803. package/src/utils/sessionManager.js +694 -0
  804. package/src/utils/sessionMerge.js +290 -0
  805. package/src/utils/skillModalController.js +111 -0
  806. package/src/utils/skillsParser.js +116 -0
  807. package/src/utils/slashCommandLabels.js +80 -0
  808. package/src/utils/splitDragCalc.js +73 -0
  809. package/src/utils/stickyBottomController.js +643 -0
  810. package/src/utils/svgSanitize.js +48 -0
  811. package/src/utils/systemTags.js +47 -0
  812. package/src/utils/tCodex.js +20 -0
  813. package/src/utils/teamModalBuilder.js +347 -0
  814. package/src/utils/teamSessionParser.js +186 -0
  815. package/src/utils/teammateAvatars.js +194 -0
  816. package/src/utils/teammateDetector.js +106 -0
  817. package/src/utils/termDiag.js +114 -0
  818. package/src/utils/terminalClipboard.js +117 -0
  819. package/src/utils/terminalWriteQueue.js +398 -0
  820. package/src/utils/thinkingMerge.js +49 -0
  821. package/src/utils/tokenUsage.js +1 -0
  822. package/src/utils/toolCatalog.js +31 -0
  823. package/src/utils/toolNameAliases.js +13 -0
  824. package/src/utils/toolResultBuilder.js +312 -0
  825. package/src/utils/toolResultClassifier.js +16 -0
  826. package/src/utils/toolResultCore.js +161 -0
  827. package/src/utils/toolsDiff.js +44 -0
  828. package/src/utils/toolsXmlFormatter.js +3 -0
  829. package/src/utils/ultraplanController.js +109 -0
  830. package/src/utils/ultraplanExperts.js +86 -0
  831. package/src/utils/ultraplanTemplates.js +152 -0
  832. package/src/utils/userImageRefs.js +49 -0
  833. package/src/utils/voicePackPlayer.js +233 -0
  834. package/src/utils/webResultGrouping.js +111 -0
  835. package/src/utils/workflowFormat.js +52 -0
  836. package/src/utils/workflowRuns.js +118 -0
  837. package/src/utils/workflowStore.js +94 -0
  838. package/vite.config.js +106 -0
  839. package/concepts/ar/CacheRebuild.md +0 -36
  840. package/concepts/ar/KVCacheContent.md +0 -49
  841. package/concepts/ar/Tool-Agent.md +0 -125
  842. package/concepts/ar/Tool-AskUserQuestion.md +0 -75
  843. package/concepts/ar/Tool-Bash.md +0 -167
  844. package/concepts/ar/Tool-Edit.md +0 -46
  845. package/concepts/ar/Tool-EnterPlanMode.md +0 -128
  846. package/concepts/ar/Tool-EnterWorktree.md +0 -56
  847. package/concepts/ar/Tool-ExitPlanMode.md +0 -62
  848. package/concepts/ar/Tool-Glob.md +0 -39
  849. package/concepts/ar/Tool-Grep.md +0 -57
  850. package/concepts/ar/Tool-NotebookEdit.md +0 -33
  851. package/concepts/ar/Tool-Read.md +0 -56
  852. package/concepts/ar/Tool-SendMessage.md +0 -41
  853. package/concepts/ar/Tool-Skill.md +0 -56
  854. package/concepts/ar/Tool-Task.md +0 -51
  855. package/concepts/ar/Tool-TaskCreate.md +0 -78
  856. package/concepts/ar/Tool-TaskGet.md +0 -56
  857. package/concepts/ar/Tool-TaskList.md +0 -56
  858. package/concepts/ar/Tool-TaskOutput.md +0 -40
  859. package/concepts/ar/Tool-TaskStop.md +0 -32
  860. package/concepts/ar/Tool-TaskUpdate.md +0 -123
  861. package/concepts/ar/Tool-TeamCreate.md +0 -38
  862. package/concepts/ar/Tool-TeamDelete.md +0 -30
  863. package/concepts/ar/Tool-WebFetch.md +0 -55
  864. package/concepts/ar/Tool-WebSearch.md +0 -58
  865. package/concepts/ar/Tool-Write.md +0 -39
  866. package/concepts/ar/Tool-executeCode.md +0 -41
  867. package/concepts/ar/Tool-getDiagnostics.md +0 -32
  868. package/concepts/ar/Tools.md +0 -67
  869. package/concepts/da/CacheRebuild.md +0 -36
  870. package/concepts/da/KVCacheContent.md +0 -49
  871. package/concepts/da/Tool-Agent.md +0 -125
  872. package/concepts/da/Tool-AskUserQuestion.md +0 -75
  873. package/concepts/da/Tool-Bash.md +0 -167
  874. package/concepts/da/Tool-Edit.md +0 -46
  875. package/concepts/da/Tool-EnterPlanMode.md +0 -128
  876. package/concepts/da/Tool-EnterWorktree.md +0 -56
  877. package/concepts/da/Tool-ExitPlanMode.md +0 -62
  878. package/concepts/da/Tool-Glob.md +0 -39
  879. package/concepts/da/Tool-Grep.md +0 -57
  880. package/concepts/da/Tool-NotebookEdit.md +0 -33
  881. package/concepts/da/Tool-Read.md +0 -56
  882. package/concepts/da/Tool-SendMessage.md +0 -41
  883. package/concepts/da/Tool-Skill.md +0 -56
  884. package/concepts/da/Tool-Task.md +0 -51
  885. package/concepts/da/Tool-TaskCreate.md +0 -78
  886. package/concepts/da/Tool-TaskGet.md +0 -56
  887. package/concepts/da/Tool-TaskList.md +0 -56
  888. package/concepts/da/Tool-TaskOutput.md +0 -40
  889. package/concepts/da/Tool-TaskStop.md +0 -32
  890. package/concepts/da/Tool-TaskUpdate.md +0 -123
  891. package/concepts/da/Tool-TeamCreate.md +0 -38
  892. package/concepts/da/Tool-TeamDelete.md +0 -30
  893. package/concepts/da/Tool-WebFetch.md +0 -55
  894. package/concepts/da/Tool-WebSearch.md +0 -58
  895. package/concepts/da/Tool-Write.md +0 -39
  896. package/concepts/da/Tool-executeCode.md +0 -41
  897. package/concepts/da/Tool-getDiagnostics.md +0 -32
  898. package/concepts/da/Tools.md +0 -67
  899. package/concepts/de/CacheRebuild.md +0 -36
  900. package/concepts/de/KVCacheContent.md +0 -49
  901. package/concepts/de/Tool-Agent.md +0 -125
  902. package/concepts/de/Tool-AskUserQuestion.md +0 -75
  903. package/concepts/de/Tool-Bash.md +0 -167
  904. package/concepts/de/Tool-Edit.md +0 -46
  905. package/concepts/de/Tool-EnterPlanMode.md +0 -128
  906. package/concepts/de/Tool-EnterWorktree.md +0 -56
  907. package/concepts/de/Tool-ExitPlanMode.md +0 -62
  908. package/concepts/de/Tool-Glob.md +0 -39
  909. package/concepts/de/Tool-Grep.md +0 -57
  910. package/concepts/de/Tool-NotebookEdit.md +0 -33
  911. package/concepts/de/Tool-Read.md +0 -56
  912. package/concepts/de/Tool-SendMessage.md +0 -41
  913. package/concepts/de/Tool-Skill.md +0 -56
  914. package/concepts/de/Tool-Task.md +0 -51
  915. package/concepts/de/Tool-TaskCreate.md +0 -78
  916. package/concepts/de/Tool-TaskGet.md +0 -56
  917. package/concepts/de/Tool-TaskList.md +0 -56
  918. package/concepts/de/Tool-TaskOutput.md +0 -40
  919. package/concepts/de/Tool-TaskStop.md +0 -32
  920. package/concepts/de/Tool-TaskUpdate.md +0 -123
  921. package/concepts/de/Tool-TeamCreate.md +0 -38
  922. package/concepts/de/Tool-TeamDelete.md +0 -30
  923. package/concepts/de/Tool-WebFetch.md +0 -55
  924. package/concepts/de/Tool-WebSearch.md +0 -58
  925. package/concepts/de/Tool-Write.md +0 -39
  926. package/concepts/de/Tool-executeCode.md +0 -41
  927. package/concepts/de/Tool-getDiagnostics.md +0 -32
  928. package/concepts/de/Tools.md +0 -67
  929. package/concepts/en/CacheRebuild.md +0 -36
  930. package/concepts/en/KVCacheContent.md +0 -49
  931. package/concepts/en/Tool-Agent.md +0 -125
  932. package/concepts/en/Tool-AskUserQuestion.md +0 -75
  933. package/concepts/en/Tool-Bash.md +0 -167
  934. package/concepts/en/Tool-Edit.md +0 -46
  935. package/concepts/en/Tool-EnterPlanMode.md +0 -128
  936. package/concepts/en/Tool-EnterWorktree.md +0 -56
  937. package/concepts/en/Tool-ExitPlanMode.md +0 -62
  938. package/concepts/en/Tool-Glob.md +0 -39
  939. package/concepts/en/Tool-Grep.md +0 -57
  940. package/concepts/en/Tool-NotebookEdit.md +0 -33
  941. package/concepts/en/Tool-Read.md +0 -56
  942. package/concepts/en/Tool-SendMessage.md +0 -41
  943. package/concepts/en/Tool-Skill.md +0 -56
  944. package/concepts/en/Tool-Task.md +0 -51
  945. package/concepts/en/Tool-TaskCreate.md +0 -78
  946. package/concepts/en/Tool-TaskGet.md +0 -56
  947. package/concepts/en/Tool-TaskList.md +0 -56
  948. package/concepts/en/Tool-TaskOutput.md +0 -40
  949. package/concepts/en/Tool-TaskStop.md +0 -32
  950. package/concepts/en/Tool-TaskUpdate.md +0 -123
  951. package/concepts/en/Tool-TeamCreate.md +0 -38
  952. package/concepts/en/Tool-TeamDelete.md +0 -30
  953. package/concepts/en/Tool-WebFetch.md +0 -55
  954. package/concepts/en/Tool-WebSearch.md +0 -58
  955. package/concepts/en/Tool-Write.md +0 -39
  956. package/concepts/en/Tool-executeCode.md +0 -41
  957. package/concepts/en/Tool-getDiagnostics.md +0 -32
  958. package/concepts/es/CacheRebuild.md +0 -36
  959. package/concepts/es/KVCacheContent.md +0 -49
  960. package/concepts/es/Tool-Agent.md +0 -125
  961. package/concepts/es/Tool-AskUserQuestion.md +0 -75
  962. package/concepts/es/Tool-Bash.md +0 -167
  963. package/concepts/es/Tool-Edit.md +0 -46
  964. package/concepts/es/Tool-EnterPlanMode.md +0 -128
  965. package/concepts/es/Tool-EnterWorktree.md +0 -56
  966. package/concepts/es/Tool-ExitPlanMode.md +0 -62
  967. package/concepts/es/Tool-Glob.md +0 -39
  968. package/concepts/es/Tool-Grep.md +0 -57
  969. package/concepts/es/Tool-NotebookEdit.md +0 -33
  970. package/concepts/es/Tool-Read.md +0 -56
  971. package/concepts/es/Tool-SendMessage.md +0 -41
  972. package/concepts/es/Tool-Skill.md +0 -56
  973. package/concepts/es/Tool-Task.md +0 -51
  974. package/concepts/es/Tool-TaskCreate.md +0 -78
  975. package/concepts/es/Tool-TaskGet.md +0 -56
  976. package/concepts/es/Tool-TaskList.md +0 -56
  977. package/concepts/es/Tool-TaskOutput.md +0 -40
  978. package/concepts/es/Tool-TaskStop.md +0 -32
  979. package/concepts/es/Tool-TaskUpdate.md +0 -123
  980. package/concepts/es/Tool-TeamCreate.md +0 -38
  981. package/concepts/es/Tool-TeamDelete.md +0 -30
  982. package/concepts/es/Tool-WebFetch.md +0 -55
  983. package/concepts/es/Tool-WebSearch.md +0 -58
  984. package/concepts/es/Tool-Write.md +0 -39
  985. package/concepts/es/Tool-executeCode.md +0 -41
  986. package/concepts/es/Tool-getDiagnostics.md +0 -32
  987. package/concepts/es/Tools.md +0 -67
  988. package/concepts/fr/CacheRebuild.md +0 -36
  989. package/concepts/fr/KVCacheContent.md +0 -49
  990. package/concepts/fr/Tool-Agent.md +0 -125
  991. package/concepts/fr/Tool-AskUserQuestion.md +0 -75
  992. package/concepts/fr/Tool-Bash.md +0 -167
  993. package/concepts/fr/Tool-Edit.md +0 -46
  994. package/concepts/fr/Tool-EnterPlanMode.md +0 -128
  995. package/concepts/fr/Tool-EnterWorktree.md +0 -56
  996. package/concepts/fr/Tool-ExitPlanMode.md +0 -62
  997. package/concepts/fr/Tool-Glob.md +0 -39
  998. package/concepts/fr/Tool-Grep.md +0 -57
  999. package/concepts/fr/Tool-NotebookEdit.md +0 -33
  1000. package/concepts/fr/Tool-Read.md +0 -56
  1001. package/concepts/fr/Tool-SendMessage.md +0 -41
  1002. package/concepts/fr/Tool-Skill.md +0 -56
  1003. package/concepts/fr/Tool-Task.md +0 -51
  1004. package/concepts/fr/Tool-TaskCreate.md +0 -78
  1005. package/concepts/fr/Tool-TaskGet.md +0 -56
  1006. package/concepts/fr/Tool-TaskList.md +0 -56
  1007. package/concepts/fr/Tool-TaskOutput.md +0 -40
  1008. package/concepts/fr/Tool-TaskStop.md +0 -32
  1009. package/concepts/fr/Tool-TaskUpdate.md +0 -123
  1010. package/concepts/fr/Tool-TeamCreate.md +0 -38
  1011. package/concepts/fr/Tool-TeamDelete.md +0 -30
  1012. package/concepts/fr/Tool-WebFetch.md +0 -55
  1013. package/concepts/fr/Tool-WebSearch.md +0 -58
  1014. package/concepts/fr/Tool-Write.md +0 -39
  1015. package/concepts/fr/Tool-executeCode.md +0 -41
  1016. package/concepts/fr/Tool-getDiagnostics.md +0 -32
  1017. package/concepts/fr/Tools.md +0 -67
  1018. package/concepts/it/CacheRebuild.md +0 -36
  1019. package/concepts/it/KVCacheContent.md +0 -49
  1020. package/concepts/it/Tool-Agent.md +0 -125
  1021. package/concepts/it/Tool-AskUserQuestion.md +0 -75
  1022. package/concepts/it/Tool-Bash.md +0 -167
  1023. package/concepts/it/Tool-Edit.md +0 -46
  1024. package/concepts/it/Tool-EnterPlanMode.md +0 -128
  1025. package/concepts/it/Tool-EnterWorktree.md +0 -56
  1026. package/concepts/it/Tool-ExitPlanMode.md +0 -62
  1027. package/concepts/it/Tool-Glob.md +0 -39
  1028. package/concepts/it/Tool-Grep.md +0 -57
  1029. package/concepts/it/Tool-NotebookEdit.md +0 -33
  1030. package/concepts/it/Tool-Read.md +0 -56
  1031. package/concepts/it/Tool-SendMessage.md +0 -41
  1032. package/concepts/it/Tool-Skill.md +0 -56
  1033. package/concepts/it/Tool-Task.md +0 -51
  1034. package/concepts/it/Tool-TaskCreate.md +0 -78
  1035. package/concepts/it/Tool-TaskGet.md +0 -56
  1036. package/concepts/it/Tool-TaskList.md +0 -56
  1037. package/concepts/it/Tool-TaskOutput.md +0 -40
  1038. package/concepts/it/Tool-TaskStop.md +0 -32
  1039. package/concepts/it/Tool-TaskUpdate.md +0 -123
  1040. package/concepts/it/Tool-TeamCreate.md +0 -38
  1041. package/concepts/it/Tool-TeamDelete.md +0 -30
  1042. package/concepts/it/Tool-WebFetch.md +0 -55
  1043. package/concepts/it/Tool-WebSearch.md +0 -58
  1044. package/concepts/it/Tool-Write.md +0 -39
  1045. package/concepts/it/Tool-executeCode.md +0 -41
  1046. package/concepts/it/Tool-getDiagnostics.md +0 -32
  1047. package/concepts/it/Tools.md +0 -67
  1048. package/concepts/ja/CacheRebuild.md +0 -36
  1049. package/concepts/ja/KVCacheContent.md +0 -49
  1050. package/concepts/ja/Tool-Agent.md +0 -125
  1051. package/concepts/ja/Tool-AskUserQuestion.md +0 -75
  1052. package/concepts/ja/Tool-Bash.md +0 -167
  1053. package/concepts/ja/Tool-Edit.md +0 -46
  1054. package/concepts/ja/Tool-EnterPlanMode.md +0 -128
  1055. package/concepts/ja/Tool-EnterWorktree.md +0 -56
  1056. package/concepts/ja/Tool-ExitPlanMode.md +0 -62
  1057. package/concepts/ja/Tool-Glob.md +0 -39
  1058. package/concepts/ja/Tool-Grep.md +0 -57
  1059. package/concepts/ja/Tool-NotebookEdit.md +0 -33
  1060. package/concepts/ja/Tool-Read.md +0 -56
  1061. package/concepts/ja/Tool-SendMessage.md +0 -41
  1062. package/concepts/ja/Tool-Skill.md +0 -56
  1063. package/concepts/ja/Tool-Task.md +0 -51
  1064. package/concepts/ja/Tool-TaskCreate.md +0 -78
  1065. package/concepts/ja/Tool-TaskGet.md +0 -56
  1066. package/concepts/ja/Tool-TaskList.md +0 -56
  1067. package/concepts/ja/Tool-TaskOutput.md +0 -40
  1068. package/concepts/ja/Tool-TaskStop.md +0 -32
  1069. package/concepts/ja/Tool-TaskUpdate.md +0 -123
  1070. package/concepts/ja/Tool-TeamCreate.md +0 -38
  1071. package/concepts/ja/Tool-TeamDelete.md +0 -30
  1072. package/concepts/ja/Tool-WebFetch.md +0 -55
  1073. package/concepts/ja/Tool-WebSearch.md +0 -58
  1074. package/concepts/ja/Tool-Write.md +0 -39
  1075. package/concepts/ja/Tool-executeCode.md +0 -41
  1076. package/concepts/ja/Tool-getDiagnostics.md +0 -32
  1077. package/concepts/ja/Tools.md +0 -67
  1078. package/concepts/ko/CacheRebuild.md +0 -36
  1079. package/concepts/ko/KVCacheContent.md +0 -49
  1080. package/concepts/ko/Tool-Agent.md +0 -125
  1081. package/concepts/ko/Tool-AskUserQuestion.md +0 -75
  1082. package/concepts/ko/Tool-Bash.md +0 -167
  1083. package/concepts/ko/Tool-Edit.md +0 -46
  1084. package/concepts/ko/Tool-EnterPlanMode.md +0 -128
  1085. package/concepts/ko/Tool-EnterWorktree.md +0 -56
  1086. package/concepts/ko/Tool-ExitPlanMode.md +0 -62
  1087. package/concepts/ko/Tool-Glob.md +0 -39
  1088. package/concepts/ko/Tool-Grep.md +0 -57
  1089. package/concepts/ko/Tool-NotebookEdit.md +0 -33
  1090. package/concepts/ko/Tool-Read.md +0 -56
  1091. package/concepts/ko/Tool-SendMessage.md +0 -41
  1092. package/concepts/ko/Tool-Skill.md +0 -56
  1093. package/concepts/ko/Tool-Task.md +0 -51
  1094. package/concepts/ko/Tool-TaskCreate.md +0 -78
  1095. package/concepts/ko/Tool-TaskGet.md +0 -56
  1096. package/concepts/ko/Tool-TaskList.md +0 -56
  1097. package/concepts/ko/Tool-TaskOutput.md +0 -40
  1098. package/concepts/ko/Tool-TaskStop.md +0 -32
  1099. package/concepts/ko/Tool-TaskUpdate.md +0 -123
  1100. package/concepts/ko/Tool-TeamCreate.md +0 -38
  1101. package/concepts/ko/Tool-TeamDelete.md +0 -30
  1102. package/concepts/ko/Tool-WebFetch.md +0 -55
  1103. package/concepts/ko/Tool-WebSearch.md +0 -58
  1104. package/concepts/ko/Tool-Write.md +0 -39
  1105. package/concepts/ko/Tool-executeCode.md +0 -41
  1106. package/concepts/ko/Tool-getDiagnostics.md +0 -32
  1107. package/concepts/ko/Tools.md +0 -67
  1108. package/concepts/no/CacheRebuild.md +0 -36
  1109. package/concepts/no/KVCacheContent.md +0 -49
  1110. package/concepts/no/Tool-Agent.md +0 -125
  1111. package/concepts/no/Tool-AskUserQuestion.md +0 -75
  1112. package/concepts/no/Tool-Bash.md +0 -167
  1113. package/concepts/no/Tool-Edit.md +0 -46
  1114. package/concepts/no/Tool-EnterPlanMode.md +0 -128
  1115. package/concepts/no/Tool-EnterWorktree.md +0 -56
  1116. package/concepts/no/Tool-ExitPlanMode.md +0 -62
  1117. package/concepts/no/Tool-Glob.md +0 -39
  1118. package/concepts/no/Tool-Grep.md +0 -57
  1119. package/concepts/no/Tool-NotebookEdit.md +0 -33
  1120. package/concepts/no/Tool-Read.md +0 -56
  1121. package/concepts/no/Tool-SendMessage.md +0 -41
  1122. package/concepts/no/Tool-Skill.md +0 -56
  1123. package/concepts/no/Tool-Task.md +0 -51
  1124. package/concepts/no/Tool-TaskCreate.md +0 -78
  1125. package/concepts/no/Tool-TaskGet.md +0 -56
  1126. package/concepts/no/Tool-TaskList.md +0 -56
  1127. package/concepts/no/Tool-TaskOutput.md +0 -40
  1128. package/concepts/no/Tool-TaskStop.md +0 -32
  1129. package/concepts/no/Tool-TaskUpdate.md +0 -123
  1130. package/concepts/no/Tool-TeamCreate.md +0 -38
  1131. package/concepts/no/Tool-TeamDelete.md +0 -30
  1132. package/concepts/no/Tool-WebFetch.md +0 -55
  1133. package/concepts/no/Tool-WebSearch.md +0 -58
  1134. package/concepts/no/Tool-Write.md +0 -39
  1135. package/concepts/no/Tool-executeCode.md +0 -41
  1136. package/concepts/no/Tool-getDiagnostics.md +0 -32
  1137. package/concepts/no/Tools.md +0 -67
  1138. package/concepts/pl/CacheRebuild.md +0 -36
  1139. package/concepts/pl/KVCacheContent.md +0 -49
  1140. package/concepts/pl/Tool-Agent.md +0 -125
  1141. package/concepts/pl/Tool-AskUserQuestion.md +0 -75
  1142. package/concepts/pl/Tool-Bash.md +0 -167
  1143. package/concepts/pl/Tool-Edit.md +0 -46
  1144. package/concepts/pl/Tool-EnterPlanMode.md +0 -128
  1145. package/concepts/pl/Tool-EnterWorktree.md +0 -56
  1146. package/concepts/pl/Tool-ExitPlanMode.md +0 -62
  1147. package/concepts/pl/Tool-Glob.md +0 -39
  1148. package/concepts/pl/Tool-Grep.md +0 -57
  1149. package/concepts/pl/Tool-NotebookEdit.md +0 -33
  1150. package/concepts/pl/Tool-Read.md +0 -56
  1151. package/concepts/pl/Tool-SendMessage.md +0 -41
  1152. package/concepts/pl/Tool-Skill.md +0 -56
  1153. package/concepts/pl/Tool-Task.md +0 -51
  1154. package/concepts/pl/Tool-TaskCreate.md +0 -78
  1155. package/concepts/pl/Tool-TaskGet.md +0 -56
  1156. package/concepts/pl/Tool-TaskList.md +0 -56
  1157. package/concepts/pl/Tool-TaskOutput.md +0 -40
  1158. package/concepts/pl/Tool-TaskStop.md +0 -32
  1159. package/concepts/pl/Tool-TaskUpdate.md +0 -123
  1160. package/concepts/pl/Tool-TeamCreate.md +0 -38
  1161. package/concepts/pl/Tool-TeamDelete.md +0 -30
  1162. package/concepts/pl/Tool-WebFetch.md +0 -55
  1163. package/concepts/pl/Tool-WebSearch.md +0 -58
  1164. package/concepts/pl/Tool-Write.md +0 -39
  1165. package/concepts/pl/Tool-executeCode.md +0 -41
  1166. package/concepts/pl/Tool-getDiagnostics.md +0 -32
  1167. package/concepts/pl/Tools.md +0 -67
  1168. package/concepts/pt-BR/CacheRebuild.md +0 -36
  1169. package/concepts/pt-BR/KVCacheContent.md +0 -49
  1170. package/concepts/pt-BR/Tool-Agent.md +0 -125
  1171. package/concepts/pt-BR/Tool-AskUserQuestion.md +0 -75
  1172. package/concepts/pt-BR/Tool-Bash.md +0 -167
  1173. package/concepts/pt-BR/Tool-Edit.md +0 -46
  1174. package/concepts/pt-BR/Tool-EnterPlanMode.md +0 -128
  1175. package/concepts/pt-BR/Tool-EnterWorktree.md +0 -56
  1176. package/concepts/pt-BR/Tool-ExitPlanMode.md +0 -62
  1177. package/concepts/pt-BR/Tool-Glob.md +0 -39
  1178. package/concepts/pt-BR/Tool-Grep.md +0 -57
  1179. package/concepts/pt-BR/Tool-NotebookEdit.md +0 -33
  1180. package/concepts/pt-BR/Tool-Read.md +0 -56
  1181. package/concepts/pt-BR/Tool-SendMessage.md +0 -41
  1182. package/concepts/pt-BR/Tool-Skill.md +0 -56
  1183. package/concepts/pt-BR/Tool-Task.md +0 -51
  1184. package/concepts/pt-BR/Tool-TaskCreate.md +0 -78
  1185. package/concepts/pt-BR/Tool-TaskGet.md +0 -56
  1186. package/concepts/pt-BR/Tool-TaskList.md +0 -56
  1187. package/concepts/pt-BR/Tool-TaskOutput.md +0 -40
  1188. package/concepts/pt-BR/Tool-TaskStop.md +0 -32
  1189. package/concepts/pt-BR/Tool-TaskUpdate.md +0 -123
  1190. package/concepts/pt-BR/Tool-TeamCreate.md +0 -38
  1191. package/concepts/pt-BR/Tool-TeamDelete.md +0 -30
  1192. package/concepts/pt-BR/Tool-WebFetch.md +0 -55
  1193. package/concepts/pt-BR/Tool-WebSearch.md +0 -58
  1194. package/concepts/pt-BR/Tool-Write.md +0 -39
  1195. package/concepts/pt-BR/Tool-executeCode.md +0 -41
  1196. package/concepts/pt-BR/Tool-getDiagnostics.md +0 -32
  1197. package/concepts/pt-BR/Tools.md +0 -67
  1198. package/concepts/ru/CacheRebuild.md +0 -36
  1199. package/concepts/ru/KVCacheContent.md +0 -49
  1200. package/concepts/ru/Tool-Agent.md +0 -125
  1201. package/concepts/ru/Tool-AskUserQuestion.md +0 -75
  1202. package/concepts/ru/Tool-Bash.md +0 -167
  1203. package/concepts/ru/Tool-Edit.md +0 -46
  1204. package/concepts/ru/Tool-EnterPlanMode.md +0 -128
  1205. package/concepts/ru/Tool-EnterWorktree.md +0 -56
  1206. package/concepts/ru/Tool-ExitPlanMode.md +0 -62
  1207. package/concepts/ru/Tool-Glob.md +0 -39
  1208. package/concepts/ru/Tool-Grep.md +0 -57
  1209. package/concepts/ru/Tool-NotebookEdit.md +0 -33
  1210. package/concepts/ru/Tool-Read.md +0 -56
  1211. package/concepts/ru/Tool-SendMessage.md +0 -41
  1212. package/concepts/ru/Tool-Skill.md +0 -56
  1213. package/concepts/ru/Tool-Task.md +0 -51
  1214. package/concepts/ru/Tool-TaskCreate.md +0 -78
  1215. package/concepts/ru/Tool-TaskGet.md +0 -56
  1216. package/concepts/ru/Tool-TaskList.md +0 -56
  1217. package/concepts/ru/Tool-TaskOutput.md +0 -40
  1218. package/concepts/ru/Tool-TaskStop.md +0 -32
  1219. package/concepts/ru/Tool-TaskUpdate.md +0 -123
  1220. package/concepts/ru/Tool-TeamCreate.md +0 -38
  1221. package/concepts/ru/Tool-TeamDelete.md +0 -30
  1222. package/concepts/ru/Tool-WebFetch.md +0 -55
  1223. package/concepts/ru/Tool-WebSearch.md +0 -58
  1224. package/concepts/ru/Tool-Write.md +0 -39
  1225. package/concepts/ru/Tool-executeCode.md +0 -41
  1226. package/concepts/ru/Tool-getDiagnostics.md +0 -32
  1227. package/concepts/ru/Tools.md +0 -67
  1228. package/concepts/th/CacheRebuild.md +0 -36
  1229. package/concepts/th/KVCacheContent.md +0 -49
  1230. package/concepts/th/Tool-Agent.md +0 -125
  1231. package/concepts/th/Tool-AskUserQuestion.md +0 -75
  1232. package/concepts/th/Tool-Bash.md +0 -167
  1233. package/concepts/th/Tool-Edit.md +0 -46
  1234. package/concepts/th/Tool-EnterPlanMode.md +0 -128
  1235. package/concepts/th/Tool-EnterWorktree.md +0 -56
  1236. package/concepts/th/Tool-ExitPlanMode.md +0 -62
  1237. package/concepts/th/Tool-Glob.md +0 -39
  1238. package/concepts/th/Tool-Grep.md +0 -57
  1239. package/concepts/th/Tool-NotebookEdit.md +0 -33
  1240. package/concepts/th/Tool-Read.md +0 -56
  1241. package/concepts/th/Tool-SendMessage.md +0 -41
  1242. package/concepts/th/Tool-Skill.md +0 -56
  1243. package/concepts/th/Tool-Task.md +0 -51
  1244. package/concepts/th/Tool-TaskCreate.md +0 -78
  1245. package/concepts/th/Tool-TaskGet.md +0 -56
  1246. package/concepts/th/Tool-TaskList.md +0 -56
  1247. package/concepts/th/Tool-TaskOutput.md +0 -40
  1248. package/concepts/th/Tool-TaskStop.md +0 -32
  1249. package/concepts/th/Tool-TaskUpdate.md +0 -123
  1250. package/concepts/th/Tool-TeamCreate.md +0 -38
  1251. package/concepts/th/Tool-TeamDelete.md +0 -30
  1252. package/concepts/th/Tool-WebFetch.md +0 -55
  1253. package/concepts/th/Tool-WebSearch.md +0 -58
  1254. package/concepts/th/Tool-Write.md +0 -39
  1255. package/concepts/th/Tool-executeCode.md +0 -41
  1256. package/concepts/th/Tool-getDiagnostics.md +0 -32
  1257. package/concepts/th/Tools.md +0 -67
  1258. package/concepts/tr/CacheRebuild.md +0 -36
  1259. package/concepts/tr/KVCacheContent.md +0 -49
  1260. package/concepts/tr/Tool-Agent.md +0 -125
  1261. package/concepts/tr/Tool-AskUserQuestion.md +0 -75
  1262. package/concepts/tr/Tool-Bash.md +0 -167
  1263. package/concepts/tr/Tool-Edit.md +0 -46
  1264. package/concepts/tr/Tool-EnterPlanMode.md +0 -128
  1265. package/concepts/tr/Tool-EnterWorktree.md +0 -56
  1266. package/concepts/tr/Tool-ExitPlanMode.md +0 -62
  1267. package/concepts/tr/Tool-Glob.md +0 -39
  1268. package/concepts/tr/Tool-Grep.md +0 -57
  1269. package/concepts/tr/Tool-NotebookEdit.md +0 -33
  1270. package/concepts/tr/Tool-Read.md +0 -56
  1271. package/concepts/tr/Tool-SendMessage.md +0 -41
  1272. package/concepts/tr/Tool-Skill.md +0 -56
  1273. package/concepts/tr/Tool-Task.md +0 -51
  1274. package/concepts/tr/Tool-TaskCreate.md +0 -78
  1275. package/concepts/tr/Tool-TaskGet.md +0 -56
  1276. package/concepts/tr/Tool-TaskList.md +0 -56
  1277. package/concepts/tr/Tool-TaskOutput.md +0 -40
  1278. package/concepts/tr/Tool-TaskStop.md +0 -32
  1279. package/concepts/tr/Tool-TaskUpdate.md +0 -123
  1280. package/concepts/tr/Tool-TeamCreate.md +0 -38
  1281. package/concepts/tr/Tool-TeamDelete.md +0 -30
  1282. package/concepts/tr/Tool-WebFetch.md +0 -55
  1283. package/concepts/tr/Tool-WebSearch.md +0 -58
  1284. package/concepts/tr/Tool-Write.md +0 -39
  1285. package/concepts/tr/Tool-executeCode.md +0 -41
  1286. package/concepts/tr/Tool-getDiagnostics.md +0 -32
  1287. package/concepts/tr/Tools.md +0 -67
  1288. package/concepts/uk/CacheRebuild.md +0 -36
  1289. package/concepts/uk/KVCacheContent.md +0 -49
  1290. package/concepts/uk/Tool-Agent.md +0 -125
  1291. package/concepts/uk/Tool-AskUserQuestion.md +0 -75
  1292. package/concepts/uk/Tool-Bash.md +0 -167
  1293. package/concepts/uk/Tool-Edit.md +0 -46
  1294. package/concepts/uk/Tool-EnterPlanMode.md +0 -128
  1295. package/concepts/uk/Tool-EnterWorktree.md +0 -56
  1296. package/concepts/uk/Tool-ExitPlanMode.md +0 -62
  1297. package/concepts/uk/Tool-Glob.md +0 -39
  1298. package/concepts/uk/Tool-Grep.md +0 -57
  1299. package/concepts/uk/Tool-NotebookEdit.md +0 -33
  1300. package/concepts/uk/Tool-Read.md +0 -56
  1301. package/concepts/uk/Tool-SendMessage.md +0 -41
  1302. package/concepts/uk/Tool-Skill.md +0 -56
  1303. package/concepts/uk/Tool-Task.md +0 -51
  1304. package/concepts/uk/Tool-TaskCreate.md +0 -78
  1305. package/concepts/uk/Tool-TaskGet.md +0 -56
  1306. package/concepts/uk/Tool-TaskList.md +0 -56
  1307. package/concepts/uk/Tool-TaskOutput.md +0 -40
  1308. package/concepts/uk/Tool-TaskStop.md +0 -32
  1309. package/concepts/uk/Tool-TaskUpdate.md +0 -123
  1310. package/concepts/uk/Tool-TeamCreate.md +0 -38
  1311. package/concepts/uk/Tool-TeamDelete.md +0 -30
  1312. package/concepts/uk/Tool-WebFetch.md +0 -55
  1313. package/concepts/uk/Tool-WebSearch.md +0 -58
  1314. package/concepts/uk/Tool-Write.md +0 -39
  1315. package/concepts/uk/Tool-executeCode.md +0 -41
  1316. package/concepts/uk/Tool-getDiagnostics.md +0 -32
  1317. package/concepts/uk/Tools.md +0 -67
  1318. package/concepts/zh/CacheRebuild.md +0 -36
  1319. package/concepts/zh/KVCacheContent.md +0 -49
  1320. package/concepts/zh/Tool-Agent.md +0 -125
  1321. package/concepts/zh/Tool-AskUserQuestion.md +0 -75
  1322. package/concepts/zh/Tool-Bash.md +0 -167
  1323. package/concepts/zh/Tool-Edit.md +0 -46
  1324. package/concepts/zh/Tool-EnterPlanMode.md +0 -128
  1325. package/concepts/zh/Tool-EnterWorktree.md +0 -56
  1326. package/concepts/zh/Tool-ExitPlanMode.md +0 -62
  1327. package/concepts/zh/Tool-Glob.md +0 -39
  1328. package/concepts/zh/Tool-Grep.md +0 -57
  1329. package/concepts/zh/Tool-NotebookEdit.md +0 -33
  1330. package/concepts/zh/Tool-Read.md +0 -56
  1331. package/concepts/zh/Tool-SendMessage.md +0 -41
  1332. package/concepts/zh/Tool-Skill.md +0 -56
  1333. package/concepts/zh/Tool-Task.md +0 -51
  1334. package/concepts/zh/Tool-TaskCreate.md +0 -78
  1335. package/concepts/zh/Tool-TaskGet.md +0 -56
  1336. package/concepts/zh/Tool-TaskList.md +0 -56
  1337. package/concepts/zh/Tool-TaskOutput.md +0 -40
  1338. package/concepts/zh/Tool-TaskStop.md +0 -32
  1339. package/concepts/zh/Tool-TaskUpdate.md +0 -123
  1340. package/concepts/zh/Tool-TeamCreate.md +0 -38
  1341. package/concepts/zh/Tool-TeamDelete.md +0 -30
  1342. package/concepts/zh/Tool-WebFetch.md +0 -55
  1343. package/concepts/zh/Tool-WebSearch.md +0 -58
  1344. package/concepts/zh/Tool-Write.md +0 -39
  1345. package/concepts/zh/Tool-executeCode.md +0 -41
  1346. package/concepts/zh/Tool-getDiagnostics.md +0 -32
  1347. package/concepts/zh-TW/CacheRebuild.md +0 -36
  1348. package/concepts/zh-TW/KVCacheContent.md +0 -49
  1349. package/concepts/zh-TW/Tool-Agent.md +0 -125
  1350. package/concepts/zh-TW/Tool-AskUserQuestion.md +0 -75
  1351. package/concepts/zh-TW/Tool-Bash.md +0 -167
  1352. package/concepts/zh-TW/Tool-Edit.md +0 -46
  1353. package/concepts/zh-TW/Tool-EnterPlanMode.md +0 -128
  1354. package/concepts/zh-TW/Tool-EnterWorktree.md +0 -56
  1355. package/concepts/zh-TW/Tool-ExitPlanMode.md +0 -62
  1356. package/concepts/zh-TW/Tool-Glob.md +0 -39
  1357. package/concepts/zh-TW/Tool-Grep.md +0 -57
  1358. package/concepts/zh-TW/Tool-NotebookEdit.md +0 -33
  1359. package/concepts/zh-TW/Tool-Read.md +0 -56
  1360. package/concepts/zh-TW/Tool-SendMessage.md +0 -41
  1361. package/concepts/zh-TW/Tool-Skill.md +0 -56
  1362. package/concepts/zh-TW/Tool-Task.md +0 -51
  1363. package/concepts/zh-TW/Tool-TaskCreate.md +0 -78
  1364. package/concepts/zh-TW/Tool-TaskGet.md +0 -56
  1365. package/concepts/zh-TW/Tool-TaskList.md +0 -56
  1366. package/concepts/zh-TW/Tool-TaskOutput.md +0 -40
  1367. package/concepts/zh-TW/Tool-TaskStop.md +0 -32
  1368. package/concepts/zh-TW/Tool-TaskUpdate.md +0 -123
  1369. package/concepts/zh-TW/Tool-TeamCreate.md +0 -38
  1370. package/concepts/zh-TW/Tool-TeamDelete.md +0 -30
  1371. package/concepts/zh-TW/Tool-WebFetch.md +0 -55
  1372. package/concepts/zh-TW/Tool-WebSearch.md +0 -58
  1373. package/concepts/zh-TW/Tool-Write.md +0 -39
  1374. package/concepts/zh-TW/Tool-executeCode.md +0 -41
  1375. package/concepts/zh-TW/Tool-getDiagnostics.md +0 -32
  1376. package/concepts/zh-TW/Tools.md +0 -67
  1377. package/dist/assets/App-CF-qZ3B6.js +0 -41
  1378. package/dist/assets/App-fG2r3jFq.css +0 -1
  1379. package/dist/assets/AppHeader-BqUGBbBx.css +0 -41
  1380. package/dist/assets/AppHeader.module-BjoBBbCB.js +0 -1250
  1381. package/dist/assets/Mobile-BnDkLcBv.css +0 -1
  1382. package/dist/assets/Mobile-ByhBkyqb.js +0 -10
  1383. package/dist/assets/_baseUniq-5XIuSb_1.js +0 -1
  1384. package/dist/assets/arc-V3mJhKFJ.js +0 -1
  1385. package/dist/assets/architectureDiagram-Q4EWVU46-22bjxOE1.js +0 -36
  1386. package/dist/assets/blockDiagram-DXYQGD6D-Brshek1N.js +0 -132
  1387. package/dist/assets/c4Diagram-AHTNJAMY-DQHIuxkd.js +0 -10
  1388. package/dist/assets/channel-SmGaOM6g.js +0 -1
  1389. package/dist/assets/chunk-4BX2VUAB-BQE7pifU.js +0 -1
  1390. package/dist/assets/chunk-4TB4RGXK-DcZwv_PV.js +0 -206
  1391. package/dist/assets/chunk-55IACEB6-Gd_3-vV5.js +0 -1
  1392. package/dist/assets/chunk-EDXVE4YY-BbnYdg9M.js +0 -1
  1393. package/dist/assets/chunk-FMBD7UC4-NSh7z90L.js +0 -15
  1394. package/dist/assets/chunk-OYMX7WX6-DdFwjHsc.js +0 -231
  1395. package/dist/assets/chunk-QZHKN3VN-C-1z3DA3.js +0 -1
  1396. package/dist/assets/chunk-YZCP3GAM-w_NiY6dL.js +0 -1
  1397. package/dist/assets/classDiagram-6PBFFD2Q-Bu96zciS.js +0 -1
  1398. package/dist/assets/classDiagram-v2-HSJHXN6E-Bu96zciS.js +0 -1
  1399. package/dist/assets/clone-u2hQVO7u.js +0 -1
  1400. package/dist/assets/cose-bilkent-S5V4N54A-bHlM-ydV.js +0 -1
  1401. package/dist/assets/cytoscape.esm-DxGcaOPV.js +0 -331
  1402. package/dist/assets/dagre-KV5264BT-2cCXOuNw.js +0 -4
  1403. package/dist/assets/defaultLocale-DX6XiGOO.js +0 -1
  1404. package/dist/assets/diagram-5BDNPKRD-C70P_Nd1.js +0 -10
  1405. package/dist/assets/diagram-G4DWMVQ6-C2JvwT8U.js +0 -24
  1406. package/dist/assets/diagram-MMDJMWI5-C9ygMSLV.js +0 -43
  1407. package/dist/assets/diagram-TYMM5635-x-SMPmqb.js +0 -24
  1408. package/dist/assets/erDiagram-SMLLAGMA-BGIbL82W.js +0 -85
  1409. package/dist/assets/flowDiagram-DWJPFMVM-Dg0qwguE.js +0 -162
  1410. package/dist/assets/ganttDiagram-T4ZO3ILL-XX5qCwKD.js +0 -292
  1411. package/dist/assets/gitGraphDiagram-UUTBAWPF-DFil4bpA.js +0 -106
  1412. package/dist/assets/graph-DJ6egHOd.js +0 -1
  1413. package/dist/assets/html2canvas.esm-QH1iLAAe.js +0 -22
  1414. package/dist/assets/index-DCtZ2KSX.css +0 -1
  1415. package/dist/assets/index-DYIYWRaO.js +0 -41
  1416. package/dist/assets/infoDiagram-42DDH7IO-yB7VRrpO.js +0 -2
  1417. package/dist/assets/init-Gi6I4Gst.js +0 -1
  1418. package/dist/assets/ishikawaDiagram-UXIWVN3A-DZ_lPco0.js +0 -70
  1419. package/dist/assets/journeyDiagram-VCZTEJTY-B-FlPR2W.js +0 -139
  1420. package/dist/assets/kanban-definition-6JOO6SKY-mgJwVxKf.js +0 -89
  1421. package/dist/assets/katex-DkKDou_j.js +0 -257
  1422. package/dist/assets/layout-BjzpJ8ZU.js +0 -1
  1423. package/dist/assets/linear-CqOq1rA7.js +0 -1
  1424. package/dist/assets/mermaid.core-CZyQhtml.js +0 -308
  1425. package/dist/assets/min-B_tad8Qz.js +0 -1
  1426. package/dist/assets/mindmap-definition-QFDTVHPH-CgBeHk8K.js +0 -96
  1427. package/dist/assets/ordinal-Cboi1Yqb.js +0 -1
  1428. package/dist/assets/pieDiagram-DEJITSTG-CHENa0KJ.js +0 -30
  1429. package/dist/assets/quadrantDiagram-34T5L4WZ-BUwZwCpc.js +0 -7
  1430. package/dist/assets/requirementDiagram-MS252O5E-H7OaNjNn.js +0 -84
  1431. package/dist/assets/sankeyDiagram-XADWPNL6-6UqaFrBf.js +0 -10
  1432. package/dist/assets/sequenceDiagram-FGHM5R23-DBgpLSsr.js +0 -157
  1433. package/dist/assets/stateDiagram-FHFEXIEX-D_6TWlLl.js +0 -1
  1434. package/dist/assets/stateDiagram-v2-QKLJ7IA2-Cg06jbzN.js +0 -1
  1435. package/dist/assets/timeline-definition-GMOUNBTQ-9_saaHvl.js +0 -120
  1436. package/dist/assets/vennDiagram-DHZGUBPP-DMUS1fiT.js +0 -34
  1437. package/dist/assets/wardley-RL74JXVD-Y-_Nnpu2.js +0 -162
  1438. package/dist/assets/wardleyDiagram-NUSXRM2D-DIh62HY7.js +0 -20
  1439. package/dist/assets/xychartDiagram-5P7HB3ND-B_CLrnpt.js +0 -7
  1440. package/lib/kv-cache-analyzer.js +0 -164
@@ -0,0 +1,1013 @@
1
+ import React, { useState, useEffect, useRef, useCallback, useMemo, lazy, Suspense } from 'react';
2
+ import { DownloadOutlined, CopyOutlined, CameraOutlined } from '@ant-design/icons';
3
+ import { Modal, message } from 'antd';
4
+ import { apiUrl } from '../../utils/apiUrl';
5
+ import { useMarkdownExport } from '../../hooks/useMarkdownExport';
6
+ import { detectMdExtensions } from '../../utils/mdExtensionDetect';
7
+ import { handleStaleChunk } from '../../utils/lazyWithReload';
8
+ import CodeMirror from '@uiw/react-codemirror';
9
+ import { EditorView } from '@codemirror/view';
10
+ import { HighlightStyle, syntaxHighlighting } from '@codemirror/language';
11
+ import { tags as t } from '@lezer/highlight';
12
+ import { showMinimap } from '@replit/codemirror-minimap';
13
+ import { javascript } from '@codemirror/lang-javascript';
14
+ import { python } from '@codemirror/lang-python';
15
+ import { java } from '@codemirror/lang-java';
16
+ import { cpp } from '@codemirror/lang-cpp';
17
+ import { rust } from '@codemirror/lang-rust';
18
+ import { php } from '@codemirror/lang-php';
19
+ import { xml } from '@codemirror/lang-xml';
20
+ import { json } from '@codemirror/lang-json';
21
+ import { yaml } from '@codemirror/lang-yaml';
22
+ import { markdown } from '@codemirror/lang-markdown';
23
+ import { css } from '@codemirror/lang-css';
24
+ import { sql } from '@codemirror/lang-sql';
25
+ import { go } from '@codemirror/lang-go';
26
+ import { keymap } from '@codemirror/view';
27
+ import { t as i18n } from '../../i18n';
28
+ import { renderMarkdown } from '../../utils/markdown';
29
+ import { isMobile } from '../../env';
30
+ import styles from './FileContentView.module.css';
31
+
32
+ // 单独 chunk + 仅在打开 .md 文件时才加载,避免 ~850KB MDXEditor 进首屏。
33
+ // chunk 失效自愈见 utils/lazyWithReload.js;onReload 在 reload 前 200ms 触发,
34
+ // 给 antd toast 一帧时间画出来,让用户知道为啥页面突然刷。
35
+ const MdxEditorPanel = lazy(() =>
36
+ import('./MdxEditorPanel').catch((err) =>
37
+ handleStaleChunk('MdxEditorPanel', err, {
38
+ onReload: () => message.warning(i18n('ui.chunkOutdatedReloading')),
39
+ }),
40
+ ),
41
+ );
42
+
43
+ // Feature flag:默认开;用户可在 devtools 里 localStorage.setItem('mdxEditorEnabled','false') 回退
44
+ function readMdxFeatureFlag() {
45
+ try {
46
+ return typeof localStorage !== 'undefined'
47
+ ? localStorage.getItem('mdxEditorEnabled') !== 'false'
48
+ : true;
49
+ } catch {
50
+ return true;
51
+ }
52
+ }
53
+
54
+ const LANG_MAP = {
55
+ js: javascript,
56
+ jsx: javascript,
57
+ ts: javascript,
58
+ tsx: javascript,
59
+ py: python,
60
+ java: java,
61
+ c: cpp,
62
+ cpp: cpp,
63
+ cc: cpp,
64
+ cxx: cpp,
65
+ h: cpp,
66
+ hpp: cpp,
67
+ go: go,
68
+ rs: rust,
69
+ php: php,
70
+ html: xml,
71
+ htm: xml,
72
+ xml: xml,
73
+ svg: xml,
74
+ json: json,
75
+ yml: yaml,
76
+ yaml: yaml,
77
+ md: markdown,
78
+ markdown: markdown,
79
+ css: css,
80
+ scss: css,
81
+ sass: css,
82
+ less: css,
83
+ sql: sql,
84
+ };
85
+
86
+ function getLanguageExtension(filePath) {
87
+ const ext = filePath.split('.').pop()?.toLowerCase();
88
+ return LANG_MAP[ext] ? [LANG_MAP[ext]()] : [];
89
+ }
90
+
91
+ function formatFileSize(bytes) {
92
+ if (bytes < 1024) return `${bytes} B`;
93
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
94
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
95
+ }
96
+
97
+ // 静态主题 Extension — 使用 CSS 变量以适配 light/dark
98
+ const editorTheme = EditorView.theme({
99
+ '&': {
100
+ backgroundColor: 'var(--bg-base-alt)',
101
+ color: 'var(--text-primary)',
102
+ height: '100%',
103
+ overflow: 'visible',
104
+ },
105
+ // 隐藏 CodeMirror 内置行号栏(由外部行号栏替代),但保留 minimap
106
+ '.cm-gutters:not(.cm-minimap-gutter)': {
107
+ display: 'none',
108
+ },
109
+ // scroller 绝对定位以支持横向滚动
110
+ '& .cm-scroller': {
111
+ position: 'absolute',
112
+ inset: '0',
113
+ fontFamily: 'var(--font-mono)',
114
+ fontSize: '12px',
115
+ lineHeight: '1.5',
116
+ },
117
+ // minimap 样式(位置由插件自行管理)
118
+ '.cm-minimap-gutter': {
119
+ background: 'var(--bg-base-alt)',
120
+ borderLeft: '1px solid var(--border-primary)',
121
+ },
122
+ '.cm-minimap-overlay': {
123
+ border: '1px solid rgba(158, 174, 235, 0.8)',
124
+ background: 'rgba(95, 110, 185, 0.45)',
125
+ borderRadius: '2px',
126
+ transition: 'opacity 0.2s ease',
127
+ },
128
+ '.cm-minimap-gutter:hover .cm-minimap-overlay': {
129
+ border: '1px solid rgba(178, 194, 255, 0.95)',
130
+ background: 'rgba(95, 110, 225, 0.45)',
131
+ },
132
+ '.cm-activeLine': {
133
+ backgroundColor: 'var(--overlay-light-faint)',
134
+ },
135
+ '.cm-cursor': {
136
+ borderLeftColor: 'var(--text-primary)',
137
+ },
138
+ '&.cm-focused .cm-selectionBackground, .cm-selectionBackground': {
139
+ backgroundColor: 'var(--color-selection-bg)',
140
+ },
141
+ // Search / Replace 面板
142
+ '.cm-panels': {
143
+ backgroundColor: 'var(--bg-container)',
144
+ borderBottom: '1px solid var(--border-secondary)',
145
+ },
146
+ '.cm-panel.cm-search': {
147
+ padding: '8px 12px 10px',
148
+ fontSize: '13px',
149
+ color: 'var(--text-primary)',
150
+ backgroundColor: 'var(--bg-container)',
151
+ },
152
+ '.cm-panel.cm-search input[type=text], .cm-panel.cm-search input[main]': {
153
+ height: '26px',
154
+ padding: '2px 11px',
155
+ fontSize: '100%',
156
+ color: 'var(--text-primary)',
157
+ backgroundColor: 'var(--bg-elevated)',
158
+ border: '1px solid var(--border-light)',
159
+ borderRadius: '6px',
160
+ outline: 'none',
161
+ transition: 'border-color 0.2s',
162
+ verticalAlign: 'middle',
163
+ boxSizing: 'border-box',
164
+ },
165
+ '.cm-panel.cm-search input[type=text]:focus': {
166
+ borderColor: 'var(--color-primary)',
167
+ boxShadow: '0 0 0 2px var(--color-primary-bg-light)',
168
+ },
169
+ // Overrides for CodeMirror's base-theme .cm-textfield/.cm-button. The base
170
+ // theme's light/dark rules compile to the same (0,2,0) specificity as plain
171
+ // theme selectors, so ties resolve by fragile stylesheet mount order. The
172
+ // `&.cm-editor ` prefix compiles to `.ͼx.cm-editor …` (0,3,0), beating every
173
+ // base rule deterministically — no `!important` needed.
174
+ '&.cm-editor .cm-textfield': {
175
+ height: '26px',
176
+ padding: '2px 11px',
177
+ fontSize: '100%',
178
+ color: 'var(--text-primary)',
179
+ backgroundColor: 'var(--bg-elevated)',
180
+ border: '1px solid var(--border-light)',
181
+ borderRadius: '6px',
182
+ outline: 'none',
183
+ verticalAlign: 'middle',
184
+ boxSizing: 'border-box',
185
+ },
186
+ '&.cm-editor .cm-textfield:focus': {
187
+ borderColor: 'var(--color-primary)',
188
+ boxShadow: '0 0 0 2px var(--color-primary-bg-light)',
189
+ },
190
+ '.cm-panel.cm-search input[type=checkbox]': {
191
+ accentColor: 'var(--color-primary)',
192
+ width: '14px',
193
+ height: '14px',
194
+ verticalAlign: 'middle',
195
+ marginRight: '4px',
196
+ cursor: 'pointer',
197
+ },
198
+ // (0,3,1)/(0,4,1) selectors — already outrank every base-theme .cm-button
199
+ // rule on specificity alone, no bump needed.
200
+ '.cm-panel.cm-search button': {
201
+ height: '26px',
202
+ padding: '2px 12px',
203
+ fontSize: '100%',
204
+ color: 'var(--text-primary)',
205
+ backgroundColor: 'transparent',
206
+ backgroundImage: 'none',
207
+ border: '1px solid var(--border-light)',
208
+ borderRadius: '6px',
209
+ cursor: 'pointer',
210
+ transition: 'background 0.2s, border-color 0.2s, color 0.2s',
211
+ verticalAlign: 'middle',
212
+ lineHeight: '1',
213
+ },
214
+ '.cm-panel.cm-search button:hover': {
215
+ color: 'var(--text-white)',
216
+ backgroundColor: 'var(--overlay-light-faint)',
217
+ backgroundImage: 'none',
218
+ borderColor: 'var(--text-disabled)',
219
+ },
220
+ '.cm-panel.cm-search button:active': {
221
+ backgroundColor: 'var(--overlay-light-medium)',
222
+ backgroundImage: 'none',
223
+ },
224
+ // Same specificity bump for the base theme's .cm-button gradient.
225
+ '&.cm-editor .cm-button': {
226
+ height: '26px',
227
+ padding: '2px 12px',
228
+ fontSize: '100%',
229
+ color: 'var(--text-primary)',
230
+ backgroundColor: 'transparent',
231
+ backgroundImage: 'none',
232
+ border: '1px solid var(--border-light)',
233
+ borderRadius: '6px',
234
+ cursor: 'pointer',
235
+ lineHeight: '1',
236
+ },
237
+ '&.cm-editor .cm-button:hover': {
238
+ color: 'var(--text-white)',
239
+ backgroundColor: 'var(--overlay-light-faint)',
240
+ backgroundImage: 'none',
241
+ borderColor: 'var(--text-disabled)',
242
+ },
243
+ // The base theme nests `&:active` gradients under its light/dark .cm-button
244
+ // rules at (0,3,0) — this (0,4,0) rule must exist or the click-flash gradient
245
+ // would win once `!important` is gone.
246
+ '&.cm-editor .cm-button:active': {
247
+ backgroundImage: 'none',
248
+ backgroundColor: 'var(--overlay-light-medium)',
249
+ },
250
+ '.cm-panel.cm-search button[name=close]': {
251
+ position: 'absolute',
252
+ top: '8px',
253
+ right: '8px',
254
+ width: '28px',
255
+ height: '28px',
256
+ padding: '0',
257
+ display: 'flex',
258
+ alignItems: 'center',
259
+ justifyContent: 'center',
260
+ fontSize: '16px',
261
+ color: 'var(--text-muted)',
262
+ backgroundColor: 'transparent',
263
+ border: 'none',
264
+ borderRadius: '6px',
265
+ },
266
+ '.cm-panel.cm-search button[name=close]:hover': {
267
+ color: 'var(--text-primary)',
268
+ backgroundColor: 'var(--bg-surface)',
269
+ },
270
+ '.cm-panel.cm-search label': {
271
+ fontSize: '13px',
272
+ color: 'var(--text-light)',
273
+ verticalAlign: 'middle',
274
+ cursor: 'pointer',
275
+ },
276
+ '.cm-panel.cm-search label:hover': {
277
+ color: 'var(--text-primary)',
278
+ },
279
+ '.cm-panel.cm-search [name=close]': {
280
+ fontSize: '16px',
281
+ },
282
+ // 搜索高亮匹配色
283
+ '.cm-searchMatch': {
284
+ backgroundColor: 'rgba(255, 213, 79, 0.25)',
285
+ outline: '1px solid rgba(255, 213, 79, 0.4)',
286
+ },
287
+ '.cm-searchMatch-selected': {
288
+ backgroundColor: 'rgba(255, 152, 0, 0.35)',
289
+ },
290
+ }, { dark: typeof document !== 'undefined' ? document.documentElement.getAttribute('data-theme') !== 'light' : true });
291
+
292
+ // 语法高亮配色 — 使用 CSS 变量
293
+ const highlightStyle = HighlightStyle.define([
294
+ { tag: t.keyword, color: 'var(--code-keyword, #ff7b72)' },
295
+ { tag: [t.name, t.deleted, t.character, t.propertyName, t.macroName], color: 'var(--code-name, #ffa657)' },
296
+ { tag: [t.function(t.variableName), t.labelName], color: 'var(--code-function, #d2a8ff)' },
297
+ { tag: [t.color, t.constant(t.name), t.standard(t.name)], color: 'var(--code-constant, #79c0ff)' },
298
+ { tag: [t.definition(t.name), t.separator], color: 'var(--text-primary, #e0e0e0)' },
299
+ { tag: [t.typeName, t.className, t.number, t.changed, t.annotation, t.modifier, t.self, t.namespace], color: 'var(--code-name, #ffa657)' },
300
+ { tag: [t.operator, t.operatorKeyword, t.url, t.escape, t.regexp, t.link, t.special(t.string)], color: 'var(--code-constant, #79c0ff)' },
301
+ { tag: [t.meta, t.comment], color: 'var(--code-comment, #8b949e)', fontStyle: 'italic' },
302
+ { tag: t.strong, fontWeight: 'bold' },
303
+ { tag: t.emphasis, fontStyle: 'italic' },
304
+ { tag: t.strikethrough, textDecoration: 'line-through' },
305
+ { tag: t.link, color: 'var(--code-constant, #79c0ff)', textDecoration: 'underline' },
306
+ { tag: t.heading, fontWeight: 'bold', color: 'var(--code-name, #ffa657)' },
307
+ { tag: [t.atom, t.bool, t.special(t.variableName)], color: 'var(--code-constant, #79c0ff)' },
308
+ { tag: [t.processingInstruction, t.string, t.inserted], color: 'var(--code-string, #a5d6ff)' },
309
+ { tag: t.invalid, color: 'var(--code-error, #f85149)' },
310
+ ]);
311
+
312
+ const syntaxTheme = syntaxHighlighting(highlightStyle);
313
+
314
+ export default function FileContentView({
315
+ filePath,
316
+ onClose,
317
+ editorSession,
318
+ scrollToLine,
319
+ onUpdateScroll,
320
+ getRestoreScrollSnapshot,
321
+ onConsumeScrollSnapshot,
322
+ }) {
323
+ const [content, setContent] = useState(null);
324
+ const [currentContent, setCurrentContent] = useState(null);
325
+ const [error, setError] = useState(null);
326
+ const [fileSize, setFileSize] = useState(0);
327
+ const [loading, setLoading] = useState(true);
328
+ const [saveStatus, setSaveStatus] = useState(null);
329
+ const [lineCount, setLineCount] = useState(0);
330
+ const [closing, setClosing] = useState(false);
331
+ const isMdFile = /\.md$/i.test(filePath);
332
+ const [viewMode, setViewMode] = useState(isMdFile ? 'markdown' : 'text');
333
+ const [downloadMenuOpen, setDownloadMenuOpen] = useState(false);
334
+ // MDX 编辑相关 state
335
+ const [mdxFeatureEnabled] = useState(readMdxFeatureFlag);
336
+ const [extensionDetected, setExtensionDetected] = useState(false);
337
+ // MDXEditor 运行时解析失败(例如文件含 <system-reminder> 这类自定义 JSX 标签,
338
+ // mdExtensionDetect 的正则白名单覆盖不到)时置 true,触发降级到旧 marked 渲染。
339
+ // 每次切文件都会在 loadFileContent 里重置——单文件失败不污染其他文件。
340
+ const [mdxParseErrored, setMdxParseErrored] = useState(false);
341
+ const containerRef = useRef(null);
342
+ const mounted = useRef(true);
343
+ const saveTimeoutRef = useRef(null);
344
+ const saveRef = useRef(null);
345
+ const lineNumRef = useRef(null);
346
+ const editorViewRef = useRef(null);
347
+ const markdownPreviewRef = useRef(null);
348
+ const downloadWrapRef = useRef(null);
349
+ const editorWrapperRef = useRef(null);
350
+ const mdxRef = useRef(null);
351
+ // 解析失败 1-frame flash 守卫:MDXEditor 在同一 React commit 里既触发 onError,
352
+ // 又把红色 "Parsing of the following markdown structure failed" 横幅写进 DOM。
353
+ // setState 走下一帧才生效,浏览器可能在中间 paint 一次,用户看到一闪而过的红
354
+ // 横幅。在 onError 同步把 wrapper.style.display='none',让中间 paint 时 wrapper
355
+ // 已经隐藏;下一帧 mdxParseErrored=true 让 wrapper 直接卸载,inline style 失效。
356
+ const mdxWrapperRef = useRef(null);
357
+ // 总是反映最新 filePath(不通过 useCallback closure),doSave 完成回调用它做
358
+ // "保存中切文件 race" 的兜底比对:保存时 snapshot 当前 filePath,保存完成后
359
+ // 若 filePathRef.current 已变(用户切到别的文件),不再 setContent,避免把
360
+ // 旧文件的内容写到新文件的 state。
361
+ const filePathRef = useRef(filePath);
362
+ filePathRef.current = filePath;
363
+
364
+ const isDirty = content !== null && currentContent !== null && content !== currentContent;
365
+
366
+ // 「使用 MDX 编辑」= flag 开 + 非移动端 + 无扩展语法 + 未解析失败
367
+ // 移动端直接降级到旧 marked 渲染:屏幕小 + 触屏体验差 + bundle 加载成本高,
368
+ // GUI 编辑能力性价比不足,统一走 fallback 预览路径。
369
+ const useMdxEditor = isMdFile && mdxFeatureEnabled && !isMobile && !extensionDetected && !mdxParseErrored;
370
+ // 「展示旧 marked 预览」= viewMode='markdown' && !useMdx
371
+ const useLegacyPreview = isMdFile && viewMode === 'markdown' && !useMdxEditor;
372
+
373
+ // 当前活跃 viewer 类型。snapshot 严格按 viewerType 匹配恢复,避免跨视图位置乱跳。
374
+ // 注意:useMdxEditor 已含 viewMode 隐式条件(mdx 仅在 markdown 视图下激活)。
375
+ const viewerType = useMdxEditor ? 'mdx' : (useLegacyPreview ? 'markdown' : 'code');
376
+
377
+ // ── 文件详情 scroll 位置记忆(write/edit 触发 remount 时跨实例恢复)─────────────
378
+ // 用 ref 镜像 filePath / 回调,避免 throttle 闭包读到陈旧值(filePath 跨文件时 setState
379
+ // 异步,scroll handler 里直接读 state 可能拿到旧路径写到新文件的 snapshot)。
380
+ const scrollMemoFilePathRef = useRef(filePath);
381
+ scrollMemoFilePathRef.current = filePath;
382
+ const scrollMemoUpdateRef = useRef(onUpdateScroll);
383
+ scrollMemoUpdateRef.current = onUpdateScroll;
384
+
385
+ // trailing-edge throttle:onScroll 高频触发,100ms 内只上报一次(取最新值)。
386
+ // unmount cleanup flush 一次,保证 fileVersion bump 前最后那一帧的位置不丢。
387
+ const scrollSnapPendingRef = useRef(null);
388
+ const scrollSnapTimerRef = useRef(null);
389
+ const reportScrollSnap = useCallback((snap) => {
390
+ scrollSnapPendingRef.current = snap;
391
+ if (scrollSnapTimerRef.current) return;
392
+ scrollSnapTimerRef.current = setTimeout(() => {
393
+ scrollSnapTimerRef.current = null;
394
+ const pending = scrollSnapPendingRef.current;
395
+ if (pending) scrollMemoUpdateRef.current?.(pending);
396
+ }, 100);
397
+ }, []);
398
+ useEffect(() => {
399
+ return () => {
400
+ // unmount 时 flush 待发的 snapshot —— remount 实例靠它恢复。
401
+ if (scrollSnapTimerRef.current) {
402
+ clearTimeout(scrollSnapTimerRef.current);
403
+ scrollSnapTimerRef.current = null;
404
+ }
405
+ const pending = scrollSnapPendingRef.current;
406
+ if (pending) scrollMemoUpdateRef.current?.(pending);
407
+ };
408
+ }, []);
409
+
410
+ // 取当前文本:MDX 模式优先从 editor ref 读 markdown(保持 GUI 编辑里的最新值),
411
+ // 否则走原 content/currentContent。
412
+ // 空串兜底:跟 doSave 一致——MDX mount 早期可能返回 '',若原文件非空则用
413
+ // currentContent/content 回退,避免 Copy 按钮在快速点击时复制到空字符串。
414
+ const getCurrentText = useCallback(() => {
415
+ if (useMdxEditor && mdxRef.current?.getMarkdown) {
416
+ try {
417
+ const fromMdx = mdxRef.current.getMarkdown() ?? '';
418
+ if (fromMdx.length > 0 || (content?.length ?? 0) === 0) {
419
+ return fromMdx;
420
+ }
421
+ } catch {
422
+ // fall through to legacy path
423
+ }
424
+ }
425
+ return (isDirty ? currentContent : content) ?? '';
426
+ }, [useMdxEditor, isDirty, currentContent, content]);
427
+
428
+ const { handleCopy, handleSaveAs, handleSaveAsImage } = useMarkdownExport({
429
+ getText: getCurrentText,
430
+ getSnapshotTarget: useCallback(() => markdownPreviewRef.current, []),
431
+ onDone: useCallback(() => setDownloadMenuOpen(false), []),
432
+ });
433
+
434
+ useEffect(() => {
435
+ if (!downloadMenuOpen) return;
436
+ const onDocClick = (e) => {
437
+ if (downloadWrapRef.current && !downloadWrapRef.current.contains(e.target)) {
438
+ setDownloadMenuOpen(false);
439
+ }
440
+ };
441
+ const onKey = (e) => { if (e.key === 'Escape') setDownloadMenuOpen(false); };
442
+ document.addEventListener('mousedown', onDocClick);
443
+ document.addEventListener('keydown', onKey);
444
+ return () => {
445
+ document.removeEventListener('mousedown', onDocClick);
446
+ document.removeEventListener('keydown', onKey);
447
+ };
448
+ }, [downloadMenuOpen]);
449
+
450
+ const handleClose = useCallback(() => {
451
+ if (closing) return;
452
+ setClosing(true);
453
+ const el = containerRef.current;
454
+ if (el) {
455
+ el.addEventListener('animationend', () => onClose(), { once: true });
456
+ } else {
457
+ onClose();
458
+ }
459
+ }, [closing, onClose]);
460
+
461
+ // MDX onChange:把 markdown 同步到 currentContent,触发 isDirty + 行号刷新
462
+ const handleMdxChange = useCallback((md) => {
463
+ if (typeof md !== 'string') return;
464
+ setCurrentContent(md);
465
+ setLineCount(md.split('\n').length);
466
+ }, []);
467
+
468
+ // MDXEditor 解析失败:标志置位 + 一次性 toast。useMdxEditor 条件在下一次渲染就把
469
+ // <MdxEditorPanel> 卸载,渲染回旧 marked 预览路径——用户看到的不是红色错误横幅,
470
+ // 而是和 extensionDetected 命中时一致的"自动降级"体验。
471
+ const handleMdxParseError = useCallback(() => {
472
+ // 同步隐藏 wrapper(详见 mdxWrapperRef 注释)—— 必须在 setState 之前,否则浏
473
+ // 览器可能在 React 下一帧 commit 之前 paint 一次红横幅。
474
+ if (mdxWrapperRef.current) {
475
+ mdxWrapperRef.current.style.display = 'none';
476
+ }
477
+ setMdxParseErrored(true);
478
+ try {
479
+ message.open({ key: 'mdxParseFallback', type: 'info', content: i18n('ui.mdEditor.parseFallbackToast') });
480
+ } catch {
481
+ // 没有 antd App context 也无所谓——降级本身已经发生
482
+ }
483
+ }, []);
484
+
485
+ // viewMode 切换前的 dirty 守护:弹 confirm 让用户保存或丢弃
486
+ const requestViewModeSwitch = useCallback((next) => {
487
+ if (next === viewMode) return;
488
+ if (!isDirty) { setViewMode(next); return; }
489
+ Modal.confirm({
490
+ title: i18n('ui.mdEditor.unsavedConfirmTitle'),
491
+ content: i18n('ui.mdEditor.unsavedConfirmContent'),
492
+ okText: i18n('ui.mdEditor.unsavedConfirmDiscard'),
493
+ cancelText: i18n('ui.mdEditor.unsavedConfirmKeep'),
494
+ okButtonProps: { danger: true },
495
+ onOk: () => {
496
+ // 丢弃:把 currentContent 回滚到 content(消除 isDirty)后再切
497
+ setCurrentContent(content);
498
+ setLineCount((content ?? '').split('\n').length);
499
+ setViewMode(next);
500
+ },
501
+ });
502
+ }, [viewMode, isDirty, content]);
503
+
504
+ const doSave = useCallback(async () => {
505
+ if (!isDirty) return;
506
+ // MDX 模式下优先从 editor ref 取最新 markdown(onChange 是 debounced,currentContent 可能滞后)
507
+ let saveContent = currentContent;
508
+ if (useMdxEditor && mdxRef.current?.getMarkdown) {
509
+ try {
510
+ const fromMdx = mdxRef.current.getMarkdown();
511
+ // 防御:MDX 在 mount 早期 / 状态异常时 getMarkdown() 可能返回 '',
512
+ // 若原文件非空则不要让空串覆盖(用 currentContent 兜底)。
513
+ if (typeof fromMdx === 'string' && (fromMdx.length > 0 || (content?.length ?? 0) === 0)) {
514
+ saveContent = fromMdx;
515
+ }
516
+ } catch {
517
+ // fall through to currentContent
518
+ }
519
+ }
520
+ // Snapshot 当前 filePath,用于保存完成后比对是否切了文件
521
+ const startFilePath = filePathRef.current;
522
+ setSaveStatus('saving');
523
+ try {
524
+ const res = await fetch(apiUrl('/api/file-content'), {
525
+ method: 'POST',
526
+ headers: { 'Content-Type': 'application/json' },
527
+ body: JSON.stringify({ path: filePath, content: saveContent, ...(editorSession ? { editorSession: true } : {}) }),
528
+ });
529
+ if (!res.ok) {
530
+ const err = await res.json().catch(() => ({}));
531
+ throw new Error(err.error || `HTTP ${res.status}`);
532
+ }
533
+ const data = await res.json();
534
+ // 切文件后落空保护:若保存期间用户切到别的文件,filePathRef 已变,
535
+ // 此时绝不能 setContent (会把旧文件的内容写到新文件的 state)
536
+ if (mounted.current && filePathRef.current === startFilePath) {
537
+ setContent(saveContent);
538
+ setCurrentContent(saveContent);
539
+ setFileSize(data.size);
540
+ setSaveStatus('saved');
541
+ if (saveTimeoutRef.current) clearTimeout(saveTimeoutRef.current);
542
+ saveTimeoutRef.current = setTimeout(() => {
543
+ if (mounted.current) setSaveStatus(null);
544
+ }, 2000);
545
+ }
546
+ } catch (err) {
547
+ if (mounted.current) {
548
+ setSaveStatus('failed');
549
+ if (saveTimeoutRef.current) clearTimeout(saveTimeoutRef.current);
550
+ saveTimeoutRef.current = setTimeout(() => {
551
+ if (mounted.current) setSaveStatus(null);
552
+ }, 3000);
553
+ }
554
+ }
555
+ }, [isDirty, filePath, currentContent, useMdxEditor, editorSession]);
556
+
557
+ saveRef.current = doSave;
558
+
559
+ // MdxEditor 模式下补 Ctrl+S/Cmd+S 快捷键。
560
+ // CodeMirror 模式有自己的 keymap(L636-639 走 saveRef),不走这里;
561
+ // useMdxEditor 守卫避免双触发。MdxEditor contenteditable 不拦 Ctrl+S(已 grep 确认 lib 无内置 handler),
562
+ // document bubble 阶段监听足够;preventDefault 阻止浏览器原生「另存为」对话框。
563
+ useEffect(() => {
564
+ if (!useMdxEditor) return;
565
+ const onKeyDown = (e) => {
566
+ if ((e.metaKey || e.ctrlKey) && !e.shiftKey && !e.altKey && (e.key === 's' || e.key === 'S')) {
567
+ e.preventDefault();
568
+ saveRef.current?.(); // 内部已有 isDirty 守卫,不脏不发请求
569
+ }
570
+ };
571
+ document.addEventListener('keydown', onKeyDown);
572
+ return () => document.removeEventListener('keydown', onKeyDown);
573
+ }, [useMdxEditor]);
574
+
575
+ // 纵向滚动同步:CodeMirror 滚动时同步行号栏
576
+ const scrollSyncExtension = useMemo(() =>
577
+ EditorView.updateListener.of((update) => {
578
+ if (update.geometryChanged || update.viewportChanged) {
579
+ const scroller = update.view.scrollDOM;
580
+ if (lineNumRef.current) {
581
+ lineNumRef.current.scrollTop = scroller.scrollTop;
582
+ }
583
+ }
584
+ }),
585
+ []);
586
+
587
+ // 手动绑定 scroll 事件以获得实时同步
588
+ const onEditorCreate = useCallback((view) => {
589
+ editorViewRef.current = view;
590
+ const scroller = view.scrollDOM;
591
+ const syncScroll = () => {
592
+ if (lineNumRef.current) {
593
+ lineNumRef.current.scrollTop = scroller.scrollTop;
594
+ }
595
+ // 同步上报视口顶部行号给 ChatView。elementAtHeight 兼容 soft-wrap / 异高 block,
596
+ // 比 scrollTop/lineHeight 精准;view destroy 期间 try/catch 兜底。
597
+ try {
598
+ const block = view.elementAtHeight(scroller.scrollTop);
599
+ const lineNum = view.state.doc.lineAt(block.from).number;
600
+ reportScrollSnap({
601
+ path: scrollMemoFilePathRef.current,
602
+ viewerType: 'code',
603
+ line: lineNum,
604
+ });
605
+ } catch {
606
+ // ignored
607
+ }
608
+ };
609
+ scroller.addEventListener('scroll', syncScroll);
610
+ // 初始同步
611
+ syncScroll();
612
+ }, [reportScrollSnap]);
613
+
614
+ const loadFileContent = useCallback(() => {
615
+ mounted.current = true;
616
+ setContent(null);
617
+ setCurrentContent(null);
618
+ setError(null);
619
+ setLoading(true);
620
+ setLineCount(0);
621
+ // 切换文件时重置 MDX 相关 state,避免上一个文件的扩展检测/解析错误跨文件污染
622
+ setExtensionDetected(false);
623
+ setMdxParseErrored(false);
624
+
625
+ fetch(apiUrl(`/api/file-content?path=${encodeURIComponent(filePath)}${editorSession ? '&editorSession=true' : ''}`))
626
+ .then((r) => {
627
+ if (!r.ok) {
628
+ return r
629
+ .json()
630
+ .then((err) => {
631
+ // 服务端 file-access-policy 现在统一返回 {error, reason, allowedRoots?}
632
+ // reason 取值见 server/lib/file-access-policy.js:isReadAllowed,前端解析后展示具体原因
633
+ const reasonMsg = err.reason
634
+ ? (i18n(`ui.fileLoadError.reason.${err.reason}`) || err.error)
635
+ : (err.error || 'Failed to load');
636
+ const e = new Error(reasonMsg);
637
+ if (err.allowedRoots) e.allowedRoots = err.allowedRoots;
638
+ throw e;
639
+ })
640
+ .catch((parsedErr) => {
641
+ if (parsedErr && parsedErr.message) throw parsedErr;
642
+ throw new Error(`HTTP ${r.status}`);
643
+ });
644
+ }
645
+ return r.json();
646
+ })
647
+ .then((data) => {
648
+ if (mounted.current) {
649
+ setContent(data.content);
650
+ setCurrentContent(data.content);
651
+ setFileSize(data.size);
652
+ setLineCount(data.content.split('\n').length);
653
+ setLoading(false);
654
+ // 仅对 .md 且 flag 开启时做扩展检测,命中则提示 + 走旧 marked 渲染(自动 fallback)
655
+ if (isMdFile && mdxFeatureEnabled) {
656
+ const det = detectMdExtensions(data.content);
657
+ if (det.anyExtension) {
658
+ setExtensionDetected(true);
659
+ try {
660
+ // 用固定 key 去重,连续打开多个含扩展的 .md 不会叠 toast
661
+ message.open({ key: 'mdxExtFallback', type: 'info', content: i18n('ui.mdEditor.extensionFallbackToast') });
662
+ } catch {
663
+ // 没 antd App 上下文也无所谓
664
+ }
665
+ }
666
+ }
667
+ }
668
+ })
669
+ .catch((err) => {
670
+ if (mounted.current) {
671
+ setError(`${i18n('ui.fileLoadError')}: ${err.message}`);
672
+ setLoading(false);
673
+ }
674
+ });
675
+ }, [filePath, editorSession, isMdFile, mdxFeatureEnabled]);
676
+
677
+ useEffect(() => {
678
+ loadFileContent();
679
+ return () => {
680
+ mounted.current = false;
681
+ if (saveTimeoutRef.current) clearTimeout(saveTimeoutRef.current);
682
+ };
683
+ }, [loadFileContent]);
684
+
685
+ // 滚动到指定行
686
+ useEffect(() => {
687
+ if (scrollToLine && editorViewRef.current && !loading && content !== null) {
688
+ const view = editorViewRef.current;
689
+ const lineNum = Math.min(scrollToLine, view.state.doc.lines);
690
+ const line = view.state.doc.line(lineNum);
691
+ view.dispatch({
692
+ effects: EditorView.scrollIntoView(line.from, { y: 'start' }),
693
+ });
694
+ }
695
+ }, [scrollToLine, loading, content]);
696
+
697
+ // 旧 marked 预览的 scroll 监听:记百分比(mermaid / 高亮异步渲染会撑高文档,
698
+ // 用百分比比像素鲁棒)。content 变化 → markdown 重渲染 → 重新挂监听。
699
+ useEffect(() => {
700
+ if (!useLegacyPreview || loading || content === null) return;
701
+ const el = markdownPreviewRef.current;
702
+ if (!el) return;
703
+ const handler = () => {
704
+ if (el.scrollHeight <= 0) return;
705
+ reportScrollSnap({
706
+ path: scrollMemoFilePathRef.current,
707
+ viewerType: 'markdown',
708
+ percent: el.scrollTop / el.scrollHeight,
709
+ });
710
+ };
711
+ el.addEventListener('scroll', handler);
712
+ return () => el.removeEventListener('scroll', handler);
713
+ }, [useLegacyPreview, loading, content, reportScrollSnap]);
714
+
715
+ // MDX 编辑器 scroll 监听:MDXEditor 是 lazy chunk + 异步初始化,contenteditable
716
+ // 未必立即在 DOM。轮询 50ms × 20 次(总 1s)找到 getScrollEl 暴露的容器再挂监听。
717
+ useEffect(() => {
718
+ if (!useMdxEditor || loading || content === null) return;
719
+ let attachedEl = null;
720
+ let cancelled = false;
721
+ let retries = 0;
722
+ let retryTimer = null;
723
+ const handler = () => {
724
+ if (!attachedEl || attachedEl.scrollHeight <= 0) return;
725
+ reportScrollSnap({
726
+ path: scrollMemoFilePathRef.current,
727
+ viewerType: 'mdx',
728
+ percent: attachedEl.scrollTop / attachedEl.scrollHeight,
729
+ });
730
+ };
731
+ const tryAttach = () => {
732
+ if (cancelled) return;
733
+ const el = mdxRef.current?.getScrollEl?.();
734
+ if (el) {
735
+ attachedEl = el;
736
+ attachedEl.addEventListener('scroll', handler);
737
+ } else if (retries++ < 20) {
738
+ retryTimer = setTimeout(tryAttach, 50);
739
+ }
740
+ };
741
+ tryAttach();
742
+ return () => {
743
+ cancelled = true;
744
+ if (retryTimer) clearTimeout(retryTimer);
745
+ if (attachedEl) attachedEl.removeEventListener('scroll', handler);
746
+ };
747
+ }, [useMdxEditor, loading, content, reportScrollSnap]);
748
+
749
+ // 恢复 scroll 位置:mount 完成 + 内容 ready + 无 scrollToLine(git diff 跳行优先)。
750
+ // viewerType 严格匹配 + path 匹配,避免跨视图 / 跨文件错位。rAF 等首帧 layout,
751
+ // CodeMirror / MDX 可能需要多轮重试拿到非空 view / 非空 scrollHeight。
752
+ useEffect(() => {
753
+ if (loading || content === null) return;
754
+ if (scrollToLine) return;
755
+ const snap = getRestoreScrollSnapshot?.();
756
+ if (!snap || snap.path !== filePath || snap.viewerType !== viewerType) return;
757
+ let cancelled = false;
758
+ let retries = 0;
759
+ const attempt = () => {
760
+ if (cancelled) return;
761
+ if (snap.viewerType === 'code') {
762
+ const view = editorViewRef.current;
763
+ // view.scrollDOM.clientHeight <= 0:CodeMirror mount 早期 measure 还没跑完,
764
+ // 此时 dispatch scrollIntoView 会被零高度容器吞掉,consume 完就没第二次机会;
765
+ // 走 RAF 重试直到 measure 完成。
766
+ if (!view || !view.scrollDOM || view.scrollDOM.clientHeight <= 0) {
767
+ if (retries++ < 10) requestAnimationFrame(attempt);
768
+ return;
769
+ }
770
+ const lineNum = Math.max(1, Math.min(snap.line || 1, view.state.doc.lines));
771
+ const line = view.state.doc.line(lineNum);
772
+ // try/catch 兜底 view 在 RAF 间隙被 destroy 的微窗口(cancelled flag 已防大部分)
773
+ try {
774
+ view.dispatch({ effects: EditorView.scrollIntoView(line.from, { y: 'start' }) });
775
+ } catch {
776
+ // view destroyed mid-RAF — 静默忽略
777
+ }
778
+ } else if (snap.viewerType === 'markdown') {
779
+ const el = markdownPreviewRef.current;
780
+ if (!el || el.scrollHeight <= 0) {
781
+ if (retries++ < 10) requestAnimationFrame(attempt);
782
+ return;
783
+ }
784
+ el.scrollTop = el.scrollHeight * (snap.percent || 0);
785
+ } else if (snap.viewerType === 'mdx') {
786
+ const el = mdxRef.current?.getScrollEl?.();
787
+ if (!el || el.scrollHeight <= 0) {
788
+ if (retries++ < 30) { setTimeout(attempt, 50); return; }
789
+ return;
790
+ }
791
+ el.scrollTop = el.scrollHeight * (snap.percent || 0);
792
+ }
793
+ onConsumeScrollSnapshot?.();
794
+ };
795
+ requestAnimationFrame(attempt);
796
+ return () => { cancelled = true; };
797
+ }, [loading, content, viewerType, filePath, scrollToLine, getRestoreScrollSnapshot, onConsumeScrollSnapshot]);
798
+
799
+ // viewerType 切换(用户在打开期间切 markdown ↔ text)→ 旧 viewerType 的 snapshot
800
+ // 永远 match 不上新 viewerType,但留着会在切回老 viewerType 时拿到陈旧位置;主动清。
801
+ const prevViewerTypeRef = useRef(viewerType);
802
+ useEffect(() => {
803
+ if (prevViewerTypeRef.current !== viewerType) {
804
+ prevViewerTypeRef.current = viewerType;
805
+ onConsumeScrollSnapshot?.();
806
+ }
807
+ }, [viewerType, onConsumeScrollSnapshot]);
808
+
809
+ const extensions = useMemo(() => {
810
+ const exts = [
811
+ ...getLanguageExtension(filePath),
812
+ syntaxTheme,
813
+ scrollSyncExtension,
814
+ keymap.of([{
815
+ key: 'Mod-s',
816
+ run: () => { saveRef.current?.(); return true; },
817
+ }]),
818
+ ];
819
+
820
+ // 添加 minimap(优化配置)
821
+ exts.push(
822
+ showMinimap.compute(['doc'], (state) => {
823
+ return {
824
+ create: (view) => {
825
+ const dom = document.createElement('div');
826
+ return { dom };
827
+ },
828
+ displayText: 'characters', // 使用字符显示而非色块,更清晰
829
+ showOverlay: 'mouse-over', // 仅在鼠标悬停时显示 overlay,减少视觉干扰
830
+ };
831
+ })
832
+ );
833
+
834
+ return exts;
835
+ }, [filePath, scrollSyncExtension]);
836
+
837
+ // 跟踪文档行数变化
838
+ const handleChange = useCallback((value) => {
839
+ setCurrentContent(value);
840
+ setLineCount(value.split('\n').length);
841
+ }, []);
842
+
843
+ const saveStatusText = saveStatus === 'saving'
844
+ ? i18n('ui.saving')
845
+ : saveStatus === 'saved'
846
+ ? i18n('ui.saved')
847
+ : saveStatus === 'failed'
848
+ ? i18n('ui.saveFailed')
849
+ : null;
850
+
851
+ // 生成行号
852
+ const lineNumbers = useMemo(() => {
853
+ if (lineCount <= 0) return null;
854
+ const lines = [];
855
+ for (let i = 1; i <= lineCount; i++) {
856
+ lines.push(<div key={i} className={styles.lineNumRow}>{i}</div>);
857
+ }
858
+ return lines;
859
+ }, [lineCount]);
860
+
861
+ return (
862
+ <div ref={containerRef} className={`${styles.fileContentView}${closing ? ` ${styles.closing}` : ''}`}>
863
+ {editorSession && (
864
+ <div className={styles.editorBanner} onClick={handleClose} role="button" tabIndex={0} onKeyDown={e => { if (e.key === 'Enter' || e.key === ' ') handleClose(); }}>
865
+ {i18n('ui.editorSession.banner')}
866
+ </div>
867
+ )}
868
+ <div className={styles.header}>
869
+ <div className={styles.headerLeft}>
870
+ <button className={styles.backBtn} onClick={handleClose} title={i18n('ui.backToChat')}>
871
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
872
+ <polyline points="15 18 9 12 15 6"/>
873
+ </svg>
874
+ </button>
875
+ <span className={styles.filePath}>{filePath}</span>
876
+ {fileSize > 0 && (
877
+ <span className={styles.fileSize}>{formatFileSize(fileSize)}</span>
878
+ )}
879
+ </div>
880
+ <div className={styles.headerRight}>
881
+ {saveStatusText && (
882
+ <span className={`${styles.saveStatus} ${saveStatus === 'failed' ? styles.saveStatusFailed : saveStatus === 'saved' ? styles.saveStatusSaved : ''}`}>
883
+ {saveStatusText}
884
+ </span>
885
+ )}
886
+ {isMdFile && (
887
+ <div className={styles.downloadWrap} ref={downloadWrapRef}>
888
+ <button
889
+ className={styles.viewToggleBtn}
890
+ onClick={() => setDownloadMenuOpen(v => !v)}
891
+ title={i18n('ui.saveAs')}
892
+ aria-label={i18n('ui.saveAs')}
893
+ aria-expanded={downloadMenuOpen}
894
+ >
895
+ <DownloadOutlined />
896
+ </button>
897
+ {downloadMenuOpen && (
898
+ <div className={styles.downloadMenu}>
899
+ <button className={styles.downloadMenuItem} onClick={handleSaveAs}>
900
+ <DownloadOutlined />
901
+ <span>{i18n('ui.saveAsMd')}</span>
902
+ </button>
903
+ <button className={styles.downloadMenuItem} onClick={handleCopy}>
904
+ <CopyOutlined />
905
+ <span>{i18n('ui.copyTextContent')}</span>
906
+ </button>
907
+ <button
908
+ className={styles.downloadMenuItem}
909
+ onClick={handleSaveAsImage}
910
+ disabled={viewMode !== 'markdown' || useMdxEditor}
911
+ title={
912
+ viewMode !== 'markdown'
913
+ ? i18n('ui.saveAsImageHintMd')
914
+ : useMdxEditor
915
+ ? i18n('ui.mdEditor.saveAsImageDisabled')
916
+ : undefined
917
+ }
918
+ >
919
+ <CameraOutlined />
920
+ <span>{i18n('ui.saveAsImage')}</span>
921
+ </button>
922
+ </div>
923
+ )}
924
+ </div>
925
+ )}
926
+ {/* MDX 状态下三态切换器(DiffSourceToggleWrapper 在 toolbar 里)已包含 source 模式访问,
927
+ 外层不再放重复按钮;fallback / 旧 marked / 含扩展自动降级 / 移动端 状态保留作为兜底入口。 */}
928
+ {isMdFile && !useMdxEditor && (
929
+ <button
930
+ className={`${styles.viewToggleBtn}${viewMode === 'markdown' ? ` ${styles.viewToggleActive}` : ''}`}
931
+ onClick={() => requestViewModeSwitch(viewMode === 'markdown' ? 'text' : 'markdown')}
932
+ title={viewMode === 'markdown' ? i18n('ui.viewText') : i18n('ui.viewMarkdown')}
933
+ >
934
+ {viewMode === 'markdown' ? (
935
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
936
+ <polyline points="16 18 22 12 16 6"/><polyline points="8 6 2 12 8 18"/>
937
+ </svg>
938
+ ) : (
939
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
940
+ <path d="M2 3h20v18H2z"/><path d="M7 15V9l2 3 2-3v6"/><path d="M17 9l-2 3h4l-2 3"/>
941
+ </svg>
942
+ )}
943
+ {viewMode === 'markdown' ? i18n('ui.viewText') : i18n('ui.viewMarkdown')}
944
+ </button>
945
+ )}
946
+ <button
947
+ className={styles.saveBtn}
948
+ onClick={doSave}
949
+ disabled={!isDirty || saveStatus === 'saving'}
950
+ title={`${i18n('ui.save')} (Ctrl+S)`}
951
+ >
952
+ <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
953
+ <path d="M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"/>
954
+ <polyline points="17 21 17 13 7 13 7 21"/>
955
+ <polyline points="7 3 7 8 15 8"/>
956
+ </svg>
957
+ {i18n('ui.save')}
958
+ </button>
959
+ <button className={styles.closeBtn} onClick={handleClose} title={i18n('ui.backToChat')}>
960
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
961
+ <line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/>
962
+ </svg>
963
+ </button>
964
+ </div>
965
+ </div>
966
+ <div className={styles.contentContainer}>
967
+ {error && <div className={styles.error}>{error}</div>}
968
+ {loading && !error && <div className={styles.loading}>{i18n('ui.loading')}</div>}
969
+ {!loading && content !== null && viewMode === 'markdown' && isMdFile && useMdxEditor && (
970
+ <div ref={mdxWrapperRef} style={{ display: 'contents' }}>
971
+ <Suspense fallback={<div className={styles.loading}>{i18n('ui.loading')}</div>}>
972
+ <MdxEditorPanel
973
+ key={filePath}
974
+ ref={mdxRef}
975
+ initialMarkdown={content}
976
+ onChange={handleMdxChange}
977
+ onParseError={handleMdxParseError}
978
+ />
979
+ </Suspense>
980
+ </div>
981
+ )}
982
+ {!loading && content !== null && useLegacyPreview && (
983
+ <div ref={markdownPreviewRef} className={styles.markdownPreview} dangerouslySetInnerHTML={{ __html: renderMarkdown(isDirty ? currentContent : content) }} />
984
+ )}
985
+ {!loading && content !== null && !(viewMode === 'markdown' && isMdFile) && (
986
+ <div className={styles.editorWrapper} ref={editorWrapperRef}>
987
+ <div className={styles.lineNumCol} ref={lineNumRef}>
988
+ {lineNumbers}
989
+ </div>
990
+ <div className={styles.editorCol}>
991
+ <CodeMirror
992
+ value={content}
993
+ height="100%"
994
+ theme={editorTheme}
995
+ extensions={extensions}
996
+ onChange={handleChange}
997
+ onCreateEditor={onEditorCreate}
998
+ basicSetup={{
999
+ lineNumbers: false,
1000
+ foldGutter: false,
1001
+ highlightActiveLine: true,
1002
+ highlightSelectionMatches: true,
1003
+ bracketMatching: true,
1004
+ autocompletion: false,
1005
+ }}
1006
+ />
1007
+ </div>
1008
+ </div>
1009
+ )}
1010
+ </div>
1011
+ </div>
1012
+ );
1013
+ }