cx-viewer 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (864) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +221 -0
  3. package/cli.js +735 -0
  4. package/concepts/ar/BodyDiffJSON.md +32 -0
  5. package/concepts/ar/BodyFields.md +42 -0
  6. package/concepts/ar/CacheRebuild.md +36 -0
  7. package/concepts/ar/GlobalSettings.md +232 -0
  8. package/concepts/ar/KVCacheContent.md +49 -0
  9. package/concepts/ar/MainAgent.md +23 -0
  10. package/concepts/ar/ProxySwitch.md +50 -0
  11. package/concepts/ar/QRCode.md +25 -0
  12. package/concepts/ar/ResponseFields.md +50 -0
  13. package/concepts/ar/SubAgent-Search.md +20 -0
  14. package/concepts/ar/Teammate.md +26 -0
  15. package/concepts/ar/Tool-Agent.md +125 -0
  16. package/concepts/ar/Tool-AskUserQuestion.md +75 -0
  17. package/concepts/ar/Tool-Bash.md +167 -0
  18. package/concepts/ar/Tool-Edit.md +46 -0
  19. package/concepts/ar/Tool-EnterPlanMode.md +128 -0
  20. package/concepts/ar/Tool-EnterWorktree.md +56 -0
  21. package/concepts/ar/Tool-ExitPlanMode.md +62 -0
  22. package/concepts/ar/Tool-Glob.md +39 -0
  23. package/concepts/ar/Tool-Grep.md +57 -0
  24. package/concepts/ar/Tool-NotebookEdit.md +33 -0
  25. package/concepts/ar/Tool-Read.md +56 -0
  26. package/concepts/ar/Tool-SendMessage.md +41 -0
  27. package/concepts/ar/Tool-Skill.md +56 -0
  28. package/concepts/ar/Tool-Task.md +51 -0
  29. package/concepts/ar/Tool-TaskCreate.md +78 -0
  30. package/concepts/ar/Tool-TaskGet.md +56 -0
  31. package/concepts/ar/Tool-TaskList.md +56 -0
  32. package/concepts/ar/Tool-TaskOutput.md +40 -0
  33. package/concepts/ar/Tool-TaskStop.md +32 -0
  34. package/concepts/ar/Tool-TaskUpdate.md +123 -0
  35. package/concepts/ar/Tool-TeamCreate.md +38 -0
  36. package/concepts/ar/Tool-TeamDelete.md +30 -0
  37. package/concepts/ar/Tool-WebFetch.md +55 -0
  38. package/concepts/ar/Tool-WebSearch.md +58 -0
  39. package/concepts/ar/Tool-Write.md +39 -0
  40. package/concepts/ar/Tool-executeCode.md +41 -0
  41. package/concepts/ar/Tool-getDiagnostics.md +32 -0
  42. package/concepts/ar/Tools.md +67 -0
  43. package/concepts/ar/ToolsFirst.md +77 -0
  44. package/concepts/ar/TranslateContextPollution.md +46 -0
  45. package/concepts/ar/UltraPlan.md +55 -0
  46. package/concepts/da/BodyDiffJSON.md +32 -0
  47. package/concepts/da/BodyFields.md +42 -0
  48. package/concepts/da/CacheRebuild.md +36 -0
  49. package/concepts/da/GlobalSettings.md +232 -0
  50. package/concepts/da/KVCacheContent.md +49 -0
  51. package/concepts/da/MainAgent.md +23 -0
  52. package/concepts/da/ProxySwitch.md +50 -0
  53. package/concepts/da/QRCode.md +25 -0
  54. package/concepts/da/ResponseFields.md +50 -0
  55. package/concepts/da/SubAgent-Search.md +20 -0
  56. package/concepts/da/Teammate.md +26 -0
  57. package/concepts/da/Tool-Agent.md +125 -0
  58. package/concepts/da/Tool-AskUserQuestion.md +75 -0
  59. package/concepts/da/Tool-Bash.md +167 -0
  60. package/concepts/da/Tool-Edit.md +46 -0
  61. package/concepts/da/Tool-EnterPlanMode.md +128 -0
  62. package/concepts/da/Tool-EnterWorktree.md +56 -0
  63. package/concepts/da/Tool-ExitPlanMode.md +62 -0
  64. package/concepts/da/Tool-Glob.md +39 -0
  65. package/concepts/da/Tool-Grep.md +57 -0
  66. package/concepts/da/Tool-NotebookEdit.md +33 -0
  67. package/concepts/da/Tool-Read.md +56 -0
  68. package/concepts/da/Tool-SendMessage.md +41 -0
  69. package/concepts/da/Tool-Skill.md +56 -0
  70. package/concepts/da/Tool-Task.md +51 -0
  71. package/concepts/da/Tool-TaskCreate.md +78 -0
  72. package/concepts/da/Tool-TaskGet.md +56 -0
  73. package/concepts/da/Tool-TaskList.md +56 -0
  74. package/concepts/da/Tool-TaskOutput.md +40 -0
  75. package/concepts/da/Tool-TaskStop.md +32 -0
  76. package/concepts/da/Tool-TaskUpdate.md +123 -0
  77. package/concepts/da/Tool-TeamCreate.md +38 -0
  78. package/concepts/da/Tool-TeamDelete.md +30 -0
  79. package/concepts/da/Tool-WebFetch.md +55 -0
  80. package/concepts/da/Tool-WebSearch.md +58 -0
  81. package/concepts/da/Tool-Write.md +39 -0
  82. package/concepts/da/Tool-executeCode.md +41 -0
  83. package/concepts/da/Tool-getDiagnostics.md +32 -0
  84. package/concepts/da/Tools.md +67 -0
  85. package/concepts/da/ToolsFirst.md +77 -0
  86. package/concepts/da/TranslateContextPollution.md +46 -0
  87. package/concepts/da/UltraPlan.md +55 -0
  88. package/concepts/de/BodyDiffJSON.md +32 -0
  89. package/concepts/de/BodyFields.md +42 -0
  90. package/concepts/de/CacheRebuild.md +36 -0
  91. package/concepts/de/GlobalSettings.md +232 -0
  92. package/concepts/de/KVCacheContent.md +49 -0
  93. package/concepts/de/MainAgent.md +23 -0
  94. package/concepts/de/ProxySwitch.md +50 -0
  95. package/concepts/de/QRCode.md +25 -0
  96. package/concepts/de/ResponseFields.md +50 -0
  97. package/concepts/de/SubAgent-Search.md +20 -0
  98. package/concepts/de/Teammate.md +26 -0
  99. package/concepts/de/Tool-Agent.md +125 -0
  100. package/concepts/de/Tool-AskUserQuestion.md +75 -0
  101. package/concepts/de/Tool-Bash.md +167 -0
  102. package/concepts/de/Tool-Edit.md +46 -0
  103. package/concepts/de/Tool-EnterPlanMode.md +128 -0
  104. package/concepts/de/Tool-EnterWorktree.md +56 -0
  105. package/concepts/de/Tool-ExitPlanMode.md +62 -0
  106. package/concepts/de/Tool-Glob.md +39 -0
  107. package/concepts/de/Tool-Grep.md +57 -0
  108. package/concepts/de/Tool-NotebookEdit.md +33 -0
  109. package/concepts/de/Tool-Read.md +56 -0
  110. package/concepts/de/Tool-SendMessage.md +41 -0
  111. package/concepts/de/Tool-Skill.md +56 -0
  112. package/concepts/de/Tool-Task.md +51 -0
  113. package/concepts/de/Tool-TaskCreate.md +78 -0
  114. package/concepts/de/Tool-TaskGet.md +56 -0
  115. package/concepts/de/Tool-TaskList.md +56 -0
  116. package/concepts/de/Tool-TaskOutput.md +40 -0
  117. package/concepts/de/Tool-TaskStop.md +32 -0
  118. package/concepts/de/Tool-TaskUpdate.md +123 -0
  119. package/concepts/de/Tool-TeamCreate.md +38 -0
  120. package/concepts/de/Tool-TeamDelete.md +30 -0
  121. package/concepts/de/Tool-WebFetch.md +55 -0
  122. package/concepts/de/Tool-WebSearch.md +58 -0
  123. package/concepts/de/Tool-Write.md +39 -0
  124. package/concepts/de/Tool-executeCode.md +41 -0
  125. package/concepts/de/Tool-getDiagnostics.md +32 -0
  126. package/concepts/de/Tools.md +67 -0
  127. package/concepts/de/ToolsFirst.md +77 -0
  128. package/concepts/de/TranslateContextPollution.md +46 -0
  129. package/concepts/de/UltraPlan.md +55 -0
  130. package/concepts/en/BodyDiffJSON.md +32 -0
  131. package/concepts/en/BodyFields.md +42 -0
  132. package/concepts/en/CacheRebuild.md +36 -0
  133. package/concepts/en/GlobalSettings.md +232 -0
  134. package/concepts/en/KVCacheContent.md +49 -0
  135. package/concepts/en/MainAgent.md +23 -0
  136. package/concepts/en/ProxySwitch.md +50 -0
  137. package/concepts/en/QRCode.md +29 -0
  138. package/concepts/en/ResponseFields.md +50 -0
  139. package/concepts/en/SubAgent-Search.md +20 -0
  140. package/concepts/en/Teammate.md +26 -0
  141. package/concepts/en/Tool-Agent.md +125 -0
  142. package/concepts/en/Tool-AskUserQuestion.md +75 -0
  143. package/concepts/en/Tool-Bash.md +167 -0
  144. package/concepts/en/Tool-Edit.md +46 -0
  145. package/concepts/en/Tool-EnterPlanMode.md +128 -0
  146. package/concepts/en/Tool-EnterWorktree.md +56 -0
  147. package/concepts/en/Tool-ExitPlanMode.md +62 -0
  148. package/concepts/en/Tool-Glob.md +39 -0
  149. package/concepts/en/Tool-Grep.md +57 -0
  150. package/concepts/en/Tool-NotebookEdit.md +33 -0
  151. package/concepts/en/Tool-Read.md +56 -0
  152. package/concepts/en/Tool-SendMessage.md +41 -0
  153. package/concepts/en/Tool-Skill.md +56 -0
  154. package/concepts/en/Tool-Task.md +51 -0
  155. package/concepts/en/Tool-TaskCreate.md +78 -0
  156. package/concepts/en/Tool-TaskGet.md +56 -0
  157. package/concepts/en/Tool-TaskList.md +56 -0
  158. package/concepts/en/Tool-TaskOutput.md +40 -0
  159. package/concepts/en/Tool-TaskStop.md +32 -0
  160. package/concepts/en/Tool-TaskUpdate.md +123 -0
  161. package/concepts/en/Tool-TeamCreate.md +38 -0
  162. package/concepts/en/Tool-TeamDelete.md +30 -0
  163. package/concepts/en/Tool-WebFetch.md +55 -0
  164. package/concepts/en/Tool-WebSearch.md +58 -0
  165. package/concepts/en/Tool-Write.md +39 -0
  166. package/concepts/en/Tool-executeCode.md +41 -0
  167. package/concepts/en/Tool-getDiagnostics.md +32 -0
  168. package/concepts/en/Tools.md +67 -0
  169. package/concepts/en/ToolsFirst.md +77 -0
  170. package/concepts/en/TranslateContextPollution.md +46 -0
  171. package/concepts/en/UltraPlan.md +55 -0
  172. package/concepts/es/BodyDiffJSON.md +32 -0
  173. package/concepts/es/BodyFields.md +42 -0
  174. package/concepts/es/CacheRebuild.md +36 -0
  175. package/concepts/es/GlobalSettings.md +232 -0
  176. package/concepts/es/KVCacheContent.md +49 -0
  177. package/concepts/es/MainAgent.md +23 -0
  178. package/concepts/es/ProxySwitch.md +50 -0
  179. package/concepts/es/QRCode.md +25 -0
  180. package/concepts/es/ResponseFields.md +50 -0
  181. package/concepts/es/SubAgent-Search.md +20 -0
  182. package/concepts/es/Teammate.md +26 -0
  183. package/concepts/es/Tool-Agent.md +125 -0
  184. package/concepts/es/Tool-AskUserQuestion.md +75 -0
  185. package/concepts/es/Tool-Bash.md +167 -0
  186. package/concepts/es/Tool-Edit.md +46 -0
  187. package/concepts/es/Tool-EnterPlanMode.md +128 -0
  188. package/concepts/es/Tool-EnterWorktree.md +56 -0
  189. package/concepts/es/Tool-ExitPlanMode.md +62 -0
  190. package/concepts/es/Tool-Glob.md +39 -0
  191. package/concepts/es/Tool-Grep.md +57 -0
  192. package/concepts/es/Tool-NotebookEdit.md +33 -0
  193. package/concepts/es/Tool-Read.md +56 -0
  194. package/concepts/es/Tool-SendMessage.md +41 -0
  195. package/concepts/es/Tool-Skill.md +56 -0
  196. package/concepts/es/Tool-Task.md +51 -0
  197. package/concepts/es/Tool-TaskCreate.md +78 -0
  198. package/concepts/es/Tool-TaskGet.md +56 -0
  199. package/concepts/es/Tool-TaskList.md +56 -0
  200. package/concepts/es/Tool-TaskOutput.md +40 -0
  201. package/concepts/es/Tool-TaskStop.md +32 -0
  202. package/concepts/es/Tool-TaskUpdate.md +123 -0
  203. package/concepts/es/Tool-TeamCreate.md +38 -0
  204. package/concepts/es/Tool-TeamDelete.md +30 -0
  205. package/concepts/es/Tool-WebFetch.md +55 -0
  206. package/concepts/es/Tool-WebSearch.md +58 -0
  207. package/concepts/es/Tool-Write.md +39 -0
  208. package/concepts/es/Tool-executeCode.md +41 -0
  209. package/concepts/es/Tool-getDiagnostics.md +32 -0
  210. package/concepts/es/Tools.md +67 -0
  211. package/concepts/es/ToolsFirst.md +77 -0
  212. package/concepts/es/TranslateContextPollution.md +46 -0
  213. package/concepts/es/UltraPlan.md +55 -0
  214. package/concepts/fr/BodyDiffJSON.md +32 -0
  215. package/concepts/fr/BodyFields.md +42 -0
  216. package/concepts/fr/CacheRebuild.md +36 -0
  217. package/concepts/fr/GlobalSettings.md +232 -0
  218. package/concepts/fr/KVCacheContent.md +49 -0
  219. package/concepts/fr/MainAgent.md +23 -0
  220. package/concepts/fr/ProxySwitch.md +50 -0
  221. package/concepts/fr/QRCode.md +25 -0
  222. package/concepts/fr/ResponseFields.md +50 -0
  223. package/concepts/fr/SubAgent-Search.md +20 -0
  224. package/concepts/fr/Teammate.md +26 -0
  225. package/concepts/fr/Tool-Agent.md +125 -0
  226. package/concepts/fr/Tool-AskUserQuestion.md +75 -0
  227. package/concepts/fr/Tool-Bash.md +167 -0
  228. package/concepts/fr/Tool-Edit.md +46 -0
  229. package/concepts/fr/Tool-EnterPlanMode.md +128 -0
  230. package/concepts/fr/Tool-EnterWorktree.md +56 -0
  231. package/concepts/fr/Tool-ExitPlanMode.md +62 -0
  232. package/concepts/fr/Tool-Glob.md +39 -0
  233. package/concepts/fr/Tool-Grep.md +57 -0
  234. package/concepts/fr/Tool-NotebookEdit.md +33 -0
  235. package/concepts/fr/Tool-Read.md +56 -0
  236. package/concepts/fr/Tool-SendMessage.md +41 -0
  237. package/concepts/fr/Tool-Skill.md +56 -0
  238. package/concepts/fr/Tool-Task.md +51 -0
  239. package/concepts/fr/Tool-TaskCreate.md +78 -0
  240. package/concepts/fr/Tool-TaskGet.md +56 -0
  241. package/concepts/fr/Tool-TaskList.md +56 -0
  242. package/concepts/fr/Tool-TaskOutput.md +40 -0
  243. package/concepts/fr/Tool-TaskStop.md +32 -0
  244. package/concepts/fr/Tool-TaskUpdate.md +123 -0
  245. package/concepts/fr/Tool-TeamCreate.md +38 -0
  246. package/concepts/fr/Tool-TeamDelete.md +30 -0
  247. package/concepts/fr/Tool-WebFetch.md +55 -0
  248. package/concepts/fr/Tool-WebSearch.md +58 -0
  249. package/concepts/fr/Tool-Write.md +39 -0
  250. package/concepts/fr/Tool-executeCode.md +41 -0
  251. package/concepts/fr/Tool-getDiagnostics.md +32 -0
  252. package/concepts/fr/Tools.md +67 -0
  253. package/concepts/fr/ToolsFirst.md +77 -0
  254. package/concepts/fr/TranslateContextPollution.md +46 -0
  255. package/concepts/fr/UltraPlan.md +55 -0
  256. package/concepts/it/BodyDiffJSON.md +32 -0
  257. package/concepts/it/BodyFields.md +42 -0
  258. package/concepts/it/CacheRebuild.md +36 -0
  259. package/concepts/it/GlobalSettings.md +232 -0
  260. package/concepts/it/KVCacheContent.md +49 -0
  261. package/concepts/it/MainAgent.md +23 -0
  262. package/concepts/it/ProxySwitch.md +50 -0
  263. package/concepts/it/QRCode.md +25 -0
  264. package/concepts/it/ResponseFields.md +50 -0
  265. package/concepts/it/SubAgent-Search.md +20 -0
  266. package/concepts/it/Teammate.md +26 -0
  267. package/concepts/it/Tool-Agent.md +125 -0
  268. package/concepts/it/Tool-AskUserQuestion.md +75 -0
  269. package/concepts/it/Tool-Bash.md +167 -0
  270. package/concepts/it/Tool-Edit.md +46 -0
  271. package/concepts/it/Tool-EnterPlanMode.md +128 -0
  272. package/concepts/it/Tool-EnterWorktree.md +56 -0
  273. package/concepts/it/Tool-ExitPlanMode.md +62 -0
  274. package/concepts/it/Tool-Glob.md +39 -0
  275. package/concepts/it/Tool-Grep.md +57 -0
  276. package/concepts/it/Tool-NotebookEdit.md +33 -0
  277. package/concepts/it/Tool-Read.md +56 -0
  278. package/concepts/it/Tool-SendMessage.md +41 -0
  279. package/concepts/it/Tool-Skill.md +56 -0
  280. package/concepts/it/Tool-Task.md +51 -0
  281. package/concepts/it/Tool-TaskCreate.md +78 -0
  282. package/concepts/it/Tool-TaskGet.md +56 -0
  283. package/concepts/it/Tool-TaskList.md +56 -0
  284. package/concepts/it/Tool-TaskOutput.md +40 -0
  285. package/concepts/it/Tool-TaskStop.md +32 -0
  286. package/concepts/it/Tool-TaskUpdate.md +123 -0
  287. package/concepts/it/Tool-TeamCreate.md +38 -0
  288. package/concepts/it/Tool-TeamDelete.md +30 -0
  289. package/concepts/it/Tool-WebFetch.md +55 -0
  290. package/concepts/it/Tool-WebSearch.md +58 -0
  291. package/concepts/it/Tool-Write.md +39 -0
  292. package/concepts/it/Tool-executeCode.md +41 -0
  293. package/concepts/it/Tool-getDiagnostics.md +32 -0
  294. package/concepts/it/Tools.md +67 -0
  295. package/concepts/it/ToolsFirst.md +77 -0
  296. package/concepts/it/TranslateContextPollution.md +46 -0
  297. package/concepts/it/UltraPlan.md +55 -0
  298. package/concepts/ja/BodyDiffJSON.md +32 -0
  299. package/concepts/ja/BodyFields.md +42 -0
  300. package/concepts/ja/CacheRebuild.md +36 -0
  301. package/concepts/ja/GlobalSettings.md +232 -0
  302. package/concepts/ja/KVCacheContent.md +49 -0
  303. package/concepts/ja/MainAgent.md +23 -0
  304. package/concepts/ja/ProxySwitch.md +50 -0
  305. package/concepts/ja/QRCode.md +25 -0
  306. package/concepts/ja/ResponseFields.md +50 -0
  307. package/concepts/ja/SubAgent-Search.md +20 -0
  308. package/concepts/ja/Teammate.md +26 -0
  309. package/concepts/ja/Tool-Agent.md +125 -0
  310. package/concepts/ja/Tool-AskUserQuestion.md +75 -0
  311. package/concepts/ja/Tool-Bash.md +167 -0
  312. package/concepts/ja/Tool-Edit.md +46 -0
  313. package/concepts/ja/Tool-EnterPlanMode.md +128 -0
  314. package/concepts/ja/Tool-EnterWorktree.md +56 -0
  315. package/concepts/ja/Tool-ExitPlanMode.md +62 -0
  316. package/concepts/ja/Tool-Glob.md +39 -0
  317. package/concepts/ja/Tool-Grep.md +57 -0
  318. package/concepts/ja/Tool-NotebookEdit.md +33 -0
  319. package/concepts/ja/Tool-Read.md +56 -0
  320. package/concepts/ja/Tool-SendMessage.md +41 -0
  321. package/concepts/ja/Tool-Skill.md +56 -0
  322. package/concepts/ja/Tool-Task.md +51 -0
  323. package/concepts/ja/Tool-TaskCreate.md +78 -0
  324. package/concepts/ja/Tool-TaskGet.md +56 -0
  325. package/concepts/ja/Tool-TaskList.md +56 -0
  326. package/concepts/ja/Tool-TaskOutput.md +40 -0
  327. package/concepts/ja/Tool-TaskStop.md +32 -0
  328. package/concepts/ja/Tool-TaskUpdate.md +123 -0
  329. package/concepts/ja/Tool-TeamCreate.md +38 -0
  330. package/concepts/ja/Tool-TeamDelete.md +30 -0
  331. package/concepts/ja/Tool-WebFetch.md +55 -0
  332. package/concepts/ja/Tool-WebSearch.md +58 -0
  333. package/concepts/ja/Tool-Write.md +39 -0
  334. package/concepts/ja/Tool-executeCode.md +41 -0
  335. package/concepts/ja/Tool-getDiagnostics.md +32 -0
  336. package/concepts/ja/Tools.md +67 -0
  337. package/concepts/ja/ToolsFirst.md +77 -0
  338. package/concepts/ja/TranslateContextPollution.md +46 -0
  339. package/concepts/ja/UltraPlan.md +55 -0
  340. package/concepts/ko/BodyDiffJSON.md +32 -0
  341. package/concepts/ko/BodyFields.md +42 -0
  342. package/concepts/ko/CacheRebuild.md +36 -0
  343. package/concepts/ko/GlobalSettings.md +232 -0
  344. package/concepts/ko/KVCacheContent.md +49 -0
  345. package/concepts/ko/MainAgent.md +23 -0
  346. package/concepts/ko/ProxySwitch.md +50 -0
  347. package/concepts/ko/QRCode.md +25 -0
  348. package/concepts/ko/ResponseFields.md +50 -0
  349. package/concepts/ko/SubAgent-Search.md +20 -0
  350. package/concepts/ko/Teammate.md +26 -0
  351. package/concepts/ko/Tool-Agent.md +125 -0
  352. package/concepts/ko/Tool-AskUserQuestion.md +75 -0
  353. package/concepts/ko/Tool-Bash.md +167 -0
  354. package/concepts/ko/Tool-Edit.md +46 -0
  355. package/concepts/ko/Tool-EnterPlanMode.md +128 -0
  356. package/concepts/ko/Tool-EnterWorktree.md +56 -0
  357. package/concepts/ko/Tool-ExitPlanMode.md +62 -0
  358. package/concepts/ko/Tool-Glob.md +39 -0
  359. package/concepts/ko/Tool-Grep.md +57 -0
  360. package/concepts/ko/Tool-NotebookEdit.md +33 -0
  361. package/concepts/ko/Tool-Read.md +56 -0
  362. package/concepts/ko/Tool-SendMessage.md +41 -0
  363. package/concepts/ko/Tool-Skill.md +56 -0
  364. package/concepts/ko/Tool-Task.md +51 -0
  365. package/concepts/ko/Tool-TaskCreate.md +78 -0
  366. package/concepts/ko/Tool-TaskGet.md +56 -0
  367. package/concepts/ko/Tool-TaskList.md +56 -0
  368. package/concepts/ko/Tool-TaskOutput.md +40 -0
  369. package/concepts/ko/Tool-TaskStop.md +32 -0
  370. package/concepts/ko/Tool-TaskUpdate.md +123 -0
  371. package/concepts/ko/Tool-TeamCreate.md +38 -0
  372. package/concepts/ko/Tool-TeamDelete.md +30 -0
  373. package/concepts/ko/Tool-WebFetch.md +55 -0
  374. package/concepts/ko/Tool-WebSearch.md +58 -0
  375. package/concepts/ko/Tool-Write.md +39 -0
  376. package/concepts/ko/Tool-executeCode.md +41 -0
  377. package/concepts/ko/Tool-getDiagnostics.md +32 -0
  378. package/concepts/ko/Tools.md +67 -0
  379. package/concepts/ko/ToolsFirst.md +77 -0
  380. package/concepts/ko/TranslateContextPollution.md +46 -0
  381. package/concepts/ko/UltraPlan.md +55 -0
  382. package/concepts/no/BodyDiffJSON.md +32 -0
  383. package/concepts/no/BodyFields.md +42 -0
  384. package/concepts/no/CacheRebuild.md +36 -0
  385. package/concepts/no/GlobalSettings.md +232 -0
  386. package/concepts/no/KVCacheContent.md +49 -0
  387. package/concepts/no/MainAgent.md +23 -0
  388. package/concepts/no/ProxySwitch.md +50 -0
  389. package/concepts/no/QRCode.md +25 -0
  390. package/concepts/no/ResponseFields.md +50 -0
  391. package/concepts/no/SubAgent-Search.md +20 -0
  392. package/concepts/no/Teammate.md +26 -0
  393. package/concepts/no/Tool-Agent.md +125 -0
  394. package/concepts/no/Tool-AskUserQuestion.md +75 -0
  395. package/concepts/no/Tool-Bash.md +167 -0
  396. package/concepts/no/Tool-Edit.md +46 -0
  397. package/concepts/no/Tool-EnterPlanMode.md +128 -0
  398. package/concepts/no/Tool-EnterWorktree.md +56 -0
  399. package/concepts/no/Tool-ExitPlanMode.md +62 -0
  400. package/concepts/no/Tool-Glob.md +39 -0
  401. package/concepts/no/Tool-Grep.md +57 -0
  402. package/concepts/no/Tool-NotebookEdit.md +33 -0
  403. package/concepts/no/Tool-Read.md +56 -0
  404. package/concepts/no/Tool-SendMessage.md +41 -0
  405. package/concepts/no/Tool-Skill.md +56 -0
  406. package/concepts/no/Tool-Task.md +51 -0
  407. package/concepts/no/Tool-TaskCreate.md +78 -0
  408. package/concepts/no/Tool-TaskGet.md +56 -0
  409. package/concepts/no/Tool-TaskList.md +56 -0
  410. package/concepts/no/Tool-TaskOutput.md +40 -0
  411. package/concepts/no/Tool-TaskStop.md +32 -0
  412. package/concepts/no/Tool-TaskUpdate.md +123 -0
  413. package/concepts/no/Tool-TeamCreate.md +38 -0
  414. package/concepts/no/Tool-TeamDelete.md +30 -0
  415. package/concepts/no/Tool-WebFetch.md +55 -0
  416. package/concepts/no/Tool-WebSearch.md +58 -0
  417. package/concepts/no/Tool-Write.md +39 -0
  418. package/concepts/no/Tool-executeCode.md +41 -0
  419. package/concepts/no/Tool-getDiagnostics.md +32 -0
  420. package/concepts/no/Tools.md +67 -0
  421. package/concepts/no/ToolsFirst.md +77 -0
  422. package/concepts/no/TranslateContextPollution.md +46 -0
  423. package/concepts/no/UltraPlan.md +55 -0
  424. package/concepts/pl/BodyDiffJSON.md +32 -0
  425. package/concepts/pl/BodyFields.md +42 -0
  426. package/concepts/pl/CacheRebuild.md +36 -0
  427. package/concepts/pl/GlobalSettings.md +232 -0
  428. package/concepts/pl/KVCacheContent.md +49 -0
  429. package/concepts/pl/MainAgent.md +23 -0
  430. package/concepts/pl/ProxySwitch.md +50 -0
  431. package/concepts/pl/QRCode.md +25 -0
  432. package/concepts/pl/ResponseFields.md +50 -0
  433. package/concepts/pl/SubAgent-Search.md +20 -0
  434. package/concepts/pl/Teammate.md +26 -0
  435. package/concepts/pl/Tool-Agent.md +125 -0
  436. package/concepts/pl/Tool-AskUserQuestion.md +75 -0
  437. package/concepts/pl/Tool-Bash.md +167 -0
  438. package/concepts/pl/Tool-Edit.md +46 -0
  439. package/concepts/pl/Tool-EnterPlanMode.md +128 -0
  440. package/concepts/pl/Tool-EnterWorktree.md +56 -0
  441. package/concepts/pl/Tool-ExitPlanMode.md +62 -0
  442. package/concepts/pl/Tool-Glob.md +39 -0
  443. package/concepts/pl/Tool-Grep.md +57 -0
  444. package/concepts/pl/Tool-NotebookEdit.md +33 -0
  445. package/concepts/pl/Tool-Read.md +56 -0
  446. package/concepts/pl/Tool-SendMessage.md +41 -0
  447. package/concepts/pl/Tool-Skill.md +56 -0
  448. package/concepts/pl/Tool-Task.md +51 -0
  449. package/concepts/pl/Tool-TaskCreate.md +78 -0
  450. package/concepts/pl/Tool-TaskGet.md +56 -0
  451. package/concepts/pl/Tool-TaskList.md +56 -0
  452. package/concepts/pl/Tool-TaskOutput.md +40 -0
  453. package/concepts/pl/Tool-TaskStop.md +32 -0
  454. package/concepts/pl/Tool-TaskUpdate.md +123 -0
  455. package/concepts/pl/Tool-TeamCreate.md +38 -0
  456. package/concepts/pl/Tool-TeamDelete.md +30 -0
  457. package/concepts/pl/Tool-WebFetch.md +55 -0
  458. package/concepts/pl/Tool-WebSearch.md +58 -0
  459. package/concepts/pl/Tool-Write.md +39 -0
  460. package/concepts/pl/Tool-executeCode.md +41 -0
  461. package/concepts/pl/Tool-getDiagnostics.md +32 -0
  462. package/concepts/pl/Tools.md +67 -0
  463. package/concepts/pl/ToolsFirst.md +77 -0
  464. package/concepts/pl/TranslateContextPollution.md +46 -0
  465. package/concepts/pl/UltraPlan.md +55 -0
  466. package/concepts/pt-BR/BodyDiffJSON.md +32 -0
  467. package/concepts/pt-BR/BodyFields.md +42 -0
  468. package/concepts/pt-BR/CacheRebuild.md +36 -0
  469. package/concepts/pt-BR/GlobalSettings.md +232 -0
  470. package/concepts/pt-BR/KVCacheContent.md +49 -0
  471. package/concepts/pt-BR/MainAgent.md +23 -0
  472. package/concepts/pt-BR/ProxySwitch.md +50 -0
  473. package/concepts/pt-BR/QRCode.md +25 -0
  474. package/concepts/pt-BR/ResponseFields.md +50 -0
  475. package/concepts/pt-BR/SubAgent-Search.md +20 -0
  476. package/concepts/pt-BR/Teammate.md +26 -0
  477. package/concepts/pt-BR/Tool-Agent.md +125 -0
  478. package/concepts/pt-BR/Tool-AskUserQuestion.md +75 -0
  479. package/concepts/pt-BR/Tool-Bash.md +167 -0
  480. package/concepts/pt-BR/Tool-Edit.md +46 -0
  481. package/concepts/pt-BR/Tool-EnterPlanMode.md +128 -0
  482. package/concepts/pt-BR/Tool-EnterWorktree.md +56 -0
  483. package/concepts/pt-BR/Tool-ExitPlanMode.md +62 -0
  484. package/concepts/pt-BR/Tool-Glob.md +39 -0
  485. package/concepts/pt-BR/Tool-Grep.md +57 -0
  486. package/concepts/pt-BR/Tool-NotebookEdit.md +33 -0
  487. package/concepts/pt-BR/Tool-Read.md +56 -0
  488. package/concepts/pt-BR/Tool-SendMessage.md +41 -0
  489. package/concepts/pt-BR/Tool-Skill.md +56 -0
  490. package/concepts/pt-BR/Tool-Task.md +51 -0
  491. package/concepts/pt-BR/Tool-TaskCreate.md +78 -0
  492. package/concepts/pt-BR/Tool-TaskGet.md +56 -0
  493. package/concepts/pt-BR/Tool-TaskList.md +56 -0
  494. package/concepts/pt-BR/Tool-TaskOutput.md +40 -0
  495. package/concepts/pt-BR/Tool-TaskStop.md +32 -0
  496. package/concepts/pt-BR/Tool-TaskUpdate.md +123 -0
  497. package/concepts/pt-BR/Tool-TeamCreate.md +38 -0
  498. package/concepts/pt-BR/Tool-TeamDelete.md +30 -0
  499. package/concepts/pt-BR/Tool-WebFetch.md +55 -0
  500. package/concepts/pt-BR/Tool-WebSearch.md +58 -0
  501. package/concepts/pt-BR/Tool-Write.md +39 -0
  502. package/concepts/pt-BR/Tool-executeCode.md +41 -0
  503. package/concepts/pt-BR/Tool-getDiagnostics.md +32 -0
  504. package/concepts/pt-BR/Tools.md +67 -0
  505. package/concepts/pt-BR/ToolsFirst.md +77 -0
  506. package/concepts/pt-BR/TranslateContextPollution.md +46 -0
  507. package/concepts/pt-BR/UltraPlan.md +55 -0
  508. package/concepts/ru/BodyDiffJSON.md +32 -0
  509. package/concepts/ru/BodyFields.md +42 -0
  510. package/concepts/ru/CacheRebuild.md +36 -0
  511. package/concepts/ru/GlobalSettings.md +232 -0
  512. package/concepts/ru/KVCacheContent.md +49 -0
  513. package/concepts/ru/MainAgent.md +23 -0
  514. package/concepts/ru/ProxySwitch.md +50 -0
  515. package/concepts/ru/QRCode.md +25 -0
  516. package/concepts/ru/ResponseFields.md +50 -0
  517. package/concepts/ru/SubAgent-Search.md +20 -0
  518. package/concepts/ru/Teammate.md +26 -0
  519. package/concepts/ru/Tool-Agent.md +125 -0
  520. package/concepts/ru/Tool-AskUserQuestion.md +75 -0
  521. package/concepts/ru/Tool-Bash.md +167 -0
  522. package/concepts/ru/Tool-Edit.md +46 -0
  523. package/concepts/ru/Tool-EnterPlanMode.md +128 -0
  524. package/concepts/ru/Tool-EnterWorktree.md +56 -0
  525. package/concepts/ru/Tool-ExitPlanMode.md +62 -0
  526. package/concepts/ru/Tool-Glob.md +39 -0
  527. package/concepts/ru/Tool-Grep.md +57 -0
  528. package/concepts/ru/Tool-NotebookEdit.md +33 -0
  529. package/concepts/ru/Tool-Read.md +56 -0
  530. package/concepts/ru/Tool-SendMessage.md +41 -0
  531. package/concepts/ru/Tool-Skill.md +56 -0
  532. package/concepts/ru/Tool-Task.md +51 -0
  533. package/concepts/ru/Tool-TaskCreate.md +78 -0
  534. package/concepts/ru/Tool-TaskGet.md +56 -0
  535. package/concepts/ru/Tool-TaskList.md +56 -0
  536. package/concepts/ru/Tool-TaskOutput.md +40 -0
  537. package/concepts/ru/Tool-TaskStop.md +32 -0
  538. package/concepts/ru/Tool-TaskUpdate.md +123 -0
  539. package/concepts/ru/Tool-TeamCreate.md +38 -0
  540. package/concepts/ru/Tool-TeamDelete.md +30 -0
  541. package/concepts/ru/Tool-WebFetch.md +55 -0
  542. package/concepts/ru/Tool-WebSearch.md +58 -0
  543. package/concepts/ru/Tool-Write.md +39 -0
  544. package/concepts/ru/Tool-executeCode.md +41 -0
  545. package/concepts/ru/Tool-getDiagnostics.md +32 -0
  546. package/concepts/ru/Tools.md +67 -0
  547. package/concepts/ru/ToolsFirst.md +77 -0
  548. package/concepts/ru/TranslateContextPollution.md +46 -0
  549. package/concepts/ru/UltraPlan.md +55 -0
  550. package/concepts/th/BodyDiffJSON.md +32 -0
  551. package/concepts/th/BodyFields.md +42 -0
  552. package/concepts/th/CacheRebuild.md +36 -0
  553. package/concepts/th/GlobalSettings.md +232 -0
  554. package/concepts/th/KVCacheContent.md +49 -0
  555. package/concepts/th/MainAgent.md +23 -0
  556. package/concepts/th/ProxySwitch.md +50 -0
  557. package/concepts/th/QRCode.md +25 -0
  558. package/concepts/th/ResponseFields.md +50 -0
  559. package/concepts/th/SubAgent-Search.md +20 -0
  560. package/concepts/th/Teammate.md +26 -0
  561. package/concepts/th/Tool-Agent.md +125 -0
  562. package/concepts/th/Tool-AskUserQuestion.md +75 -0
  563. package/concepts/th/Tool-Bash.md +167 -0
  564. package/concepts/th/Tool-Edit.md +46 -0
  565. package/concepts/th/Tool-EnterPlanMode.md +128 -0
  566. package/concepts/th/Tool-EnterWorktree.md +56 -0
  567. package/concepts/th/Tool-ExitPlanMode.md +62 -0
  568. package/concepts/th/Tool-Glob.md +39 -0
  569. package/concepts/th/Tool-Grep.md +57 -0
  570. package/concepts/th/Tool-NotebookEdit.md +33 -0
  571. package/concepts/th/Tool-Read.md +56 -0
  572. package/concepts/th/Tool-SendMessage.md +41 -0
  573. package/concepts/th/Tool-Skill.md +56 -0
  574. package/concepts/th/Tool-Task.md +51 -0
  575. package/concepts/th/Tool-TaskCreate.md +78 -0
  576. package/concepts/th/Tool-TaskGet.md +56 -0
  577. package/concepts/th/Tool-TaskList.md +56 -0
  578. package/concepts/th/Tool-TaskOutput.md +40 -0
  579. package/concepts/th/Tool-TaskStop.md +32 -0
  580. package/concepts/th/Tool-TaskUpdate.md +123 -0
  581. package/concepts/th/Tool-TeamCreate.md +38 -0
  582. package/concepts/th/Tool-TeamDelete.md +30 -0
  583. package/concepts/th/Tool-WebFetch.md +55 -0
  584. package/concepts/th/Tool-WebSearch.md +58 -0
  585. package/concepts/th/Tool-Write.md +39 -0
  586. package/concepts/th/Tool-executeCode.md +41 -0
  587. package/concepts/th/Tool-getDiagnostics.md +32 -0
  588. package/concepts/th/Tools.md +67 -0
  589. package/concepts/th/ToolsFirst.md +77 -0
  590. package/concepts/th/TranslateContextPollution.md +46 -0
  591. package/concepts/th/UltraPlan.md +55 -0
  592. package/concepts/tr/BodyDiffJSON.md +32 -0
  593. package/concepts/tr/BodyFields.md +42 -0
  594. package/concepts/tr/CacheRebuild.md +36 -0
  595. package/concepts/tr/GlobalSettings.md +232 -0
  596. package/concepts/tr/KVCacheContent.md +49 -0
  597. package/concepts/tr/MainAgent.md +23 -0
  598. package/concepts/tr/ProxySwitch.md +50 -0
  599. package/concepts/tr/QRCode.md +25 -0
  600. package/concepts/tr/ResponseFields.md +50 -0
  601. package/concepts/tr/SubAgent-Search.md +20 -0
  602. package/concepts/tr/Teammate.md +26 -0
  603. package/concepts/tr/Tool-Agent.md +125 -0
  604. package/concepts/tr/Tool-AskUserQuestion.md +75 -0
  605. package/concepts/tr/Tool-Bash.md +167 -0
  606. package/concepts/tr/Tool-Edit.md +46 -0
  607. package/concepts/tr/Tool-EnterPlanMode.md +128 -0
  608. package/concepts/tr/Tool-EnterWorktree.md +56 -0
  609. package/concepts/tr/Tool-ExitPlanMode.md +62 -0
  610. package/concepts/tr/Tool-Glob.md +39 -0
  611. package/concepts/tr/Tool-Grep.md +57 -0
  612. package/concepts/tr/Tool-NotebookEdit.md +33 -0
  613. package/concepts/tr/Tool-Read.md +56 -0
  614. package/concepts/tr/Tool-SendMessage.md +41 -0
  615. package/concepts/tr/Tool-Skill.md +56 -0
  616. package/concepts/tr/Tool-Task.md +51 -0
  617. package/concepts/tr/Tool-TaskCreate.md +78 -0
  618. package/concepts/tr/Tool-TaskGet.md +56 -0
  619. package/concepts/tr/Tool-TaskList.md +56 -0
  620. package/concepts/tr/Tool-TaskOutput.md +40 -0
  621. package/concepts/tr/Tool-TaskStop.md +32 -0
  622. package/concepts/tr/Tool-TaskUpdate.md +123 -0
  623. package/concepts/tr/Tool-TeamCreate.md +38 -0
  624. package/concepts/tr/Tool-TeamDelete.md +30 -0
  625. package/concepts/tr/Tool-WebFetch.md +55 -0
  626. package/concepts/tr/Tool-WebSearch.md +58 -0
  627. package/concepts/tr/Tool-Write.md +39 -0
  628. package/concepts/tr/Tool-executeCode.md +41 -0
  629. package/concepts/tr/Tool-getDiagnostics.md +32 -0
  630. package/concepts/tr/Tools.md +67 -0
  631. package/concepts/tr/ToolsFirst.md +77 -0
  632. package/concepts/tr/TranslateContextPollution.md +46 -0
  633. package/concepts/tr/UltraPlan.md +55 -0
  634. package/concepts/uk/BodyDiffJSON.md +32 -0
  635. package/concepts/uk/BodyFields.md +42 -0
  636. package/concepts/uk/CacheRebuild.md +36 -0
  637. package/concepts/uk/GlobalSettings.md +232 -0
  638. package/concepts/uk/KVCacheContent.md +49 -0
  639. package/concepts/uk/MainAgent.md +23 -0
  640. package/concepts/uk/ProxySwitch.md +50 -0
  641. package/concepts/uk/QRCode.md +25 -0
  642. package/concepts/uk/ResponseFields.md +50 -0
  643. package/concepts/uk/SubAgent-Search.md +20 -0
  644. package/concepts/uk/Teammate.md +26 -0
  645. package/concepts/uk/Tool-Agent.md +125 -0
  646. package/concepts/uk/Tool-AskUserQuestion.md +75 -0
  647. package/concepts/uk/Tool-Bash.md +167 -0
  648. package/concepts/uk/Tool-Edit.md +46 -0
  649. package/concepts/uk/Tool-EnterPlanMode.md +128 -0
  650. package/concepts/uk/Tool-EnterWorktree.md +56 -0
  651. package/concepts/uk/Tool-ExitPlanMode.md +62 -0
  652. package/concepts/uk/Tool-Glob.md +39 -0
  653. package/concepts/uk/Tool-Grep.md +57 -0
  654. package/concepts/uk/Tool-NotebookEdit.md +33 -0
  655. package/concepts/uk/Tool-Read.md +56 -0
  656. package/concepts/uk/Tool-SendMessage.md +41 -0
  657. package/concepts/uk/Tool-Skill.md +56 -0
  658. package/concepts/uk/Tool-Task.md +51 -0
  659. package/concepts/uk/Tool-TaskCreate.md +78 -0
  660. package/concepts/uk/Tool-TaskGet.md +56 -0
  661. package/concepts/uk/Tool-TaskList.md +56 -0
  662. package/concepts/uk/Tool-TaskOutput.md +40 -0
  663. package/concepts/uk/Tool-TaskStop.md +32 -0
  664. package/concepts/uk/Tool-TaskUpdate.md +123 -0
  665. package/concepts/uk/Tool-TeamCreate.md +38 -0
  666. package/concepts/uk/Tool-TeamDelete.md +30 -0
  667. package/concepts/uk/Tool-WebFetch.md +55 -0
  668. package/concepts/uk/Tool-WebSearch.md +58 -0
  669. package/concepts/uk/Tool-Write.md +39 -0
  670. package/concepts/uk/Tool-executeCode.md +41 -0
  671. package/concepts/uk/Tool-getDiagnostics.md +32 -0
  672. package/concepts/uk/Tools.md +67 -0
  673. package/concepts/uk/ToolsFirst.md +77 -0
  674. package/concepts/uk/TranslateContextPollution.md +46 -0
  675. package/concepts/uk/UltraPlan.md +55 -0
  676. package/concepts/zh/BodyDiffJSON.md +32 -0
  677. package/concepts/zh/BodyFields.md +42 -0
  678. package/concepts/zh/CacheRebuild.md +36 -0
  679. package/concepts/zh/GlobalSettings.md +232 -0
  680. package/concepts/zh/KVCacheContent.md +49 -0
  681. package/concepts/zh/MainAgent.md +23 -0
  682. package/concepts/zh/ProxySwitch.md +50 -0
  683. package/concepts/zh/QRCode.md +29 -0
  684. package/concepts/zh/ResponseFields.md +50 -0
  685. package/concepts/zh/SubAgent-Search.md +20 -0
  686. package/concepts/zh/Teammate.md +26 -0
  687. package/concepts/zh/Tool-Agent.md +125 -0
  688. package/concepts/zh/Tool-AskUserQuestion.md +75 -0
  689. package/concepts/zh/Tool-Bash.md +167 -0
  690. package/concepts/zh/Tool-Edit.md +46 -0
  691. package/concepts/zh/Tool-EnterPlanMode.md +128 -0
  692. package/concepts/zh/Tool-EnterWorktree.md +56 -0
  693. package/concepts/zh/Tool-ExitPlanMode.md +62 -0
  694. package/concepts/zh/Tool-Glob.md +39 -0
  695. package/concepts/zh/Tool-Grep.md +57 -0
  696. package/concepts/zh/Tool-NotebookEdit.md +33 -0
  697. package/concepts/zh/Tool-Read.md +56 -0
  698. package/concepts/zh/Tool-SendMessage.md +41 -0
  699. package/concepts/zh/Tool-Skill.md +56 -0
  700. package/concepts/zh/Tool-Task.md +51 -0
  701. package/concepts/zh/Tool-TaskCreate.md +78 -0
  702. package/concepts/zh/Tool-TaskGet.md +56 -0
  703. package/concepts/zh/Tool-TaskList.md +56 -0
  704. package/concepts/zh/Tool-TaskOutput.md +40 -0
  705. package/concepts/zh/Tool-TaskStop.md +32 -0
  706. package/concepts/zh/Tool-TaskUpdate.md +123 -0
  707. package/concepts/zh/Tool-TeamCreate.md +38 -0
  708. package/concepts/zh/Tool-TeamDelete.md +30 -0
  709. package/concepts/zh/Tool-WebFetch.md +55 -0
  710. package/concepts/zh/Tool-WebSearch.md +58 -0
  711. package/concepts/zh/Tool-Write.md +39 -0
  712. package/concepts/zh/Tool-executeCode.md +41 -0
  713. package/concepts/zh/Tool-getDiagnostics.md +32 -0
  714. package/concepts/zh/Tools.md +67 -0
  715. package/concepts/zh/ToolsFirst.md +77 -0
  716. package/concepts/zh/TranslateContextPollution.md +46 -0
  717. package/concepts/zh/UltraPlan.md +55 -0
  718. package/concepts/zh-TW/BodyDiffJSON.md +32 -0
  719. package/concepts/zh-TW/BodyFields.md +42 -0
  720. package/concepts/zh-TW/CacheRebuild.md +36 -0
  721. package/concepts/zh-TW/GlobalSettings.md +232 -0
  722. package/concepts/zh-TW/KVCacheContent.md +49 -0
  723. package/concepts/zh-TW/MainAgent.md +23 -0
  724. package/concepts/zh-TW/ProxySwitch.md +50 -0
  725. package/concepts/zh-TW/QRCode.md +25 -0
  726. package/concepts/zh-TW/ResponseFields.md +50 -0
  727. package/concepts/zh-TW/SubAgent-Search.md +20 -0
  728. package/concepts/zh-TW/Teammate.md +26 -0
  729. package/concepts/zh-TW/Tool-Agent.md +125 -0
  730. package/concepts/zh-TW/Tool-AskUserQuestion.md +75 -0
  731. package/concepts/zh-TW/Tool-Bash.md +167 -0
  732. package/concepts/zh-TW/Tool-Edit.md +46 -0
  733. package/concepts/zh-TW/Tool-EnterPlanMode.md +128 -0
  734. package/concepts/zh-TW/Tool-EnterWorktree.md +56 -0
  735. package/concepts/zh-TW/Tool-ExitPlanMode.md +62 -0
  736. package/concepts/zh-TW/Tool-Glob.md +39 -0
  737. package/concepts/zh-TW/Tool-Grep.md +57 -0
  738. package/concepts/zh-TW/Tool-NotebookEdit.md +33 -0
  739. package/concepts/zh-TW/Tool-Read.md +56 -0
  740. package/concepts/zh-TW/Tool-SendMessage.md +41 -0
  741. package/concepts/zh-TW/Tool-Skill.md +56 -0
  742. package/concepts/zh-TW/Tool-Task.md +51 -0
  743. package/concepts/zh-TW/Tool-TaskCreate.md +78 -0
  744. package/concepts/zh-TW/Tool-TaskGet.md +56 -0
  745. package/concepts/zh-TW/Tool-TaskList.md +56 -0
  746. package/concepts/zh-TW/Tool-TaskOutput.md +40 -0
  747. package/concepts/zh-TW/Tool-TaskStop.md +32 -0
  748. package/concepts/zh-TW/Tool-TaskUpdate.md +123 -0
  749. package/concepts/zh-TW/Tool-TeamCreate.md +38 -0
  750. package/concepts/zh-TW/Tool-TeamDelete.md +30 -0
  751. package/concepts/zh-TW/Tool-WebFetch.md +55 -0
  752. package/concepts/zh-TW/Tool-WebSearch.md +58 -0
  753. package/concepts/zh-TW/Tool-Write.md +39 -0
  754. package/concepts/zh-TW/Tool-executeCode.md +41 -0
  755. package/concepts/zh-TW/Tool-getDiagnostics.md +32 -0
  756. package/concepts/zh-TW/Tools.md +67 -0
  757. package/concepts/zh-TW/ToolsFirst.md +77 -0
  758. package/concepts/zh-TW/TranslateContextPollution.md +46 -0
  759. package/concepts/zh-TW/UltraPlan.md +55 -0
  760. package/dist/assets/App-BzrN42Qt.js +41 -0
  761. package/dist/assets/App-fG2r3jFq.css +1 -0
  762. package/dist/assets/AppHeader-B3hrnZr-.css +41 -0
  763. package/dist/assets/AppHeader.module-BMU2vyC4.js +1246 -0
  764. package/dist/assets/Mobile-BnDkLcBv.css +1 -0
  765. package/dist/assets/Mobile-C9wxQTXV.js +10 -0
  766. package/dist/assets/_baseUniq-CXWHShmB.js +1 -0
  767. package/dist/assets/arc-qbol0NJo.js +1 -0
  768. package/dist/assets/architectureDiagram-Q4EWVU46-COZebb1N.js +36 -0
  769. package/dist/assets/blockDiagram-DXYQGD6D-COCgzPKy.js +132 -0
  770. package/dist/assets/c4Diagram-AHTNJAMY-Bs5XvLEo.js +10 -0
  771. package/dist/assets/channel-DvLUZ3Xf.js +1 -0
  772. package/dist/assets/chunk-4BX2VUAB-CyGriz9d.js +1 -0
  773. package/dist/assets/chunk-4TB4RGXK-DlT_q-fl.js +206 -0
  774. package/dist/assets/chunk-55IACEB6-NHN99ZNC.js +1 -0
  775. package/dist/assets/chunk-EDXVE4YY-fK4f9Na9.js +1 -0
  776. package/dist/assets/chunk-FMBD7UC4-DL-dQIq1.js +15 -0
  777. package/dist/assets/chunk-OYMX7WX6-6uruB4VY.js +231 -0
  778. package/dist/assets/chunk-QZHKN3VN-CCWIqLO8.js +1 -0
  779. package/dist/assets/chunk-YZCP3GAM-Cu84DMJo.js +1 -0
  780. package/dist/assets/classDiagram-6PBFFD2Q-ByKhp2Tk.js +1 -0
  781. package/dist/assets/classDiagram-v2-HSJHXN6E-ByKhp2Tk.js +1 -0
  782. package/dist/assets/clone-DZHpE494.js +1 -0
  783. package/dist/assets/cose-bilkent-S5V4N54A-Dqi4iU3-.js +1 -0
  784. package/dist/assets/cytoscape.esm-DxGcaOPV.js +331 -0
  785. package/dist/assets/dagre-KV5264BT-Dl-EJ9rb.js +4 -0
  786. package/dist/assets/default-avatar-CT9tlZjd.svg +1 -0
  787. package/dist/assets/default-model-avatar-DlbUPjyv.svg +1 -0
  788. package/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
  789. package/dist/assets/diagram-5BDNPKRD-BYtyzF0D.js +10 -0
  790. package/dist/assets/diagram-G4DWMVQ6-BuETHFNU.js +24 -0
  791. package/dist/assets/diagram-MMDJMWI5-Z02oZp6I.js +43 -0
  792. package/dist/assets/diagram-TYMM5635-BpGlKv8l.js +24 -0
  793. package/dist/assets/erDiagram-SMLLAGMA-C4YngeQh.js +85 -0
  794. package/dist/assets/flowDiagram-DWJPFMVM-BWddFffg.js +162 -0
  795. package/dist/assets/ganttDiagram-T4ZO3ILL-Bg0jOD4m.js +292 -0
  796. package/dist/assets/gitGraphDiagram-UUTBAWPF-Bz-3sTXZ.js +106 -0
  797. package/dist/assets/graph-XiH8DkIu.js +1 -0
  798. package/dist/assets/html2canvas.esm-QH1iLAAe.js +22 -0
  799. package/dist/assets/index-BuUsWKGZ.js +41 -0
  800. package/dist/assets/index-DCtZ2KSX.css +1 -0
  801. package/dist/assets/infoDiagram-42DDH7IO-DLo-lOCE.js +2 -0
  802. package/dist/assets/init-Gi6I4Gst.js +1 -0
  803. package/dist/assets/ishikawaDiagram-UXIWVN3A-BsIzT5eO.js +70 -0
  804. package/dist/assets/journeyDiagram-VCZTEJTY-C3bOkKqv.js +139 -0
  805. package/dist/assets/kanban-definition-6JOO6SKY-D-rJRNbp.js +89 -0
  806. package/dist/assets/katex-DkKDou_j.js +257 -0
  807. package/dist/assets/layout-Bqp8Hh1c.js +1 -0
  808. package/dist/assets/linear-BWRSipGb.js +1 -0
  809. package/dist/assets/loading-pet-12a9GTQC.gif +0 -0
  810. package/dist/assets/mermaid.core-CJa7klhs.js +308 -0
  811. package/dist/assets/min-CQ_VyzMd.js +1 -0
  812. package/dist/assets/mindmap-definition-QFDTVHPH-Bnj7DDSx.js +96 -0
  813. package/dist/assets/model-deepseek-LDuqTN2N.svg +2 -0
  814. package/dist/assets/ordinal-Cboi1Yqb.js +1 -0
  815. package/dist/assets/pieDiagram-DEJITSTG-CC8a7Ylw.js +30 -0
  816. package/dist/assets/quadrantDiagram-34T5L4WZ-CrmL1WUV.js +7 -0
  817. package/dist/assets/requirementDiagram-MS252O5E-TfkX4u_6.js +84 -0
  818. package/dist/assets/sankeyDiagram-XADWPNL6-DMwBbND7.js +10 -0
  819. package/dist/assets/sequenceDiagram-FGHM5R23-CFghMYsm.js +157 -0
  820. package/dist/assets/stateDiagram-FHFEXIEX-1H6JIM7l.js +1 -0
  821. package/dist/assets/stateDiagram-v2-QKLJ7IA2-CtXMaKcb.js +1 -0
  822. package/dist/assets/timeline-definition-GMOUNBTQ-DnLMBlVa.js +120 -0
  823. package/dist/assets/vennDiagram-DHZGUBPP-DoIkY_KL.js +34 -0
  824. package/dist/assets/wardley-RL74JXVD-3n5XmOD5.js +162 -0
  825. package/dist/assets/wardleyDiagram-NUSXRM2D-UMOq3ofC.js +20 -0
  826. package/dist/assets/xychartDiagram-5P7HB3ND-CNDuQ5Cg.js +7 -0
  827. package/dist/favicon.ico +0 -0
  828. package/dist/index.html +15 -0
  829. package/findcx.js +204 -0
  830. package/i18n.js +2413 -0
  831. package/interceptor.js +698 -0
  832. package/lib/appserver-bridge.js +584 -0
  833. package/lib/ask-bridge.js +126 -0
  834. package/lib/codex-config.js +146 -0
  835. package/lib/constants.js +26 -0
  836. package/lib/context-watcher.js +85 -0
  837. package/lib/cxv-editor.js +73 -0
  838. package/lib/delta-reconstructor.js +256 -0
  839. package/lib/ensure-hooks.js +88 -0
  840. package/lib/extract-plugin-name.mjs +18 -0
  841. package/lib/file-api.js +128 -0
  842. package/lib/git-diff.js +89 -0
  843. package/lib/interceptor-core.js +270 -0
  844. package/lib/kv-cache-analyzer.js +164 -0
  845. package/lib/log-management.js +198 -0
  846. package/lib/log-stream.js +310 -0
  847. package/lib/log-watcher.js +245 -0
  848. package/lib/otel-adapter.js +251 -0
  849. package/lib/otel-receiver.js +198 -0
  850. package/lib/perm-bridge.js +142 -0
  851. package/lib/plugin-loader.js +161 -0
  852. package/lib/plugin-manager.js +118 -0
  853. package/lib/proxy-env.js +23 -0
  854. package/lib/proxy-errors.js +18 -0
  855. package/lib/sdk-adapter.js +77 -0
  856. package/lib/sdk-manager.js +464 -0
  857. package/lib/stats-worker.js +384 -0
  858. package/lib/updater.js +123 -0
  859. package/lib/user-profile.js +43 -0
  860. package/package.json +115 -0
  861. package/proxy.js +369 -0
  862. package/pty-manager.js +407 -0
  863. package/server.js +3226 -0
  864. package/workspace-registry.js +151 -0
