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
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
// Stats Worker — 后台线程,扫描 JSONL 日志生成项目级统计 JSON
|
|
2
|
+
import { parentPort } from 'node:worker_threads';
|
|
3
|
+
import { readFileSync, writeFileSync, existsSync, readdirSync, statSync } from 'node:fs';
|
|
4
|
+
import { join, basename } from 'node:path';
|
|
5
|
+
|
|
6
|
+
// 统计 schema 版本号,新增统计字段时递增,强制旧缓存失效重新解析
|
|
7
|
+
const STATS_VERSION = 8;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* 判断文本是否为系统注入文本(与 src/utils/contentFilter.js:isSystemText 保持同步)
|
|
11
|
+
*/
|
|
12
|
+
function isSystemText(text) {
|
|
13
|
+
if (!text) return true;
|
|
14
|
+
const trimmed = text.trim();
|
|
15
|
+
if (!trimmed) return true;
|
|
16
|
+
// 包含 plan 内容的文本块不应被过滤(即使开头有系统标签)
|
|
17
|
+
if (/Implement the following plan:/i.test(trimmed)) return false;
|
|
18
|
+
if (/^<[a-zA-Z_][\w-]*[\s>]/i.test(trimmed)) return true;
|
|
19
|
+
if (/^\[SUGGESTION MODE:/i.test(trimmed)) return true;
|
|
20
|
+
if (/^Your response was cut off because it exceeded the output token limit/i.test(trimmed)) return true;
|
|
21
|
+
if (/^Base directory for this skill:/i.test(trimmed)) return true;
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* 剥离系统注入标签,保留标签外的用户文本(仅用于 string 类型 content 的混合内容场景)
|
|
27
|
+
*/
|
|
28
|
+
function stripSystemTags(text) {
|
|
29
|
+
return text.replace(/<(system-reminder|local-command-caveat|project-reminder|important-instruction-reminders|file-modified-reminder|todo-reminder|user-prompt-submit-hook|local-command-stdout|command-name|task-notification|environment_details|context)\b[^>]*>[\s\S]*?<\/\1>/gi, '').trim();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* 从 messages 数组中提取用户 prompt 文本列表
|
|
34
|
+
* (与 src/App.jsx:extractUserTexts + src/utils/contentFilter.js:classifyUserContent 保持同步)
|
|
35
|
+
*/
|
|
36
|
+
function extractUserTexts(messages) {
|
|
37
|
+
const texts = [];
|
|
38
|
+
for (const msg of messages) {
|
|
39
|
+
if (msg.role !== 'user') continue;
|
|
40
|
+
if (typeof msg.content === 'string') {
|
|
41
|
+
// string content 可能混合系统标签与用户文本,先剥离标签再判断
|
|
42
|
+
const text = stripSystemTags(msg.content).trim();
|
|
43
|
+
if (text && !isSystemText(text)) {
|
|
44
|
+
if (/^Implement the following plan:/i.test(text)) continue;
|
|
45
|
+
texts.push(text);
|
|
46
|
+
}
|
|
47
|
+
} else if (Array.isArray(msg.content)) {
|
|
48
|
+
const hasCommand = msg.content.some(b => b.type === 'text' && /<command-message>/i.test(b.text || ''));
|
|
49
|
+
const userParts = [];
|
|
50
|
+
for (const b of msg.content) {
|
|
51
|
+
if (b.type !== 'text') continue;
|
|
52
|
+
const text = (b.text || '').trim();
|
|
53
|
+
if (!text || isSystemText(text)) continue;
|
|
54
|
+
if (hasCommand && /<command-message>/i.test(text)) continue;
|
|
55
|
+
if (/^Implement the following plan:/i.test(text)) continue;
|
|
56
|
+
userParts.push(text);
|
|
57
|
+
}
|
|
58
|
+
if (userParts.length > 0) {
|
|
59
|
+
texts.push(userParts.join(' '));
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return texts;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* 检测请求是否为 SUGGESTION MODE(预测用户下一步输入)
|
|
68
|
+
*/
|
|
69
|
+
function isSuggestionMode(messages) {
|
|
70
|
+
if (!Array.isArray(messages) || messages.length === 0) return false;
|
|
71
|
+
const last = messages[messages.length - 1];
|
|
72
|
+
if (last?.role !== 'user') return false;
|
|
73
|
+
const content = last.content;
|
|
74
|
+
if (Array.isArray(content)) {
|
|
75
|
+
return content.some(b => b.type === 'text' && /^\[SUGGESTION MODE:/i.test((b.text || '').trim()));
|
|
76
|
+
}
|
|
77
|
+
if (typeof content === 'string') return /^\[SUGGESTION MODE:/im.test(content.trim());
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* 解析单个 JSONL 文件,提取模型使用次数和 token 统计
|
|
83
|
+
* @param {string} filePath JSONL 文件绝对路径
|
|
84
|
+
* @returns {{ models: Object, summary: Object }}
|
|
85
|
+
*/
|
|
86
|
+
function parseJsonlFile(filePath) {
|
|
87
|
+
const models = {};
|
|
88
|
+
let requestCount = 0;
|
|
89
|
+
let sessionCount = 0;
|
|
90
|
+
let turnCount = 0;
|
|
91
|
+
let maxMsgLen = 0;
|
|
92
|
+
let totalInput = 0;
|
|
93
|
+
let totalOutput = 0;
|
|
94
|
+
let totalCacheRead = 0;
|
|
95
|
+
let totalCacheCreation = 0;
|
|
96
|
+
const preview = [];
|
|
97
|
+
let prevTextCount = 0;
|
|
98
|
+
let lastCollectedSig = ''; // 上次收集的 prompt 签名,用于去重同轮重复请求
|
|
99
|
+
|
|
100
|
+
try {
|
|
101
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
102
|
+
if (!content.trim()) return { models, summary: { requestCount: 0, sessionCount: 0, turnCount: 0, input_tokens: 0, output_tokens: 0, cache_read_input_tokens: 0, cache_creation_input_tokens: 0 }, preview: [] };
|
|
103
|
+
|
|
104
|
+
const entries = content.split('\n---\n').filter(p => p.trim());
|
|
105
|
+
for (const raw of entries) {
|
|
106
|
+
try {
|
|
107
|
+
const entry = JSON.parse(raw);
|
|
108
|
+
requestCount++;
|
|
109
|
+
|
|
110
|
+
// 会话轮次统计(仅 MainAgent,排除 SUGGESTION MODE)
|
|
111
|
+
if (entry.mainAgent && Array.isArray(entry.body?.messages)) {
|
|
112
|
+
const msgs = entry.body.messages;
|
|
113
|
+
// Delta storage: 使用 _totalMessageCount(delta 条目)或 msgs.length(旧格式)
|
|
114
|
+
const len = entry._totalMessageCount || msgs.length;
|
|
115
|
+
if (!isSuggestionMode(msgs)) {
|
|
116
|
+
// messages 数量大幅缩减:新会话(/clear 等),重置追踪
|
|
117
|
+
if (len < maxMsgLen * 0.5 && (maxMsgLen - len) > 4) {
|
|
118
|
+
maxMsgLen = 0;
|
|
119
|
+
prevTextCount = 0;
|
|
120
|
+
}
|
|
121
|
+
const isNewTurn = len > maxMsgLen;
|
|
122
|
+
if (isNewTurn) {
|
|
123
|
+
maxMsgLen = len;
|
|
124
|
+
turnCount++;
|
|
125
|
+
}
|
|
126
|
+
// 收集用户 prompt:新轮次 或 新会话(len===1 且非首次)
|
|
127
|
+
// 用内容签名去重,避免同一轮的重复请求重复收集
|
|
128
|
+
if (isNewTurn || (len === 1 && sessionCount > 0)) {
|
|
129
|
+
if (len === 1 && !isNewTurn) {
|
|
130
|
+
// 新会话但未触发 shrink 检测(上一会话较短),重置基线
|
|
131
|
+
prevTextCount = 0;
|
|
132
|
+
maxMsgLen = len;
|
|
133
|
+
}
|
|
134
|
+
const texts = extractUserTexts(msgs);
|
|
135
|
+
// Delta storage: delta 条目的 msgs 只有新增部分,prevTextCount 不适用,从 0 开始收集
|
|
136
|
+
const textStart = entry._deltaFormat ? 0 : prevTextCount;
|
|
137
|
+
// 生成本次 prompt 签名,用于跳过同轮重复请求
|
|
138
|
+
const sig = texts.join('\x00');
|
|
139
|
+
if (sig === lastCollectedSig && !isNewTurn) {
|
|
140
|
+
// 同一轮的重复请求(内容完全相同),跳过
|
|
141
|
+
} else {
|
|
142
|
+
for (let ti = textStart; ti < texts.length; ti++) {
|
|
143
|
+
const flat = texts[ti].replace(/[\r\n]+/g, ' ').trim();
|
|
144
|
+
if (flat) preview.push(flat.slice(0, 100));
|
|
145
|
+
}
|
|
146
|
+
prevTextCount = texts.length;
|
|
147
|
+
lastCollectedSig = sig;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
if (len === 1) sessionCount++;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// 提取模型名:优先 body.model,其次 response.body.model
|
|
155
|
+
const model = entry.body?.model || entry.response?.body?.model;
|
|
156
|
+
if (!model) continue;
|
|
157
|
+
|
|
158
|
+
if (!models[model]) {
|
|
159
|
+
models[model] = { count: 0, input_tokens: 0, output_tokens: 0, cache_read_input_tokens: 0, cache_creation_input_tokens: 0 };
|
|
160
|
+
}
|
|
161
|
+
models[model].count++;
|
|
162
|
+
|
|
163
|
+
// 提取 usage — 可能在 response.body.usage
|
|
164
|
+
const usage = entry.response?.body?.usage;
|
|
165
|
+
if (usage) {
|
|
166
|
+
const inp = usage.input_tokens || 0;
|
|
167
|
+
const out = usage.output_tokens || 0;
|
|
168
|
+
const cacheRead = usage.cache_read_input_tokens || usage.cache_creation_input_tokens ? (usage.cache_read_input_tokens || 0) : 0;
|
|
169
|
+
const cacheCreate = usage.cache_creation_input_tokens || 0;
|
|
170
|
+
|
|
171
|
+
models[model].input_tokens += inp;
|
|
172
|
+
models[model].output_tokens += out;
|
|
173
|
+
models[model].cache_read_input_tokens += cacheRead;
|
|
174
|
+
models[model].cache_creation_input_tokens += cacheCreate;
|
|
175
|
+
|
|
176
|
+
totalInput += inp;
|
|
177
|
+
totalOutput += out;
|
|
178
|
+
totalCacheRead += cacheRead;
|
|
179
|
+
totalCacheCreation += cacheCreate;
|
|
180
|
+
}
|
|
181
|
+
} catch {
|
|
182
|
+
// 跳过无法解析的条目
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
} catch {
|
|
186
|
+
// 文件读取失败
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// 去重 preview:保留首次出现顺序,移除重复文本
|
|
190
|
+
const seenPreview = new Set();
|
|
191
|
+
const uniquePreview = [];
|
|
192
|
+
for (const p of preview) {
|
|
193
|
+
if (!seenPreview.has(p)) {
|
|
194
|
+
seenPreview.add(p);
|
|
195
|
+
uniquePreview.push(p);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
return {
|
|
200
|
+
models,
|
|
201
|
+
summary: {
|
|
202
|
+
requestCount,
|
|
203
|
+
sessionCount,
|
|
204
|
+
turnCount,
|
|
205
|
+
input_tokens: totalInput,
|
|
206
|
+
output_tokens: totalOutput,
|
|
207
|
+
cache_read_input_tokens: totalCacheRead,
|
|
208
|
+
cache_creation_input_tokens: totalCacheCreation,
|
|
209
|
+
},
|
|
210
|
+
preview: uniquePreview,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* 为单个项目生成或增量更新统计 JSON
|
|
216
|
+
* @param {string} projectDir 项目日志目录
|
|
217
|
+
* @param {string} projectName 项目名
|
|
218
|
+
* @param {string|null} onlyFile 仅更新此文件(增量),null 表示智能增量
|
|
219
|
+
*/
|
|
220
|
+
function generateProjectStats(projectDir, projectName, onlyFile) {
|
|
221
|
+
const statsFile = join(projectDir, `${projectName}.json`);
|
|
222
|
+
|
|
223
|
+
// 读取已有统计(用于增量更新)
|
|
224
|
+
let existing = null;
|
|
225
|
+
try {
|
|
226
|
+
if (existsSync(statsFile)) {
|
|
227
|
+
existing = JSON.parse(readFileSync(statsFile, 'utf-8'));
|
|
228
|
+
}
|
|
229
|
+
} catch {
|
|
230
|
+
existing = null;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// 列出所有 JSONL 文件(排除 _temp.jsonl)
|
|
234
|
+
let jsonlFiles;
|
|
235
|
+
try {
|
|
236
|
+
jsonlFiles = readdirSync(projectDir)
|
|
237
|
+
.filter(f => f.endsWith('.jsonl') && !f.endsWith('_temp.jsonl'))
|
|
238
|
+
.sort();
|
|
239
|
+
} catch {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
if (jsonlFiles.length === 0) return;
|
|
244
|
+
|
|
245
|
+
const filesStats = {};
|
|
246
|
+
const topModels = {};
|
|
247
|
+
|
|
248
|
+
for (const f of jsonlFiles) {
|
|
249
|
+
const filePath = join(projectDir, f);
|
|
250
|
+
let stat;
|
|
251
|
+
try {
|
|
252
|
+
stat = statSync(filePath);
|
|
253
|
+
} catch {
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
const size = stat.size;
|
|
258
|
+
const lastModified = stat.mtime.toISOString();
|
|
259
|
+
|
|
260
|
+
// 增量优化:如果有已有统计且文件未变化且 schema 版本一致,直接复用
|
|
261
|
+
if (existing?._v === STATS_VERSION
|
|
262
|
+
&& existing?.files?.[f] && existing.files[f].size === size && existing.files[f].lastModified === lastModified) {
|
|
263
|
+
// 如果指定了 onlyFile 且不是此文件,跳过重新解析
|
|
264
|
+
if (!onlyFile || onlyFile !== f) {
|
|
265
|
+
filesStats[f] = existing.files[f];
|
|
266
|
+
// 汇总模型
|
|
267
|
+
if (filesStats[f].models) {
|
|
268
|
+
for (const [model, data] of Object.entries(filesStats[f].models)) {
|
|
269
|
+
if (!topModels[model]) topModels[model] = 0;
|
|
270
|
+
topModels[model] += data.count;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// 需要重新解析
|
|
278
|
+
const parsed = parseJsonlFile(filePath);
|
|
279
|
+
filesStats[f] = {
|
|
280
|
+
models: parsed.models,
|
|
281
|
+
summary: parsed.summary,
|
|
282
|
+
preview: parsed.preview,
|
|
283
|
+
size,
|
|
284
|
+
lastModified,
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
// 汇总模型使用次数
|
|
288
|
+
for (const [model, data] of Object.entries(parsed.models)) {
|
|
289
|
+
if (!topModels[model]) topModels[model] = 0;
|
|
290
|
+
topModels[model] += data.count;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
// 计算全局汇总
|
|
295
|
+
let totalRequests = 0;
|
|
296
|
+
let totalSessions = 0;
|
|
297
|
+
let totalTurns = 0;
|
|
298
|
+
let totalInput = 0;
|
|
299
|
+
let totalOutput = 0;
|
|
300
|
+
let totalCacheRead = 0;
|
|
301
|
+
let totalCacheCreation = 0;
|
|
302
|
+
|
|
303
|
+
for (const f of Object.values(filesStats)) {
|
|
304
|
+
totalRequests += f.summary.requestCount;
|
|
305
|
+
totalSessions += f.summary.sessionCount || 0;
|
|
306
|
+
totalTurns += f.summary.turnCount || 0;
|
|
307
|
+
totalInput += f.summary.input_tokens;
|
|
308
|
+
totalOutput += f.summary.output_tokens;
|
|
309
|
+
totalCacheRead += f.summary.cache_read_input_tokens;
|
|
310
|
+
totalCacheCreation += f.summary.cache_creation_input_tokens;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
const stats = {
|
|
314
|
+
_v: STATS_VERSION,
|
|
315
|
+
project: projectName,
|
|
316
|
+
updatedAt: new Date().toISOString(),
|
|
317
|
+
models: topModels,
|
|
318
|
+
files: filesStats,
|
|
319
|
+
summary: {
|
|
320
|
+
requestCount: totalRequests,
|
|
321
|
+
sessionCount: totalSessions,
|
|
322
|
+
turnCount: totalTurns,
|
|
323
|
+
fileCount: jsonlFiles.length,
|
|
324
|
+
input_tokens: totalInput,
|
|
325
|
+
output_tokens: totalOutput,
|
|
326
|
+
cache_read_input_tokens: totalCacheRead,
|
|
327
|
+
cache_creation_input_tokens: totalCacheCreation,
|
|
328
|
+
},
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
try {
|
|
332
|
+
writeFileSync(statsFile, JSON.stringify(stats, null, 2));
|
|
333
|
+
} catch (err) {
|
|
334
|
+
parentPort?.postMessage({ type: 'error', message: `Failed to write stats: ${err.message}` });
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* 扫描 logDir 下所有项目目录,逐个生成统计
|
|
340
|
+
*/
|
|
341
|
+
function scanAllProjects(logDir) {
|
|
342
|
+
try {
|
|
343
|
+
const entries = readdirSync(logDir, { withFileTypes: true });
|
|
344
|
+
for (const entry of entries) {
|
|
345
|
+
if (!entry.isDirectory()) continue;
|
|
346
|
+
const projectDir = join(logDir, entry.name);
|
|
347
|
+
generateProjectStats(projectDir, entry.name, null);
|
|
348
|
+
}
|
|
349
|
+
parentPort?.postMessage({ type: 'scan-all-done' });
|
|
350
|
+
} catch (err) {
|
|
351
|
+
parentPort?.postMessage({ type: 'error', message: `scan-all failed: ${err.message}` });
|
|
352
|
+
parentPort?.postMessage({ type: 'scan-all-done' });
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// Worker 消息处理
|
|
357
|
+
parentPort?.on('message', (msg) => {
|
|
358
|
+
switch (msg.type) {
|
|
359
|
+
case 'init': {
|
|
360
|
+
const { logDir, projectName } = msg;
|
|
361
|
+
const projectDir = join(logDir, projectName);
|
|
362
|
+
if (existsSync(projectDir)) {
|
|
363
|
+
generateProjectStats(projectDir, projectName, null);
|
|
364
|
+
parentPort?.postMessage({ type: 'init-done', projectName });
|
|
365
|
+
}
|
|
366
|
+
break;
|
|
367
|
+
}
|
|
368
|
+
case 'update': {
|
|
369
|
+
const { logDir, projectName, logFile } = msg;
|
|
370
|
+
const projectDir = join(logDir, projectName);
|
|
371
|
+
const fileName = basename(logFile);
|
|
372
|
+
if (existsSync(projectDir)) {
|
|
373
|
+
generateProjectStats(projectDir, projectName, fileName);
|
|
374
|
+
parentPort?.postMessage({ type: 'update-done', projectName, logFile: fileName });
|
|
375
|
+
}
|
|
376
|
+
break;
|
|
377
|
+
}
|
|
378
|
+
case 'scan-all': {
|
|
379
|
+
const { logDir } = msg;
|
|
380
|
+
scanAllProjects(logDir);
|
|
381
|
+
break;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
});
|
package/lib/updater.js
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
|
|
2
|
+
import { execSync } from 'node:child_process';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
import { dirname } from 'node:path';
|
|
7
|
+
import { t } from '../i18n.js';
|
|
8
|
+
|
|
9
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
+
const __dirname = dirname(__filename);
|
|
11
|
+
|
|
12
|
+
const CHECK_INTERVAL = 4 * 60 * 60 * 1000; // 4 hours
|
|
13
|
+
const CACHE_DIR = join(homedir(), '.codex', 'cx-viewer');
|
|
14
|
+
const CACHE_FILE = join(CACHE_DIR, 'update-check.json');
|
|
15
|
+
const CC_SETTINGS_FILE = join(homedir(), '.codex', 'settings.json');
|
|
16
|
+
|
|
17
|
+
function getCurrentVersion() {
|
|
18
|
+
const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
|
|
19
|
+
return pkg.version;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function parseVersion(ver) {
|
|
23
|
+
const [major, minor, patch] = ver.split('.').map(Number);
|
|
24
|
+
return { major, minor, patch };
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function isNewer(remote, current) {
|
|
28
|
+
const r = parseVersion(remote);
|
|
29
|
+
const c = parseVersion(current);
|
|
30
|
+
if (r.major !== c.major) return r.major > c.major;
|
|
31
|
+
if (r.minor !== c.minor) return r.minor > c.minor;
|
|
32
|
+
return r.patch > c.patch;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
// 读取 Codex 全局配置,判断是否允许自更新
|
|
36
|
+
function isAutoUpdateEnabled() {
|
|
37
|
+
// 环境变量禁用
|
|
38
|
+
if (process.env.CODEX_DISABLE_NONESSENTIAL_TRAFFIC) return false;
|
|
39
|
+
|
|
40
|
+
try {
|
|
41
|
+
if (!existsSync(CC_SETTINGS_FILE)) return true; // 默认启用
|
|
42
|
+
const settings = JSON.parse(readFileSync(CC_SETTINGS_FILE, 'utf-8'));
|
|
43
|
+
// Codex 用 autoUpdates: false 显式禁用
|
|
44
|
+
if (settings.autoUpdates === false) return false;
|
|
45
|
+
} catch { }
|
|
46
|
+
|
|
47
|
+
return true; // 默认启用
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function shouldCheck() {
|
|
51
|
+
try {
|
|
52
|
+
if (!existsSync(CACHE_FILE)) return true;
|
|
53
|
+
const data = JSON.parse(readFileSync(CACHE_FILE, 'utf-8'));
|
|
54
|
+
return Date.now() - data.lastCheck > CHECK_INTERVAL;
|
|
55
|
+
} catch {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function saveCheckTime() {
|
|
61
|
+
try {
|
|
62
|
+
if (!existsSync(CACHE_DIR)) mkdirSync(CACHE_DIR, { recursive: true });
|
|
63
|
+
writeFileSync(CACHE_FILE, JSON.stringify({ lastCheck: Date.now() }));
|
|
64
|
+
} catch { }
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export async function checkAndUpdate(options = {}) {
|
|
68
|
+
const fetchImpl = options.fetchImpl || fetch;
|
|
69
|
+
const execImpl = options.execImpl || execSync;
|
|
70
|
+
const dryRun = options.dryRun === true;
|
|
71
|
+
const currentVersion = getCurrentVersion();
|
|
72
|
+
|
|
73
|
+
// 跟随 Codex 全局配置
|
|
74
|
+
if (!isAutoUpdateEnabled()) {
|
|
75
|
+
return { status: 'disabled', currentVersion, remoteVersion: null };
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (!shouldCheck()) {
|
|
79
|
+
return { status: 'skipped', currentVersion, remoteVersion: null };
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
try {
|
|
83
|
+
const res = await fetchImpl('https://registry.npmjs.org/cx-viewer');
|
|
84
|
+
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
85
|
+
const data = await res.json();
|
|
86
|
+
const remoteVersion = data['dist-tags']?.latest;
|
|
87
|
+
|
|
88
|
+
saveCheckTime();
|
|
89
|
+
|
|
90
|
+
if (!remoteVersion) {
|
|
91
|
+
return { status: 'error', currentVersion, remoteVersion: null, error: 'No version found' };
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (!isNewer(remoteVersion, currentVersion)) {
|
|
95
|
+
return { status: 'latest', currentVersion, remoteVersion };
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const remote = parseVersion(remoteVersion);
|
|
99
|
+
const current = parseVersion(currentVersion);
|
|
100
|
+
|
|
101
|
+
// 跨大版本:仅提示
|
|
102
|
+
if (remote.major !== current.major) {
|
|
103
|
+
console.error(`[CX Viewer] ${t('update.majorAvailable', { version: remoteVersion })}`);
|
|
104
|
+
return { status: 'major_available', currentVersion, remoteVersion };
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// 同大版本:自动更新
|
|
108
|
+
console.error(`[CX Viewer] ${t('update.updating', { version: remoteVersion })}`);
|
|
109
|
+
try {
|
|
110
|
+
if (!dryRun) {
|
|
111
|
+
execImpl(`npm install -g cx-viewer@${remoteVersion}`, { stdio: 'pipe', timeout: 60000 });
|
|
112
|
+
}
|
|
113
|
+
console.error(`[CX Viewer] ${t('update.completed', { version: remoteVersion })}`);
|
|
114
|
+
return { status: 'updated', currentVersion, remoteVersion };
|
|
115
|
+
} catch (err) {
|
|
116
|
+
console.error(`[CX Viewer] ${t('update.failed', { error: err.message })}`);
|
|
117
|
+
return { status: 'error', currentVersion, remoteVersion, error: err.message };
|
|
118
|
+
}
|
|
119
|
+
} catch (err) {
|
|
120
|
+
saveCheckTime();
|
|
121
|
+
return { status: 'error', currentVersion, remoteVersion: null, error: err.message };
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { userInfo, platform } from 'node:os';
|
|
2
|
+
import { execFile, exec } from 'node:child_process';
|
|
3
|
+
import { promisify } from 'node:util';
|
|
4
|
+
|
|
5
|
+
const execFileAsync = promisify(execFile);
|
|
6
|
+
const execAsync = promisify(exec);
|
|
7
|
+
|
|
8
|
+
// macOS user profile (avatar + display name), cached once
|
|
9
|
+
let _userProfile = null;
|
|
10
|
+
let _userProfilePromise = null;
|
|
11
|
+
|
|
12
|
+
export async function getUserProfile() {
|
|
13
|
+
if (_userProfile) return _userProfile;
|
|
14
|
+
if (_userProfilePromise) return _userProfilePromise;
|
|
15
|
+
_userProfilePromise = _getUserProfileImpl();
|
|
16
|
+
_userProfile = await _userProfilePromise;
|
|
17
|
+
_userProfilePromise = null;
|
|
18
|
+
return _userProfile;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
async function _getUserProfileImpl() {
|
|
22
|
+
const info = userInfo();
|
|
23
|
+
const name = info.username || 'User';
|
|
24
|
+
let displayName = name;
|
|
25
|
+
let avatarBase64 = null;
|
|
26
|
+
|
|
27
|
+
if (platform() === 'darwin') {
|
|
28
|
+
try {
|
|
29
|
+
const { stdout: rn } = await execFileAsync('dscl', ['.', '-read', `/Users/${name}`, 'RealName'], { encoding: 'utf-8', timeout: 3000 });
|
|
30
|
+
const match = rn.match(/RealName:\n?\s*(.+)/);
|
|
31
|
+
if (match && match[1].trim()) displayName = match[1].trim();
|
|
32
|
+
} catch { }
|
|
33
|
+
|
|
34
|
+
try {
|
|
35
|
+
const { stdout } = await execAsync(`dscl . -read /Users/${name} JPEGPhoto | tail -1 | xxd -r -p`, { timeout: 5000, maxBuffer: 1024 * 1024, encoding: 'buffer' });
|
|
36
|
+
if (stdout && stdout.length > 100) {
|
|
37
|
+
avatarBase64 = `data:image/jpeg;base64,${stdout.toString('base64')}`;
|
|
38
|
+
}
|
|
39
|
+
} catch { }
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return { name: displayName, avatar: avatarBase64 };
|
|
43
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "cx-viewer",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Codex Logger visualization management tool",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"main": "server.js",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": "./server.js",
|
|
10
|
+
"./server.js": "./server.js",
|
|
11
|
+
"./interceptor.js": "./interceptor.js"
|
|
12
|
+
},
|
|
13
|
+
"author": "tian1024527726",
|
|
14
|
+
"bin": {
|
|
15
|
+
"cxv": "cli.js"
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"dev": "vite",
|
|
19
|
+
"build": "node build.js",
|
|
20
|
+
"start": "node server.js",
|
|
21
|
+
"test": "CXV_LOG_DIR=tmp node --test",
|
|
22
|
+
"test:coverage": "CXV_LOG_DIR=tmp node --test --experimental-test-coverage --test-coverage-include='lib/*.js' --test-coverage-include='*.js'",
|
|
23
|
+
"prepublishOnly": "npm run build",
|
|
24
|
+
"electron:dev": "electron electron/main.js",
|
|
25
|
+
"electron:build": "npm run build && electron-builder",
|
|
26
|
+
"electron:sign": "npm run electron:build && ./scripts/mac-sign.sh",
|
|
27
|
+
"electron:check-sign": "./scripts/check-sign-config.sh"
|
|
28
|
+
},
|
|
29
|
+
"keywords": [
|
|
30
|
+
"codex"
|
|
31
|
+
],
|
|
32
|
+
"contributors": [
|
|
33
|
+
{
|
|
34
|
+
"name": "tian1024527726",
|
|
35
|
+
"email": "18868814352@163.com"
|
|
36
|
+
}
|
|
37
|
+
],
|
|
38
|
+
"repository": {
|
|
39
|
+
"type": "git",
|
|
40
|
+
"url": "git+https://github.com/tian1024527726/cx-viewer.git"
|
|
41
|
+
},
|
|
42
|
+
"bugs": {
|
|
43
|
+
"url": "https://github.com/tian1024527726/cx-viewer/issues"
|
|
44
|
+
},
|
|
45
|
+
"homepage": "https://github.com/tian1024527726/cx-viewer#readme",
|
|
46
|
+
"engines": {
|
|
47
|
+
"node": ">=20"
|
|
48
|
+
},
|
|
49
|
+
"files": [
|
|
50
|
+
"dist/",
|
|
51
|
+
"server.js",
|
|
52
|
+
"cli.js",
|
|
53
|
+
"proxy.js",
|
|
54
|
+
"interceptor.js",
|
|
55
|
+
"i18n.js",
|
|
56
|
+
"findcx.js",
|
|
57
|
+
"lib/",
|
|
58
|
+
"pty-manager.js",
|
|
59
|
+
"workspace-registry.js",
|
|
60
|
+
"concepts/"
|
|
61
|
+
],
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"@ant-design/icons": "^5.6.1",
|
|
64
|
+
"@codemirror/lang-cpp": "^6.0.3",
|
|
65
|
+
"@codemirror/lang-css": "^6.3.1",
|
|
66
|
+
"@codemirror/lang-go": "^6.0.1",
|
|
67
|
+
"@codemirror/lang-java": "^6.0.2",
|
|
68
|
+
"@codemirror/lang-javascript": "^6.2.5",
|
|
69
|
+
"@codemirror/lang-json": "^6.0.2",
|
|
70
|
+
"@codemirror/lang-markdown": "^6.5.0",
|
|
71
|
+
"@codemirror/lang-php": "^6.0.2",
|
|
72
|
+
"@codemirror/lang-python": "^6.2.1",
|
|
73
|
+
"@codemirror/lang-rust": "^6.0.2",
|
|
74
|
+
"@codemirror/lang-sql": "^6.10.0",
|
|
75
|
+
"@codemirror/lang-xml": "^6.1.0",
|
|
76
|
+
"@codemirror/lang-yaml": "^6.1.2",
|
|
77
|
+
"@codemirror/language": "^6.12.3",
|
|
78
|
+
"@codemirror/view": "^6.41.0",
|
|
79
|
+
"@electron/notarize": "^3.1.1",
|
|
80
|
+
"@lezer/highlight": "^1.2.3",
|
|
81
|
+
"@replit/codemirror-minimap": "^0.5.2",
|
|
82
|
+
"@uiw/react-codemirror": "^4.25.8",
|
|
83
|
+
"@vitejs/plugin-react": "^4.5.2",
|
|
84
|
+
"@xterm/addon-fit": "^0.11.0",
|
|
85
|
+
"@xterm/addon-unicode11": "^0.9.0",
|
|
86
|
+
"@xterm/addon-web-links": "^0.12.0",
|
|
87
|
+
"@xterm/addon-webgl": "^0.19.0",
|
|
88
|
+
"@xterm/xterm": "^6.0.0",
|
|
89
|
+
"antd": "^5.29.2",
|
|
90
|
+
"diff": "^8.0.3",
|
|
91
|
+
"electron": "^35.1.2",
|
|
92
|
+
"electron-builder": "^26.0.12",
|
|
93
|
+
"highlight.js": "^11.11.1",
|
|
94
|
+
"html2canvas": "^1.4.1",
|
|
95
|
+
"marked": "^17.0.2",
|
|
96
|
+
"mermaid": "^11.13.0",
|
|
97
|
+
"qrcode.react": "^4.2.0",
|
|
98
|
+
"react": "^18.3.1",
|
|
99
|
+
"react-dom": "^18.3.1",
|
|
100
|
+
"react-json-view-lite": "^2.1.0",
|
|
101
|
+
"react-virtuoso": "^4.18.3",
|
|
102
|
+
"vite": "^6.3.5"
|
|
103
|
+
},
|
|
104
|
+
"dependencies": {
|
|
105
|
+
"@opentelemetry/api": "^1.9.1",
|
|
106
|
+
"@opentelemetry/exporter-trace-otlp-http": "^0.214.0",
|
|
107
|
+
"@opentelemetry/resources": "^2.6.1",
|
|
108
|
+
"@opentelemetry/sdk-node": "^0.214.0",
|
|
109
|
+
"@opentelemetry/semantic-conventions": "^1.40.0",
|
|
110
|
+
"dompurify": "^3.3.3",
|
|
111
|
+
"node-pty": "^1.1.0",
|
|
112
|
+
"undici": "^7.22.0",
|
|
113
|
+
"ws": "^8.19.0"
|
|
114
|
+
}
|
|
115
|
+
}
|