cx-viewer 1.0.3 → 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 +49 -20
  2. package/build.js +15 -0
  3. package/cli.js +102 -18
  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 +1 -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-BN2YmKSu.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-CvH9GQQ2.js +0 -1250
  1381. package/dist/assets/Mobile-BnDkLcBv.css +0 -1
  1382. package/dist/assets/Mobile-CbC8YD3O.js +0 -10
  1383. package/dist/assets/_baseUniq-B2ddYY2A.js +0 -1
  1384. package/dist/assets/arc-DFPOHgcd.js +0 -1
  1385. package/dist/assets/architectureDiagram-Q4EWVU46-1tuXixQv.js +0 -36
  1386. package/dist/assets/blockDiagram-DXYQGD6D-BfVKQPAV.js +0 -132
  1387. package/dist/assets/c4Diagram-AHTNJAMY-Bua8O4-1.js +0 -10
  1388. package/dist/assets/channel-Cf9uPxYW.js +0 -1
  1389. package/dist/assets/chunk-4BX2VUAB-YOIkSNn_.js +0 -1
  1390. package/dist/assets/chunk-4TB4RGXK-CjZt-To5.js +0 -206
  1391. package/dist/assets/chunk-55IACEB6-BAEfMF5S.js +0 -1
  1392. package/dist/assets/chunk-EDXVE4YY-BUYDmLXU.js +0 -1
  1393. package/dist/assets/chunk-FMBD7UC4-Cw_LDap-.js +0 -15
  1394. package/dist/assets/chunk-OYMX7WX6-PlfZFFxd.js +0 -231
  1395. package/dist/assets/chunk-QZHKN3VN-C2ReFZl_.js +0 -1
  1396. package/dist/assets/chunk-YZCP3GAM-B7IVGkPB.js +0 -1
  1397. package/dist/assets/classDiagram-6PBFFD2Q-DdwVeNLZ.js +0 -1
  1398. package/dist/assets/classDiagram-v2-HSJHXN6E-DdwVeNLZ.js +0 -1
  1399. package/dist/assets/clone-C8Lz0121.js +0 -1
  1400. package/dist/assets/cose-bilkent-S5V4N54A-M6rBKf0y.js +0 -1
  1401. package/dist/assets/cytoscape.esm-DxGcaOPV.js +0 -331
  1402. package/dist/assets/dagre-KV5264BT-UPacTWnL.js +0 -4
  1403. package/dist/assets/defaultLocale-DX6XiGOO.js +0 -1
  1404. package/dist/assets/diagram-5BDNPKRD-Cjjtnh0e.js +0 -10
  1405. package/dist/assets/diagram-G4DWMVQ6-CjXILMP0.js +0 -24
  1406. package/dist/assets/diagram-MMDJMWI5-C_-XZ9gc.js +0 -43
  1407. package/dist/assets/diagram-TYMM5635-Dxe2GxUR.js +0 -24
  1408. package/dist/assets/erDiagram-SMLLAGMA-1w-wtgMd.js +0 -85
  1409. package/dist/assets/flowDiagram-DWJPFMVM-B9naMGCj.js +0 -162
  1410. package/dist/assets/ganttDiagram-T4ZO3ILL-BPZBdhPv.js +0 -292
  1411. package/dist/assets/gitGraphDiagram-UUTBAWPF-_P9PdiGG.js +0 -106
  1412. package/dist/assets/graph-CjOY8lRz.js +0 -1
  1413. package/dist/assets/html2canvas.esm-QH1iLAAe.js +0 -22
  1414. package/dist/assets/index-BcCW9op4.js +0 -41
  1415. package/dist/assets/index-DCtZ2KSX.css +0 -1
  1416. package/dist/assets/infoDiagram-42DDH7IO-Ch8SOTtq.js +0 -2
  1417. package/dist/assets/init-Gi6I4Gst.js +0 -1
  1418. package/dist/assets/ishikawaDiagram-UXIWVN3A-XLscQrJT.js +0 -70
  1419. package/dist/assets/journeyDiagram-VCZTEJTY-C3FQ_QPk.js +0 -139
  1420. package/dist/assets/kanban-definition-6JOO6SKY-DIQDTOi3.js +0 -89
  1421. package/dist/assets/katex-DkKDou_j.js +0 -257
  1422. package/dist/assets/layout-DO9W0X_b.js +0 -1
  1423. package/dist/assets/linear-ClCJqwn1.js +0 -1
  1424. package/dist/assets/mermaid.core-BW02B1TS.js +0 -308
  1425. package/dist/assets/min-BuzClhio.js +0 -1
  1426. package/dist/assets/mindmap-definition-QFDTVHPH-DuCaTeZu.js +0 -96
  1427. package/dist/assets/ordinal-Cboi1Yqb.js +0 -1
  1428. package/dist/assets/pieDiagram-DEJITSTG-BZoZ6CI1.js +0 -30
  1429. package/dist/assets/quadrantDiagram-34T5L4WZ-DFNwvtmc.js +0 -7
  1430. package/dist/assets/requirementDiagram-MS252O5E-DPG-7raV.js +0 -84
  1431. package/dist/assets/sankeyDiagram-XADWPNL6-Bp92e1ie.js +0 -10
  1432. package/dist/assets/sequenceDiagram-FGHM5R23-C6ADwqJY.js +0 -157
  1433. package/dist/assets/stateDiagram-FHFEXIEX-BfrwZGmF.js +0 -1
  1434. package/dist/assets/stateDiagram-v2-QKLJ7IA2-4gBW7EPI.js +0 -1
  1435. package/dist/assets/timeline-definition-GMOUNBTQ-Bb-TxYx2.js +0 -120
  1436. package/dist/assets/vennDiagram-DHZGUBPP-DTRiNXJu.js +0 -34
  1437. package/dist/assets/wardley-RL74JXVD-C8j_kjXS.js +0 -162
  1438. package/dist/assets/wardleyDiagram-NUSXRM2D-CvICMc3N.js +0 -20
  1439. package/dist/assets/xychartDiagram-5P7HB3ND-DI0bBGwq.js +0 -7
  1440. package/lib/kv-cache-analyzer.js +0 -164