@@ -0,0 +1,245 @@
1
+ import { readFileSync, existsSync, watchFile, unwatchFile, openSync, readSync, closeSync, statSync } from 'node:fs';
2
+ import { isMainAgentEntry, extractCachedContent } from './kv-cache-analyzer.js';
3
+ import { buildContextWindowEvent, getContextSizeForModel } from './context-watcher.js';
4
+ import { reconstructEntries, createIncrementalReconstructor } from './delta-reconstructor.js';
5
+ import { countLogEntries, streamReconstructedEntries } from './log-stream.js';
6
+
7
+ // 跟踪所有被 watch 的日志文件
8
+ const watchedFiles = new Map();
9
+
10
+ /**
11
+ * Read and parse a JSONL log file.
12
+ * @param {string} logFile - absolute path to the log file
13
+ * @returns {Array} parsed and deduplicated entries
14
+ */
15
+ export function readLogFile(logFile) {
16
+ if (!existsSync(logFile)) {
17
+ return [];
18
+ }
19
+
20
+ try {
21
+ const content = readFileSync(logFile, 'utf-8');
22
+ const entries = content.split('\n---\n').filter(line => line.trim());
23
+ const parsed = entries.map(entry => {
24
+ try {
25
+ return JSON.parse(entry);
26
+ } catch {
27
+ return null;
28
+ }
29
+ }).filter(Boolean);
30
+ // 去重:同一 timestamp+url 的条目,后出现的(带 response)覆盖先出现的(在途)
31
+ const map = new Map();
32
+ for (const entry of parsed) {
33
+ const key = `${entry.timestamp}|${entry.url}`;
34
+ map.set(key, entry);
35
+ }
36
+ return reconstructEntries(Array.from(map.values()));
37
+ } catch (err) {
38
+ console.error('Error reading log file:', err);
39
+ return [];
40
+ }
41
+ }
42
+
43
+ /**
44
+ * Send an SSE entry to all connected clients.
45
+ * @param {Array} clients - SSE client array
46
+ * @param {object} entry - parsed log entry
47
+ */
48
+ export function sendToClients(clients, entry) {
49
+ clients.forEach(client => {
50
+ try {
51
+ client.write(`data: ${JSON.stringify(entry)}\n\n`);
52
+ } catch (err) {
53
+ // Client disconnected
54
+ }
55
+ });
56
+ }
57
+
58
+ /**
59
+ * Send a named SSE event to all connected clients.
60
+ * @param {Array} clients - SSE client array
61
+ * @param {string} eventName - SSE event name
62
+ * @param {object} data - event payload
63
+ */
64
+ export function sendEventToClients(clients, eventName, data) {
65
+ clients.forEach(client => {
66
+ try {
67
+ client.write(`event: ${eventName}\ndata: ${JSON.stringify(data)}\n\n`);
68
+ } catch (err) {}
69
+ });
70
+ }
71
+
72
+ /**
73
+ * Watch a log file for changes and broadcast new entries.
74
+ * @param {object} opts
75
+ * @param {string} opts.logFile - log file to watch
76
+ * @param {Array} opts.clients - SSE clients array
77
+ * @param {Function} opts.getCodexPid - returns Codex process PID
78
+ * @param {Function} opts.runParallelHook - plugin hook runner
79
+ * @param {Function} opts.notifyStatsWorker - stats worker notifier
80
+ * @param {Function} opts.getLogFile - returns current LOG_FILE value
81
+ */
82
+ export function watchLogFile(opts) {
83
+ const { logFile, clients, getCodexPid, runParallelHook, notifyStatsWorker, getLogFile } = opts;
84
+ if (watchedFiles.has(logFile)) return;
85
+
86
+ // Track byte offset instead of string length — avoids full-file re-read on every poll
87
+ let lastByteOffset = 0;
88
+ let pendingTail = ''; // incomplete entry carried across polls
89
+ // Delta storage: 增量重建器,用于逐条重建 mainAgent delta 条目
90
+ const _reconstructor = createIncrementalReconstructor();
91
+ try {
92
+ if (existsSync(logFile)) {
93
+ lastByteOffset = statSync(logFile).size;
94
+ }
95
+ } catch {}
96
+
97
+ watchedFiles.set(logFile, true);
98
+ watchFile(logFile, { interval: 500 }, () => {
99
+ try {
100
+ const currentSize = statSync(logFile).size;
101
+
102
+ // File truncated (rotation or clear) — reset offset and check rotation immediately
103
+ if (currentSize < lastByteOffset) {
104
+ lastByteOffset = 0;
105
+ pendingTail = '';
106
+ _reconstructor.reset();
107
+
108
+ // 文件被清空可能是轮转信号,立即检查是否已切换到新文件
109
+ const currentLogFile = getLogFile();
110
+ if (currentLogFile !== logFile && !watchedFiles.has(currentLogFile)) {
111
+ unwatchFile(logFile);
112
+ watchedFiles.delete(logFile);
113
+
114
+ // 流式分段广播,避免全量加载 OOM
115
+ const rotTotal = countLogEntries(currentLogFile);
116
+ clients.forEach(client => {
117
+ try { client.write(`event: load_start\ndata: ${JSON.stringify({ total: rotTotal, incremental: false })}\n\n`); } catch { }
118
+ });
119
+ streamReconstructedEntries(currentLogFile, (segment) => {
120
+ const data = JSON.stringify(segment);
121
+ clients.forEach(client => {
122
+ try { client.write(`event: load_chunk\ndata: ${data}\n\n`); } catch { }
123
+ });
124
+ });
125
+ clients.forEach(client => {
126
+ try { client.write(`event: load_end\ndata: {}\n\n`); } catch { }
127
+ });
128
+ watchLogFile({ ...opts, logFile: currentLogFile });
129
+ return;
130
+ }
131
+ }
132
+
133
+ if (currentSize <= lastByteOffset) return;
134
+
135
+ // Read only the new bytes
136
+ const bytesToRead = currentSize - lastByteOffset;
137
+ const buf = Buffer.alloc(bytesToRead);
138
+ const fd = openSync(logFile, 'r');
139
+ try {
140
+ readSync(fd, buf, 0, bytesToRead, lastByteOffset);
141
+ } finally {
142
+ closeSync(fd);
143
+ }
144
+ lastByteOffset = currentSize;
145
+
146
+ const raw = pendingTail + buf.toString('utf-8');
147
+ const parts = raw.split('\n---\n');
148
+
149
+ // Last part may be incomplete — keep it for next poll
150
+ pendingTail = parts.pop() || '';
151
+
152
+ // If there's only the tail and no complete entries, check if tail is a complete entry
153
+ // (happens when the file ends without a trailing \n---\n)
154
+ if (parts.length === 0 && pendingTail.trim()) {
155
+ try {
156
+ JSON.parse(pendingTail);
157
+ // Valid JSON — treat as complete entry
158
+ parts.push(pendingTail);
159
+ pendingTail = '';
160
+ } catch {
161
+ // Incomplete — keep in pendingTail for next poll
162
+ }
163
+ }
164
+
165
+ const validParts = parts.filter(p => p.trim());
166
+ if (validParts.length > 0) {
167
+ validParts.forEach(entry => {
168
+ try {
169
+ const parsed = JSON.parse(entry);
170
+ if (!parsed.pid) {
171
+ parsed.pid = getCodexPid();
172
+ }
173
+ // Delta storage: reconstruct before push — 确保前端收到完整 messages
174
+ _reconstructor.reconstruct(parsed);
175
+ sendToClients(clients, parsed);
176
+ runParallelHook('onNewEntry', parsed).catch(() => {});
177
+ if (isMainAgentEntry(parsed) && !parsed.inProgress) {
178
+ const cached = extractCachedContent(parsed);
179
+ if (cached) {
180
+ sendEventToClients(clients, 'kv_cache_content', cached);
181
+ }
182
+ const usage = parsed.response?.body?.usage;
183
+ if (usage) {
184
+ const contextSize = getContextSizeForModel(parsed.body?.model);
185
+ const cwData = buildContextWindowEvent(usage, contextSize);
186
+ if (cwData) {
187
+ sendEventToClients(clients, 'context_window', cwData);
188
+ }
189
+ }
190
+ }
191
+ } catch (err) {
192
+ // Skip invalid entries
193
+ }
194
+ });
195
+ notifyStatsWorker(logFile);
196
+ }
197
+
198
+ // 检测日志文件是否已轮转到新文件
199
+ const currentLogFile = getLogFile();
200
+ if (currentLogFile !== logFile && !watchedFiles.has(currentLogFile)) {
201
+ // Unwatch old file to prevent watcher leak on rotation
202
+ unwatchFile(logFile);
203
+ watchedFiles.delete(logFile);
204
+
205
+ // 流式分段广播,避免全量加载 OOM
206
+ const endRotTotal = countLogEntries(currentLogFile);
207
+ clients.forEach(client => {
208
+ try { client.write(`event: load_start\ndata: ${JSON.stringify({ total: endRotTotal, incremental: false })}\n\n`); } catch { }
209
+ });
210
+ streamReconstructedEntries(currentLogFile, (segment) => {
211
+ const data = JSON.stringify(segment);
212
+ clients.forEach(client => {
213
+ try { client.write(`event: load_chunk\ndata: ${data}\n\n`); } catch { }
214
+ });
215
+ });
216
+ clients.forEach(client => {
217
+ try { client.write(`event: load_end\ndata: {}\n\n`); } catch { }
218
+ });
219
+ watchLogFile({ ...opts, logFile: currentLogFile });
220
+ }
221
+ } catch (err) {
222
+ // File not yet created, will retry on next poll
223
+ }
224
+ });
225
+ }
226
+
227
+ /**
228
+ * Start watching the current log file + install statusLine + context window.
229
+ * @param {object} opts
230
+ * @param {string} opts.logFile - current LOG_FILE
231
+ * @param {Array} opts.clients - SSE clients array
232
+ * @param {Function} opts.getCodexPid
233
+ * @param {Function} opts.runParallelHook
234
+ * @param {Function} opts.notifyStatsWorker
235
+ * @param {Function} opts.getLogFile
236
+ */
237
+ export function startWatching(opts) {
238
+ const { clients, ...watchOpts } = opts;
239
+ watchLogFile({ ...watchOpts, clients });
240
+ }
241
+
242
+ /** Get the watchedFiles Map (for cleanup in stopViewer). */
243
+ export function getWatchedFiles() {
244
+ return watchedFiles;
245
+ }
@@ -0,0 +1,251 @@
1
+ /**
2
+ * OpenTelemetry Adapter - 网络报文追踪模块
3
+ * 将拦截的 Codex 网络请求转换为 OTel Traces 并通过 OTLP 导出
4
+ */
5
+
6
+ import { NodeSDK } from '@opentelemetry/sdk-node';
7
+ import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
8
+ import resourcesPkg from '@opentelemetry/resources';
9
+ import semConvPkg from '@opentelemetry/semantic-conventions';
10
+ import otelApi from '@opentelemetry/api';
11
+
12
+ const { Resource } = resourcesPkg;
13
+ const { SEMRESATTRS_SERVICE_NAME, SEMRESATTRS_SERVICE_VERSION, SEMRESATTRS_SERVICE_INSTANCE_ID } = semConvPkg;
14
+ const { trace, SpanKind, SpanStatusCode } = otelApi;
15
+
16
+ // OTel 配置
17
+ const OTEL_COLLECTOR_URL = process.env.OTEL_EXPORTER_OTLP_ENDPOINT || 'http://localhost:4318/v1/traces';
18
+ const ENABLE_OTEL = process.env.CXV_OTEL_ENABLED !== '0'; // 默认开启
19
+
20
+ // 当前追踪会话ID
21
+ let _traceSessionId = null;
22
+ let _sdk = null;
23
+ let _tracer = null;
24
+
25
+ /**
26
+ * 初始化 OTel SDK
27
+ */
28
+ export function initOtelAdapter(projectName, sessionId) {
29
+ if (!ENABLE_OTEL) return false;
30
+
31
+ _traceSessionId = sessionId || generateSessionId();
32
+
33
+ try {
34
+ const resource = new Resource({
35
+ [SEMRESATTRS_SERVICE_NAME]: 'cx-viewer',
36
+ [SEMRESATTRS_SERVICE_VERSION]: process.env.npm_package_version || '2.0.0',
37
+ [SEMRESATTRS_SERVICE_INSTANCE_ID]: _traceSessionId,
38
+ 'cx-viewer.project': projectName || 'unknown',
39
+ 'cx-viewer.session': _traceSessionId,
40
+ });
41
+
42
+ const traceExporter = new OTLPTraceExporter({
43
+ url: OTEL_COLLECTOR_URL,
44
+ headers: {},
45
+ });
46
+
47
+ _sdk = new NodeSDK({
48
+ resource,
49
+ traceExporter,
50
+ autoDetectResources: false,
51
+ });
52
+
53
+ _sdk.start();
54
+ _tracer = trace.getTracer('cx-viewer-network', '2.0.0');
55
+
56
+ process.on('SIGINT', shutdownOtel);
57
+ process.on('SIGTERM', shutdownOtel);
58
+
59
+ return true;
60
+ } catch (err) {
61
+ console.error('[OTel Adapter] Failed to initialize:', err.message);
62
+ return false;
63
+ }
64
+ }
65
+
66
+ /**
67
+ * 生成会话ID
68
+ */
69
+ function generateSessionId() {
70
+ return `cxv-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`;
71
+ }
72
+
73
+ /**
74
+ * 创建网络请求 Span
75
+ */
76
+ export function createRequestSpan(requestEntry) {
77
+ if (!_tracer) return null;
78
+
79
+ const {
80
+ url,
81
+ method,
82
+ headers,
83
+ body,
84
+ timestamp,
85
+ project,
86
+ mainAgent,
87
+ teammate,
88
+ teamName,
89
+ isStream,
90
+ isHeartbeat,
91
+ isCountTokens,
92
+ } = requestEntry;
93
+
94
+ if (isHeartbeat && process.env.CXV_OTEL_SKIP_HEARTBEAT === '1') return null;
95
+
96
+ const spanName = `${method} ${getUrlPath(url)}`;
97
+ const startTime = timestamp ? new Date(timestamp).getTime() : Date.now();
98
+
99
+ const span = _tracer.startSpan(spanName, {
100
+ kind: SpanKind.CLIENT,
101
+ startTime,
102
+ attributes: {
103
+ 'http.request.method': method,
104
+ 'http.request.url': url,
105
+ 'http.request.headers': JSON.stringify(sanitizeHeaders(headers)),
106
+ 'http.request.body.size': body ? JSON.stringify(body).length : 0,
107
+
108
+ 'cx.codex.main_agent': mainAgent || false,
109
+ 'cx.codex.is_stream': isStream || false,
110
+ 'cx.codex.is_heartbeat': isHeartbeat || false,
111
+ 'cx.codex.is_count_tokens': isCountTokens || false,
112
+ 'cx.codex.project': project || 'unknown',
113
+
114
+ ...(teammate && { 'cx.codex.teammate': teammate }),
115
+ ...(teamName && { 'cx.codex.team_name': teamName }),
116
+
117
+ ...(body?.model && { 'cx.codex.model': body.model }),
118
+ ...(body?.stream !== undefined && { 'cx.codex.stream_param': body.stream }),
119
+ ...(body?.messages && { 'cx.codex.message_count': body.messages.length }),
120
+ ...(body?.tools && { 'cx.codex.tool_count': body.tools.length }),
121
+ },
122
+ });
123
+
124
+ return span;
125
+ }
126
+
127
+ /**
128
+ * 完成 Span 并记录响应
129
+ */
130
+ export function completeRequestSpan(span, requestEntry) {
131
+ if (!span) return;
132
+
133
+ const { response, duration } = requestEntry;
134
+ const endTime = Date.now();
135
+
136
+ try {
137
+ if (response) {
138
+ span.setAttribute('http.response.status_code', response.status);
139
+ span.setAttribute('http.response.headers', JSON.stringify(response.headers || {}));
140
+ span.setAttribute('http.response.body.size', response.body ? JSON.stringify(response.body).length : 0);
141
+
142
+ if (response.status >= 400) {
143
+ span.setStatus({
144
+ code: SpanStatusCode.ERROR,
145
+ message: response.statusText || `HTTP ${response.status}`,
146
+ });
147
+ } else {
148
+ span.setStatus({ code: SpanStatusCode.OK });
149
+ }
150
+
151
+ if (response.body) {
152
+ const body = response.body;
153
+ if (body.usage) {
154
+ span.setAttribute('cx.codex.usage.input_tokens', body.usage.input_tokens || 0);
155
+ span.setAttribute('cx.codex.usage.output_tokens', body.usage.output_tokens || 0);
156
+ span.setAttribute('cx.codex.usage.total_tokens', body.usage.total_tokens || 0);
157
+ }
158
+ if (body.stop_reason) {
159
+ span.setAttribute('cx.codex.stop_reason', body.stop_reason);
160
+ }
161
+ if (body.model) {
162
+ span.setAttribute('cx.codex.response_model', body.model);
163
+ }
164
+ }
165
+ }
166
+
167
+ if (duration) {
168
+ span.setAttribute('http.request.duration_ms', duration);
169
+ }
170
+
171
+ span.end(endTime);
172
+ } catch (err) {
173
+ span.recordException(err);
174
+ span.end(endTime);
175
+ }
176
+ }
177
+
178
+ /**
179
+ * 记录流式响应事件
180
+ */
181
+ export function recordStreamEvent(span, event) {
182
+ if (!span) return;
183
+
184
+ const eventType = event.type || 'unknown';
185
+ span.addEvent(`stream.${eventType}`, {
186
+ 'cx.codex.event_type': eventType,
187
+ 'cx.codex.event_data': JSON.stringify(event).slice(0, 1000),
188
+ });
189
+ }
190
+
191
+ /**
192
+ * 脱敏 Headers
193
+ */
194
+ function sanitizeHeaders(headers) {
195
+ if (!headers) return {};
196
+ const safe = { ...headers };
197
+ const sensitive = ['authorization', 'x-api-key', 'cookie', 'x-auth-token'];
198
+ for (const key of Object.keys(safe)) {
199
+ if (sensitive.includes(key.toLowerCase())) {
200
+ const val = safe[key];
201
+ safe[key] = val?.length > 12 ? `${val.slice(0, 8)}****${val.slice(-4)}` : '****';
202
+ }
203
+ }
204
+ return safe;
205
+ }
206
+
207
+ /**
208
+ * 提取 URL path
209
+ */
210
+ function getUrlPath(url) {
211
+ try {
212
+ return new URL(url).pathname;
213
+ } catch {
214
+ return url;
215
+ }
216
+ }
217
+
218
+ /**
219
+ * 关闭 OTel SDK
220
+ */
221
+ export function shutdownOtel() {
222
+ if (_sdk) {
223
+ _sdk.shutdown().catch(() => {});
224
+ _sdk = null;
225
+ _tracer = null;
226
+ }
227
+ }
228
+
229
+ /**
230
+ * 获取当前会话ID
231
+ */
232
+ export function getTraceSessionId() {
233
+ return _traceSessionId;
234
+ }
235
+
236
+ /**
237
+ * 检查 OTel 是否启用
238
+ */
239
+ export function isOtelEnabled() {
240
+ return ENABLE_OTEL && _tracer !== null;
241
+ }
242
+
243
+ export default {
244
+ initOtelAdapter,
245
+ createRequestSpan,
246
+ completeRequestSpan,
247
+ recordStreamEvent,
248
+ shutdownOtel,
249
+ getTraceSessionId,
250
+ isOtelEnabled,
251
+ };
@@ -0,0 +1,198 @@
1
+ /**
2
+ * otel-receiver.js — 轻量级 OTLP HTTP 接收器
3
+ *
4
+ * 接收 Codex CLI 原生发出的 OTel trace 数据(OTLP JSON 格式),
5
+ * 解析 spans 并转换为 cx-viewer 的 entry 格式,写入 JSONL 日志文件。
6
+ *
7
+ * Codex 通过 config.toml [otel] 配置将遥测数据发送到此端点。
8
+ * 支持的数据:API 请求、工具调用、用户提示等。
9
+ */
10
+
11
+ import { appendFileSync } from 'node:fs';
12
+
13
+ /**
14
+ * 从 OTLP JSON trace 数据中提取 spans 并转换为 cx-viewer entries
15
+ * @param {object} otlpData - OTLP ExportTraceServiceRequest JSON
16
+ * @returns {Array} cx-viewer entry 数组
17
+ */
18
+ export function parseOtlpTraces(otlpData) {
19
+ const entries = [];
20
+ if (!otlpData?.resourceSpans) return entries;
21
+
22
+ for (const rs of otlpData.resourceSpans) {
23
+ const resourceAttrs = extractAttributes(rs.resource?.attributes);
24
+
25
+ for (const ss of rs.scopeSpans || []) {
26
+ for (const span of ss.spans || []) {
27
+ const entry = spanToEntry(span, resourceAttrs);
28
+ if (entry) entries.push(entry);
29
+ }
30
+ }
31
+ }
32
+ return entries;
33
+ }
34
+
35
+ /**
36
+ * 将单个 OTel span 转换为 cx-viewer entry 数组
37
+ * 一个 span 可能包含多种事件(api_request + tool.call 等),全部提取
38
+ */
39
+ function spanToEntry(span, resourceAttrs) {
40
+ const attrs = extractAttributes(span.attributes);
41
+ const events = (span.events || []).map(e => ({
42
+ name: e.name,
43
+ attrs: extractAttributes(e.attributes),
44
+ timeUnixNano: e.timeUnixNano,
45
+ }));
46
+
47
+ if (events.length === 0) return null;
48
+
49
+ const startNano = BigInt(span.startTimeUnixNano || '0');
50
+ const endNano = BigInt(span.endTimeUnixNano || '0');
51
+ const durationMs = Number((endNano - startNano) / 1000000n);
52
+ const timestamp = new Date(Number(startNano / 1000000n)).toISOString();
53
+ const model = attrs['codex.model'] || attrs['model'] || resourceAttrs['model'] || null;
54
+ const project = resourceAttrs['cx-viewer.project'] || resourceAttrs['service.name'] || 'codex';
55
+
56
+ const results = [];
57
+
58
+ // API 请求事件
59
+ for (const evt of events.filter(e => e.name === 'codex.api_request')) {
60
+ const a = evt.attrs;
61
+ results.push({
62
+ timestamp,
63
+ project,
64
+ url: `codex://api/${span.name || 'request'}`,
65
+ method: 'POST',
66
+ headers: {},
67
+ body: { model: model || a['model'], _otelSpanName: span.name },
68
+ response: {
69
+ status: parseInt(a['http.response.status_code']) || 200,
70
+ statusText: a['success'] === 'true' ? 'OK' : (a['error.message'] || 'Error'),
71
+ headers: {},
72
+ body: {
73
+ usage: {
74
+ input_tokens: parseInt(a['input_token_count']) || 0,
75
+ output_tokens: parseInt(a['output_token_count']) || 0,
76
+ cache_read_input_tokens: parseInt(a['cached_token_count']) || 0,
77
+ },
78
+ model: model || a['model'],
79
+ },
80
+ },
81
+ duration: parseInt(a['duration_ms']) || durationMs,
82
+ isStream: true,
83
+ mainAgent: true,
84
+ _otelSource: true,
85
+ _otelTraceId: span.traceId,
86
+ _otelSpanId: span.spanId,
87
+ });
88
+ }
89
+
90
+ // 工具调用事件
91
+ const toolResultEvents = events.filter(e => e.name === 'codex.tool_result');
92
+ for (const tc of events.filter(e => e.name === 'codex.tool.call')) {
93
+ const a = tc.attrs;
94
+ const toolName = a['tool_name'] || 'unknown';
95
+ const matchResult = toolResultEvents.find(tr => tr.attrs['call_id'] === a['call_id']);
96
+ results.push({
97
+ timestamp: tc.timeUnixNano
98
+ ? new Date(Number(BigInt(tc.timeUnixNano) / 1000000n)).toISOString()
99
+ : timestamp,
100
+ project,
101
+ url: `codex://tool/${toolName}`,
102
+ method: 'TOOL',
103
+ headers: {},
104
+ body: {
105
+ tool_name: toolName,
106
+ tool_input: safeJsonParse(a['arguments']),
107
+ _callId: a['call_id'],
108
+ _source: a['source'],
109
+ },
110
+ response: matchResult ? {
111
+ status: 200, statusText: 'OK', headers: {},
112
+ body: {
113
+ output: safeJsonParse(matchResult.attrs['output']) || matchResult.attrs['output'],
114
+ _outputLength: parseInt(matchResult.attrs['output_length']) || 0,
115
+ },
116
+ } : null,
117
+ duration: parseInt(a['duration_ms'] || matchResult?.attrs['duration_ms']) || 0,
118
+ isStream: false,
119
+ mainAgent: false,
120
+ _otelSource: true,
121
+ _otelTraceId: span.traceId,
122
+ });
123
+ }
124
+
125
+ // 用户提示事件
126
+ for (const evt of events.filter(e => e.name === 'codex.user_prompt')) {
127
+ const a = evt.attrs;
128
+ results.push({
129
+ timestamp: evt.timeUnixNano
130
+ ? new Date(Number(BigInt(evt.timeUnixNano) / 1000000n)).toISOString()
131
+ : timestamp,
132
+ project,
133
+ url: 'codex://user_prompt',
134
+ method: 'POST',
135
+ headers: {},
136
+ body: {
137
+ model,
138
+ messages: [{ role: 'user', content: a['prompt'] || '' }],
139
+ _promptLength: parseInt(a['prompt_length']) || 0,
140
+ },
141
+ response: null,
142
+ duration: 0,
143
+ isStream: false,
144
+ mainAgent: true,
145
+ _otelSource: true,
146
+ _otelTraceId: span.traceId,
147
+ });
148
+ }
149
+
150
+ return results.length > 0 ? results : null;
151
+ }
152
+
153
+ /**
154
+ * 提取 OTLP attributes 数组为普通对象
155
+ * OTLP 格式: [{ key: 'foo', value: { stringValue: 'bar' } }]
156
+ */
157
+ function extractAttributes(attrs) {
158
+ if (!Array.isArray(attrs)) return {};
159
+ const result = {};
160
+ for (const attr of attrs) {
161
+ if (!attr?.key) continue;
162
+ const v = attr.value;
163
+ if (!v) continue;
164
+ if (v.stringValue !== undefined) result[attr.key] = v.stringValue;
165
+ else if (v.intValue !== undefined) result[attr.key] = String(v.intValue);
166
+ else if (v.doubleValue !== undefined) result[attr.key] = String(v.doubleValue);
167
+ else if (v.boolValue !== undefined) result[attr.key] = String(v.boolValue);
168
+ else if (v.arrayValue) result[attr.key] = JSON.stringify(v.arrayValue.values);
169
+ else if (v.kvlistValue) result[attr.key] = JSON.stringify(v.kvlistValue.values);
170
+ }
171
+ return result;
172
+ }
173
+
174
+ /**
175
+ * 将 OTel entries 写入 JSONL 日志文件
176
+ * @param {string} logFile - 日志文件路径
177
+ * @param {Array} entries - cx-viewer entry 数组
178
+ */
179
+ export function writeOtelEntries(logFile, entries) {
180
+ if (!logFile || !entries.length) return;
181
+ const lines = entries
182
+ .flat() // spanToEntry 可能返回数组(多个工具调用)
183
+ .filter(Boolean)
184
+ .map(e => JSON.stringify(e) + '\n---\n')
185
+ .join('');
186
+ try {
187
+ appendFileSync(logFile, lines);
188
+ } catch (err) {
189
+ if (process.env.CXV_DEBUG) {
190
+ console.error('[OTel Receiver] Write error:', err.message);
191
+ }
192
+ }
193
+ }
194
+
195
+ function safeJsonParse(s) {
196
+ if (!s || typeof s !== 'string') return s;
197
+ try { return JSON.parse(s); } catch { return s; }
198
+ }