@tyvm/knowhow 0.0.33 → 0.0.35
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/autodoc/plugins/downloader/downloader.mdx +2 -2
- package/benchmarks/.dockerignore +7 -0
- package/benchmarks/README.md +166 -0
- package/benchmarks/docker/Dockerfile +68 -0
- package/benchmarks/example-config.yml +27 -0
- package/benchmarks/jest.config.js +13 -0
- package/benchmarks/package-lock.json +4297 -0
- package/benchmarks/package.json +39 -0
- package/benchmarks/results/4542435/2025-08-05/lms/lms-openai-gpt-oss-20b.json +2814 -0
- package/benchmarks/results/4542435/2025-08-05/lms/lms-qwen-qwen3-30b-a3b-2507.json +2014 -0
- package/benchmarks/results/4fb9125/2025-08-07/anthropic/anthropic-claude-sonnet-4-20250514.json +3121 -0
- package/benchmarks/results/5766aee/2025-08-02/lms-qwen/qwen3-coder-30b.json +98 -0
- package/benchmarks/results/6d73808/2025-08-07/openai/openai-gpt-5.json +3256 -0
- package/benchmarks/results/77bf0a6/2025-08-02/lms-qwen/qwen3-30b-a3b-2507.json +4298 -0
- package/benchmarks/results/8c0d445/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json +3031 -0
- package/benchmarks/results/8c0d445/2025-08-03/openai/openai-gpt-4.1-2025-04-14.json +2990 -0
- package/benchmarks/results/ac6b2ab/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json +3256 -0
- package/benchmarks/results/ac6b2ab/2025-08-03/lms/lms-qwen-qwen3-coder-30b.json +3007 -0
- package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-2025-04-14.json +3256 -0
- package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-mini-2025-04-14.json +3036 -0
- package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-nano-2025-04-14.json +3280 -0
- package/benchmarks/results/adff675/2025-08-04/lms/lms-qwen-qwen3-30b-a3b-2507.json +1920 -0
- package/benchmarks/results/adff675/2025-08-04/lms/lms-qwen-qwen3-coder-30b.json +3281 -0
- package/benchmarks/results/b502ed9/2025-08-03/lms-qwen/qwen3-coder-30b.json +2896 -0
- package/benchmarks/results/d1a8129/2025-08-03/lms/lms-qwen-qwen3-coder-30b.json +3011 -0
- package/benchmarks/results/e60471c/2025-08-03/lms/qwen3-30b-a3b-2507.json +3003 -0
- package/benchmarks/scripts/build-and-run.sh +47 -0
- package/benchmarks/scripts/clone-exercism.sh +92 -0
- package/benchmarks/scripts/validate.sh +48 -0
- package/benchmarks/src/__tests__/runner.test.ts +27 -0
- package/benchmarks/src/cli.ts +90 -0
- package/benchmarks/src/evaluators/EvaluatorRegistry.ts +64 -0
- package/benchmarks/src/evaluators/JavaScriptEvaluator.ts +183 -0
- package/benchmarks/src/evaluators/index.ts +3 -0
- package/benchmarks/src/evaluators/types.ts +22 -0
- package/benchmarks/src/index.ts +3 -0
- package/benchmarks/src/providers.ts +13 -0
- package/benchmarks/src/runner.ts +824 -0
- package/benchmarks/src/types.ts +63 -0
- package/benchmarks/tsconfig.json +19 -0
- package/jest.config.js +2 -1
- package/leaderboard/README.md +148 -0
- package/leaderboard/app/api/benchmark-data/route.ts +131 -0
- package/leaderboard/app/api/benchmark-detail/route.ts +172 -0
- package/leaderboard/app/details/[model]/[provider]/[language]/page.tsx +501 -0
- package/leaderboard/app/exercise/[model]/[provider]/[language]/[exercise]/page.tsx +375 -0
- package/leaderboard/app/globals.css +27 -0
- package/leaderboard/app/layout.tsx +21 -0
- package/leaderboard/app/page.tsx +170 -0
- package/leaderboard/components/LeaderboardTable.tsx +168 -0
- package/leaderboard/components/PerformanceChart.tsx +109 -0
- package/leaderboard/next-env.d.ts +5 -0
- package/leaderboard/next.config.js +4 -0
- package/leaderboard/package-lock.json +6363 -0
- package/leaderboard/package.json +28 -0
- package/leaderboard/postcss.config.js +6 -0
- package/leaderboard/tailwind.config.js +17 -0
- package/leaderboard/tsconfig.json +28 -0
- package/leaderboard/types/benchmark.ts +67 -0
- package/leaderboard/utils/dataProcessor.ts +33 -0
- package/package.json +2 -1
- package/src/agents/base/base.ts +182 -24
- package/src/agents/base/prompt.ts +28 -0
- package/src/agents/index.ts +3 -0
- package/src/agents/patcher/patcher.ts +6 -4
- package/src/agents/setup/setup.ts +56 -0
- package/src/agents/tools/agentCall.ts +6 -2
- package/src/agents/tools/aiClient.ts +74 -8
- package/src/agents/tools/execCommand.ts +13 -14
- package/src/agents/tools/executeScript/README.md +16 -0
- package/src/agents/tools/index.ts +2 -0
- package/src/agents/tools/list.ts +73 -16
- package/src/agents/tools/startAgentTask.ts +109 -0
- package/src/agents/tools/textSearch.ts +1 -1
- package/src/agents/tools/visionTool.ts +31 -2
- package/src/agents/tools/ycmd/client.ts +608 -0
- package/src/agents/tools/ycmd/definitions.ts +294 -0
- package/src/agents/tools/ycmd/detection.ts +211 -0
- package/src/agents/tools/ycmd/index.ts +11 -0
- package/src/agents/tools/ycmd/installer.ts +251 -0
- package/src/agents/tools/ycmd/server.ts +535 -0
- package/src/agents/tools/ycmd/serverManager.ts +316 -0
- package/src/agents/tools/ycmd/tools/completion.ts +113 -0
- package/src/agents/tools/ycmd/tools/diagnostics.ts +155 -0
- package/src/agents/tools/ycmd/tools/getLocations.ts +173 -0
- package/src/agents/tools/ycmd/tools/goto.ts +169 -0
- package/src/agents/tools/ycmd/tools/refactor.ts +204 -0
- package/src/agents/tools/ycmd/tools/signature.ts +174 -0
- package/src/agents/tools/ycmd/tools/start.ts +95 -0
- package/src/agents/tools/ycmd/utils/pathUtils.ts +59 -0
- package/src/ai.ts +15 -0
- package/src/chat/CliChatService.ts +277 -0
- package/src/chat/modules/AgentModule.ts +985 -0
- package/src/chat/modules/AskModule.ts +98 -0
- package/src/chat/modules/BaseChatModule.ts +66 -0
- package/src/chat/modules/InternalChatModule.ts +174 -0
- package/src/chat/modules/SearchModule.ts +166 -0
- package/src/chat/modules/SetupModule.ts +185 -0
- package/src/chat/modules/SystemModule.ts +120 -0
- package/src/chat/modules/VoiceModule.ts +70 -0
- package/src/chat/modules/index.js +5 -0
- package/src/chat/types.ts +97 -0
- package/src/chat.ts +9 -1
- package/src/chat2.ts +62 -0
- package/src/cli.ts +264 -35
- package/src/clients/anthropic.ts +14 -7
- package/src/clients/gemini.ts +15 -7
- package/src/clients/http.ts +17 -7
- package/src/clients/index.ts +117 -4
- package/src/clients/knowhow.ts +7 -2
- package/src/clients/knowhowMcp.ts +118 -0
- package/src/clients/openai.ts +32 -8
- package/src/clients/types.ts +1 -0
- package/src/clients/xai.ts +17 -5
- package/src/config.ts +30 -5
- package/src/conversion.ts +4 -1
- package/src/login.ts +26 -9
- package/src/microphone.ts +0 -1
- package/src/plugins/downloader/downloader.ts +191 -49
- package/src/plugins/downloader/plugin.ts +3 -1
- package/src/plugins/plugins.ts +3 -0
- package/src/processors/CustomVariables.ts +425 -0
- package/src/processors/HarmonyToolProcessor.ts +264 -0
- package/src/processors/XmlToolCallProcessor.ts +533 -0
- package/src/processors/index.ts +3 -0
- package/src/prompts/KnowhowConfigExamples.ts +376 -0
- package/src/services/KnowhowClient.ts +49 -3
- package/src/services/Mcp.ts +42 -3
- package/src/services/McpServer.ts +14 -4
- package/src/services/McpWebsocketTransport.ts +21 -7
- package/src/services/MessageProcessor.ts +10 -5
- package/src/services/index.ts +5 -0
- package/src/services/script-execution/ScriptExecutor.ts +34 -1
- package/src/services/types.ts +17 -14
- package/src/types.ts +17 -0
- package/src/utils/index.ts +138 -0
- package/tests/XmlToolCallProcessor.test.ts +468 -0
- package/tests/manual/ycmd/debug_diagnostics_test.ts +127 -0
- package/tests/manual/ycmd/fixtures/debug_diagnostics.ts +26 -0
- package/tests/manual/ycmd/fixtures/file_change_test.ts +17 -0
- package/tests/manual/ycmd/minimal_advanced_test.ts +108 -0
- package/tests/manual/ycmd/simple_diagnostics_test.ts +61 -0
- package/tests/manual/ycmd/simple_test.ts +74 -0
- package/tests/manual/ycmd/test-typescript-sample.ts +34 -0
- package/tests/manual/ycmd/test_advanced_features.ts +407 -0
- package/tests/manual/ycmd/test_advanced_with_tools.ts +320 -0
- package/tests/manual/ycmd/test_comprehensive_typescript.ts +179 -0
- package/tests/manual/ycmd/test_diagnostics_file_changes.ts +249 -0
- package/tests/manual/ycmd/test_diagnostics_fix.ts +99 -0
- package/tests/manual/ycmd/test_diagnostics_simple.ts +100 -0
- package/tests/manual/ycmd/test_diagnostics_timing.ts +120 -0
- package/tests/manual/ycmd/test_discover_commands.ts +310 -0
- package/tests/manual/ycmd/test_endpoints.ts +115 -0
- package/tests/manual/ycmd/test_final_comprehensive.ts +218 -0
- package/tests/manual/ycmd/test_final_validation.ts +150 -0
- package/tests/manual/ycmd/test_implementation.js +42 -0
- package/tests/manual/ycmd/test_individual_ycmd_tool.ts +39 -0
- package/tests/manual/ycmd/test_server_manager.ts +52 -0
- package/tests/manual/ycmd/test_simple_debug.ts +86 -0
- package/tests/manual/ycmd/test_tsserver_workflow.js +83 -0
- package/tests/manual/ycmd/test_tsserver_workflow.ts +122 -0
- package/tests/manual/ycmd/test_typescript_simple.ts +48 -0
- package/tests/manual/ycmd/test_typescript_ycmd.ts +105 -0
- package/tests/manual/ycmd/test_workspace_config.ts +90 -0
- package/tests/manual/ycmd/test_ycmd_auto_start.ts +137 -0
- package/tests/manual/ycmd/test_ycmd_comprehensive.ts +73 -0
- package/tests/manual/ycmd/test_ycmd_connection.py +10 -0
- package/tests/manual/ycmd/test_ycmd_direct.ts +142 -0
- package/tests/manual/ycmd/test_ycmd_experiment.ts +48 -0
- package/tests/manual/ycmd/test_ycmd_final.ts +200 -0
- package/tests/manual/ycmd/test_ycmd_fixed.py +18 -0
- package/tests/manual/ycmd/test_ycmd_integration.ts +112 -0
- package/tests/manual/ycmd/test_ycmd_simple.ts +45 -0
- package/tests/manual/ycmd/test_ycmd_usage.py +27 -0
- package/tests/manual/ycmd/working_simple_test.ts +134 -0
- package/ts_build/src/agents/base/base.d.ts +15 -1
- package/ts_build/src/agents/base/base.js +121 -20
- package/ts_build/src/agents/base/base.js.map +1 -1
- package/ts_build/src/agents/base/prompt.d.ts +1 -1
- package/ts_build/src/agents/base/prompt.js +28 -0
- package/ts_build/src/agents/base/prompt.js.map +1 -1
- package/ts_build/src/agents/index.d.ts +2 -0
- package/ts_build/src/agents/index.js +2 -0
- package/ts_build/src/agents/index.js.map +1 -1
- package/ts_build/src/agents/patcher/patcher.js +6 -3
- package/ts_build/src/agents/patcher/patcher.js.map +1 -1
- package/ts_build/src/agents/setup/setup.d.ts +8 -0
- package/ts_build/src/agents/setup/setup.js +59 -0
- package/ts_build/src/agents/setup/setup.js.map +1 -0
- package/ts_build/src/agents/tools/agentCall.js +5 -2
- package/ts_build/src/agents/tools/agentCall.js.map +1 -1
- package/ts_build/src/agents/tools/aiClient.d.ts +6 -5
- package/ts_build/src/agents/tools/aiClient.js +37 -6
- package/ts_build/src/agents/tools/aiClient.js.map +1 -1
- package/ts_build/src/agents/tools/execCommand.d.ts +2 -2
- package/ts_build/src/agents/tools/execCommand.js +5 -6
- package/ts_build/src/agents/tools/execCommand.js.map +1 -1
- package/ts_build/src/agents/tools/executeScript/index.d.ts +1 -1
- package/ts_build/src/agents/tools/index.d.ts +2 -0
- package/ts_build/src/agents/tools/index.js +2 -0
- package/ts_build/src/agents/tools/index.js.map +1 -1
- package/ts_build/src/agents/tools/list.js +66 -16
- package/ts_build/src/agents/tools/list.js.map +1 -1
- package/ts_build/src/agents/tools/startAgentTask.d.ts +13 -0
- package/ts_build/src/agents/tools/startAgentTask.js +74 -0
- package/ts_build/src/agents/tools/startAgentTask.js.map +1 -0
- package/ts_build/src/agents/tools/startChatTask.d.ts +13 -0
- package/ts_build/src/agents/tools/startChatTask.js +73 -0
- package/ts_build/src/agents/tools/startChatTask.js.map +1 -0
- package/ts_build/src/agents/tools/textSearch.js +1 -1
- package/ts_build/src/agents/tools/textSearch.js.map +1 -1
- package/ts_build/src/agents/tools/visionTool.d.ts +1 -1
- package/ts_build/src/agents/tools/visionTool.js +23 -3
- package/ts_build/src/agents/tools/visionTool.js.map +1 -1
- package/ts_build/src/agents/tools/ycmd/client.d.ts +93 -0
- package/ts_build/src/agents/tools/ycmd/client.js +355 -0
- package/ts_build/src/agents/tools/ycmd/client.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/definitions.d.ts +345 -0
- package/ts_build/src/agents/tools/ycmd/definitions.js +298 -0
- package/ts_build/src/agents/tools/ycmd/definitions.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/detection.d.ts +11 -0
- package/ts_build/src/agents/tools/ycmd/detection.js +175 -0
- package/ts_build/src/agents/tools/ycmd/detection.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/index.d.ts +8 -0
- package/ts_build/src/agents/tools/ycmd/index.js +20 -0
- package/ts_build/src/agents/tools/ycmd/index.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/installer.d.ts +19 -0
- package/ts_build/src/agents/tools/ycmd/installer.js +196 -0
- package/ts_build/src/agents/tools/ycmd/installer.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/server.d.ts +35 -0
- package/ts_build/src/agents/tools/ycmd/server.js +363 -0
- package/ts_build/src/agents/tools/ycmd/server.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/serverManager.d.ts +39 -0
- package/ts_build/src/agents/tools/ycmd/serverManager.js +210 -0
- package/ts_build/src/agents/tools/ycmd/serverManager.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/completion.d.ts +22 -0
- package/ts_build/src/agents/tools/ycmd/tools/completion.js +72 -0
- package/ts_build/src/agents/tools/ycmd/tools/completion.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/diagnostics.d.ts +42 -0
- package/ts_build/src/agents/tools/ycmd/tools/diagnostics.js +88 -0
- package/ts_build/src/agents/tools/ycmd/tools/diagnostics.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/getLocations.d.ts +22 -0
- package/ts_build/src/agents/tools/ycmd/tools/getLocations.js +142 -0
- package/ts_build/src/agents/tools/ycmd/tools/getLocations.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/goto.d.ts +20 -0
- package/ts_build/src/agents/tools/ycmd/tools/goto.js +101 -0
- package/ts_build/src/agents/tools/ycmd/tools/goto.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/refactor.d.ts +32 -0
- package/ts_build/src/agents/tools/ycmd/tools/refactor.js +123 -0
- package/ts_build/src/agents/tools/ycmd/tools/refactor.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/signature.d.ts +25 -0
- package/ts_build/src/agents/tools/ycmd/tools/signature.js +110 -0
- package/ts_build/src/agents/tools/ycmd/tools/signature.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/start.d.ts +17 -0
- package/ts_build/src/agents/tools/ycmd/tools/start.js +65 -0
- package/ts_build/src/agents/tools/ycmd/tools/start.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/utils/pathUtils.d.ts +4 -0
- package/ts_build/src/agents/tools/ycmd/utils/pathUtils.js +67 -0
- package/ts_build/src/agents/tools/ycmd/utils/pathUtils.js.map +1 -0
- package/ts_build/src/ai.d.ts +1 -0
- package/ts_build/src/ai.js +40 -1
- package/ts_build/src/ai.js.map +1 -1
- package/ts_build/src/chat/ChatCommandHandler.d.ts +36 -0
- package/ts_build/src/chat/ChatCommandHandler.js +268 -0
- package/ts_build/src/chat/ChatCommandHandler.js.map +1 -0
- package/ts_build/src/chat/ChatInputManager.d.ts +22 -0
- package/ts_build/src/chat/ChatInputManager.js +85 -0
- package/ts_build/src/chat/ChatInputManager.js.map +1 -0
- package/ts_build/src/chat/ChatManager.d.ts +49 -0
- package/ts_build/src/chat/ChatManager.js +271 -0
- package/ts_build/src/chat/ChatManager.js.map +1 -0
- package/ts_build/src/chat/ChatSession.d.ts +32 -0
- package/ts_build/src/chat/ChatSession.js +3 -0
- package/ts_build/src/chat/ChatSession.js.map +1 -0
- package/ts_build/src/chat/ChatSessionManager.d.ts +19 -0
- package/ts_build/src/chat/ChatSessionManager.js +188 -0
- package/ts_build/src/chat/ChatSessionManager.js.map +1 -0
- package/ts_build/src/chat/ChatStateManager.d.ts +58 -0
- package/ts_build/src/chat/ChatStateManager.js +156 -0
- package/ts_build/src/chat/ChatStateManager.js.map +1 -0
- package/ts_build/src/chat/CliChatService.d.ts +35 -0
- package/ts_build/src/chat/CliChatService.js +201 -0
- package/ts_build/src/chat/CliChatService.js.map +1 -0
- package/ts_build/src/chat/InterruptibleInput.d.ts +20 -0
- package/ts_build/src/chat/InterruptibleInput.js +109 -0
- package/ts_build/src/chat/InterruptibleInput.js.map +1 -0
- package/ts_build/src/chat/interfaces/ChatModule.d.ts +6 -0
- package/ts_build/src/chat/interfaces/ChatModule.js +3 -0
- package/ts_build/src/chat/interfaces/ChatModule.js.map +1 -0
- package/ts_build/src/chat/modules/AgentModule.d.ts +57 -0
- package/ts_build/src/chat/modules/AgentModule.js +709 -0
- package/ts_build/src/chat/modules/AgentModule.js.map +1 -0
- package/ts_build/src/chat/modules/AskModule.d.ts +10 -0
- package/ts_build/src/chat/modules/AskModule.js +63 -0
- package/ts_build/src/chat/modules/AskModule.js.map +1 -0
- package/ts_build/src/chat/modules/BaseChatModule.d.ts +14 -0
- package/ts_build/src/chat/modules/BaseChatModule.js +32 -0
- package/ts_build/src/chat/modules/BaseChatModule.js.map +1 -0
- package/ts_build/src/chat/modules/InternalChatModule.d.ts +24 -0
- package/ts_build/src/chat/modules/InternalChatModule.js +127 -0
- package/ts_build/src/chat/modules/InternalChatModule.js.map +1 -0
- package/ts_build/src/chat/modules/SearchModule.d.ts +12 -0
- package/ts_build/src/chat/modules/SearchModule.js +119 -0
- package/ts_build/src/chat/modules/SearchModule.js.map +1 -0
- package/ts_build/src/chat/modules/SetupModule.d.ts +15 -0
- package/ts_build/src/chat/modules/SetupModule.js +147 -0
- package/ts_build/src/chat/modules/SetupModule.js.map +1 -0
- package/ts_build/src/chat/modules/SystemModule.d.ts +14 -0
- package/ts_build/src/chat/modules/SystemModule.js +90 -0
- package/ts_build/src/chat/modules/SystemModule.js.map +1 -0
- package/ts_build/src/chat/modules/VoiceModule.d.ts +11 -0
- package/ts_build/src/chat/modules/VoiceModule.js +57 -0
- package/ts_build/src/chat/modules/VoiceModule.js.map +1 -0
- package/ts_build/src/chat/types.d.ts +83 -0
- package/ts_build/src/chat/types.js +3 -0
- package/ts_build/src/chat/types.js.map +1 -0
- package/ts_build/src/chat.js +7 -1
- package/ts_build/src/chat.js.map +1 -1
- package/ts_build/src/chat2.d.ts +3 -0
- package/ts_build/src/chat2.js +47 -0
- package/ts_build/src/chat2.js.map +1 -0
- package/ts_build/src/cli.js +218 -37
- package/ts_build/src/cli.js.map +1 -1
- package/ts_build/src/clients/anthropic.d.ts +5 -2
- package/ts_build/src/clients/anthropic.js +12 -7
- package/ts_build/src/clients/anthropic.js.map +1 -1
- package/ts_build/src/clients/gemini.d.ts +6 -3
- package/ts_build/src/clients/gemini.js +13 -7
- package/ts_build/src/clients/gemini.js.map +1 -1
- package/ts_build/src/clients/http.d.ts +1 -0
- package/ts_build/src/clients/http.js +12 -5
- package/ts_build/src/clients/http.js.map +1 -1
- package/ts_build/src/clients/index.d.ts +10 -0
- package/ts_build/src/clients/index.js +74 -4
- package/ts_build/src/clients/index.js.map +1 -1
- package/ts_build/src/clients/knowhow.d.ts +3 -1
- package/ts_build/src/clients/knowhow.js +8 -2
- package/ts_build/src/clients/knowhow.js.map +1 -1
- package/ts_build/src/clients/knowhowMcp.d.ts +20 -0
- package/ts_build/src/clients/knowhowMcp.js +86 -0
- package/ts_build/src/clients/knowhowMcp.js.map +1 -0
- package/ts_build/src/clients/openai.d.ts +5 -2
- package/ts_build/src/clients/openai.js +29 -8
- package/ts_build/src/clients/openai.js.map +1 -1
- package/ts_build/src/clients/types.d.ts +1 -0
- package/ts_build/src/clients/xai.d.ts +5 -2
- package/ts_build/src/clients/xai.js +15 -5
- package/ts_build/src/clients/xai.js.map +1 -1
- package/ts_build/src/config.js +24 -3
- package/ts_build/src/config.js.map +1 -1
- package/ts_build/src/conversion.js +6 -4
- package/ts_build/src/conversion.js.map +1 -1
- package/ts_build/src/login.d.ts +1 -1
- package/ts_build/src/login.js +21 -7
- package/ts_build/src/login.js.map +1 -1
- package/ts_build/src/microphone.js.map +1 -1
- package/ts_build/src/plugins/downloader/downloader.d.ts +7 -5
- package/ts_build/src/plugins/downloader/downloader.js +147 -44
- package/ts_build/src/plugins/downloader/downloader.js.map +1 -1
- package/ts_build/src/plugins/downloader/plugin.js +5 -3
- package/ts_build/src/plugins/downloader/plugin.js.map +1 -1
- package/ts_build/src/plugins/plugins.js +3 -0
- package/ts_build/src/plugins/plugins.js.map +1 -1
- package/ts_build/src/processors/CustomVariables.d.ts +32 -0
- package/ts_build/src/processors/CustomVariables.js +297 -0
- package/ts_build/src/processors/CustomVariables.js.map +1 -0
- package/ts_build/src/processors/HarmonyToolProcessor.d.ts +15 -0
- package/ts_build/src/processors/HarmonyToolProcessor.js +154 -0
- package/ts_build/src/processors/HarmonyToolProcessor.js.map +1 -0
- package/ts_build/src/processors/XmlToolCallProcessor.d.ts +14 -0
- package/ts_build/src/processors/XmlToolCallProcessor.js +357 -0
- package/ts_build/src/processors/XmlToolCallProcessor.js.map +1 -0
- package/ts_build/src/processors/index.d.ts +3 -0
- package/ts_build/src/processors/index.js +7 -1
- package/ts_build/src/processors/index.js.map +1 -1
- package/ts_build/src/prompts/KnowhowConfigExamples.d.ts +2 -0
- package/ts_build/src/prompts/KnowhowConfigExamples.js +379 -0
- package/ts_build/src/prompts/KnowhowConfigExamples.js.map +1 -0
- package/ts_build/src/services/KnowhowClient.d.ts +22 -0
- package/ts_build/src/services/KnowhowClient.js +14 -2
- package/ts_build/src/services/KnowhowClient.js.map +1 -1
- package/ts_build/src/services/Mcp.d.ts +1 -0
- package/ts_build/src/services/Mcp.js +20 -3
- package/ts_build/src/services/Mcp.js.map +1 -1
- package/ts_build/src/services/McpServer.d.ts +1 -1
- package/ts_build/src/services/McpServer.js +8 -4
- package/ts_build/src/services/McpServer.js.map +1 -1
- package/ts_build/src/services/McpWebsocketTransport.js +17 -7
- package/ts_build/src/services/McpWebsocketTransport.js.map +1 -1
- package/ts_build/src/services/MessageProcessor.d.ts +1 -1
- package/ts_build/src/services/MessageProcessor.js +4 -4
- package/ts_build/src/services/MessageProcessor.js.map +1 -1
- package/ts_build/src/services/index.d.ts +2 -0
- package/ts_build/src/services/index.js +4 -0
- package/ts_build/src/services/index.js.map +1 -1
- package/ts_build/src/services/script-execution/ScriptExecutor.d.ts +1 -0
- package/ts_build/src/services/script-execution/ScriptExecutor.js +23 -0
- package/ts_build/src/services/script-execution/ScriptExecutor.js.map +1 -1
- package/ts_build/src/services/types.d.ts +2 -6
- package/ts_build/src/services/types.js +4 -4
- package/ts_build/src/services/types.js.map +1 -1
- package/ts_build/src/types.d.ts +11 -0
- package/ts_build/src/types.js +8 -0
- package/ts_build/src/types.js.map +1 -1
- package/ts_build/src/utils/index.d.ts +2 -0
- package/ts_build/src/utils/index.js +102 -1
- package/ts_build/src/utils/index.js.map +1 -1
- package/ts_build/tests/XmlToolCallProcessor.test.d.ts +1 -0
- package/ts_build/tests/XmlToolCallProcessor.test.js +376 -0
- package/ts_build/tests/XmlToolCallProcessor.test.js.map +1 -0
- package/ts_build/tests/manual/ycmd/debug_diagnostics_test.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js +114 -0
- package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js.map +1 -0
- package/ts_build/tests/manual/ycmd/minimal_advanced_test.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/minimal_advanced_test.js +104 -0
- package/ts_build/tests/manual/ycmd/minimal_advanced_test.js.map +1 -0
- package/ts_build/tests/manual/ycmd/simple_diagnostics_test.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js +74 -0
- package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js.map +1 -0
- package/ts_build/tests/manual/ycmd/simple_test.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/simple_test.js +82 -0
- package/ts_build/tests/manual/ycmd/simple_test.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test-typescript-sample.d.ts +14 -0
- package/ts_build/tests/manual/ycmd/test-typescript-sample.js +20 -0
- package/ts_build/tests/manual/ycmd/test-typescript-sample.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_advanced_features.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_advanced_features.js +297 -0
- package/ts_build/tests/manual/ycmd/test_advanced_features.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_advanced_with_tools.d.ts +3 -0
- package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js +262 -0
- package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js +186 -0
- package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js +174 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_fix.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js +106 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_simple.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js +104 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_timing.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js +119 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_discover_commands.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_discover_commands.js +243 -0
- package/ts_build/tests/manual/ycmd/test_discover_commands.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_endpoints.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_endpoints.js +120 -0
- package/ts_build/tests/manual/ycmd/test_endpoints.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_final_comprehensive.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_final_comprehensive.js +221 -0
- package/ts_build/tests/manual/ycmd/test_final_comprehensive.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_final_validation.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_final_validation.js +160 -0
- package/ts_build/tests/manual/ycmd/test_final_validation.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js +37 -0
- package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_server_manager.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_server_manager.js +38 -0
- package/ts_build/tests/manual/ycmd/test_server_manager.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_simple_debug.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_simple_debug.js +99 -0
- package/ts_build/tests/manual/ycmd/test_simple_debug.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_tsserver_workflow.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js +128 -0
- package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_typescript_simple.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_typescript_simple.js +66 -0
- package/ts_build/tests/manual/ycmd/test_typescript_simple.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_typescript_ycmd.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js +105 -0
- package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_workspace_config.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_workspace_config.js +89 -0
- package/ts_build/tests/manual/ycmd/test_workspace_config.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js +130 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js +83 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_direct.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_direct.js +149 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_direct.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_experiment.d.ts +15 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js +58 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_final.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_final.js +195 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_final.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_integration.d.ts +3 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_integration.js +110 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_integration.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_simple.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_simple.js +36 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_simple.js.map +1 -0
- package/ts_build/tests/manual/ycmd/working_simple_test.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/working_simple_test.js +134 -0
- package/ts_build/tests/manual/ycmd/working_simple_test.js.map +1 -0
- package/tsconfig.json +3 -1
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useState, useEffect } from "react";
|
|
4
|
+
import { useParams, useRouter } from "next/navigation";
|
|
5
|
+
import { BenchmarkResults, ExerciseResult } from "@/types/benchmark";
|
|
6
|
+
import { formatCurrency, formatTime } from "@/utils/dataProcessor";
|
|
7
|
+
|
|
8
|
+
export default function ExerciseDetailPage() {
|
|
9
|
+
const params = useParams();
|
|
10
|
+
const router = useRouter();
|
|
11
|
+
const [benchmarkData, setBenchmarkData] = useState<BenchmarkResults | null>(
|
|
12
|
+
null
|
|
13
|
+
);
|
|
14
|
+
const [exerciseData, setExerciseData] = useState<ExerciseResult | null>(null);
|
|
15
|
+
const [loading, setLoading] = useState(true);
|
|
16
|
+
const [error, setError] = useState<string | null>(null);
|
|
17
|
+
|
|
18
|
+
const model = decodeURIComponent(params.model as string);
|
|
19
|
+
const provider = decodeURIComponent(params.provider as string);
|
|
20
|
+
const language = decodeURIComponent(params.language as string);
|
|
21
|
+
const exerciseName = decodeURIComponent(params.exercise as string);
|
|
22
|
+
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
async function fetchExerciseData() {
|
|
25
|
+
try {
|
|
26
|
+
// First fetch the benchmark data
|
|
27
|
+
const response = await fetch(
|
|
28
|
+
`/api/benchmark-detail?model=${encodeURIComponent(
|
|
29
|
+
model
|
|
30
|
+
)}&provider=${encodeURIComponent(
|
|
31
|
+
provider
|
|
32
|
+
)}&language=${encodeURIComponent(language)}`
|
|
33
|
+
);
|
|
34
|
+
if (!response.ok) {
|
|
35
|
+
throw new Error("Failed to fetch benchmark details");
|
|
36
|
+
}
|
|
37
|
+
const data = await response.json();
|
|
38
|
+
setBenchmarkData(data.latest);
|
|
39
|
+
|
|
40
|
+
// Find the specific exercise
|
|
41
|
+
const exercise = data.latest.exercises.find(
|
|
42
|
+
(ex: ExerciseResult) => ex.exerciseName === exerciseName
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
if (!exercise) {
|
|
46
|
+
throw new Error(`Exercise "${exerciseName}" not found`);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
setExerciseData(exercise);
|
|
50
|
+
} catch (err) {
|
|
51
|
+
setError(err instanceof Error ? err.message : "An error occurred");
|
|
52
|
+
} finally {
|
|
53
|
+
setLoading(false);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
fetchExerciseData();
|
|
58
|
+
}, [model, provider, language, exerciseName]);
|
|
59
|
+
|
|
60
|
+
const getStatusBadge = (passed: boolean) => {
|
|
61
|
+
const baseClasses = "px-2 py-1 text-xs font-medium rounded-full";
|
|
62
|
+
return passed
|
|
63
|
+
? `${baseClasses} bg-green-100 text-green-800`
|
|
64
|
+
: `${baseClasses} bg-red-100 text-red-800`;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
const getStatusIcon = (passed: boolean) => {
|
|
68
|
+
return passed ? "✅" : "❌";
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
if (loading) {
|
|
72
|
+
return (
|
|
73
|
+
<div className="min-h-screen bg-gray-50 flex items-center justify-center">
|
|
74
|
+
<div className="text-center">
|
|
75
|
+
<div className="animate-spin rounded-full h-32 w-32 border-b-2 border-blue-500 mx-auto"></div>
|
|
76
|
+
<p className="mt-4 text-gray-600">Loading exercise details...</p>
|
|
77
|
+
</div>
|
|
78
|
+
</div>
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
if (error || !exerciseData || !benchmarkData) {
|
|
83
|
+
return (
|
|
84
|
+
<div className="min-h-screen bg-gray-50 flex items-center justify-center">
|
|
85
|
+
<div className="text-center">
|
|
86
|
+
<div className="text-red-500 text-6xl mb-4">⚠️</div>
|
|
87
|
+
<h3 className="text-lg font-medium text-gray-900 mb-2">
|
|
88
|
+
Error Loading Exercise Details
|
|
89
|
+
</h3>
|
|
90
|
+
<p className="text-gray-500 mb-4">
|
|
91
|
+
{error || "Exercise data not found"}
|
|
92
|
+
</p>
|
|
93
|
+
<button
|
|
94
|
+
onClick={() => router.back()}
|
|
95
|
+
className="bg-blue-500 hover:bg-blue-600 text-white px-4 py-2 rounded-md"
|
|
96
|
+
>
|
|
97
|
+
Go Back
|
|
98
|
+
</button>
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return (
|
|
105
|
+
<div className="min-h-screen bg-gray-50">
|
|
106
|
+
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
|
107
|
+
{/* Header */}
|
|
108
|
+
<div className="mb-8">
|
|
109
|
+
<button
|
|
110
|
+
onClick={() =>
|
|
111
|
+
router.push(
|
|
112
|
+
`/details/${encodeURIComponent(model)}/${encodeURIComponent(
|
|
113
|
+
provider
|
|
114
|
+
)}/${encodeURIComponent(language)}`
|
|
115
|
+
)
|
|
116
|
+
}
|
|
117
|
+
className="mb-4 text-blue-600 hover:text-blue-800 flex items-center"
|
|
118
|
+
>
|
|
119
|
+
← Back to Benchmark Details
|
|
120
|
+
</button>
|
|
121
|
+
<h1 className="text-3xl font-bold text-gray-900">
|
|
122
|
+
Exercise: {exerciseName}
|
|
123
|
+
</h1>
|
|
124
|
+
<p className="mt-2 text-gray-600">
|
|
125
|
+
Model: {model} • Provider: {provider} • Language: {language}
|
|
126
|
+
</p>
|
|
127
|
+
</div>
|
|
128
|
+
|
|
129
|
+
{/* Exercise Summary */}
|
|
130
|
+
<div className="grid grid-cols-1 md:grid-cols-4 gap-6 mb-8">
|
|
131
|
+
<div className="bg-white p-6 rounded-lg shadow-sm border border-gray-200">
|
|
132
|
+
<div className="flex items-center">
|
|
133
|
+
<div className="flex-shrink-0">
|
|
134
|
+
<div
|
|
135
|
+
className={`w-8 h-8 rounded-md flex items-center justify-center ${
|
|
136
|
+
exerciseData.testResult?.success
|
|
137
|
+
? "bg-green-500"
|
|
138
|
+
: "bg-red-500"
|
|
139
|
+
}`}
|
|
140
|
+
>
|
|
141
|
+
<span className="text-white font-bold">
|
|
142
|
+
{exerciseData.testResult?.success ? "✓" : "✗"}
|
|
143
|
+
</span>
|
|
144
|
+
</div>
|
|
145
|
+
</div>
|
|
146
|
+
<div className="ml-4">
|
|
147
|
+
<p className="text-sm font-medium text-gray-500">
|
|
148
|
+
Overall Status
|
|
149
|
+
</p>
|
|
150
|
+
<p className="text-2xl font-semibold text-gray-900">
|
|
151
|
+
{exerciseData.testResult?.success ? "Pass" : "Fail"}
|
|
152
|
+
</p>
|
|
153
|
+
</div>
|
|
154
|
+
</div>
|
|
155
|
+
</div>
|
|
156
|
+
|
|
157
|
+
<div className="bg-white p-6 rounded-lg shadow-sm border border-gray-200">
|
|
158
|
+
<div className="flex items-center">
|
|
159
|
+
<div className="flex-shrink-0">
|
|
160
|
+
<div className="w-8 h-8 bg-blue-500 rounded-md flex items-center justify-center">
|
|
161
|
+
<span className="text-white font-bold">T</span>
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
<div className="ml-4">
|
|
165
|
+
<p className="text-sm font-medium text-gray-500">
|
|
166
|
+
Tests Passed
|
|
167
|
+
</p>
|
|
168
|
+
<p className="text-2xl font-semibold text-gray-900">
|
|
169
|
+
{exerciseData.testResult?.passed || 0} /{" "}
|
|
170
|
+
{exerciseData.testResult?.total || 0}
|
|
171
|
+
</p>
|
|
172
|
+
</div>
|
|
173
|
+
</div>
|
|
174
|
+
</div>
|
|
175
|
+
|
|
176
|
+
<div className="bg-white p-6 rounded-lg shadow-sm border border-gray-200">
|
|
177
|
+
<div className="flex items-center">
|
|
178
|
+
<div className="flex-shrink-0">
|
|
179
|
+
<div className="w-8 h-8 bg-purple-500 rounded-md flex items-center justify-center">
|
|
180
|
+
<span className="text-white font-bold">$</span>
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
<div className="ml-4">
|
|
184
|
+
<p className="text-sm font-medium text-gray-500">Cost</p>
|
|
185
|
+
<p className="text-2xl font-semibold text-gray-900">
|
|
186
|
+
{formatCurrency(exerciseData.cost)}
|
|
187
|
+
</p>
|
|
188
|
+
</div>
|
|
189
|
+
</div>
|
|
190
|
+
</div>
|
|
191
|
+
|
|
192
|
+
<div className="bg-white p-6 rounded-lg shadow-sm border border-gray-200">
|
|
193
|
+
<div className="flex items-center">
|
|
194
|
+
<div className="flex-shrink-0">
|
|
195
|
+
<div className="w-8 h-8 bg-orange-500 rounded-md flex items-center justify-center">
|
|
196
|
+
<span className="text-white font-bold">⏱</span>
|
|
197
|
+
</div>
|
|
198
|
+
</div>
|
|
199
|
+
<div className="ml-4">
|
|
200
|
+
<p className="text-sm font-medium text-gray-500">Duration</p>
|
|
201
|
+
<p className="text-2xl font-semibold text-gray-900">
|
|
202
|
+
{formatTime(exerciseData.timeElapsed || 0)}
|
|
203
|
+
</p>
|
|
204
|
+
</div>
|
|
205
|
+
</div>
|
|
206
|
+
</div>
|
|
207
|
+
</div>
|
|
208
|
+
|
|
209
|
+
{/* Test Results Section */}
|
|
210
|
+
<div className="bg-white rounded-lg shadow-sm border border-gray-200 mb-8">
|
|
211
|
+
<div className="px-6 py-4 border-b border-gray-200">
|
|
212
|
+
<h2 className="text-lg font-semibold text-gray-900">
|
|
213
|
+
Test Results
|
|
214
|
+
</h2>
|
|
215
|
+
</div>
|
|
216
|
+
<div className="p-6">
|
|
217
|
+
{exerciseData.testResult ? (
|
|
218
|
+
<div className="space-y-6">
|
|
219
|
+
{/* Test Summary */}
|
|
220
|
+
<div className="grid grid-cols-2 md:grid-cols-4 gap-4">
|
|
221
|
+
<div className="bg-green-50 border border-green-200 rounded-lg p-4">
|
|
222
|
+
<div className="text-center">
|
|
223
|
+
<div className="text-2xl font-bold text-green-600">
|
|
224
|
+
{exerciseData.testResult.passed || 0}
|
|
225
|
+
</div>
|
|
226
|
+
<div className="text-sm text-green-700">Tests Passed</div>
|
|
227
|
+
</div>
|
|
228
|
+
</div>
|
|
229
|
+
<div className="bg-red-50 border border-red-200 rounded-lg p-4">
|
|
230
|
+
<div className="text-center">
|
|
231
|
+
<div className="text-2xl font-bold text-red-600">
|
|
232
|
+
{exerciseData.testResult.failed || 0}
|
|
233
|
+
</div>
|
|
234
|
+
<div className="text-sm text-red-700">Tests Failed</div>
|
|
235
|
+
</div>
|
|
236
|
+
</div>
|
|
237
|
+
<div className="bg-yellow-50 border border-yellow-200 rounded-lg p-4">
|
|
238
|
+
<div className="text-center">
|
|
239
|
+
<div className="text-2xl font-bold text-yellow-600">
|
|
240
|
+
{exerciseData.testResult.skipped || 0}
|
|
241
|
+
</div>
|
|
242
|
+
<div className="text-sm text-yellow-700">
|
|
243
|
+
Tests Skipped
|
|
244
|
+
</div>
|
|
245
|
+
</div>
|
|
246
|
+
</div>
|
|
247
|
+
<div className="bg-blue-50 border border-blue-200 rounded-lg p-4">
|
|
248
|
+
<div className="text-center">
|
|
249
|
+
<div className="text-2xl font-bold text-blue-600">
|
|
250
|
+
{exerciseData.testResult.total || 0}
|
|
251
|
+
</div>
|
|
252
|
+
<div className="text-sm text-blue-700">Total Tests</div>
|
|
253
|
+
</div>
|
|
254
|
+
</div>
|
|
255
|
+
</div>
|
|
256
|
+
|
|
257
|
+
{/* Output */}
|
|
258
|
+
{exerciseData.testResult.output && (
|
|
259
|
+
<div className="border border-gray-200 rounded-lg">
|
|
260
|
+
<div className="px-4 py-3 bg-gray-50 border-b border-gray-200 rounded-t-lg">
|
|
261
|
+
<h3 className="text-sm font-medium text-gray-900">
|
|
262
|
+
Test Output
|
|
263
|
+
</h3>
|
|
264
|
+
</div>
|
|
265
|
+
<div className="p-4">
|
|
266
|
+
<pre className="text-sm text-gray-800 whitespace-pre-wrap font-mono bg-gray-50 p-4 rounded border overflow-x-auto">
|
|
267
|
+
{(() => {
|
|
268
|
+
try {
|
|
269
|
+
const r = JSON.stringify(
|
|
270
|
+
typeof exerciseData.testResult.output === "string"
|
|
271
|
+
? JSON.parse(exerciseData.testResult.output)
|
|
272
|
+
: exerciseData.testResult.output,
|
|
273
|
+
null,
|
|
274
|
+
2
|
|
275
|
+
);
|
|
276
|
+
return r;
|
|
277
|
+
} catch (e) {
|
|
278
|
+
return exerciseData.testResult.output;
|
|
279
|
+
}
|
|
280
|
+
})()}
|
|
281
|
+
</pre>
|
|
282
|
+
</div>
|
|
283
|
+
</div>
|
|
284
|
+
)}
|
|
285
|
+
|
|
286
|
+
{/* Test Status Summary */}
|
|
287
|
+
<div className="bg-gray-50 border border-gray-200 rounded-lg p-4">
|
|
288
|
+
<div className="flex items-center justify-between">
|
|
289
|
+
<div>
|
|
290
|
+
<h3 className="text-lg font-medium text-gray-900">
|
|
291
|
+
Overall Test Result
|
|
292
|
+
</h3>
|
|
293
|
+
<p className="text-sm text-gray-600">
|
|
294
|
+
{exerciseData.testResult.success
|
|
295
|
+
? "All tests completed successfully"
|
|
296
|
+
: "Some tests failed or encountered errors"}
|
|
297
|
+
</p>
|
|
298
|
+
</div>
|
|
299
|
+
<div
|
|
300
|
+
className={`px-4 py-2 rounded-full text-sm font-medium ${
|
|
301
|
+
exerciseData.testResult.success
|
|
302
|
+
? "bg-green-100 text-green-800"
|
|
303
|
+
: "bg-red-100 text-red-800"
|
|
304
|
+
}`}
|
|
305
|
+
>
|
|
306
|
+
{exerciseData.testResult.success ? "PASSED" : "FAILED"}
|
|
307
|
+
</div>
|
|
308
|
+
</div>
|
|
309
|
+
</div>
|
|
310
|
+
</div>
|
|
311
|
+
) : (
|
|
312
|
+
<div className="text-center py-8">
|
|
313
|
+
<div className="text-gray-400 text-4xl mb-4">📋</div>
|
|
314
|
+
<p className="text-gray-500">
|
|
315
|
+
No detailed test results available
|
|
316
|
+
</p>
|
|
317
|
+
</div>
|
|
318
|
+
)}
|
|
319
|
+
</div>
|
|
320
|
+
</div>
|
|
321
|
+
|
|
322
|
+
{/* Exercise Metadata */}
|
|
323
|
+
<div className="bg-white rounded-lg shadow-sm border border-gray-200">
|
|
324
|
+
<div className="px-6 py-4 border-b border-gray-200">
|
|
325
|
+
<h2 className="text-lg font-semibold text-gray-900">
|
|
326
|
+
Exercise Information
|
|
327
|
+
</h2>
|
|
328
|
+
</div>
|
|
329
|
+
<div className="p-6">
|
|
330
|
+
<dl className="grid grid-cols-1 gap-x-4 gap-y-4 sm:grid-cols-2">
|
|
331
|
+
<div>
|
|
332
|
+
<dt className="text-sm font-medium text-gray-500">
|
|
333
|
+
Exercise Name
|
|
334
|
+
</dt>
|
|
335
|
+
<dd className="mt-1 text-sm text-gray-900">
|
|
336
|
+
{exerciseData.exerciseName}
|
|
337
|
+
</dd>
|
|
338
|
+
</div>
|
|
339
|
+
<div>
|
|
340
|
+
<dt className="text-sm font-medium text-gray-500">Cost</dt>
|
|
341
|
+
<dd className="mt-1 text-sm text-gray-900">
|
|
342
|
+
{formatCurrency(exerciseData.cost)}
|
|
343
|
+
</dd>
|
|
344
|
+
</div>
|
|
345
|
+
<div>
|
|
346
|
+
<dt className="text-sm font-medium text-gray-500">Duration</dt>
|
|
347
|
+
<dd className="mt-1 text-sm text-gray-900">
|
|
348
|
+
{formatTime(exerciseData.timeElapsed || 0)}
|
|
349
|
+
</dd>
|
|
350
|
+
</div>
|
|
351
|
+
<div>
|
|
352
|
+
<dt className="text-sm font-medium text-gray-500">
|
|
353
|
+
Success Rate
|
|
354
|
+
</dt>
|
|
355
|
+
<dd className="mt-1 text-sm text-gray-900">
|
|
356
|
+
{exerciseData.testResult && exerciseData.testResult.total > 0
|
|
357
|
+
? `${(
|
|
358
|
+
((exerciseData.testResult.passed || 0) /
|
|
359
|
+
exerciseData.testResult.total) *
|
|
360
|
+
100
|
|
361
|
+
).toFixed(1)}%`
|
|
362
|
+
: exerciseData.testResult?.success
|
|
363
|
+
? "100.0%"
|
|
364
|
+
: exerciseData.testResult?.success === false
|
|
365
|
+
? "0.0%"
|
|
366
|
+
: "N/A"}
|
|
367
|
+
</dd>
|
|
368
|
+
</div>
|
|
369
|
+
</dl>
|
|
370
|
+
</div>
|
|
371
|
+
</div>
|
|
372
|
+
</div>
|
|
373
|
+
</div>
|
|
374
|
+
);
|
|
375
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
@tailwind base;
|
|
2
|
+
@tailwind components;
|
|
3
|
+
@tailwind utilities;
|
|
4
|
+
|
|
5
|
+
:root {
|
|
6
|
+
--background: #ffffff;
|
|
7
|
+
--foreground: #171717;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
@media (prefers-color-scheme: dark) {
|
|
11
|
+
:root {
|
|
12
|
+
--background: #0a0a0a;
|
|
13
|
+
--foreground: #ededed;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
body {
|
|
18
|
+
color: var(--foreground);
|
|
19
|
+
background: var(--background);
|
|
20
|
+
font-family: Arial, Helvetica, sans-serif;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
@layer utilities {
|
|
24
|
+
.text-balance {
|
|
25
|
+
text-wrap: balance;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Metadata } from 'next'
|
|
2
|
+
import './globals.css'
|
|
3
|
+
|
|
4
|
+
export const metadata: Metadata = {
|
|
5
|
+
title: 'Benchmark Results Leaderboard',
|
|
6
|
+
description: 'Exercise results and model performance tracking',
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export default function RootLayout({
|
|
10
|
+
children,
|
|
11
|
+
}: {
|
|
12
|
+
children: React.ReactNode
|
|
13
|
+
}) {
|
|
14
|
+
return (
|
|
15
|
+
<html lang="en">
|
|
16
|
+
<body className="antialiased">
|
|
17
|
+
{children}
|
|
18
|
+
</body>
|
|
19
|
+
</html>
|
|
20
|
+
)
|
|
21
|
+
}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { useState, useEffect } from 'react';
|
|
4
|
+
import { loadLeaderboardData } from '@/utils/dataProcessor';
|
|
5
|
+
import LeaderboardTable from '@/components/LeaderboardTable';
|
|
6
|
+
import PerformanceChart from '@/components/PerformanceChart';
|
|
7
|
+
import { LeaderboardEntry } from '@/types/benchmark';
|
|
8
|
+
|
|
9
|
+
export default function Home() {
|
|
10
|
+
const [leaderboardEntries, setLeaderboardEntries] = useState<LeaderboardEntry[]>([]);
|
|
11
|
+
const [selectedLanguage, setSelectedLanguage] = useState<string>('all');
|
|
12
|
+
const [loading, setLoading] = useState(true);
|
|
13
|
+
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
async function fetchData() {
|
|
16
|
+
const data = await loadLeaderboardData();
|
|
17
|
+
setLeaderboardEntries(data);
|
|
18
|
+
setLoading(false);
|
|
19
|
+
}
|
|
20
|
+
fetchData();
|
|
21
|
+
}, []);
|
|
22
|
+
|
|
23
|
+
// Extract unique languages for dropdown
|
|
24
|
+
const availableLanguages = Array.from(new Set(leaderboardEntries.map(entry => entry.language))).sort();
|
|
25
|
+
|
|
26
|
+
// Filter entries by selected language
|
|
27
|
+
const filteredEntries = selectedLanguage === 'all'
|
|
28
|
+
? leaderboardEntries
|
|
29
|
+
: leaderboardEntries.filter(entry => entry.language === selectedLanguage);
|
|
30
|
+
|
|
31
|
+
// Update statistics to use filtered data
|
|
32
|
+
const totalModels = filteredEntries.length;
|
|
33
|
+
const totalExercises = filteredEntries.reduce((sum, entry) => sum + entry.totalExercises, 0);
|
|
34
|
+
const averageSuccessRate = filteredEntries.length > 0
|
|
35
|
+
? filteredEntries.reduce((sum, entry) => sum + entry.successRate, 0) / filteredEntries.length
|
|
36
|
+
: 0;
|
|
37
|
+
|
|
38
|
+
const handleLanguageChange = (language: string) => {
|
|
39
|
+
setSelectedLanguage(language);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
if (loading) {
|
|
43
|
+
return (
|
|
44
|
+
<div className="min-h-screen bg-gray-50 flex items-center justify-center">
|
|
45
|
+
<div className="text-center">
|
|
46
|
+
<div className="animate-spin rounded-full h-32 w-32 border-b-2 border-blue-500 mx-auto"></div>
|
|
47
|
+
<p className="mt-4 text-gray-600">Loading benchmark results...</p>
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return (
|
|
54
|
+
<div className="min-h-screen bg-gray-50">
|
|
55
|
+
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
|
56
|
+
{/* Header */}
|
|
57
|
+
<div className="mb-8">
|
|
58
|
+
<h1 className="text-3xl font-bold text-gray-900">Benchmark Results Leaderboard</h1>
|
|
59
|
+
<p className="mt-2 text-gray-600">
|
|
60
|
+
Track and compare model performance across coding exercises
|
|
61
|
+
</p>
|
|
62
|
+
|
|
63
|
+
{/* Language Filter Dropdown */}
|
|
64
|
+
{availableLanguages.length > 1 && (
|
|
65
|
+
<div className="mt-4">
|
|
66
|
+
<label htmlFor="language-select" className="block text-sm font-medium text-gray-700 mb-2">
|
|
67
|
+
Filter by Language:
|
|
68
|
+
</label>
|
|
69
|
+
<select
|
|
70
|
+
id="language-select"
|
|
71
|
+
value={selectedLanguage}
|
|
72
|
+
onChange={(e) => handleLanguageChange(e.target.value)}
|
|
73
|
+
className="block w-48 px-3 py-2 border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 sm:text-sm"
|
|
74
|
+
>
|
|
75
|
+
<option value="all">All Languages</option>
|
|
76
|
+
{availableLanguages.map((language) => (
|
|
77
|
+
<option key={language} value={language}>
|
|
78
|
+
{language.charAt(0).toUpperCase() + language.slice(1)}
|
|
79
|
+
</option>
|
|
80
|
+
))}
|
|
81
|
+
</select>
|
|
82
|
+
</div>
|
|
83
|
+
)}
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
{/* Summary Stats */}
|
|
87
|
+
<div className="grid grid-cols-1 md:grid-cols-3 gap-6 mb-8">
|
|
88
|
+
<div className="bg-white p-6 rounded-lg shadow-sm border border-gray-200">
|
|
89
|
+
<div className="flex items-center">
|
|
90
|
+
<div className="flex-shrink-0">
|
|
91
|
+
<div className="w-8 h-8 bg-blue-500 rounded-md flex items-center justify-center">
|
|
92
|
+
<span className="text-white font-bold">M</span>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
<div className="ml-4">
|
|
96
|
+
<p className="text-sm font-medium text-gray-500">Total Models</p>
|
|
97
|
+
<p className="text-2xl font-semibold text-gray-900">{totalModels}</p>
|
|
98
|
+
</div>
|
|
99
|
+
</div>
|
|
100
|
+
</div>
|
|
101
|
+
|
|
102
|
+
<div className="bg-white p-6 rounded-lg shadow-sm border border-gray-200">
|
|
103
|
+
<div className="flex items-center">
|
|
104
|
+
<div className="flex-shrink-0">
|
|
105
|
+
<div className="w-8 h-8 bg-green-500 rounded-md flex items-center justify-center">
|
|
106
|
+
<span className="text-white font-bold">E</span>
|
|
107
|
+
</div>
|
|
108
|
+
</div>
|
|
109
|
+
<div className="ml-4">
|
|
110
|
+
<p className="text-sm font-medium text-gray-500">Total Exercises</p>
|
|
111
|
+
<p className="text-2xl font-semibold text-gray-900">{totalExercises}</p>
|
|
112
|
+
</div>
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
|
|
116
|
+
<div className="bg-white p-6 rounded-lg shadow-sm border border-gray-200">
|
|
117
|
+
<div className="flex items-center">
|
|
118
|
+
<div className="flex-shrink-0">
|
|
119
|
+
<div className="w-8 h-8 bg-yellow-500 rounded-md flex items-center justify-center">
|
|
120
|
+
<span className="text-white font-bold">%</span>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
<div className="ml-4">
|
|
124
|
+
<p className="text-sm font-medium text-gray-500">Average Success Rate</p>
|
|
125
|
+
<p className="text-2xl font-semibold text-gray-900">{averageSuccessRate.toFixed(1)}%</p>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
</div>
|
|
129
|
+
</div>
|
|
130
|
+
|
|
131
|
+
{/* Charts */}
|
|
132
|
+
{filteredEntries.length > 0 && (
|
|
133
|
+
<div className="grid grid-cols-1 lg:grid-cols-2 gap-8 mb-8">
|
|
134
|
+
<PerformanceChart entries={filteredEntries} chartType="success-rate" selectedLanguage={selectedLanguage} />
|
|
135
|
+
<PerformanceChart entries={filteredEntries} chartType="cost-vs-performance" selectedLanguage={selectedLanguage} />
|
|
136
|
+
</div>
|
|
137
|
+
)}
|
|
138
|
+
|
|
139
|
+
{/* Leaderboard Table */}
|
|
140
|
+
<div className="bg-white rounded-lg shadow-sm border border-gray-200">
|
|
141
|
+
<div className="px-6 py-4 border-b border-gray-200">
|
|
142
|
+
<h2 className="text-xl font-semibold text-gray-900">Leaderboard</h2>
|
|
143
|
+
<p className="mt-1 text-sm text-gray-500">
|
|
144
|
+
Compare model performance across all benchmark runs
|
|
145
|
+
</p>
|
|
146
|
+
</div>
|
|
147
|
+
<div className="p-6">
|
|
148
|
+
{filteredEntries.length > 0 ? (
|
|
149
|
+
<LeaderboardTable entries={filteredEntries} showLanguageColumn={selectedLanguage === 'all'} />
|
|
150
|
+
) : (
|
|
151
|
+
<div className="text-center py-12">
|
|
152
|
+
<div className="text-gray-400 text-6xl mb-4">📊</div>
|
|
153
|
+
<h3 className="text-lg font-medium text-gray-900 mb-2">No benchmark results found</h3>
|
|
154
|
+
<p className="text-gray-500">
|
|
155
|
+
Run some benchmarks to see results here. Results should be placed in the
|
|
156
|
+
<code className="bg-gray-100 px-2 py-1 rounded text-sm mx-1">benchmarks/results</code> directory.
|
|
157
|
+
</p>
|
|
158
|
+
</div>
|
|
159
|
+
)}
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
|
|
163
|
+
{/* Footer */}
|
|
164
|
+
<div className="mt-8 text-center text-sm text-gray-500">
|
|
165
|
+
<p>Last updated: {new Date().toLocaleString()}</p>
|
|
166
|
+
</div>
|
|
167
|
+
</div>
|
|
168
|
+
</div>
|
|
169
|
+
);
|
|
170
|
+
}
|