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.
- package/LICENSE.md +21 -0
- package/README.md +221 -0
- package/cli.js +735 -0
- package/concepts/ar/BodyDiffJSON.md +32 -0
- package/concepts/ar/BodyFields.md +42 -0
- package/concepts/ar/CacheRebuild.md +36 -0
- package/concepts/ar/GlobalSettings.md +232 -0
- package/concepts/ar/KVCacheContent.md +49 -0
- package/concepts/ar/MainAgent.md +23 -0
- package/concepts/ar/ProxySwitch.md +50 -0
- package/concepts/ar/QRCode.md +25 -0
- package/concepts/ar/ResponseFields.md +50 -0
- package/concepts/ar/SubAgent-Search.md +20 -0
- package/concepts/ar/Teammate.md +26 -0
- package/concepts/ar/Tool-Agent.md +125 -0
- package/concepts/ar/Tool-AskUserQuestion.md +75 -0
- package/concepts/ar/Tool-Bash.md +167 -0
- package/concepts/ar/Tool-Edit.md +46 -0
- package/concepts/ar/Tool-EnterPlanMode.md +128 -0
- package/concepts/ar/Tool-EnterWorktree.md +56 -0
- package/concepts/ar/Tool-ExitPlanMode.md +62 -0
- package/concepts/ar/Tool-Glob.md +39 -0
- package/concepts/ar/Tool-Grep.md +57 -0
- package/concepts/ar/Tool-NotebookEdit.md +33 -0
- package/concepts/ar/Tool-Read.md +56 -0
- package/concepts/ar/Tool-SendMessage.md +41 -0
- package/concepts/ar/Tool-Skill.md +56 -0
- package/concepts/ar/Tool-Task.md +51 -0
- package/concepts/ar/Tool-TaskCreate.md +78 -0
- package/concepts/ar/Tool-TaskGet.md +56 -0
- package/concepts/ar/Tool-TaskList.md +56 -0
- package/concepts/ar/Tool-TaskOutput.md +40 -0
- package/concepts/ar/Tool-TaskStop.md +32 -0
- package/concepts/ar/Tool-TaskUpdate.md +123 -0
- package/concepts/ar/Tool-TeamCreate.md +38 -0
- package/concepts/ar/Tool-TeamDelete.md +30 -0
- package/concepts/ar/Tool-WebFetch.md +55 -0
- package/concepts/ar/Tool-WebSearch.md +58 -0
- package/concepts/ar/Tool-Write.md +39 -0
- package/concepts/ar/Tool-executeCode.md +41 -0
- package/concepts/ar/Tool-getDiagnostics.md +32 -0
- package/concepts/ar/Tools.md +67 -0
- package/concepts/ar/ToolsFirst.md +77 -0
- package/concepts/ar/TranslateContextPollution.md +46 -0
- package/concepts/ar/UltraPlan.md +55 -0
- package/concepts/da/BodyDiffJSON.md +32 -0
- package/concepts/da/BodyFields.md +42 -0
- package/concepts/da/CacheRebuild.md +36 -0
- package/concepts/da/GlobalSettings.md +232 -0
- package/concepts/da/KVCacheContent.md +49 -0
- package/concepts/da/MainAgent.md +23 -0
- package/concepts/da/ProxySwitch.md +50 -0
- package/concepts/da/QRCode.md +25 -0
- package/concepts/da/ResponseFields.md +50 -0
- package/concepts/da/SubAgent-Search.md +20 -0
- package/concepts/da/Teammate.md +26 -0
- package/concepts/da/Tool-Agent.md +125 -0
- package/concepts/da/Tool-AskUserQuestion.md +75 -0
- package/concepts/da/Tool-Bash.md +167 -0
- package/concepts/da/Tool-Edit.md +46 -0
- package/concepts/da/Tool-EnterPlanMode.md +128 -0
- package/concepts/da/Tool-EnterWorktree.md +56 -0
- package/concepts/da/Tool-ExitPlanMode.md +62 -0
- package/concepts/da/Tool-Glob.md +39 -0
- package/concepts/da/Tool-Grep.md +57 -0
- package/concepts/da/Tool-NotebookEdit.md +33 -0
- package/concepts/da/Tool-Read.md +56 -0
- package/concepts/da/Tool-SendMessage.md +41 -0
- package/concepts/da/Tool-Skill.md +56 -0
- package/concepts/da/Tool-Task.md +51 -0
- package/concepts/da/Tool-TaskCreate.md +78 -0
- package/concepts/da/Tool-TaskGet.md +56 -0
- package/concepts/da/Tool-TaskList.md +56 -0
- package/concepts/da/Tool-TaskOutput.md +40 -0
- package/concepts/da/Tool-TaskStop.md +32 -0
- package/concepts/da/Tool-TaskUpdate.md +123 -0
- package/concepts/da/Tool-TeamCreate.md +38 -0
- package/concepts/da/Tool-TeamDelete.md +30 -0
- package/concepts/da/Tool-WebFetch.md +55 -0
- package/concepts/da/Tool-WebSearch.md +58 -0
- package/concepts/da/Tool-Write.md +39 -0
- package/concepts/da/Tool-executeCode.md +41 -0
- package/concepts/da/Tool-getDiagnostics.md +32 -0
- package/concepts/da/Tools.md +67 -0
- package/concepts/da/ToolsFirst.md +77 -0
- package/concepts/da/TranslateContextPollution.md +46 -0
- package/concepts/da/UltraPlan.md +55 -0
- package/concepts/de/BodyDiffJSON.md +32 -0
- package/concepts/de/BodyFields.md +42 -0
- package/concepts/de/CacheRebuild.md +36 -0
- package/concepts/de/GlobalSettings.md +232 -0
- package/concepts/de/KVCacheContent.md +49 -0
- package/concepts/de/MainAgent.md +23 -0
- package/concepts/de/ProxySwitch.md +50 -0
- package/concepts/de/QRCode.md +25 -0
- package/concepts/de/ResponseFields.md +50 -0
- package/concepts/de/SubAgent-Search.md +20 -0
- package/concepts/de/Teammate.md +26 -0
- package/concepts/de/Tool-Agent.md +125 -0
- package/concepts/de/Tool-AskUserQuestion.md +75 -0
- package/concepts/de/Tool-Bash.md +167 -0
- package/concepts/de/Tool-Edit.md +46 -0
- package/concepts/de/Tool-EnterPlanMode.md +128 -0
- package/concepts/de/Tool-EnterWorktree.md +56 -0
- package/concepts/de/Tool-ExitPlanMode.md +62 -0
- package/concepts/de/Tool-Glob.md +39 -0
- package/concepts/de/Tool-Grep.md +57 -0
- package/concepts/de/Tool-NotebookEdit.md +33 -0
- package/concepts/de/Tool-Read.md +56 -0
- package/concepts/de/Tool-SendMessage.md +41 -0
- package/concepts/de/Tool-Skill.md +56 -0
- package/concepts/de/Tool-Task.md +51 -0
- package/concepts/de/Tool-TaskCreate.md +78 -0
- package/concepts/de/Tool-TaskGet.md +56 -0
- package/concepts/de/Tool-TaskList.md +56 -0
- package/concepts/de/Tool-TaskOutput.md +40 -0
- package/concepts/de/Tool-TaskStop.md +32 -0
- package/concepts/de/Tool-TaskUpdate.md +123 -0
- package/concepts/de/Tool-TeamCreate.md +38 -0
- package/concepts/de/Tool-TeamDelete.md +30 -0
- package/concepts/de/Tool-WebFetch.md +55 -0
- package/concepts/de/Tool-WebSearch.md +58 -0
- package/concepts/de/Tool-Write.md +39 -0
- package/concepts/de/Tool-executeCode.md +41 -0
- package/concepts/de/Tool-getDiagnostics.md +32 -0
- package/concepts/de/Tools.md +67 -0
- package/concepts/de/ToolsFirst.md +77 -0
- package/concepts/de/TranslateContextPollution.md +46 -0
- package/concepts/de/UltraPlan.md +55 -0
- package/concepts/en/BodyDiffJSON.md +32 -0
- package/concepts/en/BodyFields.md +42 -0
- package/concepts/en/CacheRebuild.md +36 -0
- package/concepts/en/GlobalSettings.md +232 -0
- package/concepts/en/KVCacheContent.md +49 -0
- package/concepts/en/MainAgent.md +23 -0
- package/concepts/en/ProxySwitch.md +50 -0
- package/concepts/en/QRCode.md +29 -0
- package/concepts/en/ResponseFields.md +50 -0
- package/concepts/en/SubAgent-Search.md +20 -0
- package/concepts/en/Teammate.md +26 -0
- package/concepts/en/Tool-Agent.md +125 -0
- package/concepts/en/Tool-AskUserQuestion.md +75 -0
- package/concepts/en/Tool-Bash.md +167 -0
- package/concepts/en/Tool-Edit.md +46 -0
- package/concepts/en/Tool-EnterPlanMode.md +128 -0
- package/concepts/en/Tool-EnterWorktree.md +56 -0
- package/concepts/en/Tool-ExitPlanMode.md +62 -0
- package/concepts/en/Tool-Glob.md +39 -0
- package/concepts/en/Tool-Grep.md +57 -0
- package/concepts/en/Tool-NotebookEdit.md +33 -0
- package/concepts/en/Tool-Read.md +56 -0
- package/concepts/en/Tool-SendMessage.md +41 -0
- package/concepts/en/Tool-Skill.md +56 -0
- package/concepts/en/Tool-Task.md +51 -0
- package/concepts/en/Tool-TaskCreate.md +78 -0
- package/concepts/en/Tool-TaskGet.md +56 -0
- package/concepts/en/Tool-TaskList.md +56 -0
- package/concepts/en/Tool-TaskOutput.md +40 -0
- package/concepts/en/Tool-TaskStop.md +32 -0
- package/concepts/en/Tool-TaskUpdate.md +123 -0
- package/concepts/en/Tool-TeamCreate.md +38 -0
- package/concepts/en/Tool-TeamDelete.md +30 -0
- package/concepts/en/Tool-WebFetch.md +55 -0
- package/concepts/en/Tool-WebSearch.md +58 -0
- package/concepts/en/Tool-Write.md +39 -0
- package/concepts/en/Tool-executeCode.md +41 -0
- package/concepts/en/Tool-getDiagnostics.md +32 -0
- package/concepts/en/Tools.md +67 -0
- package/concepts/en/ToolsFirst.md +77 -0
- package/concepts/en/TranslateContextPollution.md +46 -0
- package/concepts/en/UltraPlan.md +55 -0
- package/concepts/es/BodyDiffJSON.md +32 -0
- package/concepts/es/BodyFields.md +42 -0
- package/concepts/es/CacheRebuild.md +36 -0
- package/concepts/es/GlobalSettings.md +232 -0
- package/concepts/es/KVCacheContent.md +49 -0
- package/concepts/es/MainAgent.md +23 -0
- package/concepts/es/ProxySwitch.md +50 -0
- package/concepts/es/QRCode.md +25 -0
- package/concepts/es/ResponseFields.md +50 -0
- package/concepts/es/SubAgent-Search.md +20 -0
- package/concepts/es/Teammate.md +26 -0
- package/concepts/es/Tool-Agent.md +125 -0
- package/concepts/es/Tool-AskUserQuestion.md +75 -0
- package/concepts/es/Tool-Bash.md +167 -0
- package/concepts/es/Tool-Edit.md +46 -0
- package/concepts/es/Tool-EnterPlanMode.md +128 -0
- package/concepts/es/Tool-EnterWorktree.md +56 -0
- package/concepts/es/Tool-ExitPlanMode.md +62 -0
- package/concepts/es/Tool-Glob.md +39 -0
- package/concepts/es/Tool-Grep.md +57 -0
- package/concepts/es/Tool-NotebookEdit.md +33 -0
- package/concepts/es/Tool-Read.md +56 -0
- package/concepts/es/Tool-SendMessage.md +41 -0
- package/concepts/es/Tool-Skill.md +56 -0
- package/concepts/es/Tool-Task.md +51 -0
- package/concepts/es/Tool-TaskCreate.md +78 -0
- package/concepts/es/Tool-TaskGet.md +56 -0
- package/concepts/es/Tool-TaskList.md +56 -0
- package/concepts/es/Tool-TaskOutput.md +40 -0
- package/concepts/es/Tool-TaskStop.md +32 -0
- package/concepts/es/Tool-TaskUpdate.md +123 -0
- package/concepts/es/Tool-TeamCreate.md +38 -0
- package/concepts/es/Tool-TeamDelete.md +30 -0
- package/concepts/es/Tool-WebFetch.md +55 -0
- package/concepts/es/Tool-WebSearch.md +58 -0
- package/concepts/es/Tool-Write.md +39 -0
- package/concepts/es/Tool-executeCode.md +41 -0
- package/concepts/es/Tool-getDiagnostics.md +32 -0
- package/concepts/es/Tools.md +67 -0
- package/concepts/es/ToolsFirst.md +77 -0
- package/concepts/es/TranslateContextPollution.md +46 -0
- package/concepts/es/UltraPlan.md +55 -0
- package/concepts/fr/BodyDiffJSON.md +32 -0
- package/concepts/fr/BodyFields.md +42 -0
- package/concepts/fr/CacheRebuild.md +36 -0
- package/concepts/fr/GlobalSettings.md +232 -0
- package/concepts/fr/KVCacheContent.md +49 -0
- package/concepts/fr/MainAgent.md +23 -0
- package/concepts/fr/ProxySwitch.md +50 -0
- package/concepts/fr/QRCode.md +25 -0
- package/concepts/fr/ResponseFields.md +50 -0
- package/concepts/fr/SubAgent-Search.md +20 -0
- package/concepts/fr/Teammate.md +26 -0
- package/concepts/fr/Tool-Agent.md +125 -0
- package/concepts/fr/Tool-AskUserQuestion.md +75 -0
- package/concepts/fr/Tool-Bash.md +167 -0
- package/concepts/fr/Tool-Edit.md +46 -0
- package/concepts/fr/Tool-EnterPlanMode.md +128 -0
- package/concepts/fr/Tool-EnterWorktree.md +56 -0
- package/concepts/fr/Tool-ExitPlanMode.md +62 -0
- package/concepts/fr/Tool-Glob.md +39 -0
- package/concepts/fr/Tool-Grep.md +57 -0
- package/concepts/fr/Tool-NotebookEdit.md +33 -0
- package/concepts/fr/Tool-Read.md +56 -0
- package/concepts/fr/Tool-SendMessage.md +41 -0
- package/concepts/fr/Tool-Skill.md +56 -0
- package/concepts/fr/Tool-Task.md +51 -0
- package/concepts/fr/Tool-TaskCreate.md +78 -0
- package/concepts/fr/Tool-TaskGet.md +56 -0
- package/concepts/fr/Tool-TaskList.md +56 -0
- package/concepts/fr/Tool-TaskOutput.md +40 -0
- package/concepts/fr/Tool-TaskStop.md +32 -0
- package/concepts/fr/Tool-TaskUpdate.md +123 -0
- package/concepts/fr/Tool-TeamCreate.md +38 -0
- package/concepts/fr/Tool-TeamDelete.md +30 -0
- package/concepts/fr/Tool-WebFetch.md +55 -0
- package/concepts/fr/Tool-WebSearch.md +58 -0
- package/concepts/fr/Tool-Write.md +39 -0
- package/concepts/fr/Tool-executeCode.md +41 -0
- package/concepts/fr/Tool-getDiagnostics.md +32 -0
- package/concepts/fr/Tools.md +67 -0
- package/concepts/fr/ToolsFirst.md +77 -0
- package/concepts/fr/TranslateContextPollution.md +46 -0
- package/concepts/fr/UltraPlan.md +55 -0
- package/concepts/it/BodyDiffJSON.md +32 -0
- package/concepts/it/BodyFields.md +42 -0
- package/concepts/it/CacheRebuild.md +36 -0
- package/concepts/it/GlobalSettings.md +232 -0
- package/concepts/it/KVCacheContent.md +49 -0
- package/concepts/it/MainAgent.md +23 -0
- package/concepts/it/ProxySwitch.md +50 -0
- package/concepts/it/QRCode.md +25 -0
- package/concepts/it/ResponseFields.md +50 -0
- package/concepts/it/SubAgent-Search.md +20 -0
- package/concepts/it/Teammate.md +26 -0
- package/concepts/it/Tool-Agent.md +125 -0
- package/concepts/it/Tool-AskUserQuestion.md +75 -0
- package/concepts/it/Tool-Bash.md +167 -0
- package/concepts/it/Tool-Edit.md +46 -0
- package/concepts/it/Tool-EnterPlanMode.md +128 -0
- package/concepts/it/Tool-EnterWorktree.md +56 -0
- package/concepts/it/Tool-ExitPlanMode.md +62 -0
- package/concepts/it/Tool-Glob.md +39 -0
- package/concepts/it/Tool-Grep.md +57 -0
- package/concepts/it/Tool-NotebookEdit.md +33 -0
- package/concepts/it/Tool-Read.md +56 -0
- package/concepts/it/Tool-SendMessage.md +41 -0
- package/concepts/it/Tool-Skill.md +56 -0
- package/concepts/it/Tool-Task.md +51 -0
- package/concepts/it/Tool-TaskCreate.md +78 -0
- package/concepts/it/Tool-TaskGet.md +56 -0
- package/concepts/it/Tool-TaskList.md +56 -0
- package/concepts/it/Tool-TaskOutput.md +40 -0
- package/concepts/it/Tool-TaskStop.md +32 -0
- package/concepts/it/Tool-TaskUpdate.md +123 -0
- package/concepts/it/Tool-TeamCreate.md +38 -0
- package/concepts/it/Tool-TeamDelete.md +30 -0
- package/concepts/it/Tool-WebFetch.md +55 -0
- package/concepts/it/Tool-WebSearch.md +58 -0
- package/concepts/it/Tool-Write.md +39 -0
- package/concepts/it/Tool-executeCode.md +41 -0
- package/concepts/it/Tool-getDiagnostics.md +32 -0
- package/concepts/it/Tools.md +67 -0
- package/concepts/it/ToolsFirst.md +77 -0
- package/concepts/it/TranslateContextPollution.md +46 -0
- package/concepts/it/UltraPlan.md +55 -0
- package/concepts/ja/BodyDiffJSON.md +32 -0
- package/concepts/ja/BodyFields.md +42 -0
- package/concepts/ja/CacheRebuild.md +36 -0
- package/concepts/ja/GlobalSettings.md +232 -0
- package/concepts/ja/KVCacheContent.md +49 -0
- package/concepts/ja/MainAgent.md +23 -0
- package/concepts/ja/ProxySwitch.md +50 -0
- package/concepts/ja/QRCode.md +25 -0
- package/concepts/ja/ResponseFields.md +50 -0
- package/concepts/ja/SubAgent-Search.md +20 -0
- package/concepts/ja/Teammate.md +26 -0
- package/concepts/ja/Tool-Agent.md +125 -0
- package/concepts/ja/Tool-AskUserQuestion.md +75 -0
- package/concepts/ja/Tool-Bash.md +167 -0
- package/concepts/ja/Tool-Edit.md +46 -0
- package/concepts/ja/Tool-EnterPlanMode.md +128 -0
- package/concepts/ja/Tool-EnterWorktree.md +56 -0
- package/concepts/ja/Tool-ExitPlanMode.md +62 -0
- package/concepts/ja/Tool-Glob.md +39 -0
- package/concepts/ja/Tool-Grep.md +57 -0
- package/concepts/ja/Tool-NotebookEdit.md +33 -0
- package/concepts/ja/Tool-Read.md +56 -0
- package/concepts/ja/Tool-SendMessage.md +41 -0
- package/concepts/ja/Tool-Skill.md +56 -0
- package/concepts/ja/Tool-Task.md +51 -0
- package/concepts/ja/Tool-TaskCreate.md +78 -0
- package/concepts/ja/Tool-TaskGet.md +56 -0
- package/concepts/ja/Tool-TaskList.md +56 -0
- package/concepts/ja/Tool-TaskOutput.md +40 -0
- package/concepts/ja/Tool-TaskStop.md +32 -0
- package/concepts/ja/Tool-TaskUpdate.md +123 -0
- package/concepts/ja/Tool-TeamCreate.md +38 -0
- package/concepts/ja/Tool-TeamDelete.md +30 -0
- package/concepts/ja/Tool-WebFetch.md +55 -0
- package/concepts/ja/Tool-WebSearch.md +58 -0
- package/concepts/ja/Tool-Write.md +39 -0
- package/concepts/ja/Tool-executeCode.md +41 -0
- package/concepts/ja/Tool-getDiagnostics.md +32 -0
- package/concepts/ja/Tools.md +67 -0
- package/concepts/ja/ToolsFirst.md +77 -0
- package/concepts/ja/TranslateContextPollution.md +46 -0
- package/concepts/ja/UltraPlan.md +55 -0
- package/concepts/ko/BodyDiffJSON.md +32 -0
- package/concepts/ko/BodyFields.md +42 -0
- package/concepts/ko/CacheRebuild.md +36 -0
- package/concepts/ko/GlobalSettings.md +232 -0
- package/concepts/ko/KVCacheContent.md +49 -0
- package/concepts/ko/MainAgent.md +23 -0
- package/concepts/ko/ProxySwitch.md +50 -0
- package/concepts/ko/QRCode.md +25 -0
- package/concepts/ko/ResponseFields.md +50 -0
- package/concepts/ko/SubAgent-Search.md +20 -0
- package/concepts/ko/Teammate.md +26 -0
- package/concepts/ko/Tool-Agent.md +125 -0
- package/concepts/ko/Tool-AskUserQuestion.md +75 -0
- package/concepts/ko/Tool-Bash.md +167 -0
- package/concepts/ko/Tool-Edit.md +46 -0
- package/concepts/ko/Tool-EnterPlanMode.md +128 -0
- package/concepts/ko/Tool-EnterWorktree.md +56 -0
- package/concepts/ko/Tool-ExitPlanMode.md +62 -0
- package/concepts/ko/Tool-Glob.md +39 -0
- package/concepts/ko/Tool-Grep.md +57 -0
- package/concepts/ko/Tool-NotebookEdit.md +33 -0
- package/concepts/ko/Tool-Read.md +56 -0
- package/concepts/ko/Tool-SendMessage.md +41 -0
- package/concepts/ko/Tool-Skill.md +56 -0
- package/concepts/ko/Tool-Task.md +51 -0
- package/concepts/ko/Tool-TaskCreate.md +78 -0
- package/concepts/ko/Tool-TaskGet.md +56 -0
- package/concepts/ko/Tool-TaskList.md +56 -0
- package/concepts/ko/Tool-TaskOutput.md +40 -0
- package/concepts/ko/Tool-TaskStop.md +32 -0
- package/concepts/ko/Tool-TaskUpdate.md +123 -0
- package/concepts/ko/Tool-TeamCreate.md +38 -0
- package/concepts/ko/Tool-TeamDelete.md +30 -0
- package/concepts/ko/Tool-WebFetch.md +55 -0
- package/concepts/ko/Tool-WebSearch.md +58 -0
- package/concepts/ko/Tool-Write.md +39 -0
- package/concepts/ko/Tool-executeCode.md +41 -0
- package/concepts/ko/Tool-getDiagnostics.md +32 -0
- package/concepts/ko/Tools.md +67 -0
- package/concepts/ko/ToolsFirst.md +77 -0
- package/concepts/ko/TranslateContextPollution.md +46 -0
- package/concepts/ko/UltraPlan.md +55 -0
- package/concepts/no/BodyDiffJSON.md +32 -0
- package/concepts/no/BodyFields.md +42 -0
- package/concepts/no/CacheRebuild.md +36 -0
- package/concepts/no/GlobalSettings.md +232 -0
- package/concepts/no/KVCacheContent.md +49 -0
- package/concepts/no/MainAgent.md +23 -0
- package/concepts/no/ProxySwitch.md +50 -0
- package/concepts/no/QRCode.md +25 -0
- package/concepts/no/ResponseFields.md +50 -0
- package/concepts/no/SubAgent-Search.md +20 -0
- package/concepts/no/Teammate.md +26 -0
- package/concepts/no/Tool-Agent.md +125 -0
- package/concepts/no/Tool-AskUserQuestion.md +75 -0
- package/concepts/no/Tool-Bash.md +167 -0
- package/concepts/no/Tool-Edit.md +46 -0
- package/concepts/no/Tool-EnterPlanMode.md +128 -0
- package/concepts/no/Tool-EnterWorktree.md +56 -0
- package/concepts/no/Tool-ExitPlanMode.md +62 -0
- package/concepts/no/Tool-Glob.md +39 -0
- package/concepts/no/Tool-Grep.md +57 -0
- package/concepts/no/Tool-NotebookEdit.md +33 -0
- package/concepts/no/Tool-Read.md +56 -0
- package/concepts/no/Tool-SendMessage.md +41 -0
- package/concepts/no/Tool-Skill.md +56 -0
- package/concepts/no/Tool-Task.md +51 -0
- package/concepts/no/Tool-TaskCreate.md +78 -0
- package/concepts/no/Tool-TaskGet.md +56 -0
- package/concepts/no/Tool-TaskList.md +56 -0
- package/concepts/no/Tool-TaskOutput.md +40 -0
- package/concepts/no/Tool-TaskStop.md +32 -0
- package/concepts/no/Tool-TaskUpdate.md +123 -0
- package/concepts/no/Tool-TeamCreate.md +38 -0
- package/concepts/no/Tool-TeamDelete.md +30 -0
- package/concepts/no/Tool-WebFetch.md +55 -0
- package/concepts/no/Tool-WebSearch.md +58 -0
- package/concepts/no/Tool-Write.md +39 -0
- package/concepts/no/Tool-executeCode.md +41 -0
- package/concepts/no/Tool-getDiagnostics.md +32 -0
- package/concepts/no/Tools.md +67 -0
- package/concepts/no/ToolsFirst.md +77 -0
- package/concepts/no/TranslateContextPollution.md +46 -0
- package/concepts/no/UltraPlan.md +55 -0
- package/concepts/pl/BodyDiffJSON.md +32 -0
- package/concepts/pl/BodyFields.md +42 -0
- package/concepts/pl/CacheRebuild.md +36 -0
- package/concepts/pl/GlobalSettings.md +232 -0
- package/concepts/pl/KVCacheContent.md +49 -0
- package/concepts/pl/MainAgent.md +23 -0
- package/concepts/pl/ProxySwitch.md +50 -0
- package/concepts/pl/QRCode.md +25 -0
- package/concepts/pl/ResponseFields.md +50 -0
- package/concepts/pl/SubAgent-Search.md +20 -0
- package/concepts/pl/Teammate.md +26 -0
- package/concepts/pl/Tool-Agent.md +125 -0
- package/concepts/pl/Tool-AskUserQuestion.md +75 -0
- package/concepts/pl/Tool-Bash.md +167 -0
- package/concepts/pl/Tool-Edit.md +46 -0
- package/concepts/pl/Tool-EnterPlanMode.md +128 -0
- package/concepts/pl/Tool-EnterWorktree.md +56 -0
- package/concepts/pl/Tool-ExitPlanMode.md +62 -0
- package/concepts/pl/Tool-Glob.md +39 -0
- package/concepts/pl/Tool-Grep.md +57 -0
- package/concepts/pl/Tool-NotebookEdit.md +33 -0
- package/concepts/pl/Tool-Read.md +56 -0
- package/concepts/pl/Tool-SendMessage.md +41 -0
- package/concepts/pl/Tool-Skill.md +56 -0
- package/concepts/pl/Tool-Task.md +51 -0
- package/concepts/pl/Tool-TaskCreate.md +78 -0
- package/concepts/pl/Tool-TaskGet.md +56 -0
- package/concepts/pl/Tool-TaskList.md +56 -0
- package/concepts/pl/Tool-TaskOutput.md +40 -0
- package/concepts/pl/Tool-TaskStop.md +32 -0
- package/concepts/pl/Tool-TaskUpdate.md +123 -0
- package/concepts/pl/Tool-TeamCreate.md +38 -0
- package/concepts/pl/Tool-TeamDelete.md +30 -0
- package/concepts/pl/Tool-WebFetch.md +55 -0
- package/concepts/pl/Tool-WebSearch.md +58 -0
- package/concepts/pl/Tool-Write.md +39 -0
- package/concepts/pl/Tool-executeCode.md +41 -0
- package/concepts/pl/Tool-getDiagnostics.md +32 -0
- package/concepts/pl/Tools.md +67 -0
- package/concepts/pl/ToolsFirst.md +77 -0
- package/concepts/pl/TranslateContextPollution.md +46 -0
- package/concepts/pl/UltraPlan.md +55 -0
- package/concepts/pt-BR/BodyDiffJSON.md +32 -0
- package/concepts/pt-BR/BodyFields.md +42 -0
- package/concepts/pt-BR/CacheRebuild.md +36 -0
- package/concepts/pt-BR/GlobalSettings.md +232 -0
- package/concepts/pt-BR/KVCacheContent.md +49 -0
- package/concepts/pt-BR/MainAgent.md +23 -0
- package/concepts/pt-BR/ProxySwitch.md +50 -0
- package/concepts/pt-BR/QRCode.md +25 -0
- package/concepts/pt-BR/ResponseFields.md +50 -0
- package/concepts/pt-BR/SubAgent-Search.md +20 -0
- package/concepts/pt-BR/Teammate.md +26 -0
- package/concepts/pt-BR/Tool-Agent.md +125 -0
- package/concepts/pt-BR/Tool-AskUserQuestion.md +75 -0
- package/concepts/pt-BR/Tool-Bash.md +167 -0
- package/concepts/pt-BR/Tool-Edit.md +46 -0
- package/concepts/pt-BR/Tool-EnterPlanMode.md +128 -0
- package/concepts/pt-BR/Tool-EnterWorktree.md +56 -0
- package/concepts/pt-BR/Tool-ExitPlanMode.md +62 -0
- package/concepts/pt-BR/Tool-Glob.md +39 -0
- package/concepts/pt-BR/Tool-Grep.md +57 -0
- package/concepts/pt-BR/Tool-NotebookEdit.md +33 -0
- package/concepts/pt-BR/Tool-Read.md +56 -0
- package/concepts/pt-BR/Tool-SendMessage.md +41 -0
- package/concepts/pt-BR/Tool-Skill.md +56 -0
- package/concepts/pt-BR/Tool-Task.md +51 -0
- package/concepts/pt-BR/Tool-TaskCreate.md +78 -0
- package/concepts/pt-BR/Tool-TaskGet.md +56 -0
- package/concepts/pt-BR/Tool-TaskList.md +56 -0
- package/concepts/pt-BR/Tool-TaskOutput.md +40 -0
- package/concepts/pt-BR/Tool-TaskStop.md +32 -0
- package/concepts/pt-BR/Tool-TaskUpdate.md +123 -0
- package/concepts/pt-BR/Tool-TeamCreate.md +38 -0
- package/concepts/pt-BR/Tool-TeamDelete.md +30 -0
- package/concepts/pt-BR/Tool-WebFetch.md +55 -0
- package/concepts/pt-BR/Tool-WebSearch.md +58 -0
- package/concepts/pt-BR/Tool-Write.md +39 -0
- package/concepts/pt-BR/Tool-executeCode.md +41 -0
- package/concepts/pt-BR/Tool-getDiagnostics.md +32 -0
- package/concepts/pt-BR/Tools.md +67 -0
- package/concepts/pt-BR/ToolsFirst.md +77 -0
- package/concepts/pt-BR/TranslateContextPollution.md +46 -0
- package/concepts/pt-BR/UltraPlan.md +55 -0
- package/concepts/ru/BodyDiffJSON.md +32 -0
- package/concepts/ru/BodyFields.md +42 -0
- package/concepts/ru/CacheRebuild.md +36 -0
- package/concepts/ru/GlobalSettings.md +232 -0
- package/concepts/ru/KVCacheContent.md +49 -0
- package/concepts/ru/MainAgent.md +23 -0
- package/concepts/ru/ProxySwitch.md +50 -0
- package/concepts/ru/QRCode.md +25 -0
- package/concepts/ru/ResponseFields.md +50 -0
- package/concepts/ru/SubAgent-Search.md +20 -0
- package/concepts/ru/Teammate.md +26 -0
- package/concepts/ru/Tool-Agent.md +125 -0
- package/concepts/ru/Tool-AskUserQuestion.md +75 -0
- package/concepts/ru/Tool-Bash.md +167 -0
- package/concepts/ru/Tool-Edit.md +46 -0
- package/concepts/ru/Tool-EnterPlanMode.md +128 -0
- package/concepts/ru/Tool-EnterWorktree.md +56 -0
- package/concepts/ru/Tool-ExitPlanMode.md +62 -0
- package/concepts/ru/Tool-Glob.md +39 -0
- package/concepts/ru/Tool-Grep.md +57 -0
- package/concepts/ru/Tool-NotebookEdit.md +33 -0
- package/concepts/ru/Tool-Read.md +56 -0
- package/concepts/ru/Tool-SendMessage.md +41 -0
- package/concepts/ru/Tool-Skill.md +56 -0
- package/concepts/ru/Tool-Task.md +51 -0
- package/concepts/ru/Tool-TaskCreate.md +78 -0
- package/concepts/ru/Tool-TaskGet.md +56 -0
- package/concepts/ru/Tool-TaskList.md +56 -0
- package/concepts/ru/Tool-TaskOutput.md +40 -0
- package/concepts/ru/Tool-TaskStop.md +32 -0
- package/concepts/ru/Tool-TaskUpdate.md +123 -0
- package/concepts/ru/Tool-TeamCreate.md +38 -0
- package/concepts/ru/Tool-TeamDelete.md +30 -0
- package/concepts/ru/Tool-WebFetch.md +55 -0
- package/concepts/ru/Tool-WebSearch.md +58 -0
- package/concepts/ru/Tool-Write.md +39 -0
- package/concepts/ru/Tool-executeCode.md +41 -0
- package/concepts/ru/Tool-getDiagnostics.md +32 -0
- package/concepts/ru/Tools.md +67 -0
- package/concepts/ru/ToolsFirst.md +77 -0
- package/concepts/ru/TranslateContextPollution.md +46 -0
- package/concepts/ru/UltraPlan.md +55 -0
- package/concepts/th/BodyDiffJSON.md +32 -0
- package/concepts/th/BodyFields.md +42 -0
- package/concepts/th/CacheRebuild.md +36 -0
- package/concepts/th/GlobalSettings.md +232 -0
- package/concepts/th/KVCacheContent.md +49 -0
- package/concepts/th/MainAgent.md +23 -0
- package/concepts/th/ProxySwitch.md +50 -0
- package/concepts/th/QRCode.md +25 -0
- package/concepts/th/ResponseFields.md +50 -0
- package/concepts/th/SubAgent-Search.md +20 -0
- package/concepts/th/Teammate.md +26 -0
- package/concepts/th/Tool-Agent.md +125 -0
- package/concepts/th/Tool-AskUserQuestion.md +75 -0
- package/concepts/th/Tool-Bash.md +167 -0
- package/concepts/th/Tool-Edit.md +46 -0
- package/concepts/th/Tool-EnterPlanMode.md +128 -0
- package/concepts/th/Tool-EnterWorktree.md +56 -0
- package/concepts/th/Tool-ExitPlanMode.md +62 -0
- package/concepts/th/Tool-Glob.md +39 -0
- package/concepts/th/Tool-Grep.md +57 -0
- package/concepts/th/Tool-NotebookEdit.md +33 -0
- package/concepts/th/Tool-Read.md +56 -0
- package/concepts/th/Tool-SendMessage.md +41 -0
- package/concepts/th/Tool-Skill.md +56 -0
- package/concepts/th/Tool-Task.md +51 -0
- package/concepts/th/Tool-TaskCreate.md +78 -0
- package/concepts/th/Tool-TaskGet.md +56 -0
- package/concepts/th/Tool-TaskList.md +56 -0
- package/concepts/th/Tool-TaskOutput.md +40 -0
- package/concepts/th/Tool-TaskStop.md +32 -0
- package/concepts/th/Tool-TaskUpdate.md +123 -0
- package/concepts/th/Tool-TeamCreate.md +38 -0
- package/concepts/th/Tool-TeamDelete.md +30 -0
- package/concepts/th/Tool-WebFetch.md +55 -0
- package/concepts/th/Tool-WebSearch.md +58 -0
- package/concepts/th/Tool-Write.md +39 -0
- package/concepts/th/Tool-executeCode.md +41 -0
- package/concepts/th/Tool-getDiagnostics.md +32 -0
- package/concepts/th/Tools.md +67 -0
- package/concepts/th/ToolsFirst.md +77 -0
- package/concepts/th/TranslateContextPollution.md +46 -0
- package/concepts/th/UltraPlan.md +55 -0
- package/concepts/tr/BodyDiffJSON.md +32 -0
- package/concepts/tr/BodyFields.md +42 -0
- package/concepts/tr/CacheRebuild.md +36 -0
- package/concepts/tr/GlobalSettings.md +232 -0
- package/concepts/tr/KVCacheContent.md +49 -0
- package/concepts/tr/MainAgent.md +23 -0
- package/concepts/tr/ProxySwitch.md +50 -0
- package/concepts/tr/QRCode.md +25 -0
- package/concepts/tr/ResponseFields.md +50 -0
- package/concepts/tr/SubAgent-Search.md +20 -0
- package/concepts/tr/Teammate.md +26 -0
- package/concepts/tr/Tool-Agent.md +125 -0
- package/concepts/tr/Tool-AskUserQuestion.md +75 -0
- package/concepts/tr/Tool-Bash.md +167 -0
- package/concepts/tr/Tool-Edit.md +46 -0
- package/concepts/tr/Tool-EnterPlanMode.md +128 -0
- package/concepts/tr/Tool-EnterWorktree.md +56 -0
- package/concepts/tr/Tool-ExitPlanMode.md +62 -0
- package/concepts/tr/Tool-Glob.md +39 -0
- package/concepts/tr/Tool-Grep.md +57 -0
- package/concepts/tr/Tool-NotebookEdit.md +33 -0
- package/concepts/tr/Tool-Read.md +56 -0
- package/concepts/tr/Tool-SendMessage.md +41 -0
- package/concepts/tr/Tool-Skill.md +56 -0
- package/concepts/tr/Tool-Task.md +51 -0
- package/concepts/tr/Tool-TaskCreate.md +78 -0
- package/concepts/tr/Tool-TaskGet.md +56 -0
- package/concepts/tr/Tool-TaskList.md +56 -0
- package/concepts/tr/Tool-TaskOutput.md +40 -0
- package/concepts/tr/Tool-TaskStop.md +32 -0
- package/concepts/tr/Tool-TaskUpdate.md +123 -0
- package/concepts/tr/Tool-TeamCreate.md +38 -0
- package/concepts/tr/Tool-TeamDelete.md +30 -0
- package/concepts/tr/Tool-WebFetch.md +55 -0
- package/concepts/tr/Tool-WebSearch.md +58 -0
- package/concepts/tr/Tool-Write.md +39 -0
- package/concepts/tr/Tool-executeCode.md +41 -0
- package/concepts/tr/Tool-getDiagnostics.md +32 -0
- package/concepts/tr/Tools.md +67 -0
- package/concepts/tr/ToolsFirst.md +77 -0
- package/concepts/tr/TranslateContextPollution.md +46 -0
- package/concepts/tr/UltraPlan.md +55 -0
- package/concepts/uk/BodyDiffJSON.md +32 -0
- package/concepts/uk/BodyFields.md +42 -0
- package/concepts/uk/CacheRebuild.md +36 -0
- package/concepts/uk/GlobalSettings.md +232 -0
- package/concepts/uk/KVCacheContent.md +49 -0
- package/concepts/uk/MainAgent.md +23 -0
- package/concepts/uk/ProxySwitch.md +50 -0
- package/concepts/uk/QRCode.md +25 -0
- package/concepts/uk/ResponseFields.md +50 -0
- package/concepts/uk/SubAgent-Search.md +20 -0
- package/concepts/uk/Teammate.md +26 -0
- package/concepts/uk/Tool-Agent.md +125 -0
- package/concepts/uk/Tool-AskUserQuestion.md +75 -0
- package/concepts/uk/Tool-Bash.md +167 -0
- package/concepts/uk/Tool-Edit.md +46 -0
- package/concepts/uk/Tool-EnterPlanMode.md +128 -0
- package/concepts/uk/Tool-EnterWorktree.md +56 -0
- package/concepts/uk/Tool-ExitPlanMode.md +62 -0
- package/concepts/uk/Tool-Glob.md +39 -0
- package/concepts/uk/Tool-Grep.md +57 -0
- package/concepts/uk/Tool-NotebookEdit.md +33 -0
- package/concepts/uk/Tool-Read.md +56 -0
- package/concepts/uk/Tool-SendMessage.md +41 -0
- package/concepts/uk/Tool-Skill.md +56 -0
- package/concepts/uk/Tool-Task.md +51 -0
- package/concepts/uk/Tool-TaskCreate.md +78 -0
- package/concepts/uk/Tool-TaskGet.md +56 -0
- package/concepts/uk/Tool-TaskList.md +56 -0
- package/concepts/uk/Tool-TaskOutput.md +40 -0
- package/concepts/uk/Tool-TaskStop.md +32 -0
- package/concepts/uk/Tool-TaskUpdate.md +123 -0
- package/concepts/uk/Tool-TeamCreate.md +38 -0
- package/concepts/uk/Tool-TeamDelete.md +30 -0
- package/concepts/uk/Tool-WebFetch.md +55 -0
- package/concepts/uk/Tool-WebSearch.md +58 -0
- package/concepts/uk/Tool-Write.md +39 -0
- package/concepts/uk/Tool-executeCode.md +41 -0
- package/concepts/uk/Tool-getDiagnostics.md +32 -0
- package/concepts/uk/Tools.md +67 -0
- package/concepts/uk/ToolsFirst.md +77 -0
- package/concepts/uk/TranslateContextPollution.md +46 -0
- package/concepts/uk/UltraPlan.md +55 -0
- package/concepts/zh/BodyDiffJSON.md +32 -0
- package/concepts/zh/BodyFields.md +42 -0
- package/concepts/zh/CacheRebuild.md +36 -0
- package/concepts/zh/GlobalSettings.md +232 -0
- package/concepts/zh/KVCacheContent.md +49 -0
- package/concepts/zh/MainAgent.md +23 -0
- package/concepts/zh/ProxySwitch.md +50 -0
- package/concepts/zh/QRCode.md +29 -0
- package/concepts/zh/ResponseFields.md +50 -0
- package/concepts/zh/SubAgent-Search.md +20 -0
- package/concepts/zh/Teammate.md +26 -0
- package/concepts/zh/Tool-Agent.md +125 -0
- package/concepts/zh/Tool-AskUserQuestion.md +75 -0
- package/concepts/zh/Tool-Bash.md +167 -0
- package/concepts/zh/Tool-Edit.md +46 -0
- package/concepts/zh/Tool-EnterPlanMode.md +128 -0
- package/concepts/zh/Tool-EnterWorktree.md +56 -0
- package/concepts/zh/Tool-ExitPlanMode.md +62 -0
- package/concepts/zh/Tool-Glob.md +39 -0
- package/concepts/zh/Tool-Grep.md +57 -0
- package/concepts/zh/Tool-NotebookEdit.md +33 -0
- package/concepts/zh/Tool-Read.md +56 -0
- package/concepts/zh/Tool-SendMessage.md +41 -0
- package/concepts/zh/Tool-Skill.md +56 -0
- package/concepts/zh/Tool-Task.md +51 -0
- package/concepts/zh/Tool-TaskCreate.md +78 -0
- package/concepts/zh/Tool-TaskGet.md +56 -0
- package/concepts/zh/Tool-TaskList.md +56 -0
- package/concepts/zh/Tool-TaskOutput.md +40 -0
- package/concepts/zh/Tool-TaskStop.md +32 -0
- package/concepts/zh/Tool-TaskUpdate.md +123 -0
- package/concepts/zh/Tool-TeamCreate.md +38 -0
- package/concepts/zh/Tool-TeamDelete.md +30 -0
- package/concepts/zh/Tool-WebFetch.md +55 -0
- package/concepts/zh/Tool-WebSearch.md +58 -0
- package/concepts/zh/Tool-Write.md +39 -0
- package/concepts/zh/Tool-executeCode.md +41 -0
- package/concepts/zh/Tool-getDiagnostics.md +32 -0
- package/concepts/zh/Tools.md +67 -0
- package/concepts/zh/ToolsFirst.md +77 -0
- package/concepts/zh/TranslateContextPollution.md +46 -0
- package/concepts/zh/UltraPlan.md +55 -0
- package/concepts/zh-TW/BodyDiffJSON.md +32 -0
- package/concepts/zh-TW/BodyFields.md +42 -0
- package/concepts/zh-TW/CacheRebuild.md +36 -0
- package/concepts/zh-TW/GlobalSettings.md +232 -0
- package/concepts/zh-TW/KVCacheContent.md +49 -0
- package/concepts/zh-TW/MainAgent.md +23 -0
- package/concepts/zh-TW/ProxySwitch.md +50 -0
- package/concepts/zh-TW/QRCode.md +25 -0
- package/concepts/zh-TW/ResponseFields.md +50 -0
- package/concepts/zh-TW/SubAgent-Search.md +20 -0
- package/concepts/zh-TW/Teammate.md +26 -0
- package/concepts/zh-TW/Tool-Agent.md +125 -0
- package/concepts/zh-TW/Tool-AskUserQuestion.md +75 -0
- package/concepts/zh-TW/Tool-Bash.md +167 -0
- package/concepts/zh-TW/Tool-Edit.md +46 -0
- package/concepts/zh-TW/Tool-EnterPlanMode.md +128 -0
- package/concepts/zh-TW/Tool-EnterWorktree.md +56 -0
- package/concepts/zh-TW/Tool-ExitPlanMode.md +62 -0
- package/concepts/zh-TW/Tool-Glob.md +39 -0
- package/concepts/zh-TW/Tool-Grep.md +57 -0
- package/concepts/zh-TW/Tool-NotebookEdit.md +33 -0
- package/concepts/zh-TW/Tool-Read.md +56 -0
- package/concepts/zh-TW/Tool-SendMessage.md +41 -0
- package/concepts/zh-TW/Tool-Skill.md +56 -0
- package/concepts/zh-TW/Tool-Task.md +51 -0
- package/concepts/zh-TW/Tool-TaskCreate.md +78 -0
- package/concepts/zh-TW/Tool-TaskGet.md +56 -0
- package/concepts/zh-TW/Tool-TaskList.md +56 -0
- package/concepts/zh-TW/Tool-TaskOutput.md +40 -0
- package/concepts/zh-TW/Tool-TaskStop.md +32 -0
- package/concepts/zh-TW/Tool-TaskUpdate.md +123 -0
- package/concepts/zh-TW/Tool-TeamCreate.md +38 -0
- package/concepts/zh-TW/Tool-TeamDelete.md +30 -0
- package/concepts/zh-TW/Tool-WebFetch.md +55 -0
- package/concepts/zh-TW/Tool-WebSearch.md +58 -0
- package/concepts/zh-TW/Tool-Write.md +39 -0
- package/concepts/zh-TW/Tool-executeCode.md +41 -0
- package/concepts/zh-TW/Tool-getDiagnostics.md +32 -0
- package/concepts/zh-TW/Tools.md +67 -0
- package/concepts/zh-TW/ToolsFirst.md +77 -0
- package/concepts/zh-TW/TranslateContextPollution.md +46 -0
- package/concepts/zh-TW/UltraPlan.md +55 -0
- package/dist/assets/App-BzrN42Qt.js +41 -0
- package/dist/assets/App-fG2r3jFq.css +1 -0
- package/dist/assets/AppHeader-B3hrnZr-.css +41 -0
- package/dist/assets/AppHeader.module-BMU2vyC4.js +1246 -0
- package/dist/assets/Mobile-BnDkLcBv.css +1 -0
- package/dist/assets/Mobile-C9wxQTXV.js +10 -0
- package/dist/assets/_baseUniq-CXWHShmB.js +1 -0
- package/dist/assets/arc-qbol0NJo.js +1 -0
- package/dist/assets/architectureDiagram-Q4EWVU46-COZebb1N.js +36 -0
- package/dist/assets/blockDiagram-DXYQGD6D-COCgzPKy.js +132 -0
- package/dist/assets/c4Diagram-AHTNJAMY-Bs5XvLEo.js +10 -0
- package/dist/assets/channel-DvLUZ3Xf.js +1 -0
- package/dist/assets/chunk-4BX2VUAB-CyGriz9d.js +1 -0
- package/dist/assets/chunk-4TB4RGXK-DlT_q-fl.js +206 -0
- package/dist/assets/chunk-55IACEB6-NHN99ZNC.js +1 -0
- package/dist/assets/chunk-EDXVE4YY-fK4f9Na9.js +1 -0
- package/dist/assets/chunk-FMBD7UC4-DL-dQIq1.js +15 -0
- package/dist/assets/chunk-OYMX7WX6-6uruB4VY.js +231 -0
- package/dist/assets/chunk-QZHKN3VN-CCWIqLO8.js +1 -0
- package/dist/assets/chunk-YZCP3GAM-Cu84DMJo.js +1 -0
- package/dist/assets/classDiagram-6PBFFD2Q-ByKhp2Tk.js +1 -0
- package/dist/assets/classDiagram-v2-HSJHXN6E-ByKhp2Tk.js +1 -0
- package/dist/assets/clone-DZHpE494.js +1 -0
- package/dist/assets/cose-bilkent-S5V4N54A-Dqi4iU3-.js +1 -0
- package/dist/assets/cytoscape.esm-DxGcaOPV.js +331 -0
- package/dist/assets/dagre-KV5264BT-Dl-EJ9rb.js +4 -0
- package/dist/assets/default-avatar-CT9tlZjd.svg +1 -0
- package/dist/assets/default-model-avatar-DlbUPjyv.svg +1 -0
- package/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/dist/assets/diagram-5BDNPKRD-BYtyzF0D.js +10 -0
- package/dist/assets/diagram-G4DWMVQ6-BuETHFNU.js +24 -0
- package/dist/assets/diagram-MMDJMWI5-Z02oZp6I.js +43 -0
- package/dist/assets/diagram-TYMM5635-BpGlKv8l.js +24 -0
- package/dist/assets/erDiagram-SMLLAGMA-C4YngeQh.js +85 -0
- package/dist/assets/flowDiagram-DWJPFMVM-BWddFffg.js +162 -0
- package/dist/assets/ganttDiagram-T4ZO3ILL-Bg0jOD4m.js +292 -0
- package/dist/assets/gitGraphDiagram-UUTBAWPF-Bz-3sTXZ.js +106 -0
- package/dist/assets/graph-XiH8DkIu.js +1 -0
- package/dist/assets/html2canvas.esm-QH1iLAAe.js +22 -0
- package/dist/assets/index-BuUsWKGZ.js +41 -0
- package/dist/assets/index-DCtZ2KSX.css +1 -0
- package/dist/assets/infoDiagram-42DDH7IO-DLo-lOCE.js +2 -0
- package/dist/assets/init-Gi6I4Gst.js +1 -0
- package/dist/assets/ishikawaDiagram-UXIWVN3A-BsIzT5eO.js +70 -0
- package/dist/assets/journeyDiagram-VCZTEJTY-C3bOkKqv.js +139 -0
- package/dist/assets/kanban-definition-6JOO6SKY-D-rJRNbp.js +89 -0
- package/dist/assets/katex-DkKDou_j.js +257 -0
- package/dist/assets/layout-Bqp8Hh1c.js +1 -0
- package/dist/assets/linear-BWRSipGb.js +1 -0
- package/dist/assets/loading-pet-12a9GTQC.gif +0 -0
- package/dist/assets/mermaid.core-CJa7klhs.js +308 -0
- package/dist/assets/min-CQ_VyzMd.js +1 -0
- package/dist/assets/mindmap-definition-QFDTVHPH-Bnj7DDSx.js +96 -0
- package/dist/assets/model-deepseek-LDuqTN2N.svg +2 -0
- package/dist/assets/ordinal-Cboi1Yqb.js +1 -0
- package/dist/assets/pieDiagram-DEJITSTG-CC8a7Ylw.js +30 -0
- package/dist/assets/quadrantDiagram-34T5L4WZ-CrmL1WUV.js +7 -0
- package/dist/assets/requirementDiagram-MS252O5E-TfkX4u_6.js +84 -0
- package/dist/assets/sankeyDiagram-XADWPNL6-DMwBbND7.js +10 -0
- package/dist/assets/sequenceDiagram-FGHM5R23-CFghMYsm.js +157 -0
- package/dist/assets/stateDiagram-FHFEXIEX-1H6JIM7l.js +1 -0
- package/dist/assets/stateDiagram-v2-QKLJ7IA2-CtXMaKcb.js +1 -0
- package/dist/assets/timeline-definition-GMOUNBTQ-DnLMBlVa.js +120 -0
- package/dist/assets/vennDiagram-DHZGUBPP-DoIkY_KL.js +34 -0
- package/dist/assets/wardley-RL74JXVD-3n5XmOD5.js +162 -0
- package/dist/assets/wardleyDiagram-NUSXRM2D-UMOq3ofC.js +20 -0
- package/dist/assets/xychartDiagram-5P7HB3ND-CNDuQ5Cg.js +7 -0
- package/dist/favicon.ico +0 -0
- package/dist/index.html +15 -0
- package/findcx.js +204 -0
- package/i18n.js +2413 -0
- package/interceptor.js +698 -0
- package/lib/appserver-bridge.js +584 -0
- package/lib/ask-bridge.js +126 -0
- package/lib/codex-config.js +146 -0
- package/lib/constants.js +26 -0
- package/lib/context-watcher.js +85 -0
- package/lib/cxv-editor.js +73 -0
- package/lib/delta-reconstructor.js +256 -0
- package/lib/ensure-hooks.js +88 -0
- package/lib/extract-plugin-name.mjs +18 -0
- package/lib/file-api.js +128 -0
- package/lib/git-diff.js +89 -0
- package/lib/interceptor-core.js +270 -0
- package/lib/kv-cache-analyzer.js +164 -0
- package/lib/log-management.js +198 -0
- package/lib/log-stream.js +310 -0
- package/lib/log-watcher.js +245 -0
- package/lib/otel-adapter.js +251 -0
- package/lib/otel-receiver.js +198 -0
- package/lib/perm-bridge.js +142 -0
- package/lib/plugin-loader.js +161 -0
- package/lib/plugin-manager.js +118 -0
- package/lib/proxy-env.js +23 -0
- package/lib/proxy-errors.js +18 -0
- package/lib/sdk-adapter.js +77 -0
- package/lib/sdk-manager.js +464 -0
- package/lib/stats-worker.js +384 -0
- package/lib/updater.js +123 -0
- package/lib/user-profile.js +43 -0
- package/package.json +115 -0
- package/proxy.js +369 -0
- package/pty-manager.js +407 -0
- package/server.js +3226 -0
- package/workspace-registry.js +151 -0
package/cli.js
ADDED
|
@@ -0,0 +1,735 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// 阻止 server.js 自动启动(必须在任何导入之前设置)
|
|
4
|
+
process.env.CXV_WORKSPACE_MODE = '1';
|
|
5
|
+
|
|
6
|
+
import { readFileSync, writeFileSync, existsSync, realpathSync, unlinkSync, mkdirSync } from 'node:fs';
|
|
7
|
+
import { resolve } from 'node:path';
|
|
8
|
+
import { fileURLToPath } from 'node:url';
|
|
9
|
+
import { homedir } from 'node:os';
|
|
10
|
+
import { spawn } from 'node:child_process';
|
|
11
|
+
import { t } from './i18n.js';
|
|
12
|
+
import { INJECT_IMPORT, resolveCliPath, resolveNativePath, resolveNpmCodexPath, buildShellCandidates } from './findcx.js';
|
|
13
|
+
import { ensureHooks } from './lib/ensure-hooks.js';
|
|
14
|
+
|
|
15
|
+
const __dirname = fileURLToPath(new URL('.', import.meta.url));
|
|
16
|
+
|
|
17
|
+
const INJECT_START = '// >>> Start CX Viewer Web Service >>>';
|
|
18
|
+
const INJECT_END = '// <<< Start CX Viewer Web Service <<<';
|
|
19
|
+
const INJECT_BLOCK = `${INJECT_START}\n${INJECT_IMPORT}\n${INJECT_END}`;
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
const SHELL_HOOK_START = '# >>> CX-Viewer Auto-Inject >>>';
|
|
23
|
+
const SHELL_HOOK_END = '# <<< CX-Viewer Auto-Inject <<<';
|
|
24
|
+
|
|
25
|
+
const cliPath = resolveCliPath();
|
|
26
|
+
|
|
27
|
+
function getShellConfigPath() {
|
|
28
|
+
const shell = process.env.SHELL || '';
|
|
29
|
+
if (shell.includes('zsh')) return resolve(homedir(), '.zshrc');
|
|
30
|
+
if (shell.includes('bash')) {
|
|
31
|
+
const bashProfile = resolve(homedir(), '.bash_profile');
|
|
32
|
+
if (process.platform === 'darwin' && existsSync(bashProfile)) return bashProfile;
|
|
33
|
+
return resolve(homedir(), '.bashrc');
|
|
34
|
+
}
|
|
35
|
+
return resolve(homedir(), '.zshrc');
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
function buildShellHook(isNative) {
|
|
39
|
+
// Commands/flags that should pass through directly without cxv interception
|
|
40
|
+
// These are non-interactive commands that don't involve API calls
|
|
41
|
+
const passthroughCommands = [
|
|
42
|
+
// Subcommands (no API calls)
|
|
43
|
+
'doctor', // health check for auto-updater
|
|
44
|
+
'install', // install native build
|
|
45
|
+
'update', // self-update
|
|
46
|
+
'upgrade', // alias for update
|
|
47
|
+
'auth', // authentication management
|
|
48
|
+
'setup-token', // token setup
|
|
49
|
+
'agents', // list configured agents
|
|
50
|
+
'plugin', // plugin management
|
|
51
|
+
'plugins', // alias for plugin
|
|
52
|
+
'mcp', // MCP server configuration
|
|
53
|
+
];
|
|
54
|
+
|
|
55
|
+
const passthroughFlags = [
|
|
56
|
+
// Version/help info
|
|
57
|
+
'--version', '-v', '--v',
|
|
58
|
+
'--help', '-h',
|
|
59
|
+
];
|
|
60
|
+
|
|
61
|
+
if (isNative) {
|
|
62
|
+
return `${SHELL_HOOK_START}
|
|
63
|
+
codex() {
|
|
64
|
+
# Avoid recursion if cxv invokes codex
|
|
65
|
+
if [ "$1" = "--cxv-internal" ]; then
|
|
66
|
+
shift
|
|
67
|
+
command codex "$@"
|
|
68
|
+
return
|
|
69
|
+
fi
|
|
70
|
+
# Pass through certain commands directly without cxv interception
|
|
71
|
+
case "$1" in
|
|
72
|
+
${passthroughCommands.join('|')})
|
|
73
|
+
command codex "$@"
|
|
74
|
+
return
|
|
75
|
+
;;
|
|
76
|
+
${passthroughFlags.join('|')})
|
|
77
|
+
command codex "$@"
|
|
78
|
+
return
|
|
79
|
+
;;
|
|
80
|
+
esac
|
|
81
|
+
cxv run -- codex --cxv-internal "$@"
|
|
82
|
+
}
|
|
83
|
+
${SHELL_HOOK_END}`;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const candidates = buildShellCandidates();
|
|
87
|
+
return `${SHELL_HOOK_START}
|
|
88
|
+
codex() {
|
|
89
|
+
# Pass through certain commands directly without cxv interception
|
|
90
|
+
case "$1" in
|
|
91
|
+
${passthroughCommands.join('|')})
|
|
92
|
+
command codex "$@"
|
|
93
|
+
return
|
|
94
|
+
;;
|
|
95
|
+
${passthroughFlags.join('|')})
|
|
96
|
+
command codex "$@"
|
|
97
|
+
return
|
|
98
|
+
;;
|
|
99
|
+
esac
|
|
100
|
+
local cli_js=""
|
|
101
|
+
for candidate in ${candidates}; do
|
|
102
|
+
if [ -f "$candidate" ]; then
|
|
103
|
+
cli_js="$candidate"
|
|
104
|
+
break
|
|
105
|
+
fi
|
|
106
|
+
done
|
|
107
|
+
if [ -n "$cli_js" ] && ! grep -q "CX Viewer" "$cli_js" 2>/dev/null; then
|
|
108
|
+
cxv -logger 2>/dev/null
|
|
109
|
+
fi
|
|
110
|
+
command codex "$@"
|
|
111
|
+
}
|
|
112
|
+
${SHELL_HOOK_END}`;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function installShellHook(isNative) {
|
|
116
|
+
const configPath = getShellConfigPath();
|
|
117
|
+
try {
|
|
118
|
+
let content = existsSync(configPath) ? readFileSync(configPath, 'utf-8') : '';
|
|
119
|
+
|
|
120
|
+
if (content.includes(SHELL_HOOK_START)) {
|
|
121
|
+
const hook = buildShellHook(isNative);
|
|
122
|
+
// Extract existing hook content
|
|
123
|
+
const regex = new RegExp(`${SHELL_HOOK_START}[\\s\\S]*?${SHELL_HOOK_END}`);
|
|
124
|
+
const existingMatch = content.match(regex);
|
|
125
|
+
if (existingMatch && existingMatch[0] === hook) {
|
|
126
|
+
return { path: configPath, status: 'exists' };
|
|
127
|
+
}
|
|
128
|
+
// Hook content differs: remove old and reinstall
|
|
129
|
+
removeShellHook();
|
|
130
|
+
content = existsSync(configPath) ? readFileSync(configPath, 'utf-8') : '';
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const hook = buildShellHook(isNative);
|
|
134
|
+
const newContent = content.endsWith('\n') ? content + '\n' + hook + '\n' : content + '\n\n' + hook + '\n';
|
|
135
|
+
writeFileSync(configPath, newContent);
|
|
136
|
+
return { path: configPath, status: 'installed' };
|
|
137
|
+
} catch (err) {
|
|
138
|
+
return { path: configPath, status: 'error', error: err.message };
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function removeShellHook() {
|
|
143
|
+
// 扫描所有可能的 shell 配置文件,清理所有遗留 hook
|
|
144
|
+
const configPath = getShellConfigPath();
|
|
145
|
+
const allPaths = new Set([configPath]);
|
|
146
|
+
const home = homedir();
|
|
147
|
+
for (const f of ['.zshrc', '.zprofile', '.bashrc', '.bash_profile', '.profile']) {
|
|
148
|
+
allPaths.add(resolve(home, f));
|
|
149
|
+
}
|
|
150
|
+
let lastResult = { path: configPath, status: 'clean' };
|
|
151
|
+
for (const p of allPaths) {
|
|
152
|
+
try {
|
|
153
|
+
if (!existsSync(p)) continue;
|
|
154
|
+
const content = readFileSync(p, 'utf-8');
|
|
155
|
+
if (!content.includes(SHELL_HOOK_START)) continue;
|
|
156
|
+
const regex = new RegExp(`\\n?${SHELL_HOOK_START}[\\s\\S]*?${SHELL_HOOK_END}\\n?`, 'g');
|
|
157
|
+
const newContent = content.replace(regex, '\n');
|
|
158
|
+
writeFileSync(p, newContent);
|
|
159
|
+
lastResult = { path: p, status: 'removed' };
|
|
160
|
+
} catch (err) {
|
|
161
|
+
lastResult = { path: p, status: 'error', error: err.message };
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return lastResult;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function injectCliJs() {
|
|
168
|
+
const content = readFileSync(cliPath, 'utf-8');
|
|
169
|
+
if (content.includes(INJECT_START)) {
|
|
170
|
+
return 'exists';
|
|
171
|
+
}
|
|
172
|
+
const lines = content.split('\n');
|
|
173
|
+
lines.splice(2, 0, INJECT_BLOCK);
|
|
174
|
+
writeFileSync(cliPath, lines.join('\n'));
|
|
175
|
+
return 'injected';
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
function removeCliJsInjection() {
|
|
179
|
+
try {
|
|
180
|
+
if (!existsSync(cliPath)) return 'not_found';
|
|
181
|
+
const content = readFileSync(cliPath, 'utf-8');
|
|
182
|
+
if (!content.includes(INJECT_START)) return 'clean';
|
|
183
|
+
const regex = new RegExp(`${INJECT_START}\\n${INJECT_IMPORT}\\n${INJECT_END}\\n?`, 'g');
|
|
184
|
+
writeFileSync(cliPath, content.replace(regex, ''));
|
|
185
|
+
return 'removed';
|
|
186
|
+
} catch {
|
|
187
|
+
return 'error';
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
async function runProxyCommand(args) {
|
|
192
|
+
// 直接模式:不启动 proxy,直接运行 codex
|
|
193
|
+
try {
|
|
194
|
+
// args = ['run', '--', 'command', 'codex', ...] or ['run', 'codex', ...]
|
|
195
|
+
// Our hook uses: cxv run -- codex --cxv-internal "$@"
|
|
196
|
+
// args[0] is 'run'.
|
|
197
|
+
// If args[1] is '--', then command starts at args[2].
|
|
198
|
+
|
|
199
|
+
let cmdStartIndex = 1;
|
|
200
|
+
if (args[1] === '--') {
|
|
201
|
+
cmdStartIndex = 2;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
let cmd = args[cmdStartIndex];
|
|
205
|
+
if (!cmd) {
|
|
206
|
+
console.error('No command provided to run.');
|
|
207
|
+
process.exit(1);
|
|
208
|
+
}
|
|
209
|
+
let cmdArgs = args.slice(cmdStartIndex + 1);
|
|
210
|
+
|
|
211
|
+
// If cmd is 'codex' and next arg is '--cxv-internal', remove it
|
|
212
|
+
if (cmdArgs[0] === '--cxv-internal') {
|
|
213
|
+
cmdArgs.shift();
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const env = { ...process.env };
|
|
217
|
+
// Determine the path to the native 'codex' executable
|
|
218
|
+
if (cmd === 'codex') {
|
|
219
|
+
const nativePath = resolveNativePath();
|
|
220
|
+
if (nativePath) {
|
|
221
|
+
cmd = nativePath;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
env.CXV_DIRECT_MODE = '1';
|
|
225
|
+
|
|
226
|
+
const child = spawn(cmd, cmdArgs, { stdio: 'inherit', env });
|
|
227
|
+
|
|
228
|
+
child.on('exit', (code) => {
|
|
229
|
+
process.exit(code);
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
child.on('error', (err) => {
|
|
233
|
+
console.error('Failed to start command:', err);
|
|
234
|
+
process.exit(1);
|
|
235
|
+
});
|
|
236
|
+
} catch (err) {
|
|
237
|
+
console.error('Run error:', err);
|
|
238
|
+
process.exit(1);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
// ensureHooks() extracted to lib/ensure-hooks.js (shared with electron/tab-worker.js)
|
|
243
|
+
|
|
244
|
+
async function runCliMode(extraCodexArgs = [], cwd) {
|
|
245
|
+
// 首先尝试 npm 版本(包括 nvm 安装),找不到再尝试 native 版本
|
|
246
|
+
let codexPath = resolveNpmCodexPath();
|
|
247
|
+
let isNpmVersion = !!codexPath;
|
|
248
|
+
|
|
249
|
+
if (!codexPath) {
|
|
250
|
+
codexPath = resolveNativePath();
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
if (!codexPath) {
|
|
254
|
+
console.error(t('cli.cMode.notFound'));
|
|
255
|
+
process.exit(1);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
console.log(t('cli.cMode.starting'));
|
|
259
|
+
|
|
260
|
+
const workingDir = cwd || process.cwd();
|
|
261
|
+
|
|
262
|
+
// 注册工作区
|
|
263
|
+
const { registerWorkspace } = await import('./workspace-registry.js');
|
|
264
|
+
registerWorkspace(workingDir);
|
|
265
|
+
|
|
266
|
+
// 确保 AskUserQuestion hook 已注册到 ~/.codex/settings.json
|
|
267
|
+
ensureHooks();
|
|
268
|
+
|
|
269
|
+
// 2. 设置 CLI 模式标记
|
|
270
|
+
process.env.CXV_CLI_MODE = '1';
|
|
271
|
+
process.env.CXV_PROJECT_DIR = workingDir;
|
|
272
|
+
// 当 --dangerously-skip-permissions 生效时,通知 perm-bridge 不要拦截
|
|
273
|
+
if (extraCodexArgs.includes('--dangerously-skip-permissions')) {
|
|
274
|
+
process.env.CXV_BYPASS_PERMISSIONS = '1';
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// 初始化日志文件(CXV_WORKSPACE_MODE=1 下 interceptor 跳过了自动初始化)
|
|
278
|
+
const { initForWorkspace } = await import('./interceptor.js');
|
|
279
|
+
initForWorkspace(workingDir);
|
|
280
|
+
|
|
281
|
+
// 启动 HTTP 服务器(工作区模式下需要手动调用 startViewer)
|
|
282
|
+
const serverMod = await import('./server.js');
|
|
283
|
+
await serverMod.startViewer();
|
|
284
|
+
|
|
285
|
+
// 等待服务器启动完成
|
|
286
|
+
await new Promise(resolve => {
|
|
287
|
+
const check = () => {
|
|
288
|
+
const port = serverMod.getPort();
|
|
289
|
+
if (port) resolve(port);
|
|
290
|
+
else setTimeout(check, 100);
|
|
291
|
+
};
|
|
292
|
+
setTimeout(check, 200);
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
const port = serverMod.getPort();
|
|
296
|
+
|
|
297
|
+
// 标记工作区已启动(跳过前端工作区选择器)
|
|
298
|
+
serverMod.setWorkspaceLaunched(true);
|
|
299
|
+
|
|
300
|
+
// 启动日志监听和统计(startViewer 在 workspace 模式下跳过了这些)
|
|
301
|
+
serverMod.initPostLaunch();
|
|
302
|
+
|
|
303
|
+
// 注入 OTel 配置到 config.toml(补充数据源)
|
|
304
|
+
const otelEndpoint = `http://127.0.0.1:${port}`;
|
|
305
|
+
const codexConfigPath = resolve(homedir(), '.codex', 'config.toml');
|
|
306
|
+
let _otelConfigInjected = false;
|
|
307
|
+
const OTEL_MARKER = '# >>> CX-Viewer OTel >>>';
|
|
308
|
+
const OTEL_MARKER_END = '# <<< CX-Viewer OTel <<<';
|
|
309
|
+
try {
|
|
310
|
+
let configContent = existsSync(codexConfigPath) ? readFileSync(codexConfigPath, 'utf-8') : '';
|
|
311
|
+
const otelRegex = new RegExp(`\\n?${OTEL_MARKER}[\\s\\S]*?${OTEL_MARKER_END}\\n?`, 'g');
|
|
312
|
+
configContent = configContent.replace(otelRegex, '\n');
|
|
313
|
+
const otelBlock = `\n${OTEL_MARKER}\n[otel]\ntrace_exporter = { otlp-http = { protocol = "json", endpoint = "${otelEndpoint}" } }\n${OTEL_MARKER_END}\n`;
|
|
314
|
+
configContent = configContent.trimEnd() + otelBlock;
|
|
315
|
+
writeFileSync(codexConfigPath, configContent);
|
|
316
|
+
_otelConfigInjected = true;
|
|
317
|
+
} catch (err) {
|
|
318
|
+
console.error('[CX Viewer] Failed to inject OTel config:', err.message);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
// 启动 App-Server Bridge(WebSocket 中间代理,获取完整执行日志)
|
|
322
|
+
const { LOG_FILE: currentLogFile } = await import('./interceptor.js');
|
|
323
|
+
let _bridge = null;
|
|
324
|
+
let bridgeArgs = [];
|
|
325
|
+
try {
|
|
326
|
+
const { startAppServerBridge } = await import('./lib/appserver-bridge.js');
|
|
327
|
+
_bridge = await startAppServerBridge({
|
|
328
|
+
cwd: workingDir,
|
|
329
|
+
codexPath,
|
|
330
|
+
logFile: currentLogFile,
|
|
331
|
+
env: process.env,
|
|
332
|
+
});
|
|
333
|
+
// 让 codex TUI 通过 --remote 连接到代理
|
|
334
|
+
bridgeArgs = ['--remote', `ws://127.0.0.1:${_bridge.proxyPort}`];
|
|
335
|
+
console.log(`[CX Viewer] App-Server bridge started (proxy:${_bridge.proxyPort} → server:${_bridge.appServerPort})`);
|
|
336
|
+
} catch (err) {
|
|
337
|
+
console.warn('[CX Viewer] App-Server bridge failed, falling back to direct mode:', err.message);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
// 启动 PTY 中的 codex TUI
|
|
341
|
+
const { spawnCodex, killPty } = await import('./pty-manager.js');
|
|
342
|
+
try {
|
|
343
|
+
await spawnCodex(null, workingDir, [...bridgeArgs, ...extraCodexArgs], codexPath, isNpmVersion, port);
|
|
344
|
+
} catch (err) {
|
|
345
|
+
console.error('[CX Viewer] Failed to spawn Codex:', err.message);
|
|
346
|
+
if (_bridge) _bridge.stop();
|
|
347
|
+
await serverMod.stopViewer();
|
|
348
|
+
process.exit(1);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
// 4. 自动打开浏览器
|
|
352
|
+
const protocol = serverMod.getProtocol();
|
|
353
|
+
const url = `${protocol}://127.0.0.1:${port}`;
|
|
354
|
+
try {
|
|
355
|
+
const cmd = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open';
|
|
356
|
+
const { execSync } = await import('node:child_process');
|
|
357
|
+
execSync(`${cmd} ${url}`, { stdio: 'ignore', timeout: 5000 });
|
|
358
|
+
} catch {}
|
|
359
|
+
|
|
360
|
+
console.log(`CX Viewer:`);
|
|
361
|
+
console.log(` ➜ Local: ${url}`);
|
|
362
|
+
const _lanIps = serverMod.getAllLocalIps();
|
|
363
|
+
const _token = serverMod.getAccessToken();
|
|
364
|
+
for (const _ip of _lanIps) {
|
|
365
|
+
console.log(` ➜ Network: ${protocol}://${_ip}:${port}?token=${_token}`);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
// 5. 注册退出处理
|
|
369
|
+
const cleanupOtelConfig = () => {
|
|
370
|
+
if (!_otelConfigInjected) return;
|
|
371
|
+
try {
|
|
372
|
+
let c = readFileSync(codexConfigPath, 'utf-8');
|
|
373
|
+
const re = new RegExp(`\\n?${OTEL_MARKER}[\\s\\S]*?${OTEL_MARKER_END}\\n?`, 'g');
|
|
374
|
+
c = c.replace(re, '\n');
|
|
375
|
+
writeFileSync(codexConfigPath, c.trimEnd() + '\n');
|
|
376
|
+
} catch {}
|
|
377
|
+
};
|
|
378
|
+
const cleanup = () => {
|
|
379
|
+
killPty();
|
|
380
|
+
if (_bridge) _bridge.stop();
|
|
381
|
+
cleanupOtelConfig();
|
|
382
|
+
serverMod.stopViewer().finally(() => process.exit());
|
|
383
|
+
};
|
|
384
|
+
process.on('SIGINT', cleanup);
|
|
385
|
+
process.on('SIGTERM', cleanup);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
async function runSdkMode(extraCodexArgs = [], cwd) {
|
|
389
|
+
// 检查 SDK 是否可用
|
|
390
|
+
let sdkManager;
|
|
391
|
+
try {
|
|
392
|
+
sdkManager = await import('./lib/sdk-manager.js');
|
|
393
|
+
if (!sdkManager.isSdkAvailable()) throw new Error('query not available');
|
|
394
|
+
} catch {
|
|
395
|
+
console.warn('[CX Viewer] Agent SDK not available, falling back to PTY mode (-C)');
|
|
396
|
+
return runCliMode(extraCodexArgs, cwd);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
const workingDir = cwd || process.cwd();
|
|
400
|
+
|
|
401
|
+
// 注册工作区
|
|
402
|
+
const { registerWorkspace } = await import('./workspace-registry.js');
|
|
403
|
+
registerWorkspace(workingDir);
|
|
404
|
+
|
|
405
|
+
// 不需要 ensureHooks — SDK canUseTool 处理 AskUserQuestion + 权限
|
|
406
|
+
// 不需要 proxy — SDK 直接管理 API 通信
|
|
407
|
+
|
|
408
|
+
// 设置环境标记(必须在 import server.js 之前)
|
|
409
|
+
process.env.CXV_CLI_MODE = '1';
|
|
410
|
+
process.env.CXV_SDK_MODE = '1';
|
|
411
|
+
process.env.CXV_PROJECT_DIR = workingDir;
|
|
412
|
+
|
|
413
|
+
// 启动 HTTP 服务器
|
|
414
|
+
const serverMod = await import('./server.js');
|
|
415
|
+
|
|
416
|
+
await new Promise(resolve => {
|
|
417
|
+
const check = () => {
|
|
418
|
+
const port = serverMod.getPort();
|
|
419
|
+
if (port) resolve(port);
|
|
420
|
+
else setTimeout(check, 100);
|
|
421
|
+
};
|
|
422
|
+
setTimeout(check, 200);
|
|
423
|
+
});
|
|
424
|
+
|
|
425
|
+
const port = serverMod.getPort();
|
|
426
|
+
const { basename } = await import('node:path');
|
|
427
|
+
|
|
428
|
+
// 解析 permission mode from CLI args
|
|
429
|
+
// --d / --dangerously-skip-permissions → bypassPermissions(跳过所有权限检查)
|
|
430
|
+
// --ad / --allow-dangerously-skip-permissions → default(只是允许用户后续切换,不立即跳过)
|
|
431
|
+
let permissionMode = 'default';
|
|
432
|
+
if (extraCodexArgs.includes('--dangerously-skip-permissions')) {
|
|
433
|
+
permissionMode = 'bypassPermissions';
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
// 初始化 SDK 会话
|
|
437
|
+
sdkManager.initSdkSession(workingDir, basename(workingDir), {
|
|
438
|
+
onEntry: (entry) => serverMod.pushSdkEntry(entry),
|
|
439
|
+
onStreamingStatus: (data) => serverMod.setSdkStreamingState(data),
|
|
440
|
+
broadcastWs: (msg) => serverMod.broadcastWsMessage(msg),
|
|
441
|
+
permissionMode,
|
|
442
|
+
});
|
|
443
|
+
|
|
444
|
+
// 注册 SDK 回调到 server.js(WS 消息路由用)
|
|
445
|
+
serverMod.setSdkResolveApproval(sdkManager.resolveApproval);
|
|
446
|
+
serverMod.setSdkSendUserMessage(sdkManager.sendUserMessage);
|
|
447
|
+
|
|
448
|
+
// 自动打开浏览器
|
|
449
|
+
const protocol = serverMod.getProtocol();
|
|
450
|
+
const url = `${protocol}://127.0.0.1:${port}`;
|
|
451
|
+
try {
|
|
452
|
+
const cmd = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open';
|
|
453
|
+
const { execSync } = await import('node:child_process');
|
|
454
|
+
execSync(`${cmd} ${url}`, { stdio: 'ignore', timeout: 5000 });
|
|
455
|
+
} catch {}
|
|
456
|
+
|
|
457
|
+
console.log(`CX Viewer (SDK mode):`);
|
|
458
|
+
console.log(` ➜ Local: ${url}`);
|
|
459
|
+
const _lanIps = serverMod.getAllLocalIps();
|
|
460
|
+
const _token = serverMod.getAccessToken();
|
|
461
|
+
for (const _ip of _lanIps) {
|
|
462
|
+
console.log(` ➜ Network: ${protocol}://${_ip}:${port}?token=${_token}`);
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
// 注册退出处理
|
|
466
|
+
const cleanup = () => {
|
|
467
|
+
sdkManager.stopSession();
|
|
468
|
+
serverMod.stopViewer().finally(() => process.exit());
|
|
469
|
+
};
|
|
470
|
+
process.on('SIGINT', cleanup);
|
|
471
|
+
process.on('SIGTERM', cleanup);
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
async function runCliModeWorkspaceSelector(extraCodexArgs = []) {
|
|
475
|
+
// 首先尝试 npm 版本(包括 nvm 安装),找不到再尝试 native 版本
|
|
476
|
+
let codexPath = resolveNpmCodexPath();
|
|
477
|
+
let isNpmVersion = !!codexPath;
|
|
478
|
+
|
|
479
|
+
if (!codexPath) {
|
|
480
|
+
codexPath = resolveNativePath();
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
if (!codexPath) {
|
|
484
|
+
console.error(t('cli.cMode.notFound'));
|
|
485
|
+
process.exit(1);
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
console.log(t('cli.cMode.starting'));
|
|
489
|
+
|
|
490
|
+
process.env.CXV_CLI_MODE = '1';
|
|
491
|
+
|
|
492
|
+
// 启动 HTTP 服务器(工作区模式,不初始化 interceptor 日志)
|
|
493
|
+
const serverMod = await import('./server.js');
|
|
494
|
+
|
|
495
|
+
// 工作区模式下 server.js 跳过了自动启动,需要手动调用
|
|
496
|
+
await serverMod.startViewer();
|
|
497
|
+
|
|
498
|
+
const port = serverMod.getPort();
|
|
499
|
+
|
|
500
|
+
// 保存 extraCodexArgs 和 codexPath 供后续 launch 使用
|
|
501
|
+
serverMod.setWorkspaceCodexArgs(extraCodexArgs);
|
|
502
|
+
serverMod.setWorkspaceCodexPath(codexPath, isNpmVersion);
|
|
503
|
+
|
|
504
|
+
// 自动打开浏览器
|
|
505
|
+
const wsProtocol = serverMod.getProtocol();
|
|
506
|
+
const url = `${wsProtocol}://127.0.0.1:${port}`;
|
|
507
|
+
try {
|
|
508
|
+
const cmd = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open';
|
|
509
|
+
const { execSync } = await import('node:child_process');
|
|
510
|
+
execSync(`${cmd} ${url}`, { stdio: 'ignore', timeout: 5000 });
|
|
511
|
+
} catch {}
|
|
512
|
+
|
|
513
|
+
console.log(`CX Viewer (Workspace):`);
|
|
514
|
+
console.log(` ➜ Local: ${url}`);
|
|
515
|
+
const _lanIps = serverMod.getAllLocalIps();
|
|
516
|
+
const _token = serverMod.getAccessToken();
|
|
517
|
+
for (const _ip of _lanIps) {
|
|
518
|
+
console.log(` ➜ Network: ${wsProtocol}://${_ip}:${port}?token=${_token}`);
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
// 注册退出处理
|
|
522
|
+
const { killPty } = await import('./pty-manager.js');
|
|
523
|
+
const cleanup = () => {
|
|
524
|
+
killPty();
|
|
525
|
+
serverMod.stopViewer().finally(() => process.exit());
|
|
526
|
+
};
|
|
527
|
+
process.on('SIGINT', cleanup);
|
|
528
|
+
process.on('SIGTERM', cleanup);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
// === 主逻辑 ===
|
|
532
|
+
|
|
533
|
+
const args = process.argv.slice(2);
|
|
534
|
+
|
|
535
|
+
// cxv 自有命令判断
|
|
536
|
+
const isLogger = args.includes('-logger');
|
|
537
|
+
const isUninstall = args.includes('--uninstall') || args.includes('-uninstall');
|
|
538
|
+
const isHelp = args.includes('--help') || args.includes('-h') || args[0] === 'help';
|
|
539
|
+
const isVersion = args.includes('--v') || args.includes('--version') || args.includes('-v');
|
|
540
|
+
|
|
541
|
+
if (isHelp) {
|
|
542
|
+
console.log(t('cli.help'));
|
|
543
|
+
process.exit(0);
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
if (isVersion) {
|
|
547
|
+
try {
|
|
548
|
+
const pkg = JSON.parse(readFileSync(resolve(__dirname, 'package.json'), 'utf-8'));
|
|
549
|
+
console.log(`cx-viewer v${pkg.version}`);
|
|
550
|
+
} catch (e) {
|
|
551
|
+
console.error('Failed to read version:', e.message);
|
|
552
|
+
}
|
|
553
|
+
process.exit(0);
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
if (isUninstall) {
|
|
557
|
+
const cliResult = removeCliJsInjection();
|
|
558
|
+
const shellResult = removeShellHook();
|
|
559
|
+
|
|
560
|
+
if (cliResult === 'removed' || cliResult === 'clean') {
|
|
561
|
+
console.log(t('cli.uninstall.cliCleaned'));
|
|
562
|
+
} else if (cliResult === 'not_found') {
|
|
563
|
+
// Silent is better for mixed mode uninstall
|
|
564
|
+
} else {
|
|
565
|
+
console.log(t('cli.uninstall.cliFail'));
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
if (shellResult.status === 'removed') {
|
|
569
|
+
console.log(t('cli.uninstall.hookRemoved', { path: shellResult.path }));
|
|
570
|
+
} else if (shellResult.status === 'clean' || shellResult.status === 'not_found') {
|
|
571
|
+
console.log(t('cli.uninstall.hookClean', { path: shellResult.path }));
|
|
572
|
+
} else {
|
|
573
|
+
console.log(t('cli.uninstall.hookFail', { error: shellResult.error }));
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
// 清理 statusLine 配置和脚本(兼容历史版本遗留)
|
|
577
|
+
try {
|
|
578
|
+
const settingsPath = resolve(homedir(), '.codex', 'settings.json');
|
|
579
|
+
if (existsSync(settingsPath)) {
|
|
580
|
+
const settings = JSON.parse(readFileSync(settingsPath, 'utf-8'));
|
|
581
|
+
if (settings.statusLine?.command?.includes('cxv-statusline')) {
|
|
582
|
+
delete settings.statusLine;
|
|
583
|
+
writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n');
|
|
584
|
+
console.log('Cleaned statusLine config from settings.json');
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
const cxvScript = resolve(homedir(), '.codex', 'cxv-statusline.sh');
|
|
588
|
+
if (existsSync(cxvScript)) {
|
|
589
|
+
unlinkSync(cxvScript);
|
|
590
|
+
console.log('Removed cxv-statusline.sh');
|
|
591
|
+
}
|
|
592
|
+
// 清理 context-window.json
|
|
593
|
+
const ctxFile = resolve(homedir(), '.codex', 'context-window.json');
|
|
594
|
+
if (existsSync(ctxFile)) {
|
|
595
|
+
unlinkSync(ctxFile);
|
|
596
|
+
}
|
|
597
|
+
} catch { }
|
|
598
|
+
|
|
599
|
+
console.log(t('cli.uninstall.reloadShell'));
|
|
600
|
+
console.log(t('cli.uninstall.done'));
|
|
601
|
+
process.exit(0);
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
if (isLogger) {
|
|
605
|
+
// 安装/修复 hook 逻辑(原来无参数 cxv 的行为)
|
|
606
|
+
let mode = 'unknown';
|
|
607
|
+
|
|
608
|
+
let prefersNative = true;
|
|
609
|
+
const paths = (process.env.PATH || '').split(':');
|
|
610
|
+
for (const dir of paths) {
|
|
611
|
+
if (!dir) continue;
|
|
612
|
+
const exePath = resolve(dir, 'codex');
|
|
613
|
+
if (existsSync(exePath)) {
|
|
614
|
+
try {
|
|
615
|
+
const real = realpathSync(exePath);
|
|
616
|
+
if (real.includes('node_modules')) {
|
|
617
|
+
prefersNative = false;
|
|
618
|
+
} else {
|
|
619
|
+
prefersNative = true;
|
|
620
|
+
}
|
|
621
|
+
break;
|
|
622
|
+
} catch (e) {
|
|
623
|
+
// ignore
|
|
624
|
+
}
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
const nativePath = resolveNativePath();
|
|
629
|
+
const hasNpm = existsSync(cliPath);
|
|
630
|
+
|
|
631
|
+
if (prefersNative) {
|
|
632
|
+
if (nativePath) {
|
|
633
|
+
mode = 'native';
|
|
634
|
+
} else if (hasNpm) {
|
|
635
|
+
mode = 'npm';
|
|
636
|
+
}
|
|
637
|
+
} else {
|
|
638
|
+
if (hasNpm) {
|
|
639
|
+
mode = 'npm';
|
|
640
|
+
} else if (nativePath) {
|
|
641
|
+
mode = 'native';
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
if (mode === 'unknown') {
|
|
646
|
+
console.error(t('cli.inject.notFound', { path: cliPath }));
|
|
647
|
+
console.error('Also could not find native "codex" command in PATH.');
|
|
648
|
+
console.error('Please make sure @openai/codex is installed.');
|
|
649
|
+
process.exit(1);
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
if (mode === 'npm') {
|
|
653
|
+
try {
|
|
654
|
+
const cliResult = injectCliJs();
|
|
655
|
+
const shellResult = installShellHook(false);
|
|
656
|
+
|
|
657
|
+
if (cliResult === 'exists' && shellResult.status === 'exists') {
|
|
658
|
+
console.log(t('cli.alreadyWorking'));
|
|
659
|
+
} else {
|
|
660
|
+
if (cliResult === 'exists') {
|
|
661
|
+
console.log(t('cli.inject.exists'));
|
|
662
|
+
} else {
|
|
663
|
+
console.log(t('cli.inject.success'));
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
if (shellResult.status === 'installed') {
|
|
667
|
+
console.log('All READY!');
|
|
668
|
+
} else if (shellResult.status !== 'exists') {
|
|
669
|
+
console.log(t('cli.hook.fail', { error: shellResult.error }));
|
|
670
|
+
}
|
|
671
|
+
}
|
|
672
|
+
console.log(t('cli.usage.hint'));
|
|
673
|
+
} catch (err) {
|
|
674
|
+
if (err.code === 'ENOENT') {
|
|
675
|
+
console.error(t('cli.inject.notFound', { path: cliPath }));
|
|
676
|
+
console.error(t('cli.inject.notFoundHint'));
|
|
677
|
+
} else {
|
|
678
|
+
console.error(t('cli.inject.fail', { error: err.message }));
|
|
679
|
+
}
|
|
680
|
+
process.exit(1);
|
|
681
|
+
}
|
|
682
|
+
} else {
|
|
683
|
+
// Native Mode
|
|
684
|
+
try {
|
|
685
|
+
console.log('Detected Codex Code Native Install.');
|
|
686
|
+
const shellResult = installShellHook(true);
|
|
687
|
+
|
|
688
|
+
if (shellResult.status === 'exists') {
|
|
689
|
+
console.log(t('cli.alreadyWorking'));
|
|
690
|
+
} else if (shellResult.status === 'installed') {
|
|
691
|
+
console.log('Native Hook Installed! All READY!');
|
|
692
|
+
} else {
|
|
693
|
+
console.log(t('cli.hook.fail', { error: shellResult.error }));
|
|
694
|
+
}
|
|
695
|
+
console.log(t('cli.usage.hint'));
|
|
696
|
+
} catch (err) {
|
|
697
|
+
console.error('Failed to install native hook:', err);
|
|
698
|
+
process.exit(1);
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
process.exit(0);
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
if (args[0] === 'run') {
|
|
705
|
+
runProxyCommand(args);
|
|
706
|
+
} else if (args.includes('-SDK') || args.includes('--sdk')) {
|
|
707
|
+
// SDK 模式(显式 -SDK 切换)
|
|
708
|
+
let codexArgs = args.filter(a => a !== '-SDK' && a !== '--sdk')
|
|
709
|
+
.map(a => a === '--d' ? '--dangerously-skip-permissions' : a === '--ad' ? '--allow-dangerously-skip-permissions' : a);
|
|
710
|
+
|
|
711
|
+
// 处理 codex 不支持的 -c/--continue 参数(codex 使用 resume 子命令)
|
|
712
|
+
codexArgs = codexArgs.filter(a => a !== '-c' && a !== '--continue');
|
|
713
|
+
|
|
714
|
+
runSdkMode(codexArgs, process.cwd()).catch(err => {
|
|
715
|
+
console.error('SDK mode error:', err);
|
|
716
|
+
process.exit(1);
|
|
717
|
+
});
|
|
718
|
+
} else {
|
|
719
|
+
// PTY 模式(默认)
|
|
720
|
+
// 将 -c/--continue 转换为 codex 的 resume 子命令
|
|
721
|
+
let codexArgs = args.map(a => a === '--d' ? '--dangerously-skip-permissions' : a === '--ad' ? '--allow-dangerously-skip-permissions' : a);
|
|
722
|
+
|
|
723
|
+
// 处理 codex 不支持的 -c/--continue 参数
|
|
724
|
+
const hasContinue = codexArgs.includes('-c') || codexArgs.includes('--continue');
|
|
725
|
+
codexArgs = codexArgs.filter(a => a !== '-c' && a !== '--continue');
|
|
726
|
+
|
|
727
|
+
// 如果用户想继续会话,在 codex 中使用 resume 子命令
|
|
728
|
+
// 但子命令需要在参数列表开头,所以我们不能直接添加
|
|
729
|
+
// 暂时忽略 -c 参数,codex 会自动恢复最近的会话
|
|
730
|
+
|
|
731
|
+
runCliMode(codexArgs, process.cwd()).catch(err => {
|
|
732
|
+
console.error('CLI mode error:', err);
|
|
733
|
+
process.exit(1);
|
|
734
|
+
});
|
|
735
|
+
}
|