package/src/Mobile.jsx ADDED
@@ -0,0 +1,1348 @@
1
+ import React from 'react';
2
+ import { ConfigProvider, Spin, Button, Badge, Switch, Select, Modal, message, Radio, Tooltip } from 'antd';
3
+ import { BranchesOutlined, DownloadOutlined, DeleteOutlined, RollbackOutlined, ReloadOutlined, UploadOutlined, FileZipOutlined, QuestionCircleOutlined } from '@ant-design/icons';
4
+ import AppBase, { styles, OPTIMISTIC_CLEAR_PERCENT } from './AppBase';
5
+ import { isIOS, isPad, setViewMode } from './env';
6
+ import { isMainAgent, classifyUserContent, extractDisplayText } from './utils/contentFilter';
7
+ import { parseImOrigin } from './utils/imOrigin';
8
+ import { sortSkillsDefault } from './utils/skillsParser';
9
+ import { handleSkillToggle, handleSkillDelete } from './utils/skillModalController';
10
+ import { getEffectiveModel, computeContextPercent, sumUsageContextTokens } from './utils/helpers';
11
+ import { contextSeverityColor } from './utils/formatters';
12
+ import { PLAN_AUTO_APPROVE_OPTIONS, autoApproveSelectOptions } from './utils/autoApproveOptions';
13
+ import { approvalReviewerSelectOptions } from './utils/approvalReviewerOptions';
14
+ import ChatView from './components/chat/ChatView';
15
+ import TerminalPanel from './components/terminal/TerminalPanel';
16
+ import { TerminalWsProvider } from './components/terminal/TerminalWsContext';
17
+ import ToolApprovalPanel from './components/approval/ToolApprovalPanel';
18
+ import ApprovalModal from './components/approval/ApprovalModal';
19
+ import MobileGitDiff from './components/mobile/MobileGitDiff';
20
+ import MobileFileExplorer from './components/mobile/MobileFileExplorer';
21
+ import MobileStats from './components/mobile/MobileStats';
22
+ import VoicePackSettings from './components/settings/VoicePackSettings';
23
+ import CachePopoverContent from './components/dashboard/CachePopoverContent';
24
+ import MemoryDetailModal from './components/common/MemoryDetailModal';
25
+ import SkillsManagerModal from './components/settings/SkillsManagerModal';
26
+ import ProjectPrefsManagerModal from './components/settings/ProjectPrefsManagerModal';
27
+ import PluginModal from './components/settings/PluginModal';
28
+ import ProcessModal from './components/settings/ProcessModal';
29
+ import ProxyModal from './components/settings/ProxyModal';
30
+ import OpenFolderIcon from './components/common/OpenFolderIcon';
31
+ import { t, getLang, setLang, LANG_OPTIONS } from './i18n';
32
+ import { useProjectAlias } from './hooks/useProjectAlias';
33
+ import { apiUrl } from './utils/apiUrl';
34
+ import { CODEX_PLAN_TOOL_NAME } from './utils/toolNameAliases.js';
35
+ import * as SeqLoaders from './utils/seqResourceLoaders';
36
+
37
+ // Bridge useProjectAlias into the mobile ctx label. Mobile-side is read-only
38
+ // for phase 1 — edit entry lives in AppHeader only because the mobile bar is
39
+ // tight and aliasing on mobile is less common. Cross-tab / same-tab updates
40
+ // still propagate here via the hook so a desktop alias edit reflects on
41
+ // mobile without reload.
42
+ function MobileCtxLabelText({ projectName, instanceId }) {
43
+ const alias = useProjectAlias(projectName);
44
+ const base = `${t('ui.liveMonitoring')}${projectName ? `: ${projectName}` : ''}${instanceId ? `(${instanceId})` : ''}`;
45
+ return <>{base}{alias ? ` (${alias})` : ''}</>;
46
+ }
47
+
48
+ class Mobile extends AppBase {
49
+ constructor(props) {
50
+ super(props);
51
+ // 移动端专属 state
52
+ Object.assign(this.state, {
53
+ mobileMenuVisible: false,
54
+ mobileStatsVisible: false,
55
+ mobileGitDiffVisible: false,
56
+ mobileChatVisible: false,
57
+ mobileLogMgmtVisible: false,
58
+ mobileSettingsVisible: false,
59
+ projectPrefsModalOpen: false,
60
+ mobilePromptVisible: false,
61
+ mobileTerminalVisible: false,
62
+ mobileFileExplorerVisible: false,
63
+ mobileCachePanelVisible: false, // 手机模式:点击血条划出的侧边抽屉
64
+ globalPermission: null, // { permission, handlers } — 全局权限审批浮层
65
+ globalPlanApproval: null, // { plan, handlers } — 全局计划审批浮层
66
+ hasGit: true,
67
+ terminalPendingImages: [], // 终端面板独立的 pending 图片/文件
68
+ // ─── 血条 popover/抽屉用的状态(与 AppHeader 同语义)─────────
69
+ // null=loading / false=失败 / 数组=加载结果。workspace 切换由 componentDidUpdate + seq 控制。
70
+ _fsSkills: null,
71
+ _memory: null,
72
+ _memoryRefreshing: false,
73
+ _memoryDetail: null,
74
+ // AGENTS.md 候选清单 + 明细(与 AppHeader 等价;分槽避免与 _memoryDetail 交叉)
75
+ _codexMd: null,
76
+ _codexMdDetail: null,
77
+ // 与 PC 端对齐:插件管理 / CXV进程管理 / 代理热切换 modal 仅持 open 状态;
78
+ // 实际数据 + handler 都在 PluginModal/ProcessModal/ProxyModal 内部
79
+ pluginModalVisible: false,
80
+ processModalVisible: false,
81
+ proxyModalVisible: false,
82
+ // 与 AppHeader._skillsModal 同结构;toggling 用 Set 跟踪正在切换的 skill key。
83
+ _skillsModal: { open: false, loading: false, skills: [], error: null, toggling: new Set() },
84
+ });
85
+ this._lastContextPercent = 0;
86
+ this._fsSkillsSeq = 0;
87
+ this._memorySeq = 0;
88
+ this._memoryDetailSeq = 0;
89
+ this._codexMdSeq = 0;
90
+ this._codexMdDetailSeq = 0;
91
+ }
92
+
93
+ // 关掉所有移动端互斥 overlay。每次打开任一 overlay 时先调用此方法,
94
+ // 避免 9+ 处 setState 漏键导致两个 overlay 叠加(review 反馈:closeAll helper 比逐处加 key 安全)。
95
+ _closeAllMobileOverlays() {
96
+ return {
97
+ mobileMenuVisible: false,
98
+ mobileStatsVisible: false,
99
+ mobileGitDiffVisible: false,
100
+ mobileChatVisible: false,
101
+ mobileLogMgmtVisible: false,
102
+ mobileSettingsVisible: false,
103
+ mobilePromptVisible: false,
104
+ mobileTerminalVisible: false,
105
+ mobileFileExplorerVisible: false,
106
+ mobileCachePanelVisible: false,
107
+ // PC-aligned modals: 也纳入互斥关闭, 避免点击其他菜单项时这 3 个仍残留
108
+ pluginModalVisible: false,
109
+ processModalVisible: false,
110
+ proxyModalVisible: false,
111
+ };
112
+ }
113
+
114
+ reloadFsSkills = async () => SeqLoaders.loadFsSkills(this, { isLocalLog: this._isLocalLog });
115
+
116
+ // 打开 skills 管理 modal。同时关闭 cache 抽屉避免两个 overlay 叠加。
117
+ // 与 AppHeader.handleOpenSkillsModal 同语义;区别只在于关闭 cache UI 的字段名(mobileCachePanelVisible vs _cachePopoverOpen)。
118
+ handleOpenSkillsModal = async () => {
119
+ const cached = this.state._fsSkills;
120
+ const needFetch = !Array.isArray(cached);
121
+ this.setState(prev => ({
122
+ _skillsModal: {
123
+ open: true,
124
+ loading: needFetch,
125
+ // 默认排序只在「打开面板」时套用(项目级优先于用户级);开关期间不重排,避免列表抖动
126
+ skills: Array.isArray(cached) ? sortSkillsDefault(cached) : [],
127
+ error: null,
128
+ toggling: prev._skillsModal?.toggling || new Set(),
129
+ },
130
+ mobileCachePanelVisible: false,
131
+ }), () => this._onCachePanelOpenChange(false));
132
+ if (needFetch) {
133
+ const result = await this.reloadFsSkills();
134
+ this.setState(prev => ({
135
+ _skillsModal: {
136
+ ...prev._skillsModal,
137
+ loading: false,
138
+ skills: result.ok ? sortSkillsDefault(result.skills) : [],
139
+ error: result.ok ? null : result.reason,
140
+ },
141
+ }));
142
+ }
143
+ };
144
+
145
+ // 开关 / 永久删除逻辑抽到 src/utils/skillModalController.js(与 AppHeader 共用,避免镜像漂移)
146
+ handleToggleSkill = (skill) => handleSkillToggle(this, skill);
147
+
148
+ handleDeleteSkill = (skill) => handleSkillDelete(this, skill);
149
+
150
+ loadMemory = async () => SeqLoaders.loadProjectMemory(this);
151
+
152
+ // 与 AppHeader.handleRefreshMemory 同语义:用户主动刷新带 toast 反馈,
153
+ // stale(workspace 中途切换)保持静默不误报失败。
154
+ handleRefreshMemory = async () => {
155
+ if (this.state._memoryRefreshing) return;
156
+ this.setState({ _memoryRefreshing: true });
157
+ const seq = ++this._memorySeq;
158
+ let ok = false;
159
+ let stale = false;
160
+ try {
161
+ const r = await fetch(apiUrl('/api/project-memory'));
162
+ const data = await r.json();
163
+ if (seq !== this._memorySeq) { stale = true; }
164
+ else if (!r.ok) { this.setState({ _memory: false }); }
165
+ else { this.setState({ _memory: data }); ok = true; }
166
+ } catch {
167
+ if (seq !== this._memorySeq) stale = true;
168
+ else this.setState({ _memory: false });
169
+ } finally {
170
+ if (!stale) this.setState({ _memoryRefreshing: false });
171
+ }
172
+ if (stale) return;
173
+ if (ok) message.success(t('ui.memoryRefreshSuccess'));
174
+ else message.error(t('ui.memoryRefreshFailed'), 5);
175
+ };
176
+
177
+ loadMemoryDetail = async (name) => {
178
+ const seq = ++this._memoryDetailSeq;
179
+ this.setState({ _memoryDetail: { name, loading: true } });
180
+ try {
181
+ const r = await fetch(apiUrl(`/api/project-memory?file=${encodeURIComponent(name)}`));
182
+ const data = await r.json();
183
+ if (seq !== this._memoryDetailSeq) return;
184
+ if (!r.ok) {
185
+ this.setState({ _memoryDetail: { name, error: data.error || `http:${r.status}` } });
186
+ return;
187
+ }
188
+ this.setState({ _memoryDetail: { name, content: data.content || '' } });
189
+ } catch (e) {
190
+ if (seq === this._memoryDetailSeq) {
191
+ this.setState({ _memoryDetail: { name, error: e.message || 'network' } });
192
+ }
193
+ }
194
+ };
195
+
196
+ // 抽屉打开瞬间懒加载(iPad / 手机点击血条的 onClick 都会调用)。
197
+ // 仅在 open=true 且数据未加载(null)时触发 fetch,与 AppHeader.onOpenChange 同语义。
198
+ _onCachePanelOpenChange = (open) => {
199
+ if (open && this.state._fsSkills === null && !this._isLocalLog) this.reloadFsSkills();
200
+ if (open && this.state._memory === null) this.loadMemory();
201
+ if (open && this.state._codexMd === null) this.loadCodexMdList();
202
+ };
203
+
204
+ loadCodexMdList = async () => SeqLoaders.loadCodexMdList(this);
205
+
206
+ // 点击 chip → 拉明细到 _codexMdDetail;标题用"<scope> · <tail>"组合。
207
+ loadCodexMdDetail = async (id, tail, scope) => {
208
+ const seq = ++this._codexMdDetailSeq;
209
+ const scopeLabel = scope === 'global' ? t('ui.codexMdScopeGlobal') : t('ui.codexMdScopeProject');
210
+ const title = `${scopeLabel} · ${tail}`;
211
+ this.setState({ _codexMdDetail: { name: title, loading: true } });
212
+ try {
213
+ const r = await fetch(apiUrl(`/api/codex-md?id=${encodeURIComponent(id)}`));
214
+ const data = await r.json();
215
+ if (seq !== this._codexMdDetailSeq) return;
216
+ if (!r.ok) {
217
+ this.setState({ _codexMdDetail: { name: title, error: data.error || `http:${r.status}` } });
218
+ return;
219
+ }
220
+ this.setState({ _codexMdDetail: { name: title, content: data.content || '' } });
221
+ } catch (e) {
222
+ if (seq === this._codexMdDetailSeq) {
223
+ this.setState({ _codexMdDetail: { name: title, error: e.message || 'network' } });
224
+ }
225
+ }
226
+ };
227
+
228
+ componentDidMount() {
229
+ super.componentDidMount();
230
+ // 检测项目是否有 git(优先多仓库 API,回退旧 API)
231
+ fetch(apiUrl('/api/git-repos')).then(r => r.ok ? r.json() : Promise.reject()).then(data => {
232
+ if (!data.repos?.length) this.setState({ hasGit: false, mobileGitDiffVisible: false });
233
+ }).catch(() => {
234
+ fetch(apiUrl('/api/git-status')).then(r => {
235
+ if (!r.ok) this.setState({ hasGit: false, mobileGitDiffVisible: false });
236
+ }).catch(() => this.setState({ hasGit: false, mobileGitDiffVisible: false }));
237
+ });
238
+ // iOS 虚拟键盘弹出时,Safari 会滚动整个文档将页面上推,
239
+ // 导致导航栏消失在视口之外。通过 visualViewport 的 resize + scroll
240
+ // 事件同步可见区域的高度和偏移,用 fixed 定位将布局锁定在可见区域内。
241
+ if (isIOS && !isPad && window.visualViewport) {
242
+ this._onVisualViewportChange = () => {
243
+ const el = this._layoutRef.current;
244
+ if (!el) return;
245
+ const vv = window.visualViewport;
246
+ el.style.position = 'fixed';
247
+ el.style.top = `${vv.offsetTop}px`;
248
+ el.style.height = `${vv.height}px`;
249
+ el.style.width = '100%';
250
+ el.style.left = '0';
251
+ };
252
+ window.visualViewport.addEventListener('resize', this._onVisualViewportChange);
253
+ window.visualViewport.addEventListener('scroll', this._onVisualViewportChange);
254
+ this._onVisualViewportChange();
255
+ }
256
+ // iPad/侧边栏模式 → 全览(pc) 的切换。
257
+ // Electron:只跟随右上角开关(device mode 状态),不随窗口宽度变化;挂载时按当前状态对齐。
258
+ // 浏览器:窗口 ≥ 1400px 时弹框提示切换到全览模式(原行为不变)。
259
+ if (isPad) {
260
+ const inElectronTab = typeof window !== 'undefined' && !!window.tabBridge;
261
+ this._modeSwitchDialog = null;
262
+ if (inElectronTab) {
263
+ this._onDeviceMode = (on) => {
264
+ const target = on ? 'pad' : 'pc';
265
+ if (localStorage.getItem('cxv_viewMode') !== target) setViewMode(target);
266
+ };
267
+ this._disposeDeviceMode = window.tabBridge.onDeviceModeChange?.(this._onDeviceMode);
268
+ window.tabBridge.requestDeviceMode?.();
269
+ } else {
270
+ this._mqlWide = window.matchMedia('(min-width: 1400px)');
271
+ this._onWideChange = (e) => {
272
+ if (e.matches) {
273
+ this._modeSwitchDialog = Modal.confirm({
274
+ title: t('ui.modeSwitchTitle'),
275
+ content: t('ui.modeSwitchToFullView'),
276
+ okText: t('ui.ok'),
277
+ onOk: () => { this._modeSwitchDialog = null; setViewMode('pc'); },
278
+ onCancel: () => { this._modeSwitchDialog = null; },
279
+ });
280
+ } else if (this._modeSwitchDialog) {
281
+ this._modeSwitchDialog.destroy();
282
+ this._modeSwitchDialog = null;
283
+ }
284
+ };
285
+ this._mqlWide.addEventListener('change', this._onWideChange);
286
+ }
287
+ }
288
+ }
289
+
290
+ componentWillUnmount() {
291
+ if (this._onVisualViewportChange && window.visualViewport) {
292
+ window.visualViewport.removeEventListener('resize', this._onVisualViewportChange);
293
+ window.visualViewport.removeEventListener('scroll', this._onVisualViewportChange);
294
+ }
295
+ if (this._disposeDeviceMode) { this._disposeDeviceMode(); this._disposeDeviceMode = null; }
296
+ if (this._mqlWide) {
297
+ this._mqlWide.removeEventListener('change', this._onWideChange);
298
+ }
299
+ if (this._modeSwitchDialog) {
300
+ this._modeSwitchDialog.destroy();
301
+ this._modeSwitchDialog = null;
302
+ }
303
+ // 与 AppHeader.componentWillUnmount 对齐:让在途 reloadFsSkills / loadMemory /
304
+ // handleRefreshMemory / loadMemoryDetail 的回包 seq 校验失败 → 不会 setState 到
305
+ // 已卸载组件,也不会触发 toast。
306
+ this._fsSkillsSeq++;
307
+ this._memorySeq++;
308
+ this._memoryDetailSeq++;
309
+ this._codexMdSeq++;
310
+ this._codexMdDetailSeq++;
311
+ super.componentWillUnmount();
312
+ }
313
+
314
+ componentDidUpdate(prevProps, prevState) {
315
+ if (super.componentDidUpdate) super.componentDidUpdate(prevProps, prevState);
316
+ // workspace 切换:projectName 变了 → 旧的 _fsSkills/_memory/_codexMd 属于旧项目,作废 + 刷 seq
317
+ if (prevState.projectName !== this.state.projectName) {
318
+ this._fsSkillsSeq++;
319
+ this._memorySeq++;
320
+ this._codexMdSeq++;
321
+ this._codexMdDetailSeq++;
322
+ this.setState({
323
+ _fsSkills: null,
324
+ _memory: null,
325
+ _memoryDetail: null,
326
+ _memoryRefreshing: false,
327
+ _codexMd: null,
328
+ _codexMdDetail: null,
329
+ });
330
+ }
331
+ }
332
+
333
+ // ─── 对话中文件路径点击 → 打开移动端文件浏览器 ────────────
334
+ _handleMobileOpenFile = (filePath, ancestors) => {
335
+ // local log 模式下不打开文件浏览器
336
+ if (this.state.localLogFile) return;
337
+ this.setState({
338
+ ...this._closeAllMobileOverlays(),
339
+ mobileFileExplorerVisible: true,
340
+ mobileFileExplorerTarget: { file: filePath, ancestors: ancestors || [] },
341
+ });
342
+ };
343
+
344
+ // ─── Prompt 提取 ───────────────────────────────────────
345
+
346
+ static COMMAND_TAGS = new Set([
347
+ 'command-name', 'command-message', 'command-args',
348
+ 'local-command-caveat', 'local-command-stdout',
349
+ ]);
350
+
351
+ static parseSegments(text) {
352
+ const segments = [];
353
+ const regex = /<([a-zA-Z_][\w-]*)(?:\s[^>]*)?>[\s\S]*?<\/\1>/g;
354
+ let lastIndex = 0;
355
+ let match;
356
+ while ((match = regex.exec(text)) !== null) {
357
+ const before = text.slice(lastIndex, match.index).trim();
358
+ if (before) segments.push({ type: 'text', content: before });
359
+ const tagName = match[1];
360
+ lastIndex = match.index + match[0].length;
361
+ if (Mobile.COMMAND_TAGS.has(tagName)) continue;
362
+ const innerRegex = new RegExp(`^<${tagName}(?:\\s[^>]*)?>([\\s\\S]*)<\\/${tagName}>$`);
363
+ const innerMatch = match[0].match(innerRegex);
364
+ const content = innerMatch ? innerMatch[1].trim() : match[0].trim();
365
+ segments.push({ type: 'system', content, label: tagName });
366
+ }
367
+ const after = text.slice(lastIndex).trim();
368
+ if (after) segments.push({ type: 'text', content: after });
369
+ return segments;
370
+ }
371
+
372
+ static extractUserTexts(messages) {
373
+ const userMsgs = [];
374
+ const fullTexts = [];
375
+ let slashCmd = null;
376
+ for (const msg of messages) {
377
+ if (msg.role !== 'user') continue;
378
+ if (typeof msg.content === 'string') {
379
+ const text = extractDisplayText(parseImOrigin(msg.content).text);
380
+ if (!text) continue;
381
+ if (/Implement the following plan:/i.test(text)) continue;
382
+ userMsgs.push(text);
383
+ fullTexts.push(text);
384
+ } else if (Array.isArray(msg.content)) {
385
+ const { commands, textBlocks } = classifyUserContent(msg.content);
386
+ if (commands.length > 0) {
387
+ slashCmd = commands[commands.length - 1];
388
+ }
389
+ const userParts = [];
390
+ for (const b of textBlocks) {
391
+ if (/Implement the following plan:/i.test((b.text || '').trim())) continue;
392
+ userParts.push(b.text.trim());
393
+ }
394
+ const allParts = msg.content
395
+ .filter(b => b.type === 'text' && b.text?.trim())
396
+ .map(b => b.text.trim());
397
+ if (userParts.length > 0) {
398
+ userMsgs.push(userParts.join('\n'));
399
+ fullTexts.push(allParts.join('\n'));
400
+ }
401
+ }
402
+ }
403
+ return { userMsgs, fullTexts, slashCmd };
404
+ }
405
+
406
+ extractUserPrompts(requests) {
407
+ const prompts = [];
408
+ const seen = new Set();
409
+ let prevSlashCmd = null;
410
+ const mainAgentRequests = requests.filter(r => isMainAgent(r));
411
+
412
+ for (let ri = 0; ri < mainAgentRequests.length; ri++) {
413
+ const req = mainAgentRequests[ri];
414
+ const messages = req.body?.input || [];
415
+ const timestamp = req.timestamp || '';
416
+ const { userMsgs, fullTexts, slashCmd } = Mobile.extractUserTexts(messages);
417
+
418
+ if (slashCmd && slashCmd !== '/compact' && slashCmd !== prevSlashCmd) {
419
+ prompts.push({ type: 'prompt', segments: [{ type: 'text', content: slashCmd }], timestamp });
420
+ }
421
+ prevSlashCmd = slashCmd;
422
+
423
+ for (let i = 0; i < userMsgs.length; i++) {
424
+ const key = userMsgs[i];
425
+ if (seen.has(key)) continue;
426
+ seen.add(key);
427
+ const raw = fullTexts[i] || key;
428
+ prompts.push({ type: 'prompt', segments: Mobile.parseSegments(raw), timestamp });
429
+ }
430
+ }
431
+ return prompts;
432
+ }
433
+
434
+ renderOriginalPrompt(p) {
435
+ const textSegments = p.segments.filter(seg => seg.type === 'text');
436
+ if (textSegments.length === 0) return null;
437
+ return (
438
+ <div className={styles.mobilePromptCard}>
439
+ {textSegments.map((seg, j) => (
440
+ <pre key={j} className={styles.mobilePromptPreText}>{seg.content}</pre>
441
+ ))}
442
+ </div>
443
+ );
444
+ }
445
+
446
+ handleExportPromptsTxt = (prompts) => {
447
+ if (!prompts || prompts.length === 0) return;
448
+ const blocks = [];
449
+ for (const p of prompts) {
450
+ const lines = [];
451
+ const ts = p.timestamp ? new Date(p.timestamp).toLocaleString() : '';
452
+ if (ts) lines.push(`${ts}:\n`);
453
+ const textParts = (p.segments || [])
454
+ .filter(seg => seg.type === 'text')
455
+ .map(seg => seg.content);
456
+ if (textParts.length > 0) lines.push(textParts.join('\n'));
457
+ blocks.push(lines.join('\n'));
458
+ }
459
+ if (blocks.length === 0) return;
460
+ const blob = new Blob([blocks.join('\n\n\n\n')], { type: 'text/plain;charset=utf-8' });
461
+ const url = URL.createObjectURL(blob);
462
+ const a = document.createElement('a');
463
+ a.href = url;
464
+ a.download = `user-prompts-${new Date().toISOString().slice(0, 10)}.txt`;
465
+ a.click();
466
+ URL.revokeObjectURL(url);
467
+ };
468
+
469
+ // ─── 移动端渲染 ────────────────────────────────────────
470
+
471
+ handlePendingPermission = (data) => { this.setState({ globalPermission: data }); };
472
+ handlePendingPlanApproval = (data) => { this.setState({ globalPlanApproval: data }); };
473
+
474
+ // 拖拽上传逻辑已上提到 AppBase;Mobile 仅 override 两个分发钩子:终端可见时落入
475
+ // terminalPendingImages(图片队列),否则落入 pendingUploadPaths。toTerminal 在 drop
476
+ // 时刻捕获(经基类 _onDrop 的 _captureDropContext),保证上传期间切换终端不改变目标。
477
+ _captureDropContext() { return { toTerminal: this.state.mobileTerminalVisible }; }
478
+
479
+ _dispatchUploadedFiles(results, ctx) {
480
+ const uploaded = results.filter(Boolean);
481
+ if (!uploaded.length) return;
482
+ if (ctx?.toTerminal) {
483
+ this.setState(prev => ({
484
+ terminalPendingImages: [...prev.terminalPendingImages, ...uploaded.map(r => ({ path: r.path, source: 'drop' }))],
485
+ }));
486
+ } else {
487
+ this.setState(prev => ({
488
+ pendingUploadPaths: [...(prev.pendingUploadPaths || []), ...uploaded.map(r => `"${r.path}"`)],
489
+ }));
490
+ }
491
+ }
492
+
493
+ _handleTerminalFilePath = (path) => {
494
+ this.setState(prev => ({
495
+ terminalPendingImages: [...prev.terminalPendingImages, { path, source: 'terminal' }],
496
+ }));
497
+ };
498
+
499
+ _handleRemoveTerminalImage = (idx) => {
500
+ this.setState(prev => ({
501
+ terminalPendingImages: prev.terminalPendingImages.filter((_, i) => i !== idx),
502
+ }));
503
+ };
504
+
505
+ _handleClearTerminalImages = () => {
506
+ this.setState({ terminalPendingImages: [] });
507
+ };
508
+
509
+ render() {
510
+ const { filteredRequests, fileLoading, fileLoadingCount, mainAgentSessions } = this.renderPrepare();
511
+ const prefs = this._prefValues();
512
+ // 「仅展示当前会话」锁定:切到「以 pin 会话结尾」(与 App 同口径,见 _displaySessionsFor)。
513
+ const { sessions: displaySessions, upperBoundTs: sessionUpperBoundTs } = this._displaySessionsFor(mainAgentSessions);
514
+
515
+ // 工作区选择器模式
516
+ if (this.state.workspaceMode) {
517
+ return this.renderWorkspaceMode();
518
+ }
519
+
520
+ const mobileIsLocalLog = !!this._isLocalLog;
521
+ let mobileModelName = null;
522
+ for (let i = filteredRequests.length - 1; i >= 0; i--) {
523
+ const effective = getEffectiveModel(filteredRequests[i]);
524
+ if (isMainAgent(filteredRequests[i]) && effective) { mobileModelName = effective; break; }
525
+ }
526
+
527
+ // contextPercent 计算抽到 render 顶部:header 血条 + 抽屉里的 CachePopoverContent 都要用同一份。
528
+ // 与原 IIFE 同语义;side effect(_lastContextPercent 更新)也搬上来一次性做完。
529
+ // 反向找最后一条带 usage 的 MainAgent 一次,contextPercent 与 mobileContextTokens 共用
530
+ // (以前 mobileContextTokens 单独扫 + fallback 分支再扫,是 2*O(N))
531
+ let mobileContextPercent = 0;
532
+ let mobileContextTokens = 0;
533
+ if (!mobileIsLocalLog) {
534
+ const contextWindow = this.state.contextWindow;
535
+ if (filteredRequests.length > 0) {
536
+ for (let i = filteredRequests.length - 1; i >= 0; i--) {
537
+ if (isMainAgent(filteredRequests[i]) && filteredRequests[i].response?.body?.usage) {
538
+ const u = filteredRequests[i].response.body.usage;
539
+ // 原始占用比口径(对齐 /context):分子含末轮 output,与桌面端 AppHeader 同源
540
+ mobileContextTokens = sumUsageContextTokens(u);
541
+ break;
542
+ }
543
+ }
544
+ }
545
+ // Fixed 258K percent math shared with the desktop header via
546
+ // utils/helpers.computeContextPercent.
547
+ mobileContextPercent = computeContextPercent({
548
+ contextWindow,
549
+ lastTotalTokens: mobileContextTokens,
550
+ });
551
+ // /clear 后 contextBarLocked 强制血条 0K (0%),直到用户发出非 /clear 消息(详见 AppBase)。
552
+ if (this.state.contextBarLocked) {
553
+ this._lastContextPercent = 0;
554
+ mobileContextPercent = 0;
555
+ mobileContextTokens = 0;
556
+ } else {
557
+ if (mobileContextPercent === 0 && this._lastContextPercent > 0) mobileContextPercent = this._lastContextPercent;
558
+ else this._lastContextPercent = mobileContextPercent;
559
+ if (this.state.contextBarOptimistic) mobileContextPercent = OPTIMISTIC_CLEAR_PERCENT;
560
+ }
561
+ }
562
+
563
+ // 单条 /ws/terminal 的开启条件:与 App 同款,回退到「非本地日志 + 非 SDK 模式都连」,
564
+ // 修 mobile 隐藏终端时 ChatView 的 hook bridge / PTY 提交失败回归(参看 App.jsx:305 注释)。
565
+ const wsOpen = !mobileIsLocalLog && !this.state.sdkMode;
566
+
567
+ return (
568
+ <TerminalWsProvider open={wsOpen}>
569
+ <ApprovalModal
570
+ enabled={isPad && this.state.approvalPrefs.modalEnabled}
571
+ soundEnabled={this.state.approvalPrefs.soundEnabled}
572
+ voicePackPrefs={this.state.approvalPrefs.voicePack}
573
+ approvalGlobal={this.state.approvalGlobal}
574
+ dismissedIds={this.state.approvalDismissedIds}
575
+ onDismiss={this.handleApprovalDismiss}
576
+ onJumpTab={this.handleApprovalJumpTab}
577
+ otherTabs={this.state.approvalOtherTabs}
578
+ >
579
+ <ConfigProvider theme={this.themeConfig}>
580
+ <div className={styles.mobileCLIRoot} ref={this._layoutRef} onDragOver={this._onDragOver} onDragLeave={this._onDragLeave} onDrop={this._onDrop}>
581
+ {this.state.isDragging && (
582
+ <div className={styles.dragOverlay}>
583
+ <div className={styles.dragOverlayContent}>
584
+ <UploadOutlined className={styles.dragIcon} />
585
+ <p>{t('ui.dragDropHint')}</p>
586
+ </div>
587
+ </div>
588
+ )}
589
+ <div className={styles.mobileCLIHeader}>
590
+ <div className={styles.mobileCLIHeaderLeft}>
591
+ <button
592
+ className={styles.mobileMenuBtn}
593
+ onClick={() => this.setState(prev => ({ mobileMenuVisible: !prev.mobileMenuVisible }))}
594
+ aria-label={t('ui.mobileMenu')}
595
+ aria-expanded={this.state.mobileMenuVisible}
596
+ aria-haspopup="menu"
597
+ >
598
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round">
599
+ <line x1="3" y1="6" x2="21" y2="6" />
600
+ <line x1="3" y1="12" x2="21" y2="12" />
601
+ <line x1="3" y1="18" x2="21" y2="18" />
602
+ </svg>
603
+ </button>
604
+ {!mobileIsLocalLog ? (() => {
605
+ // 移动端(含 iPad):渲染与 PC 一致的上下文血条。contextPercent 已在 render 顶部计算。
606
+ const contextPercent = mobileContextPercent;
607
+ const ctxColor = contextSeverityColor(contextPercent);
608
+ const ctxLabel = `${t('ui.liveMonitoring')}${this.state.projectName ? `: ${this.state.projectName}` : ''}`;
609
+ // ctxLabel is also used in `title` (PC hover tooltip). Alias is
610
+ // only rendered in the VISIBLE content via MobileCtxLabelText
611
+ // (using useProjectAlias for cross-tab reactivity); the tooltip
612
+ // can stay alias-less since mobile has no hover anyway.
613
+ // 血条本体——iPad 与手机一致,作为按钮触发左侧抽屉(mobileCachePanelOverlay)。
614
+ // mobileCachePanelVisible=true 时才 mount CachePopoverContent,维持 commit 0914cc5
615
+ // 的"打开才解析 200 条"性能修复。
616
+ const ctxTag = (
617
+ <span
618
+ className={styles.mobileCtxTag}
619
+ style={{ borderColor: ctxColor, color: ctxColor, cursor: 'pointer' }}
620
+ title={ctxLabel}
621
+ role="button"
622
+ tabIndex={0}
623
+ aria-label={t('ui.openCachePanel')}
624
+ onClick={() => this.setState(prev => ({
625
+ ...this._closeAllMobileOverlays(),
626
+ mobileCachePanelVisible: !prev.mobileCachePanelVisible,
627
+ }), () => this._onCachePanelOpenChange(this.state.mobileCachePanelVisible))}
628
+ onKeyDown={(e) => {
629
+ if (e.key === 'Enter' || e.key === ' ') {
630
+ e.preventDefault();
631
+ this.setState(prev => ({
632
+ ...this._closeAllMobileOverlays(),
633
+ mobileCachePanelVisible: !prev.mobileCachePanelVisible,
634
+ }), () => this._onCachePanelOpenChange(this.state.mobileCachePanelVisible));
635
+ }
636
+ }}
637
+ >
638
+ <span className={styles.mobileCtxTagFill} style={{ width: `${contextPercent}%`, backgroundColor: ctxColor }} />
639
+ <span className={styles.mobileCtxTagContent}>
640
+ <MobileCtxLabelText projectName={this.state.projectName} instanceId={this.state.instanceId} />
641
+ </span>
642
+ </span>
643
+ );
644
+ return ctxTag;
645
+ })() : (
646
+ <>
647
+ <Badge status="processing" color="green" />
648
+ <span className={styles.mobileCLIStatusLabel}>{t('ui.historyLog', { file: this._localLogFile })}</span>
649
+ </>
650
+ )}
651
+ </div>
652
+ <div className={styles.mobileCLIHeaderRight}>
653
+ {mobileIsLocalLog ? (
654
+ <Button
655
+ type="text"
656
+ size="small"
657
+ icon={<RollbackOutlined />}
658
+ onClick={() => history.back()}
659
+ className={styles.mobileNavBtn}
660
+ >
661
+ {t('ui.mobileGoBack')}
662
+ </Button>
663
+ ) : this.state.hasGit ? (
664
+ <Button
665
+ type="text"
666
+ size="small"
667
+ icon={<BranchesOutlined />}
668
+ onClick={() => this.setState(prev => ({ ...this._closeAllMobileOverlays(), mobileGitDiffVisible: !prev.mobileGitDiffVisible }))}
669
+ style={{ color: this.state.mobileGitDiffVisible ? 'var(--color-primary)' : 'var(--text-tertiary)', fontSize: 12 }}
670
+ >
671
+ {this.state.mobileGitDiffVisible ? t('ui.mobileGitDiffExit') : t('ui.mobileGitDiffBrowse')}
672
+ </Button>
673
+ ) : null}
674
+ {!mobileIsLocalLog && (
675
+ <Button
676
+ type="text"
677
+ size="small"
678
+ icon={<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round"><polyline points="4 17 10 11 4 5" /><line x1="12" y1="19" x2="20" y2="19" /></svg>}
679
+ onClick={() => this.setState(prev => ({ ...this._closeAllMobileOverlays(), mobileTerminalVisible: !prev.mobileTerminalVisible }))}
680
+ style={{ color: this.state.mobileTerminalVisible ? 'var(--color-primary)' : 'var(--text-tertiary)', fontSize: 12 }}
681
+ >
682
+ {this.state.mobileTerminalVisible ? t('ui.mobileTerminalExit') : t('ui.mobileTerminalBrowse')}
683
+ </Button>
684
+ )}
685
+ </div>
686
+ {this.state.mobileMenuVisible && (
687
+ <>
688
+ <div className={styles.mobileMenuOverlay} onClick={() => this.setState({ mobileMenuVisible: false })} />
689
+ <div className={styles.mobileMenuDropdown}>
690
+ {/* 1. 项目文件夹 (mobile 独有, 置顶, 仅在非 local-log 模式可见) */}
691
+ {!mobileIsLocalLog && (
692
+ <button
693
+ className={styles.mobileMenuItem}
694
+ onClick={() => { this.setState({ ...this._closeAllMobileOverlays(), mobileFileExplorerVisible: true }); }}
695
+ >
696
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
697
+ <path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z" />
698
+ </svg>
699
+ {t('ui.projectFolder')}
700
+ </button>
701
+ )}
702
+ {/* 2. 日志管理 — 对应 PC 「日志管理工具」 */}
703
+ <button
704
+ className={styles.mobileMenuItem}
705
+ onClick={() => { this.setState({ ...this._closeAllMobileOverlays(), mobileLogMgmtVisible: true }); this.handleImportLocalLogs(); }}
706
+ >
707
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
708
+ <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" />
709
+ <polyline points="14 2 14 8 20 8" />
710
+ <line x1="16" y1="13" x2="8" y2="13" />
711
+ <line x1="16" y1="17" x2="8" y2="17" />
712
+ </svg>
713
+ {t('ui.logManagement')}
714
+ </button>
715
+ {/* 3. 用户 Prompt — 对应 PC 「查看用户 Prompt」 */}
716
+ <button
717
+ className={styles.mobileMenuItem}
718
+ onClick={() => { this.setState({ ...this._closeAllMobileOverlays(), mobilePromptVisible: true }); }}
719
+ >
720
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
721
+ <path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" />
722
+ <polyline points="14 2 14 8 20 8" />
723
+ <line x1="12" y1="18" x2="12" y2="12" />
724
+ <line x1="12" y1="12" x2="9" y2="15" />
725
+ <line x1="12" y1="12" x2="15" y2="15" />
726
+ </svg>
727
+ {t('ui.userPrompt')}
728
+ </button>
729
+ {/* 4. 插件管理 — 与 PC AppHeader.jsx:1342 同 i18n key */}
730
+ <button
731
+ className={styles.mobileMenuItem}
732
+ onClick={() => { this.setState({ ...this._closeAllMobileOverlays(), pluginModalVisible: true }); }}
733
+ >
734
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
735
+ <rect x="9" y="2" width="6" height="6" rx="1" />
736
+ <rect x="2" y="9" width="6" height="6" rx="1" />
737
+ <rect x="16" y="9" width="6" height="6" rx="1" />
738
+ <rect x="9" y="16" width="6" height="6" rx="1" />
739
+ </svg>
740
+ {t('ui.pluginManagement')}
741
+ </button>
742
+ {/* 5. CXV 进程管理 */}
743
+ <button
744
+ className={styles.mobileMenuItem}
745
+ onClick={() => { this.setState({ ...this._closeAllMobileOverlays(), processModalVisible: true }); }}
746
+ >
747
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
748
+ <path d="M12 2v4" />
749
+ <path d="M12 18v4" />
750
+ <path d="m4.93 4.93 2.83 2.83" />
751
+ <path d="m16.24 16.24 2.83 2.83" />
752
+ <path d="M2 12h4" />
753
+ <path d="M18 12h4" />
754
+ <path d="m4.93 19.07 2.83-2.83" />
755
+ <path d="m16.24 7.76 2.83-2.83" />
756
+ </svg>
757
+ {t('ui.processManagement')}
758
+ </button>
759
+ {/* 6. 代理热切换 */}
760
+ <button
761
+ className={styles.mobileMenuItem}
762
+ onClick={() => { this.setState({ ...this._closeAllMobileOverlays(), proxyModalVisible: true }); }}
763
+ >
764
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
765
+ <polyline points="17 1 21 5 17 9" />
766
+ <path d="M3 11V9a4 4 0 0 1 4-4h14" />
767
+ <polyline points="7 23 3 19 7 15" />
768
+ <path d="M21 13v2a4 4 0 0 1-4 4H3" />
769
+ </svg>
770
+ {t('ui.proxySwitch')}
771
+ </button>
772
+ {/* 7-8 块前的 divider — 与 PC 「代理热切换」与「项目统计」之间分隔线一致 */}
773
+ <div className={styles.mobileMenuDivider} />
774
+ {/* 7. 数据统计 — 对应 PC 「项目统计」 */}
775
+ <button
776
+ className={styles.mobileMenuItem}
777
+ onClick={() => { this.setState({ ...this._closeAllMobileOverlays(), mobileStatsVisible: true }); }}
778
+ >
779
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
780
+ <rect x="3" y="3" width="7" height="7" />
781
+ <rect x="14" y="3" width="7" height="7" />
782
+ <rect x="3" y="14" width="7" height="7" />
783
+ <rect x="14" y="14" width="7" height="7" />
784
+ </svg>
785
+ {t('ui.tokenStats')}
786
+ </button>
787
+ {/* 8. 偏好设置 — mobile 独有 drawer (mobileSettingsVisible),不引入 PC 的 viewMode 条件 */}
788
+ <button
789
+ className={styles.mobileMenuItem}
790
+ onClick={() => { this.setState({ ...this._closeAllMobileOverlays(), mobileSettingsVisible: true }); }}
791
+ >
792
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round">
793
+ <circle cx="12" cy="12" r="3" />
794
+ <path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z" />
795
+ </svg>
796
+ {t('ui.settings')}
797
+ </button>
798
+ </div>
799
+ </>
800
+ )}
801
+ </div>
802
+ <div className={styles.mobileCLIBody}>
803
+ {!mobileIsLocalLog && (
804
+ <>
805
+ {fileLoading && (
806
+ <div className={styles.mobileLoadingOverlay}>
807
+ <div className={styles.mobileLoadingSpinner} />
808
+ <div className={styles.mobileLoadingLabel}>{t('ui.loadingChat')}{fileLoadingCount > 0 ? ` (${fileLoadingCount})` : ''}</div>
809
+ </div>
810
+ )}
811
+ <div className={styles.mobileChatInner}>
812
+ <ChatView
813
+ {...this._settingsProps()}
814
+ requests={filteredRequests}
815
+ mainAgentSessions={displaySessions}
816
+ sessionUpperBoundTs={sessionUpperBoundTs}
817
+ streamingLatest={this.state.streamingLatest}
818
+ userProfile={this.state.userProfile}
819
+ collapseToolResults={prefs.collapseToolResults}
820
+ expandThinking={prefs.expandThinking}
821
+ showFullToolContent={prefs.showFullToolContent}
822
+ onlyCurrentSession={mobileIsLocalLog ? false : prefs.onlyCurrentSession}
823
+ isLocalLog={mobileIsLocalLog}
824
+ showThinkingSummaries={prefs.showThinkingSummaries}
825
+ onViewRequest={null}
826
+ scrollToTimestamp={null}
827
+ onScrollTsDone={() => {}}
828
+ cliMode={this.state.cliMode}
829
+ sdkMode={this.state.sdkMode}
830
+ terminalVisible={this.state.mobileTerminalVisible}
831
+ mobileChatVisible={true}
832
+ fileLoading={this.state.fileLoading}
833
+ isStreaming={this.state.isStreaming}
834
+ hasMoreHistory={this.state.hasMoreHistory}
835
+ loadingMore={this.state.loadingMore}
836
+ onLoadMoreHistory={() => this.loadMoreHistory()}
837
+ loadingSessionId={this.state.loadingSessionId}
838
+ onLoadSession={(sid) => this.loadSession(sid)}
839
+ onPendingPermission={this.handlePendingPermission}
840
+ onPendingPlanApproval={this.handlePendingPlanApproval}
841
+ onPendingAsk={this.handleApprovalAsk}
842
+ onPendingPtyPlan={this.handleApprovalPtyPlan}
843
+ approvalsReviewer={this.state.approvalsReviewer}
844
+ onApprovalsReviewerChange={this.handleApprovalsReviewerChange}
845
+ onApprovalsReviewerSynced={this.handleApprovalsReviewerSynced}
846
+ planAutoApproveSeconds={this.state.approvalPrefs?.planAutoApproveSeconds}
847
+ onPlanAutoApproveChange={this.handlePlanAutoApproveChange}
848
+ ownTabId={this.state.ownTabId}
849
+ projectName={this.state.projectName}
850
+ suppressInlineApprovalPanels={true}
851
+ pendingUploadPaths={this.state.pendingUploadPaths}
852
+ onUploadPathsConsumed={this.handleUploadPathsConsumed}
853
+ uploadingDrop={this.state.uploadingDrop}
854
+ onMobileOpenFile={this._handleMobileOpenFile}
855
+ onClearContextOptimistic={this.handleClearContextOptimistic}
856
+ onUserMessageSent={this.handleUserMessageSent}
857
+ />
858
+ </div>
859
+ </>
860
+ )}
861
+ {!mobileIsLocalLog && (
862
+ <div className={`${styles.mobileChatOverlay} ${this.state.mobileTerminalVisible ? styles.mobileChatOverlayVisible : ''}`}>
863
+ <TerminalPanel
864
+ {...this._settingsProps()}
865
+ modelName={mobileModelName}
866
+ onFilePath={this._handleTerminalFilePath}
867
+ pendingImages={this.state.terminalPendingImages}
868
+ onRemovePendingImage={this._handleRemoveTerminalImage}
869
+ onClearPendingImages={this._handleClearTerminalImages}
870
+ onClearContextOptimistic={this.handleClearContextOptimistic}
871
+ approvalsReviewer={this.state.approvalsReviewer}
872
+ onApprovalsReviewerChange={this.handleApprovalsReviewerChange}
873
+ planAutoApproveSeconds={this.state.approvalPrefs?.planAutoApproveSeconds}
874
+ onPlanAutoApproveChange={this.handlePlanAutoApproveChange}
875
+ />
876
+ </div>
877
+ )}
878
+ <div className={`${styles.mobileGitDiffOverlay} ${this.state.mobileGitDiffVisible ? styles.mobileGitDiffOverlayVisible : ''}`}>
879
+ <div className={styles.mobileGitDiffInner}>
880
+ <MobileGitDiff visible={this.state.mobileGitDiffVisible} onClose={() => this.setState({ mobileGitDiffVisible: false })} />
881
+ </div>
882
+ </div>
883
+ {/* 移动端(含 iPad)血条点击 → 从左侧划出的上下文管理抽屉。
884
+ 内层 zoom 0.6 在 :global(html.pad-mode) 下被覆写为 1(见 App.module.css)。
885
+ visible 时才 mount CachePopoverContent 以保留懒加载语义;关闭按钮放标题行右侧。 */}
886
+ <div className={`${styles.mobileCachePanelOverlay} ${this.state.mobileCachePanelVisible ? styles.mobileCachePanelOverlayVisible : ''}`}>
887
+ <div className={styles.mobileCachePanelInner}>
888
+ <div className={styles.mobileCachePanelHeader}>
889
+ <span className={styles.mobileCachePanelTitle}>{t('ui.contextManagement')}</span>
890
+ <button
891
+ className={styles.mobileCachePanelClose}
892
+ onClick={() => this.setState({ mobileCachePanelVisible: false }, () => this._onCachePanelOpenChange(false))}
893
+ aria-label={t('ui.closeCachePanel')}
894
+ >
895
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round">
896
+ <line x1="18" y1="6" x2="6" y2="18" />
897
+ <line x1="6" y1="6" x2="18" y2="18" />
898
+ </svg>
899
+ </button>
900
+ </div>
901
+ <div className={styles.mobileCachePanelBody}>
902
+ {this.state.mobileCachePanelVisible && (
903
+ <CachePopoverContent
904
+ inDrawer
905
+ requests={filteredRequests}
906
+ contextPercent={mobileContextPercent}
907
+ contextTokens={mobileContextTokens}
908
+ fsSkills={this.state._fsSkills}
909
+ onSkillImported={this.reloadFsSkills}
910
+ onOpenSkillsModal={this.handleOpenSkillsModal}
911
+ memory={this.state._memory}
912
+ memoryRefreshing={this.state._memoryRefreshing}
913
+ codexMd={this.state._codexMd}
914
+ onOpenMemoryDetail={this.loadMemoryDetail}
915
+ onOpenCodexMd={this.loadCodexMdDetail}
916
+ onRefreshMemory={this.handleRefreshMemory}
917
+ />
918
+ )}
919
+ </div>
920
+ </div>
921
+ </div>
922
+ <MemoryDetailModal
923
+ detail={this.state._memoryDetail}
924
+ onClose={() => this.setState({ _memoryDetail: null })}
925
+ onOpenMemoryDetail={this.loadMemoryDetail}
926
+ />
927
+ <MemoryDetailModal
928
+ detail={this.state._codexMdDetail}
929
+ onClose={() => this.setState({ _codexMdDetail: null })}
930
+ linkMode="passthrough"
931
+ />
932
+ <SkillsManagerModal
933
+ open={this.state._skillsModal?.open || false}
934
+ loading={this.state._skillsModal?.loading || false}
935
+ error={this.state._skillsModal?.error || null}
936
+ skills={this.state._skillsModal?.skills || []}
937
+ toggling={this.state._skillsModal?.toggling}
938
+ onToggle={(s) => this.handleToggleSkill(s)}
939
+ onDelete={(s) => this.handleDeleteSkill(s)}
940
+ onClose={() => this.setState(prev => ({ _skillsModal: { ...prev._skillsModal, open: false } }))}
941
+ />
942
+ <ProjectPrefsManagerModal
943
+ open={this.state.projectPrefsModalOpen}
944
+ onClose={() => this.setState({ projectPrefsModalOpen: false })}
945
+ onChanged={this.refreshAllPrefs}
946
+ />
947
+ {/* PC 端对齐的 3 个 modal —— 与 AppHeader 共用同款 self-contained 组件。
948
+ proxyProfiles / activeProxyId / defaultConfig / handleProxyProfileChange 由 AppBase 持有,
949
+ Mobile 继承直接读到。 */}
950
+ <PluginModal
951
+ open={this.state.pluginModalVisible}
952
+ onClose={() => this.setState({ pluginModalVisible: false })}
953
+ />
954
+ <ProcessModal
955
+ open={this.state.processModalVisible}
956
+ onClose={() => this.setState({ processModalVisible: false })}
957
+ />
958
+ <ProxyModal
959
+ open={this.state.proxyModalVisible}
960
+ onClose={() => this.setState({ proxyModalVisible: false })}
961
+ proxyProfiles={this.state.proxyProfiles}
962
+ activeProxyId={this.state.activeProxyId}
963
+ defaultConfig={this.state.defaultConfig}
964
+ onProxyProfileChange={this.handleProxyProfileChange}
965
+ />
966
+ <div className={`${styles.mobileFileExplorerOverlay} ${this.state.mobileFileExplorerVisible ? styles.mobileFileExplorerOverlayVisible : ''}`}>
967
+ <div className={styles.mobileFileExplorerInner}>
968
+ <MobileFileExplorer visible={this.state.mobileFileExplorerVisible} onClose={() => this.setState({ mobileFileExplorerVisible: false, mobileFileExplorerTarget: null })} targetFile={this.state.mobileFileExplorerTarget} projectName={this.state.projectName} />
969
+ </div>
970
+ </div>
971
+ <div className={`${styles.mobileStatsOverlay} ${this.state.mobileStatsVisible ? styles.mobileStatsOverlayVisible : ''}`}>
972
+ <div className={styles.mobileStatsInner}>
973
+ <MobileStats
974
+ requests={filteredRequests}
975
+ visible={this.state.mobileStatsVisible}
976
+ onClose={() => this.setState({ mobileStatsVisible: false })}
977
+ />
978
+ </div>
979
+ </div>
980
+ <div className={`${styles.mobileLogMgmtOverlay} ${this.state.mobileLogMgmtVisible ? styles.mobileLogMgmtOverlayVisible : ''}`}>
981
+ <div className={styles.mobileLogMgmtHeader}>
982
+ <span className={styles.mobileLogMgmtTitle}><OpenFolderIcon apiEndpoint={apiUrl('/api/open-log-dir')} title={t('ui.openLogDir')} size={14} />{t('ui.importLocalLogs')}</span>
983
+ <button className={styles.mobileLogMgmtClose} onClick={() => this.setState({ mobileLogMgmtVisible: false, selectedLogs: new Set() })}>
984
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round">
985
+ <line x1="18" y1="6" x2="6" y2="18" />
986
+ <line x1="6" y1="6" x2="18" y2="18" />
987
+ </svg>
988
+ </button>
989
+ </div>
990
+ <div className={styles.mobileLogMgmtActions}>
991
+ <Button
992
+ size="small"
993
+ type={this.state.selectedLogs.size >= 2 && ![...this.state.selectedLogs].some(f => f.endsWith('.jsonl.zip')) ? 'primary' : 'default'}
994
+ disabled={this.state.selectedLogs.size < 2 || [...this.state.selectedLogs].some(f => f.endsWith('.jsonl.zip'))}
995
+ onClick={this.handleMergeLogs}
996
+ style={this.state.selectedLogs.size < 2 || [...this.state.selectedLogs].some(f => f.endsWith('.jsonl.zip')) ? { color: 'var(--text-muted)', borderColor: 'var(--border-light)' } : undefined}
997
+ >
998
+ {t('ui.mergeLogs')}
999
+ </Button>
1000
+ <Button
1001
+ size="small"
1002
+ icon={<FileZipOutlined />}
1003
+ disabled={![...this.state.selectedLogs].some(f => f.endsWith('.jsonl'))}
1004
+ onClick={this.handleArchiveLogs}
1005
+ style={![...this.state.selectedLogs].some(f => f.endsWith('.jsonl')) ? { color: 'var(--text-muted)', borderColor: 'var(--border-light)' } : undefined}
1006
+ >
1007
+ {t('ui.archiveLogs')}
1008
+ </Button>
1009
+ <Button
1010
+ size="small"
1011
+ icon={<DeleteOutlined />}
1012
+ disabled={this.state.selectedLogs.size === 0}
1013
+ onClick={this.handleDeleteLogs}
1014
+ style={this.state.selectedLogs.size === 0 ? { color: 'var(--text-muted)', borderColor: 'var(--border-light)' } : { color: 'var(--color-error-light)', borderColor: 'var(--color-error-light)' }}
1015
+ >
1016
+ {t('ui.deleteLogs')}
1017
+ </Button>
1018
+ <Button
1019
+ size="small"
1020
+ icon={<ReloadOutlined spin={this.state.refreshingStats} />}
1021
+ loading={this.state.refreshingStats}
1022
+ onClick={this.handleRefreshStats}
1023
+ >
1024
+ {t('ui.refreshStats')}
1025
+ </Button>
1026
+ <span style={{ display: 'inline-flex', alignItems: 'center', gap: 4, marginLeft: 'auto' }}>
1027
+ <Switch size="small" checked={this.state.logShowAllInstances} onChange={this.handleToggleShowAllLogs} />
1028
+ {t('ui.showAllInstanceLogs')}
1029
+ </span>
1030
+ </div>
1031
+ <div className={styles.mobileLogMgmtBody}>
1032
+ {this.state.localLogsLoading ? (
1033
+ <div className={styles.spinCenter}><Spin /></div>
1034
+ ) : (() => {
1035
+ const currentLogs = this.state.localLogs[this.state.currentProject];
1036
+ if (!currentLogs || currentLogs.length === 0) {
1037
+ return (
1038
+ <div className={styles.emptyCenter}>
1039
+ {t('ui.noLogs')}
1040
+ </div>
1041
+ );
1042
+ }
1043
+ return (
1044
+ <div className={styles.logListContainer}>
1045
+ {this.renderLogTable(currentLogs, true)}
1046
+ </div>
1047
+ );
1048
+ })()}
1049
+ </div>
1050
+ </div>
1051
+ <div className={`${styles.mobileSettingsOverlay} ${this.state.mobileSettingsVisible ? styles.mobileSettingsOverlayVisible : ''}`}>
1052
+ <div className={styles.mobileLogMgmtHeader}>
1053
+ <span className={styles.mobileLogMgmtTitle}>{t('ui.settings')}</span>
1054
+ <button className={styles.mobileLogMgmtClose} onClick={() => this.setState({ mobileSettingsVisible: false })}>
1055
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round">
1056
+ <line x1="18" y1="6" x2="6" y2="18" />
1057
+ <line x1="6" y1="6" x2="18" y2="18" />
1058
+ </svg>
1059
+ </button>
1060
+ </div>
1061
+ <div className={styles.mobileSettingsBody}>
1062
+ <div className={styles.mobileSettingsGroup}>
1063
+ <div className={styles.mobileSettingsSectionTitle}>{t('ui.chatDisplay')}</div>
1064
+ <div className={styles.mobileSettingsRow}>
1065
+ <span className={styles.mobileSettingsLabel}>
1066
+ {t('ui.permission.reviewer.setting')}
1067
+ <Tooltip title={t('ui.permission.reviewer.help')} trigger="click">
1068
+ <QuestionCircleOutlined className={styles.mobileSettingsHelpIcon} />
1069
+ </Tooltip>
1070
+ </span>
1071
+ <Select
1072
+ size="small"
1073
+ value={this.state.approvalsReviewer}
1074
+ onChange={this.handleApprovalsReviewerChange}
1075
+ options={approvalReviewerSelectOptions(t)}
1076
+ style={{ width: 150 }}
1077
+ />
1078
+ </div>
1079
+ {this.state.approvalPrefs && (
1080
+ <div className={styles.mobileSettingsRow}>
1081
+ <span className={styles.mobileSettingsLabel}>
1082
+ {t('ui.approval.settings.planAutoApprove')}
1083
+ <Tooltip title={t('ui.approval.settings.planAutoApproveHelp')} trigger="click">
1084
+ <QuestionCircleOutlined className={styles.mobileSettingsHelpIcon} />
1085
+ </Tooltip>
1086
+ </span>
1087
+ <Select
1088
+ size="small"
1089
+ value={this.state.approvalPrefs.planAutoApproveSeconds || 0}
1090
+ onChange={(value) => this.handleApprovalPrefsChange({ planAutoApproveSeconds: value })}
1091
+ options={autoApproveSelectOptions(PLAN_AUTO_APPROVE_OPTIONS, t)}
1092
+ style={{ width: 100 }}
1093
+ />
1094
+ </div>
1095
+ )}
1096
+ {isPad && this.state.approvalPrefs && (
1097
+ <>
1098
+ <div className={styles.mobileSettingsRow}>
1099
+ <span className={styles.mobileSettingsLabel}>{t('ui.approval.settings.modalEnabled')}</span>
1100
+ <Switch
1101
+ checked={this.state.approvalPrefs.modalEnabled !== false}
1102
+ onChange={(checked) => this.handleApprovalPrefsChange({ modalEnabled: checked })}
1103
+ />
1104
+ </div>
1105
+ {/* notifyOnlyWhenHidden 依赖 electron main 进程的 OS Notification + 窗口聚焦判断,
1106
+ 纯 web 模式下 main.js 路径不存在,开关无效果 → 仅 electron 启动模式显示。 */}
1107
+ {typeof window !== 'undefined' && window.tabBridge && (
1108
+ <div className={styles.mobileSettingsRow}>
1109
+ <span className={styles.mobileSettingsLabel}>{t('ui.approval.settings.notifyOnlyWhenHidden')}</span>
1110
+ <Switch
1111
+ checked={this.state.approvalPrefs.notifyOnlyWhenHidden !== false}
1112
+ onChange={(checked) => this.handleApprovalPrefsChange({ notifyOnlyWhenHidden: checked })}
1113
+ />
1114
+ </div>
1115
+ )}
1116
+ </>
1117
+ )}
1118
+ {/* 「审批提示音」合并开关 — 暴露给 phone + iPad(phone 也需要 plan/ask/turnEnd 音频提示)。
1119
+ OFF 时下方 VoicePackSettings 整组隐藏。 */}
1120
+ {this.state.approvalPrefs && (
1121
+ <div className={styles.mobileSettingsRow}>
1122
+ <span className={styles.mobileSettingsLabel}>{t('ui.approval.settings.soundEnabled')}</span>
1123
+ <Switch
1124
+ checked={!!this.state.approvalPrefs.soundEnabled}
1125
+ onChange={(checked) => this.handleApprovalSoundToggle(checked)}
1126
+ />
1127
+ </div>
1128
+ )}
1129
+ {this.state.approvalPrefs && this.state.approvalPrefs.soundEnabled && (
1130
+ <VoicePackSettings
1131
+ prefs={this.state.approvalPrefs.voicePack}
1132
+ onChange={this.handleVoicePackChange}
1133
+ embedded
1134
+ />
1135
+ )}
1136
+ <div className={styles.mobileSettingsRow}>
1137
+ <span className={styles.mobileSettingsLabel}>{t('ui.expandThinking')}</span>
1138
+ <Switch
1139
+ checked={prefs.expandThinking}
1140
+ onChange={this.handleExpandThinkingChange}
1141
+ />
1142
+ </div>
1143
+ <div className={styles.mobileSettingsRow}>
1144
+ <span className={styles.mobileSettingsLabel}>{t('ui.showFullToolContent')}</span>
1145
+ <Switch
1146
+ checked={prefs.showFullToolContent}
1147
+ onChange={this.handleShowFullToolContentChange}
1148
+ />
1149
+ </div>
1150
+ {prefs.showFullToolContent && (
1151
+ <div className={styles.mobileSettingsRow}>
1152
+ <span className={styles.mobileSettingsLabel}>{t('ui.collapseToolResults')}</span>
1153
+ <Switch
1154
+ checked={prefs.collapseToolResults}
1155
+ onChange={this.handleCollapseToolResultsChange}
1156
+ />
1157
+ </div>
1158
+ )}
1159
+ {/* logfile 只读模式强制全量展示所有 session,隐藏该开关 */}
1160
+ {!mobileIsLocalLog && (
1161
+ <div className={styles.mobileSettingsRow}>
1162
+ <span className={styles.mobileSettingsLabel}>
1163
+ {t('ui.onlyCurrentSession')}
1164
+ <Tooltip title={t('ui.onlyCurrentSession.help')} trigger="click">
1165
+ <QuestionCircleOutlined className={styles.mobileSettingsHelpIcon} />
1166
+ </Tooltip>
1167
+ </span>
1168
+ <Switch
1169
+ checked={prefs.onlyCurrentSession}
1170
+ onChange={this.handleOnlyCurrentSessionChange}
1171
+ />
1172
+ </div>
1173
+ )}
1174
+ </div>
1175
+ <div className={styles.mobileSettingsGroup}>
1176
+ <div className={styles.mobileSettingsSectionTitle}>{t('ui.logSettings')}</div>
1177
+ <div className={styles.mobileSettingsRow}>
1178
+ <span className={styles.mobileSettingsLabel}>{t('ui.resumeAutoChoice')}</span>
1179
+ <Switch
1180
+ checked={!!this.state.resumeAutoChoice}
1181
+ onChange={this.handleResumeAutoChoiceToggle}
1182
+ />
1183
+ </div>
1184
+ {this.state.resumeAutoChoice && (
1185
+ <div className={styles.mobileSettingsRow}>
1186
+ <Radio.Group
1187
+ value={this.state.resumeAutoChoice}
1188
+ onChange={(e) => this.handleResumeAutoChoiceChange(e.target.value)}
1189
+ size="small"
1190
+ >
1191
+ <Radio value="continue">{t('ui.resumeAutoChoice.continue')}</Radio>
1192
+ <Radio value="new">{t('ui.resumeAutoChoice.new')}</Radio>
1193
+ </Radio.Group>
1194
+ </div>
1195
+ )}
1196
+ </div>
1197
+ <div className={styles.mobileSettingsGroup}>
1198
+ <div className={styles.mobileSettingsSectionTitle}>{t('ui.themeStyle')}</div>
1199
+ <div className={styles.mobileSettingsRow}>
1200
+ <span className={styles.mobileSettingsLabel}>{t('ui.themeColor')}</span>
1201
+ <Select
1202
+ size="small"
1203
+ value={this.state.themeColor || 'light'}
1204
+ onChange={this.handleThemeColorChange}
1205
+ options={[
1206
+ { label: t('ui.themeColor.dark'), value: 'dark' },
1207
+ { label: t('ui.themeColor.light'), value: 'light' },
1208
+ ]}
1209
+ style={{ width: 140 }}
1210
+ />
1211
+ </div>
1212
+ <div className={styles.mobileSettingsRow}>
1213
+ <span className={styles.mobileSettingsLabel}>{t('ui.languageSettings')}</span>
1214
+ <Select
1215
+ size="small"
1216
+ value={getLang()}
1217
+ onChange={(value) => {
1218
+ setLang(value);
1219
+ this.handleLangChange();
1220
+ }}
1221
+ options={LANG_OPTIONS.map(o => ({ label: o.label, value: o.value }))}
1222
+ style={{ width: 140 }}
1223
+ />
1224
+ </div>
1225
+ </div>
1226
+ {/* 项目独立配置:非本机(LAN)+有真实项目 → 开关;本机+有其他项目独立配置 → 管理入口(详见 AppHeader 抽屉同款逻辑) */}
1227
+ {(() => {
1228
+ const pp = (this.context && this.context.preferences) || {};
1229
+ const showToggle = !this._isLocalLog && !!pp._projectName && pp._isLocal === false;
1230
+ const forkKeys = Array.isArray(pp._projectPrefsKeys) ? pp._projectPrefsKeys : [];
1231
+ const showManage = pp._isLocal === true && forkKeys.length > 0;
1232
+ if (!showToggle && !showManage) return null;
1233
+ return (
1234
+ <div className={styles.mobileSettingsGroup}>
1235
+ <div className={styles.mobileSettingsSectionTitle}>{t('ui.projectScopedPrefs.group')}</div>
1236
+ {showToggle && (
1237
+ <div className={styles.mobileSettingsRow}>
1238
+ <span className={styles.mobileSettingsLabel}>
1239
+ {t('ui.projectScopedPrefs')}
1240
+ <Tooltip title={t('ui.projectScopedPrefs.help')}>
1241
+ <QuestionCircleOutlined className={styles.mobileSettingsHelpIcon} />
1242
+ </Tooltip>
1243
+ </span>
1244
+ <Switch
1245
+ aria-label={t('ui.projectScopedPrefs')}
1246
+ checked={!!pp._projectScoped}
1247
+ onChange={(checked) => this.handleToggleProjectScoped(checked)}
1248
+ />
1249
+ </div>
1250
+ )}
1251
+ {showManage && (
1252
+ <div className={styles.mobileSettingsRow}>
1253
+ <span className={styles.mobileSettingsLabel}>{t('ui.projectPrefsManage')}</span>
1254
+ <Button size="small" onClick={() => this.setState({ projectPrefsModalOpen: true })}>
1255
+ {t('ui.projectPrefsManage.open', { count: forkKeys.length })}
1256
+ </Button>
1257
+ </div>
1258
+ )}
1259
+ </div>
1260
+ );
1261
+ })()}
1262
+ </div>
1263
+ </div>
1264
+ <div className={`${styles.mobilePromptOverlay} ${this.state.mobilePromptVisible ? styles.mobilePromptOverlayVisible : ''}`}>
1265
+ <div className={styles.mobileLogMgmtHeader}>
1266
+ <span className={styles.mobileLogMgmtTitle}>{t('ui.userPrompt')}</span>
1267
+ <button className={styles.mobileLogMgmtClose} onClick={() => this.setState({ mobilePromptVisible: false })}>
1268
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2" strokeLinecap="round">
1269
+ <line x1="18" y1="6" x2="6" y2="18" />
1270
+ <line x1="6" y1="6" x2="18" y2="18" />
1271
+ </svg>
1272
+ </button>
1273
+ </div>
1274
+ <div className={styles.mobilePromptBody}>
1275
+ {(() => {
1276
+ const prompts = this.extractUserPrompts(filteredRequests);
1277
+ if (prompts.length === 0) {
1278
+ return (
1279
+ <div className={styles.mobilePromptEmpty}>
1280
+ {t('ui.noPrompt')}
1281
+ </div>
1282
+ );
1283
+ }
1284
+ return (
1285
+ <>
1286
+ <div className={styles.mobilePromptHeader}>
1287
+ <span className={styles.mobilePromptCount}>
1288
+ {prompts.length} {t('ui.promptCountUnit')}
1289
+ </span>
1290
+ <Button
1291
+ size="small"
1292
+ icon={<DownloadOutlined />}
1293
+ onClick={() => this.handleExportPromptsTxt(prompts)}
1294
+ >
1295
+ {t('ui.exportPromptsTxt')}
1296
+ </Button>
1297
+ </div>
1298
+ <div className={styles.mobilePromptList}>
1299
+ {prompts.map((p, i) => (
1300
+ <div key={i} className={styles.mobilePromptItem}>
1301
+ {p.timestamp && (
1302
+ <div className={styles.mobilePromptTimestamp}>
1303
+ {new Date(p.timestamp).toLocaleString()}
1304
+ </div>
1305
+ )}
1306
+ {this.renderOriginalPrompt(p)}
1307
+ </div>
1308
+ ))}
1309
+ </div>
1310
+ </>
1311
+ );
1312
+ })()}
1313
+ </div>
1314
+ </div>
1315
+ </div>
1316
+ {/* 全局权限审批浮层 — 在 mobileCLIBody 之外渲染,避免 transform 影响 position: fixed */}
1317
+ {this.state.globalPermission && (
1318
+ <ToolApprovalPanel
1319
+ toolName={this.state.globalPermission.permission.toolName}
1320
+ toolInput={this.state.globalPermission.permission.input}
1321
+ requestId={this.state.globalPermission.permission.id}
1322
+ onAllow={this.state.globalPermission.handlers.allow}
1323
+ onAllowSession={this.state.globalPermission.handlers.allowSession}
1324
+ onDeny={this.state.globalPermission.handlers.deny}
1325
+ visible={true}
1326
+ global={true}
1327
+ />
1328
+ )}
1329
+ {this.state.globalPlanApproval && (
1330
+ <ToolApprovalPanel
1331
+ toolName={CODEX_PLAN_TOOL_NAME}
1332
+ toolInput={this.state.globalPlanApproval.plan.input}
1333
+ requestId={this.state.globalPlanApproval.plan.id}
1334
+ onAllow={this.state.globalPlanApproval.handlers.approve}
1335
+ onDeny={(id) => this.state.globalPlanApproval.handlers.reject(id, '')}
1336
+ visible={true}
1337
+ global={true}
1338
+ />
1339
+ )}
1340
+ </div>
1341
+ </ConfigProvider>
1342
+ </ApprovalModal>
1343
+ </TerminalWsProvider>
1344
+ );
1345
+ }
1346
+ }
1347
+
1348
+ export default Mobile;