Are we tiny?#
gptme is intended to be small and simple, and focus on doing the right thing in the right way, rather than all the things in all the ways.
The benefits of this approach are many:
It is easier to understand and maintain.
It is easier to contribute to.
It is easier to learn.
It is easier to extend.
It is more fun to work on.
Being aggressive about keeping things small and simple is a way to keep the project maintainable and fun to work on. The fastest way to kill a project is to make it too big and complex, and suffer burnout as a result.
Another major benefit of keeping things small and simple is that it makes it easier for AI to understand and work with the codebase. This is a major goal of the project, and it is important to keep in mind that the simpler the codebase is, the easier it will be for AI to work with it:
“The simpler your API is, the more effectively the AI can harness it when generating code.”
—Kenneth Reitz (and many others)
To that end, in this document we will present some statistics about the current state of the project, trying to be mindful to keep an eye on this page and make sure we are not growing too much.
Startup time#
$ make bench-import
make[2]: Entering directory '/home/runner/work/gptme/gptme'
Benchmarking import time for gptme
time poetry run python -X importtime -m gptme --model openai --non-interactive 2>&1 | grep "import time" | cut -d'|' -f 2- | sort -n | tail -n 10
170854 | gptme.tools._browser_playwright
195875 | gptme.config
203205 | gptme.llm
239840 | mcp.client.session
266824 | gptme.commands
301309 | gptme.chat
364245 | mcp
364272 | mcp.types
380309 | gptme.tools.mcp_adapter
1334853 | gptme.cli.main
real 0m2.059s
user 0m1.784s
sys 0m0.203s
make[2]: Leaving directory '/home/runner/work/gptme/gptme'
$ make bench-startup
make[2]: Entering directory '/home/runner/work/gptme/gptme'
Benchmarking startup time for gptme
hyperfine "poetry run gptme '/exit'" -M 5 || poetry run gptme '/exit' || exit 1
Benchmark 1: poetry run gptme '/exit'
Time (mean ± σ): 2.606 s ± 0.238 s [User: 2.278 s, System: 0.578 s]
Range (min … max): 2.443 s … 3.015 s 5 runs
make[2]: Leaving directory '/home/runner/work/gptme/gptme'
Lines of code#
LoC Core#
$ make cloc-core
make[2]: Entering directory '/home/runner/work/gptme/gptme'
cloc gptme/*.py gptme/llm/*.py gptme/util/*.py gptme/tools/base.py gptme/tools/__init__.py gptme/hooks/__init__.py gptme/plugins/__init__.py gptme/lessons/*.py --by-file --hide-rate --quiet | tail -n +2
-----------------------------------------------------------------------------------------------
File blank comment code
-----------------------------------------------------------------------------------------------
gptme/llm/llm_openai.py 264 276 1257
gptme/util/gh.py 217 245 1161
gptme/llm/llm_anthropic.py 199 256 835
gptme/util/context.py 140 207 593
gptme/tools/base.py 139 185 574
gptme/lessons/installer.py 146 165 495
gptme/llm/__init__.py 111 145 491
gptme/llm/llm_openai_subscription.py 123 92 476
gptme/chat.py 72 97 422
gptme/util/prompt.py 102 151 410
gptme/message.py 96 131 389
gptme/util/_telemetry.py 106 136 370
gptme/telemetry.py 86 54 342
gptme/checkpoint.py 79 49 320
gptme/util/cost_display.py 61 58 298
gptme/info.py 84 70 293
gptme/tools/__init__.py 89 71 273
gptme/llm/openai_responses.py 63 10 269
gptme/plugins/__init__.py 85 119 256
gptme/llm/llm_openai_models.py 6 33 248
gptme/codeblock.py 37 143 247
gptme/lessons/index.py 90 133 235
gptme/profiles.py 64 67 233
gptme/util/auto_naming.py 68 78 224
gptme/lessons/parser.py 73 117 221
gptme/lessons/hybrid_matcher.py 85 112 218
gptme/util/_sound_sounddevice.py 57 50 218
gptme/lessons/commands.py 91 48 213
gptme/workspace_snapshot.py 37 41 207
gptme/util/sound.py 65 72 200
gptme/hooks/__init__.py 20 42 194
gptme/llm/validate.py 30 29 174
gptme/llm/utils.py 56 84 159
gptme/util/__init__.py 34 29 155
gptme/util/reduce.py 45 45 155
gptme/init.py 33 39 153
gptme/llm/llm_openai_models_deprecated.py 5 13 151
gptme/util/tool_format.py 48 75 151
gptme/util/clipboard.py 22 12 147
gptme/lessons/auto_include.py 50 59 136
gptme/llm/llm_gptme.py 47 58 127
gptme/util/export.py 26 29 111
gptme/util/cost_tracker.py 43 62 109
gptme/dirs.py 45 35 107
gptme/lessons/matcher.py 35 47 103
gptme/util/ask_execute.py 25 40 89
gptme/util/tree.py 21 15 87
gptme/util/git_worktree.py 25 33 83
gptme/__version__.py 17 5 82
gptme/util/context_savings.py 20 6 77
gptme/prompt_queue.py 30 5 73
gptme/util/output_storage.py 29 37 71
gptme/llm/llm_anthropic_models_deprecated.py 5 11 70
gptme/session.py 39 64 70
gptme/util/generate_name.py 5 6 69
gptme/util/master_context.py 28 38 66
gptme/util/_sound_cmd.py 22 17 62
gptme/util/tokens.py 20 20 60
gptme/util/uri.py 29 42 59
gptme/credentials.py 16 7 53
gptme/util/context_dedup.py 41 93 53
gptme/util/terminal.py 28 23 53
gptme/llm/provider_plugins.py 39 35 48
gptme/util/cost.py 12 9 47
gptme/util/file_storage.py 30 47 40
gptme/util/keyword_matching.py 35 66 39
gptme/util/content.py 18 24 30
gptme/util/install.py 13 25 30
gptme/constants.py 19 25 27
gptme/util/useredit.py 11 13 26
gptme/executor.py 18 26 24
gptme/util/interrupt.py 13 15 23
gptme/__init__.py 6 0 22
gptme/lessons/__init__.py 7 15 18
gptme/__main__.py 2 0 12
gptme/llm/constants.py 2 6 5
-----------------------------------------------------------------------------------------------
SUM: 4099 4837 15688
-----------------------------------------------------------------------------------------------
make[2]: Leaving directory '/home/runner/work/gptme/gptme'
LoC LLM#
$ make cloc-llm
make[2]: Entering directory '/home/runner/work/gptme/gptme'
cloc gptme/llm/*.py --by-file --hide-rate --quiet | tail -n +2
-----------------------------------------------------------------------------------------------
File blank comment code
-----------------------------------------------------------------------------------------------
gptme/llm/llm_openai.py 264 276 1257
gptme/llm/llm_anthropic.py 199 256 835
gptme/llm/__init__.py 111 145 491
gptme/llm/llm_openai_subscription.py 123 92 476
gptme/llm/openai_responses.py 63 10 269
gptme/llm/llm_openai_models.py 6 33 248
gptme/llm/validate.py 30 29 174
gptme/llm/utils.py 56 84 159
gptme/llm/llm_openai_models_deprecated.py 5 13 151
gptme/llm/llm_gptme.py 47 58 127
gptme/llm/llm_anthropic_models_deprecated.py 5 11 70
gptme/llm/provider_plugins.py 39 35 48
gptme/llm/constants.py 2 6 5
-----------------------------------------------------------------------------------------------
SUM: 950 1048 4310
-----------------------------------------------------------------------------------------------
make[2]: Leaving directory '/home/runner/work/gptme/gptme'
LoC Tools#
$ make cloc-tools
make[2]: Entering directory '/home/runner/work/gptme/gptme'
cloc gptme/tools/*.py gptme/hooks/*.py gptme/plugins/*.py --by-file --hide-rate --quiet | tail -n +2
------------------------------------------------------------------------------------------
File blank comment code
------------------------------------------------------------------------------------------
gptme/tools/shell.py 248 327 1333
gptme/hooks/workspace_agents.py 187 125 887
gptme/tools/mcp_adapter.py 209 215 612
gptme/tools/browser.py 187 263 596
gptme/tools/computer.py 167 225 591
gptme/tools/base.py 139 185 574
gptme/tools/gh.py 116 127 523
gptme/tools/_browser_playwright.py 140 105 518
gptme/tools/computer_transport.py 119 75 463
gptme/tools/chats.py 85 101 385
gptme/tools/tmux.py 95 171 384
gptme/hooks/registry.py 88 78 381
gptme/tools/mcp.py 102 102 337
gptme/tools/lessons.py 102 109 275
gptme/tools/save.py 61 60 274
gptme/tools/__init__.py 89 71 273
gptme/tools/shell_validation.py 88 121 273
gptme/tools/patch.py 62 95 270
gptme/tools/shell_background.py 65 36 270
gptme/plugins/__init__.py 85 119 256
gptme/tools/python.py 74 90 239
gptme/tools/todo.py 95 109 232
gptme/tools/precommit.py 70 96 229
gptme/hooks/elicitation.py 90 132 213
gptme/hooks/cost_awareness.py 65 73 205
gptme/hooks/auto_snapshots.py 51 66 199
gptme/hooks/__init__.py 20 42 194
gptme/tools/morph.py 43 47 185
gptme/tools/read.py 41 49 177
gptme/hooks/cache_awareness.py 118 186 168
gptme/tools/_browser_thread.py 27 12 156
gptme/hooks/cli_confirm.py 50 54 152
gptme/tools/rag.py 62 74 151
gptme/tools/restart.py 51 81 150
gptme/tools/form.py 38 55 145
gptme/hooks/token_awareness.py 44 50 142
gptme/hooks/types.py 74 112 139
gptme/hooks/agents_md_inject.py 36 59 136
gptme/tools/elicit.py 36 109 135
gptme/hooks/tool_target_instructions.py 34 48 132
gptme/tools/complete.py 34 45 125
gptme/hooks/form_autodetect.py 48 65 123
gptme/hooks/server_confirm.py 51 58 122
gptme/plugins/registry.py 40 32 115
gptme/hooks/server_elicit.py 52 56 113
gptme/hooks/confirm.py 53 88 109
gptme/tools/choice.py 32 38 103
gptme/hooks/active_context.py 25 23 100
gptme/tools/screenshot.py 25 29 94
gptme/hooks/time_awareness.py 29 31 84
gptme/tools/autocommit.py 37 58 80
gptme/tools/vision.py 25 14 73
gptme/tools/_browser_lynx.py 12 12 60
gptme/tools/_browser_perplexity.py 22 16 60
gptme/hooks/cwd_changed.py 15 11 54
gptme/hooks/mcp_namespace_hint.py 21 24 54
gptme/hooks/markdown_validation.py 36 41 51
gptme/plugins/entrypoints.py 15 13 42
gptme/hooks/test.py 12 5 33
gptme/hooks/cwd_awareness.py 11 17 28
gptme/hooks/auto_confirm.py 11 9 24
gptme/plugins/plugin.py 25 39 17
gptme/tools/_browser_format.py 3 5 3
------------------------------------------------------------------------------------------
SUM: 4187 4983 14621
------------------------------------------------------------------------------------------
make[2]: Leaving directory '/home/runner/work/gptme/gptme'
LoC Server#
$ make cloc-server
make[2]: Entering directory '/home/runner/work/gptme/gptme'
cloc gptme/server --by-file --hide-rate --quiet | tail -n +2
--------------------------------------------------------------------------------------
File blank comment code
--------------------------------------------------------------------------------------
gptme/server/api_v2.py 214 166 1198
gptme/server/api_v2_sessions.py 119 138 672
gptme/server/session_step.py 150 200 661
gptme/server/tasks_api.py 186 121 639
gptme/server/openapi_docs.py 225 156 630
gptme/server/static/main.js 51 69 497
gptme/server/workspace_api.py 97 89 437
gptme/server/external_sessions.py 40 25 267
gptme/server/session_models.py 57 69 201
gptme/server/static/index.html 11 18 201
gptme/server/cli.py 37 39 197
gptme/server/acp_session_runtime.py 34 30 165
gptme/server/auth.py 57 80 160
gptme/server/client.py 63 79 149
gptme/server/static/style.css 27 4 143
gptme/server/api_v2_common.py 75 62 133
gptme/server/api_v2_agents.py 25 17 114
gptme/server/static/computer.html 1 1 90
gptme/server/app.py 23 27 62
gptme/server/constants.py 7 11 9
gptme/server/__init__.py 2 3 3
gptme/server/__main__.py 1 0 3
--------------------------------------------------------------------------------------
SUM: 1502 1404 6631
--------------------------------------------------------------------------------------
make[2]: Leaving directory '/home/runner/work/gptme/gptme'
LoC Tests#
$ make cloc-tests
make[2]: Entering directory '/home/runner/work/gptme/gptme'
cloc tests --by-file --hide-rate --quiet | tail -n +2
-----------------------------------------------------------------------------------------------
File blank comment code
-----------------------------------------------------------------------------------------------
tests/test_llm_openai.py 475 247 1872
tests/test_server_v2.py 343 135 1425
tests/test_init.py 220 117 1257
tests/test_tools_subagent.py 416 225 1193
tests/test_eval_behavioral.py 668 685 1113
tests/test_acp_agent.py 321 184 1075
tests/test_tools_shell.py 340 404 1060
tests/test_util_gh.py 231 125 1059
tests/test_eval_leaderboard.py 126 104 883
tests/test_info.py 167 73 878
tests/test_util_gh_mocked.py 149 119 777
tests/test_tasks_api.py 166 59 702
tests/test_agent.py 205 112 701
tests/test_tools_browser.py 232 52 697
tests/test_tools_gh.py 134 69 675
tests/test_config.py 196 319 667
tests/test_hooks_registry.py 238 89 640
tests/test_prompt_templates.py 226 147 636
tests/test_acp_session_runtime.py 215 76 635
tests/test_llm_utils.py 190 101 625
tests/test_server_workspace.py 128 130 605
tests/test_doctor.py 161 101 595
tests/test_llm_anthropic.py 123 42 591
tests/test_tools_lessons.py 135 49 580
tests/test_tools_precommit.py 109 86 578
tests/test_llm_models_resolution.py 188 129 548
tests/test_auto_compact.py 227 189 543
tests/test_server_v2_sessions.py 101 77 533
tests/test_lessons.py 156 153 517
tests/test_hooks_cost_awareness.py 72 61 516
tests/test_hooks_cache_awareness.py 152 44 484
tests/test_llm_auth.py 169 56 476
tests/test_server_session_models.py 158 140 466
tests/test_skill_installer.py 138 154 459
tests/test_commands.py 144 67 456
tests/test_tools_shell_background.py 117 51 456
tests/test_cost_display.py 51 37 455
tests/test_computer_transport.py 170 66 449
tests/test_tools_base.py 149 62 440
tests/test_util_cli.py 117 64 434
tests/test_lessons_commands.py 157 82 422
tests/test_dirs.py 97 69 421
tests/test_tools_computer.py 163 98 420
tests/context/test_task_analyzer.py 90 44 418
tests/test_lessons_parser.py 188 239 417
tests/test_eval.py 95 76 405
tests/test_codeblock.py 302 776 402
tests/test_tools_shell_validation.py 161 63 399
tests/test_tools_mcp.py 102 20 398
tests/test_chat.py 175 168 396
tests/test_server_path_traversal.py 100 60 388
tests/test_lessons_index.py 131 106 385
tests/test_util_cli_mcp.py 89 45 380
tests/test_profiles.py 84 30 354
tests/test_lessons_matcher.py 99 86 352
tests/test_cli.py 95 71 344
tests/test_shell_background.py 99 71 342
tests/test_workspace_api.py 98 19 342
tests/test_unified_plugins.py 94 38 341
tests/test_eval_trends.py 35 22 335
tests/test_provider_plugins.py 90 32 333
tests/test_eval_behavioral_solutions.py 261 770 332
tests/test_workspace_agents.py 145 57 329
tests/test_message.py 120 111 328
tests/test_util_tool_format.py 78 32 322
tests/conftest.py 89 89 319
tests/test_agent_doctor.py 72 34 318
tests/test_mcp_discovery.py 97 39 315
tests/test_mcp_adapter.py 106 54 313
tests/test_hybrid_lessons.py 82 42 311
tests/test_util_hooks.py 82 87 311
tests/test_tools_morph.py 89 66 310
tests/context/test_adaptive_compressor.py 58 44 298
tests/test_context.py 130 79 297
tests/test_external_sessions.py 80 49 296
tests/test_prompts.py 90 56 292
tests/test_execenv.py 76 54 288
tests/lessons/test_wildcard_matching.py 114 125 287
tests/test_server.py 106 71 283
tests/test_hooks_server_confirm.py 78 31 282
tests/test_tools_restart.py 72 49 274
tests/test_server_v2_agents.py 57 25 272
tests/test_tools_complete.py 78 77 271
tests/test_json_output.py 51 52 260
tests/test_tools.py 113 59 259
tests/test_tools_autocommit.py 98 47 258
tests/test_workspace_snapshot.py 86 38 257
tests/test_llm_models.py 90 63 255
tests/test_context_selector.py 83 45 254
tests/test_eval_claude_code.py 66 27 253
tests/test_lessons_integration.py 97 66 252
tests/test_util_cli_providers.py 60 27 250
tests/test_prompt_tools.py 57 30 249
tests/test_tools_browser_thread.py 69 38 245
tests/test_ephemeral.py 78 39 244
tests/test_agents_md_inject.py 43 37 241
tests/test_complete.py 56 40 241
tests/test_mcp.py 68 59 239
tests/test_auto_naming.py 69 45 237
tests/test_conversations.py 35 25 235
tests/test_hooks.py 114 46 232
tests/test_browser.py 96 53 221
tests/test_util_keyword_matching.py 75 46 218
tests/test_lessons_tool.py 62 34 216
tests/test_logmanager.py 66 57 215
tests/test_checkpoint.py 88 20 211
tests/test_autocompact_scoring.py 86 39 208
tests/test_tools_read.py 72 29 208
tests/test_executor.py 50 31 206
tests/test_oauth_openrouter.py 62 9 205
tests/test_plugins.py 82 70 203
tests/test_tools_screenshot.py 55 48 203
tests/test_util_file_storage.py 51 36 203
tests/test_chats_json.py 30 17 202
tests/test_tool_use.py 38 43 200
tests/test_subagent_unit.py 45 20 199
tests/test_server_v2_auto_stepping.py 45 45 197
tests/test_tools_save.py 57 36 193
tests/test_chats_clean.py 46 18 191
tests/test_chats_stats.py 63 27 184
tests/test_dspy_hybrid.py 65 45 179
tests/test_dspy_basic.py 66 44 177
tests/test_hooks_cwd_changed.py 55 24 176
tests/test_tools_todo.py 81 65 173
tests/test_chats_export.py 48 17 172
tests/test_acp_types.py 35 12 171
tests/test_tools_patch.py 91 214 171
tests/test_server_v2_hooks.py 70 59 170
tests/test_llm_openai_subscription.py 37 9 169
tests/test_util_terminal.py 52 34 168
tests/test_tools_elicit.py 50 25 167
tests/test_tree.py 59 37 167
tests/test_util_cli_skills.py 63 42 165
tests/test_acp_protocol_logging.py 56 15 160
tests/test_acp_client.py 64 34 159
tests/test_acp_stdout.py 76 37 158
tests/test_uri.py 55 30 158
tests/test_commands_account.py 37 6 156
tests/test_tools_time_awareness.py 52 34 155
tests/test_cost_tracker.py 21 24 154
tests/test_shell_allowlist_autoconfirm.py 38 38 154
tests/test_tools_tmux.py 69 63 154
tests/test_util_tree.py 44 33 151
tests/test_server_api_v2_common.py 46 46 150
tests/test_util_install.py 34 31 148
tests/test_master_context.py 39 24 147
tests/test_reduce.py 42 41 146
tests/test_file_selector_integration.py 50 23 145
tests/test_gptme_provider.py 66 20 143
tests/test_util_tokens.py 72 35 143
tests/test_dspy_integration.py 54 32 139
tests/test_tools_vision.py 36 31 138
tests/test_server_elicitation.py 47 17 137
tests/test_util_cli_models.py 15 11 137
tests/test_util_content.py 49 25 137
tests/test_agent_workspace_timeouts.py 41 22 129
tests/test_acp_adapter.py 42 33 128
tests/test_cwe214_docker_env_leak.py 42 41 128
tests/test_lessons_auto_include.py 38 27 127
tests/test_active_context.py 41 22 126
tests/test_eval_pass_rate_gate.py 38 1 126
tests/test_tools_token_awareness.py 59 47 126
tests/test_util_context_dedup.py 61 43 125
tests/test_tools_python.py 56 19 124
tests/test_prompt.py 36 36 123
tests/test_util_interrupt.py 48 38 121
tests/test_integration_phase4.py 22 19 119
tests/test_cost_cache_cold_warning.py 33 8 118
tests/test_util_clipboard_paste.py 27 14 117
tests/test_agent_service_timeouts.py 19 18 116
tests/test_llm_validate.py 26 20 116
tests/test_misc_subprocess_timeouts.py 43 27 114
tests/test_lessons_status.py 67 96 113
tests/test_chats_rename.py 42 17 112
tests/test_eval_swebench.py 39 32 111
tests/test_cost_awareness_delayed_warning.py 42 32 108
tests/test_server_v2_tool_confirmation.py 32 32 107
tests/test_util_cost.py 21 19 103
tests/test_util_output_storage.py 23 13 103
tests/test_git_worktree.py 31 19 102
tests/test_command_completion.py 33 23 100
tests/test_hooks_mcp_namespace_hint.py 30 14 100
tests/test_session.py 40 21 95
tests/test_tools_choice.py 47 24 91
tests/test_agent_memory.py 26 17 90
tests/test_browser_lynx.py 35 15 90
tests/test_swebench_utils.py 27 2 89
tests/test_browser_github_routing.py 27 0 86
tests/test_server_auth.py 40 19 84
tests/test_prompt_skills_summary.py 44 44 80
tests/test_onboard.py 17 17 79
tests/test_util.py 42 85 78
tests/test_eval_timeouts.py 32 33 77
tests/test_markdown_validation.py 43 34 75
tests/test_shell_issue729.py 50 52 75
tests/test_custom_providers.py 32 44 74
tests/test_shell_issue772.py 48 47 73
tests/test_chat_config.py 24 19 72
tests/test_hooks_form_autodetect.py 22 34 68
tests/test_tools_form.py 22 19 67
tests/test_util_context_savings.py 12 0 66
tests/test_server_cors.py 27 13 60
tests/test_shell_output_mixing_issue408.py 25 29 60
tests/test_eval_practical20.py 27 8 59
tests/test_server_client.py 33 26 59
tests/test_chat_history.py 14 12 56
tests/test_eval_practical17.py 33 3 53
tests/test_eval_practical18.py 23 4 53
tests/test_eval_practical19.py 23 6 53
tests/test_tools_chats.py 16 13 51
tests/test_server_v2_sse.py 15 13 50
tests/test_dspy_gepa.py 18 9 46
tests/test_demo_capture.py 19 9 45
tests/test_util_generate_name.py 17 10 45
tests/test-integration.sh 22 36 43
tests/test_pdf_to_images.py 13 13 43
tests/test_server_cli_fallback.py 16 12 42
tests/test_xml_format.py 19 68 41
tests/test_shell_fd_leak.py 23 16 39
tests/test_telemetry.py 23 20 38
tests/test_utils.py 14 17 38
tests/test_server_parent_death_watcher.py 14 9 36
tests/test_util_export.py 20 11 36
tests/test_message_command.py 13 12 35
tests/test_cli_confirm_hook.py 24 20 34
tests/test_commands_llm.py 7 0 34
tests/test_credentials.py 16 0 34
tests/test_tools_rag.py 15 8 34
tests/test_shell_for_loop_issue724.py 16 24 33
tests/test_package_exports.py 10 3 29
tests/test_eval_practical16.py 11 0 28
tests/data/git-log-oneline.txt 0 0 27
tests/test_quota_skip.py 5 3 26
tests/data/example-patch-codeblock.txt 4 0 25
tests/data/gh-issue-list.txt 0 0 25
tests/data/example-interrupted.txt 8 0 24
tests/test_tool_loading_duplicate.py 16 15 24
tests/test_credentials_integration.py 8 0 22
tests/test_setup_completions.py 9 6 22
tests/test_tools_shell_multiline.py 7 19 19
tests/test_browser_format.py 8 6 18
tests/test_screenshot.py 9 6 15
-----------------------------------------------------------------------------------------------
SUM: 19365 13931 63436
-----------------------------------------------------------------------------------------------
make[2]: Leaving directory '/home/runner/work/gptme/gptme'
LoC Eval#
$ make cloc-eval
make[2]: Entering directory '/home/runner/work/gptme/gptme'
cloc gptme/eval/**.py --by-file --hide-rate --quiet | tail -n +2
------------------------------------------------------------------------------------------
File blank comment code
------------------------------------------------------------------------------------------
gptme/eval/main.py 104 110 864
gptme/eval/leaderboard.py 149 485 804
gptme/eval/execenv.py 85 146 514
gptme/eval/run.py 63 88 492
gptme/eval/trends.py 59 31 317
gptme/eval/types.py 27 31 75
gptme/eval/filestore.py 11 8 63
gptme/eval/pass_rate_gate.py 17 36 59
gptme/eval/cost.py 12 24 6
gptme/eval/__init__.py 2 2 4
gptme/eval/__main__.py 1 0 3
------------------------------------------------------------------------------------------
SUM: 530 961 3201
------------------------------------------------------------------------------------------
make[2]: Leaving directory '/home/runner/work/gptme/gptme'
LoC Total#
$ make cloc-total
make[2]: Entering directory '/home/runner/work/gptme/gptme'
cloc gptme/util/useredit.py gptme/util/ask_execute.py gptme/util/file_storage.py gptme/util/context_dedup.py gptme/util/tool_format.py gptme/util/cost.py gptme/util/interrupt.py gptme/util/export.py gptme/util/keyword_matching.py gptme/util/git_worktree.py gptme/util/prompt.py gptme/util/clipboard.py gptme/util/reduce.py gptme/util/auto_naming.py gptme/util/_telemetry.py gptme/util/uri.py gptme/util/context_savings.py gptme/util/terminal.py gptme/util/generate_name.py gptme/util/gh.py gptme/util/_sound_cmd.py gptme/util/__init__.py gptme/util/tokens.py gptme/util/_sound_sounddevice.py gptme/util/cost_tracker.py gptme/util/content.py gptme/util/context.py gptme/util/output_storage.py gptme/util/tree.py gptme/util/sound.py gptme/util/master_context.py gptme/util/install.py gptme/util/cost_display.py gptme/commands/llm.py gptme/commands/account.py gptme/commands/export.py gptme/commands/meta.py gptme/commands/base.py gptme/commands/__init__.py gptme/commands/checkpoint.py gptme/commands/session.py gptme/acp/adapter.py gptme/acp/types.py gptme/acp/client.py gptme/acp/__init__.py gptme/acp/__main__.py gptme/acp/agent.py gptme/prompt_queue.py gptme/dirs.py gptme/init.py gptme/codeblock.py gptme/constants.py gptme/oauth/__init__.py gptme/oauth/openrouter.py gptme/eval/swebench/main.py gptme/eval/swebench/evaluate.py gptme/eval/swebench/__init__.py gptme/eval/swebench/info.py gptme/eval/swebench/utils.py gptme/eval/swebench/__main__.py gptme/eval/leaderboard.py gptme/eval/main.py gptme/eval/cost.py gptme/eval/types.py gptme/eval/swe_extra/swe_bench_extra_data.py gptme/eval/swe_extra/swe_bench_test_spec.py gptme/eval/swe_extra/run_swe_extra.py gptme/eval/swe_extra/__init__.py gptme/eval/swe_extra/swe_bench_constants.py gptme/eval/tbench/run.py gptme/eval/tbench/__init__.py gptme/eval/tbench/agent.py gptme/eval/execenv.py gptme/eval/trends.py gptme/eval/filestore.py gptme/eval/agents/claude_code.py gptme/eval/agents/__init__.py gptme/eval/agents/swebench.py gptme/eval/run.py gptme/eval/__init__.py gptme/eval/pass_rate_gate.py gptme/eval/suites/practical10.py gptme/eval/suites/practical7.py gptme/eval/suites/practical31.py gptme/eval/suites/practical20.py gptme/eval/suites/practical13.py gptme/eval/suites/practical17.py gptme/eval/suites/browser.py gptme/eval/suites/practical27.py gptme/eval/suites/practical30.py gptme/eval/suites/practical.py gptme/eval/suites/practical12.py gptme/eval/suites/practical32.py gptme/eval/suites/practical9.py gptme/eval/suites/practical5.py gptme/eval/suites/practical18.py gptme/eval/suites/behavioral/_common.py gptme/eval/suites/behavioral/add_type_hints.py gptme/eval/suites/behavioral/add_deprecation_warning.py gptme/eval/suites/behavioral/rate_limiting.py gptme/eval/suites/behavioral/git_selective_commit.py gptme/eval/suites/behavioral/debug_data_pipeline.py gptme/eval/suites/behavioral/retry_with_backoff.py gptme/eval/suites/behavioral/remove_dead_code.py gptme/eval/suites/behavioral/add_docstrings.py gptme/eval/suites/behavioral/add_feature_preserve_default.py gptme/eval/suites/behavioral/write_test_suite.py gptme/eval/suites/behavioral/implement_memoization.py gptme/eval/suites/behavioral/fix_mutable_default.py gptme/eval/suites/behavioral/scope_discipline_bugfix.py gptme/eval/suites/behavioral/extract_function_refactor.py gptme/eval/suites/behavioral/implement_lru_cache.py gptme/eval/suites/behavioral/iterative_debug.py gptme/eval/suites/behavioral/stage_new_files.py gptme/eval/suites/behavioral/optimize_n_squared.py gptme/eval/suites/behavioral/implement_event_emitter.py gptme/eval/suites/behavioral/validate_user_input.py gptme/eval/suites/behavioral/implement_priority_queue.py gptme/eval/suites/behavioral/use_existing_helper.py gptme/eval/suites/behavioral/fix_data_mutation.py gptme/eval/suites/behavioral/multi_file_rename.py gptme/eval/suites/behavioral/__init__.py gptme/eval/suites/behavioral/fix_security_path_traversal.py gptme/eval/suites/behavioral/handle_specific_exception.py gptme/eval/suites/behavioral/noisy_worktree_fix.py gptme/eval/suites/behavioral/merge_conflict_resolution.py gptme/eval/suites/behavioral/test_driven_error_handling.py gptme/eval/suites/behavioral/add_logging.py gptme/eval/suites/behavioral/refactor_for_testability.py gptme/eval/suites/behavioral/circuit_breaker.py gptme/eval/suites/practical22.py gptme/eval/suites/init_projects.py gptme/eval/suites/practical29.py gptme/eval/suites/practical23.py gptme/eval/suites/practical8.py gptme/eval/suites/practical24.py gptme/eval/suites/practical26.py gptme/eval/suites/practical14.py gptme/eval/suites/practical3.py gptme/eval/suites/practical21.py gptme/eval/suites/practical6.py gptme/eval/suites/__init__.py gptme/eval/suites/practical15.py gptme/eval/suites/practical11.py gptme/eval/suites/practical4.py gptme/eval/suites/practical19.py gptme/eval/suites/basic.py gptme/eval/suites/practical16.py gptme/eval/suites/practical25.py gptme/eval/suites/practical2.py gptme/eval/suites/practical33.py gptme/eval/suites/practical28.py gptme/eval/__main__.py gptme/eval/dspy/tasks.py gptme/eval/dspy/metrics.py gptme/eval/dspy/hybrid_optimizer.py gptme/eval/dspy/prompt_optimizer.py gptme/eval/dspy/experiments.py gptme/eval/dspy/__init__.py gptme/eval/dspy/__main__.py gptme/eval/dspy/signatures.py gptme/eval/dspy/cli.py gptme/cli/auth.py gptme/cli/main.py gptme/cli/cmd_chats.py gptme/cli/cmd_mcp.py gptme/cli/cmd_agents.py gptme/cli/setup.py gptme/cli/cmd_hooks.py gptme/cli/doctor.py gptme/cli/wut.py gptme/cli/onboard.py gptme/cli/__init__.py gptme/cli/checkpoint.py gptme/cli/cmd_skills.py gptme/cli/util.py gptme/context/compress.py gptme/context/task_analyzer.py gptme/context/adaptive_compressor.py gptme/context/__init__.py gptme/context/config.py gptme/context/selector/file_selector.py gptme/context/selector/hybrid.py gptme/context/selector/rule_based.py gptme/context/selector/file_integration.py gptme/context/selector/file_config.py gptme/context/selector/base.py gptme/context/selector/__init__.py gptme/context/selector/llm_based.py gptme/context/selector/config.py gptme/__version__.py gptme/llm/validate.py gptme/llm/constants.py gptme/llm/llm_anthropic.py gptme/llm/llm_openai_models.py gptme/llm/llm_openai.py gptme/llm/llm_gptme.py gptme/llm/llm_openai_models_deprecated.py gptme/llm/provider_plugins.py gptme/llm/__init__.py gptme/llm/utils.py gptme/llm/llm_openai_subscription.py gptme/llm/llm_anthropic_models_deprecated.py gptme/llm/models/listing.py gptme/llm/models/types.py gptme/llm/models/resolution.py gptme/llm/models/__init__.py gptme/llm/models/data.py gptme/llm/openai_responses.py gptme/plugins/registry.py gptme/plugins/entrypoints.py gptme/plugins/__init__.py gptme/plugins/plugin.py gptme/chat.py gptme/config/cli_setup.py gptme/config/user.py gptme/config/models.py gptme/config/project.py gptme/config/chat.py gptme/config/core.py gptme/config/__init__.py gptme/mcp/registry.py gptme/mcp/client.py gptme/mcp/__init__.py gptme/prompts/context_cmd.py gptme/prompts/templates.py gptme/prompts/chat_history.py gptme/prompts/skills.py gptme/prompts/architect.py gptme/prompts/__init__.py gptme/prompts/workspace.py gptme/__init__.py gptme/info.py gptme/__main__.py gptme/workspace_snapshot.py gptme/message.py gptme/executor.py gptme/telemetry.py gptme/profiles.py gptme/checkpoint.py gptme/tools/choice.py gptme/tools/_browser_thread.py gptme/tools/rag.py gptme/tools/browser.py gptme/tools/chats.py gptme/tools/autocommit.py gptme/tools/elicit.py gptme/tools/shell.py gptme/tools/patch.py gptme/tools/restart.py gptme/tools/subagent/batch.py gptme/tools/subagent/api.py gptme/tools/subagent/types.py gptme/tools/subagent/execution.py gptme/tools/subagent/hooks.py gptme/tools/subagent/__init__.py gptme/tools/complete.py gptme/tools/lessons.py gptme/tools/read.py gptme/tools/computer_transport.py gptme/tools/form.py gptme/tools/_browser_playwright.py gptme/tools/autocompact/decision.py gptme/tools/autocompact/hook.py gptme/tools/autocompact/resume.py gptme/tools/autocompact/scoring.py gptme/tools/autocompact/__init__.py gptme/tools/autocompact/handlers.py gptme/tools/autocompact/engine.py gptme/tools/vision.py gptme/tools/_browser_lynx.py gptme/tools/tmux.py gptme/tools/shell_validation.py gptme/tools/_browser_format.py gptme/tools/mcp_adapter.py gptme/tools/gh.py gptme/tools/base.py gptme/tools/mcp.py gptme/tools/__init__.py gptme/tools/todo.py gptme/tools/shell_background.py gptme/tools/computer.py gptme/tools/morph.py gptme/tools/save.py gptme/tools/_browser_perplexity.py gptme/tools/python.py gptme/tools/screenshot.py gptme/tools/precommit.py gptme/credentials.py gptme/agent/service.py gptme/agent/doctor.py gptme/agent/__init__.py gptme/agent/workspace.py gptme/agent/cli.py gptme/hooks/registry.py gptme/hooks/elicitation.py gptme/hooks/tool_target_instructions.py gptme/hooks/cli_confirm.py gptme/hooks/test.py gptme/hooks/confirm.py gptme/hooks/active_context.py gptme/hooks/auto_confirm.py gptme/hooks/types.py gptme/hooks/cost_awareness.py gptme/hooks/time_awareness.py gptme/hooks/cache_awareness.py gptme/hooks/agents_md_inject.py gptme/hooks/form_autodetect.py gptme/hooks/server_elicit.py gptme/hooks/tests/test_tool_target_instructions.py gptme/hooks/tests/test_time_awareness.py gptme/hooks/tests/test_agents_md_inject.py gptme/hooks/tests/test_workspace_agents.py gptme/hooks/tests/test_markdown_validation.py gptme/hooks/tests/test_confirm.py gptme/hooks/tests/test_token_awareness.py gptme/hooks/tests/test_cache_awareness.py gptme/hooks/tests/test_cli_confirm.py gptme/hooks/tests/test_elicitation.py gptme/hooks/tests/test_active_context.py gptme/hooks/tests/test_server_elicit.py gptme/hooks/tests/test_cost_awareness.py gptme/hooks/tests/test_server_confirm.py gptme/hooks/tests/__init__.py gptme/hooks/tests/test_auto_confirm.py gptme/hooks/tests/test_form_autodetect.py gptme/hooks/tests/test_cwd_awareness.py gptme/hooks/workspace_agents.py gptme/hooks/markdown_validation.py gptme/hooks/server_confirm.py gptme/hooks/__init__.py gptme/hooks/auto_snapshots.py gptme/hooks/cwd_changed.py gptme/hooks/mcp_namespace_hint.py gptme/hooks/token_awareness.py gptme/hooks/cwd_awareness.py gptme/server/app.py gptme/server/api_v2_sessions.py gptme/server/auth.py gptme/server/api_v2.py gptme/server/session_step.py gptme/server/tasks_api.py gptme/server/api_v2_agents.py gptme/server/constants.py gptme/server/workspace_api.py gptme/server/client.py gptme/server/acp_session_runtime.py gptme/server/__init__.py gptme/server/api_v2_common.py gptme/server/__main__.py gptme/server/cli.py gptme/server/openapi_docs.py gptme/server/session_models.py gptme/server/external_sessions.py gptme/session.py gptme/lessons/parser.py gptme/lessons/index.py gptme/lessons/commands.py gptme/lessons/skills/python-repl/python_helpers.py gptme/lessons/installer.py gptme/lessons/__init__.py gptme/lessons/matcher.py gptme/lessons/auto_include.py gptme/lessons/hybrid_matcher.py gptme/logmanager/conversations.py gptme/logmanager/manager.py gptme/logmanager/__init__.py tests/test_tools_browser.py tests/test_util.py tests/test_chats_stats.py tests/test_shell_output_mixing_issue408.py tests/test_browser_github_routing.py tests/test_codeblock.py tests/test_tools_tmux.py tests/test_util_output_storage.py tests/test_eval_trends.py tests/test_dspy_basic.py tests/test_unified_plugins.py tests/test_tools_gh.py tests/test_util_interrupt.py tests/test_tools_todo.py tests/test_auto_naming.py tests/test_dirs.py tests/test_util_cli_models.py tests/test_tools_base.py tests/test_misc_subprocess_timeouts.py tests/test_mcp_discovery.py tests/test_hooks_cost_awareness.py tests/test_prompts.py tests/test_workspace_snapshot.py tests/test_tools_python.py tests/test_server_session_models.py tests/test_agent_workspace_timeouts.py tests/test_eval_practical20.py tests/test_server_workspace.py tests/test_util_cli_providers.py tests/test_server_v2_auto_stepping.py tests/test_cost_tracker.py tests/test_cli_confirm_hook.py tests/test_lessons_integration.py tests/test_eval_practical19.py tests/test_commands.py tests/test_util_generate_name.py tests/test_tools_autocommit.py tests/test_hooks_cwd_changed.py tests/test_tools_lessons.py tests/test_eval_leaderboard.py tests/test_mcp_adapter.py tests/test_agents_md_inject.py tests/test_tools_token_awareness.py tests/test_agent.py tests/test_acp_types.py tests/test_doctor.py tests/test_eval_practical16.py tests/test_eval_swebench.py tests/test_subagent_unit.py tests/test_util_terminal.py tests/test_eval.py tests/test_credentials.py tests/test_util_clipboard_paste.py tests/test_message_command.py tests/test_util_gh_mocked.py tests/test_tools_precommit.py tests/test_util_cost.py tests/test_llm_anthropic.py tests/test_server_cli_fallback.py tests/test_server_elicitation.py tests/test_util_tree.py tests/test_util_hooks.py tests/test_llm_openai.py tests/test_integration_phase4.py tests/test_lessons.py tests/test_tools_morph.py tests/test_tools_time_awareness.py tests/test_cost_cache_cold_warning.py tests/test_shell_background.py tests/test_shell_allowlist_autoconfirm.py tests/test_tools_shell_background.py tests/test_util_cli_skills.py tests/test_prompt_skills_summary.py tests/test_reduce.py tests/test_config.py tests/test_tools_subagent.py tests/test_shell_issue772.py tests/test_eval_practical17.py tests/test_workspace_agents.py tests/test_markdown_validation.py tests/test_server.py tests/test_dspy_gepa.py tests/test_lessons_parser.py tests/test_util_context_dedup.py tests/test_commands_account.py tests/test_tools_shell_multiline.py tests/test_hooks_form_autodetect.py tests/context/test_adaptive_compressor.py tests/context/test_task_analyzer.py tests/test_chats_json.py tests/test_acp_adapter.py tests/test_browser_format.py tests/test_chats_export.py tests/test_workspace_api.py tests/test_prompt_tools.py tests/test_xml_format.py tests/test_tools_complete.py tests/test_eval_claude_code.py tests/test_skill_installer.py tests/test_checkpoint.py tests/test_tools_choice.py tests/test_server_v2_agents.py tests/test_chats_rename.py tests/test_agent_service_timeouts.py tests/test_llm_auth.py tests/test_quota_skip.py tests/test_shell_for_loop_issue724.py tests/test_logmanager.py tests/test_util_install.py tests/test_onboard.py tests/test_acp_stdout.py tests/test_lessons_status.py tests/test_prompt.py tests/test_command_completion.py tests/test_server_cors.py tests/test_hooks_cache_awareness.py tests/test_util_cli_mcp.py tests/test_eval_behavioral.py tests/test_acp_protocol_logging.py tests/test_executor.py tests/test_context_selector.py tests/test_tools_shell.py tests/test_util_keyword_matching.py tests/test_oauth_openrouter.py tests/test_master_context.py tests/test_hooks_server_confirm.py tests/test_server_v2_tool_confirmation.py tests/test_autocompact_scoring.py tests/test_browser_lynx.py tests/test_server_parent_death_watcher.py tests/test_plugins.py tests/test_utils.py tests/test_acp_agent.py tests/test_context.py tests/test_chats_clean.py tests/test_external_sessions.py tests/test_active_context.py tests/test_acp_client.py tests/test_execenv.py tests/test_auto_compact.py tests/test_lessons_auto_include.py tests/test_tools_form.py tests/test_llm_openai_subscription.py tests/test_shell_fd_leak.py tests/test_llm_models.py tests/test_hooks_registry.py tests/test_tools_restart.py tests/test_server_path_traversal.py tests/test_json_output.py tests/test_tools_browser_thread.py tests/test_custom_providers.py tests/test_demo_capture.py tests/test_message.py tests/test_lessons_commands.py tests/test_util_tool_format.py tests/test_util_gh.py tests/test_tool_use.py tests/test_tools_elicit.py tests/test_tools.py tests/test_dspy_integration.py tests/test_tools_patch.py tests/test_tools_screenshot.py tests/test_server_v2_sse.py tests/test_file_selector_integration.py tests/test_prompt_templates.py tests/test_uri.py tests/test_credentials_integration.py tests/test_complete.py tests/test_tool_loading_duplicate.py tests/test_browser.py tests/test_llm_models_resolution.py tests/test_provider_plugins.py tests/test_tools_shell_validation.py tests/test_commands_llm.py tests/test_eval_timeouts.py tests/test_eval_behavioral_solutions.py tests/test_util_export.py tests/test_util_tokens.py tests/test_chat.py tests/test_chat_history.py tests/test_tools_read.py tests/test_setup_completions.py tests/test_mcp.py tests/test_agent_memory.py tests/test_util_cli.py tests/test_tools_computer.py tests/test_util_context_savings.py tests/test_tree.py tests/test_lessons_index.py tests/test_conversations.py tests/test_util_file_storage.py tests/test_session.py tests/test_tools_mcp.py tests/test_swebench_utils.py tests/test_eval_pass_rate_gate.py tests/test_tools_vision.py tests/test_cost_display.py tests/test_hooks_mcp_namespace_hint.py tests/test_git_worktree.py tests/test_lessons_matcher.py tests/test_lessons_tool.py tests/test_server_api_v2_common.py tests/test_ephemeral.py tests/test_package_exports.py tests/test_pdf_to_images.py tests/test_tasks_api.py tests/test_llm_validate.py tests/test_gptme_provider.py tests/test_acp_session_runtime.py tests/test_cwe214_docker_env_leak.py tests/test_server_client.py tests/test_chat_config.py tests/test_hooks.py tests/test_llm_utils.py tests/test_tools_rag.py tests/test_shell_issue729.py tests/test_dspy_hybrid.py tests/test_util_content.py tests/test_screenshot.py tests/test_hybrid_lessons.py tests/test_tools_chats.py tests/test_computer_transport.py tests/test_cost_awareness_delayed_warning.py tests/lessons/test_wildcard_matching.py tests/test_server_auth.py tests/conftest.py tests/test_server_v2_sessions.py tests/test_server_v2_hooks.py tests/test_server_v2.py tests/test_profiles.py tests/test_info.py tests/test_cli.py tests/test_agent_doctor.py tests/test_telemetry.py tests/test_tools_save.py tests/test_eval_practical18.py tests/test_init.py scripts/train/collect.py scripts/eval_trends.py scripts/eval_leaderboard.py scripts/analyze_compression.py scripts/demo_capture.py scripts/check_rst_formatting.py scripts/github_bot.py scripts/auto_rename_logs.py --by-file --hide-rate --quiet | tail -n +2
---------------------------------------------------------------------------------------------------------------
File blank comment code
---------------------------------------------------------------------------------------------------------------
tests/test_llm_openai.py 475 247 1872
tests/test_server_v2.py 343 135 1425
gptme/tools/shell.py 248 327 1333
gptme/llm/llm_openai.py 264 276 1257
tests/test_init.py 220 117 1257
gptme/server/api_v2.py 214 166 1198
tests/test_tools_subagent.py 416 225 1193
gptme/util/gh.py 217 245 1161
tests/test_eval_behavioral.py 668 685 1113
tests/test_acp_agent.py 321 184 1075
tests/test_tools_shell.py 340 404 1060
tests/test_util_gh.py 231 125 1059
gptme/acp/agent.py 181 294 983
gptme/hooks/workspace_agents.py 187 125 887
tests/test_eval_leaderboard.py 126 104 883
tests/test_info.py 167 73 878
gptme/eval/main.py 104 110 864
gptme/llm/llm_anthropic.py 199 256 835
gptme/eval/leaderboard.py 149 485 804
tests/test_util_gh_mocked.py 149 119 777
gptme/eval/suites/basic.py 138 55 715
gptme/hooks/tests/test_workspace_agents.py 154 44 708
gptme/cli/main.py 105 109 707
gptme/cli/doctor.py 107 81 703
tests/test_tasks_api.py 166 59 702
tests/test_agent.py 205 112 701
tests/test_tools_browser.py 232 52 697
gptme/cli/util.py 183 112 690
tests/test_tools_gh.py 134 69 675
gptme/server/api_v2_sessions.py 119 138 672
tests/test_config.py 196 319 667
gptme/server/session_step.py 150 200 661
tests/test_hooks_registry.py 238 89 640
gptme/eval/dspy/tasks.py 170 374 639
gptme/server/tasks_api.py 186 121 639
tests/test_prompt_templates.py 226 147 636
tests/test_acp_session_runtime.py 215 76 635
gptme/server/openapi_docs.py 225 156 630
tests/test_llm_utils.py 190 101 625
gptme/tools/mcp_adapter.py 209 215 612
tests/test_server_workspace.py 128 130 605
gptme/tools/browser.py 187 263 596
tests/test_doctor.py 161 101 595
gptme/util/context.py 140 207 593
gptme/tools/computer.py 167 225 591
tests/test_llm_anthropic.py 123 42 591
tests/test_tools_lessons.py 135 49 580
tests/test_tools_precommit.py 109 86 578
gptme/cli/setup.py 134 67 576
gptme/tools/base.py 139 185 574
tests/test_llm_models_resolution.py 188 129 548
tests/test_auto_compact.py 227 189 543
gptme/logmanager/manager.py 136 177 540
tests/test_server_v2_sessions.py 101 77 533
gptme/tools/gh.py 116 127 523
gptme/tools/_browser_playwright.py 140 105 518
tests/test_lessons.py 156 153 517
tests/test_hooks_cost_awareness.py 72 61 516
gptme/eval/execenv.py 85 146 514
gptme/lessons/installer.py 146 165 495
gptme/eval/run.py 63 88 492
gptme/llm/__init__.py 111 145 491
tests/test_hooks_cache_awareness.py 152 44 484
gptme/llm/llm_openai_subscription.py 123 92 476
tests/test_llm_auth.py 169 56 476
tests/test_server_session_models.py 158 140 466
gptme/tools/computer_transport.py 119 75 463
tests/test_skill_installer.py 138 154 459
tests/test_commands.py 144 67 456
tests/test_tools_shell_background.py 117 51 456
tests/test_cost_display.py 51 37 455
tests/test_computer_transport.py 170 66 449
scripts/analyze_compression.py 103 68 446
scripts/demo_capture.py 104 83 445
tests/test_tools_base.py 149 62 440
gptme/server/workspace_api.py 97 89 437
tests/test_util_cli.py 117 64 434
gptme/chat.py 72 97 422
tests/test_lessons_commands.py 157 82 422
tests/test_dirs.py 97 69 421
gptme/eval/dspy/prompt_optimizer.py 109 89 420
tests/test_tools_computer.py 163 98 420
tests/context/test_task_analyzer.py 90 44 418
tests/test_lessons_parser.py 188 239 417
gptme/util/prompt.py 102 151 410
scripts/github_bot.py 84 79 409
gptme/llm/models/data.py 3 30 405
tests/test_eval.py 95 76 405
gptme/tools/subagent/api.py 69 124 404
tests/test_codeblock.py 302 776 402
gptme/agent/service.py 108 103 400
tests/test_tools_shell_validation.py 161 63 399
tests/test_tools_mcp.py 102 20 398
tests/test_chat.py 175 168 396
gptme/agent/cli.py 107 128 395
gptme/message.py 96 131 389
tests/test_server_path_traversal.py 100 60 388
gptme/agent/doctor.py 89 43 387
gptme/tools/chats.py 85 101 385
tests/test_lessons_index.py 131 106 385
gptme/tools/tmux.py 95 171 384
gptme/hooks/registry.py 88 78 381
tests/test_util_cli_mcp.py 89 45 380
gptme/util/_telemetry.py 106 136 370
gptme/hooks/tests/test_cost_awareness.py 72 45 367
gptme/eval/dspy/cli.py 73 57 364
gptme/cli/cmd_hooks.py 103 72 363
tests/test_profiles.py 84 30 354
tests/test_lessons_matcher.py 99 86 352
gptme/eval/dspy/experiments.py 94 60 350
gptme/agent/workspace.py 120 209 346
gptme/eval/dspy/metrics.py 97 98 345
tests/test_cli.py 95 71 344
gptme/hooks/tests/test_elicitation.py 91 45 343
gptme/telemetry.py 86 54 342
tests/test_shell_background.py 99 71 342
tests/test_workspace_api.py 98 19 342
tests/test_unified_plugins.py 94 38 341
gptme/tools/mcp.py 102 102 337
gptme/tools/subagent/execution.py 89 130 335
tests/test_eval_trends.py 35 22 335
tests/test_provider_plugins.py 90 32 333
tests/test_eval_behavioral_solutions.py 261 770 332
tests/test_workspace_agents.py 145 57 329
tests/test_message.py 120 111 328
gptme/hooks/tests/test_agents_md_inject.py 63 46 327
gptme/eval/suites/practical.py 35 30 326
tests/test_util_tool_format.py 78 32 322
gptme/checkpoint.py 79 49 320
tests/conftest.py 89 89 319
tests/test_agent_doctor.py 72 34 318
gptme/eval/trends.py 59 31 317
tests/test_mcp_discovery.py 97 39 315
tests/test_mcp_adapter.py 106 54 313
tests/test_hybrid_lessons.py 82 42 311
tests/test_util_hooks.py 82 87 311
tests/test_tools_morph.py 89 66 310
gptme/hooks/tests/test_confirm.py 100 59 309
gptme/cli/cmd_chats.py 66 39 302
gptme/mcp/client.py 93 108 299
gptme/util/cost_display.py 61 58 298
tests/context/test_adaptive_compressor.py 58 44 298
tests/test_context.py 130 79 297
tests/test_external_sessions.py 80 49 296
gptme/info.py 84 70 293
gptme/hooks/tests/test_tool_target_instructions.py 58 49 292
tests/test_prompts.py 90 56 292
tests/test_execenv.py 76 54 288
tests/lessons/test_wildcard_matching.py 114 125 287
tests/test_server.py 106 71 283
gptme/eval/dspy/hybrid_optimizer.py 141 345 282
tests/test_hooks_server_confirm.py 78 31 282
gptme/eval/swe_extra/swe_bench_test_spec.py 53 29 280
gptme/logmanager/conversations.py 60 81 278
gptme/tools/lessons.py 102 109 275
gptme/tools/save.py 61 60 274
tests/test_tools_restart.py 72 49 274
gptme/tools/__init__.py 89 71 273
gptme/tools/shell_validation.py 88 121 273
tests/test_server_v2_agents.py 57 25 272
tests/test_tools_complete.py 78 77 271
gptme/tools/patch.py 62 95 270
gptme/tools/shell_background.py 65 36 270
gptme/llm/openai_responses.py 63 10 269
gptme/server/external_sessions.py 40 25 267
gptme/acp/client.py 66 121 266
gptme/prompts/workspace.py 44 68 261
tests/test_json_output.py 51 52 260
tests/test_tools.py 113 59 259
tests/test_tools_autocommit.py 98 47 258
gptme/cli/cmd_skills.py 71 35 257
tests/test_workspace_snapshot.py 86 38 257
gptme/plugins/__init__.py 85 119 256
gptme/llm/models/listing.py 62 56 255
tests/test_llm_models.py 90 63 255
tests/test_context_selector.py 83 45 254
gptme/hooks/tests/test_form_autodetect.py 73 25 253
tests/test_eval_claude_code.py 66 27 253
tests/test_lessons_integration.py 97 66 252
gptme/eval/suites/practical16.py 64 100 251
gptme/llm/models/resolution.py 59 64 250
tests/test_util_cli_providers.py 60 27 250
tests/test_prompt_tools.py 57 30 249
gptme/llm/llm_openai_models.py 6 33 248
gptme/codeblock.py 37 143 247
tests/test_tools_browser_thread.py 69 38 245
tests/test_ephemeral.py 78 39 244
gptme/commands/llm.py 54 51 243
gptme/prompts/__init__.py 52 93 242
tests/test_agents_md_inject.py 43 37 241
tests/test_complete.py 56 40 241
gptme/tools/python.py 74 90 239
tests/test_mcp.py 68 59 239
gptme/context/task_analyzer.py 100 124 237
tests/test_auto_naming.py 69 45 237
gptme/commands/meta.py 54 20 236
gptme/lessons/index.py 90 133 235
tests/test_conversations.py 35 25 235
gptme/profiles.py 64 67 233
gptme/context/adaptive_compressor.py 76 130 232
gptme/tools/todo.py 95 109 232
tests/test_hooks.py 114 46 232
gptme/tools/precommit.py 70 96 229
gptme/cli/onboard.py 67 59 224
gptme/hooks/tests/test_token_awareness.py 37 28 224
gptme/util/auto_naming.py 68 78 224
gptme/eval/swebench/main.py 32 23 223
gptme/eval/suites/practical6.py 56 46 221
gptme/lessons/parser.py 73 117 221
tests/test_browser.py 96 53 221
gptme/config/user.py 68 56 220
gptme/prompts/templates.py 57 93 219
gptme/hooks/tests/test_cli_confirm.py 75 23 218
gptme/lessons/hybrid_matcher.py 85 112 218
gptme/util/_sound_sounddevice.py 57 50 218
tests/test_util_keyword_matching.py 75 46 218
gptme/mcp/registry.py 59 70 216
tests/test_lessons_tool.py 62 34 216
gptme/config/models.py 76 69 215
tests/test_logmanager.py 66 57 215
gptme/eval/swe_extra/swe_bench_extra_data.py 69 51 213
gptme/hooks/elicitation.py 90 132 213
gptme/lessons/commands.py 91 48 213
tests/test_checkpoint.py 88 20 211
tests/test_autocompact_scoring.py 86 39 208
tests/test_tools_read.py 72 29 208
gptme/workspace_snapshot.py 37 41 207
tests/test_executor.py 50 31 206
gptme/hooks/cost_awareness.py 65 73 205
tests/test_oauth_openrouter.py 62 9 205
tests/test_plugins.py 82 70 203
tests/test_tools_screenshot.py 55 48 203
tests/test_util_file_storage.py 51 36 203
gptme/cli/auth.py 47 28 202
gptme/tools/autocompact/engine.py 41 58 202
tests/test_chats_json.py 30 17 202
gptme/eval/suites/practical7.py 57 81 201
gptme/server/session_models.py 57 69 201
gptme/util/sound.py 65 72 200
tests/test_tool_use.py 38 43 200
gptme/hooks/auto_snapshots.py 51 66 199
tests/test_subagent_unit.py 45 20 199
gptme/hooks/tests/test_active_context.py 37 29 198
gptme/eval/suites/behavioral/__init__.py 9 11 197
gptme/server/cli.py 37 39 197
tests/test_server_v2_auto_stepping.py 45 45 197
gptme/config/chat.py 41 46 196
gptme/hooks/tests/test_server_elicit.py 58 23 196
gptme/hooks/__init__.py 20 42 194
tests/test_tools_save.py 57 36 193
gptme/eval/suites/practical8.py 68 62 191
tests/test_chats_clean.py 46 18 191
gptme/eval/agents/claude_code.py 41 33 187
gptme/hooks/tests/test_server_confirm.py 48 32 186
gptme/eval/suites/practical14.py 64 52 185
gptme/tools/morph.py 43 47 185
tests/test_chats_stats.py 63 27 184
gptme/eval/swebench/evaluate.py 35 41 183
gptme/context/selector/file_selector.py 50 61 179
tests/test_dspy_hybrid.py 65 45 179
gptme/tools/autocompact/resume.py 50 74 178
gptme/tools/read.py 41 49 177
tests/test_dspy_basic.py 66 44 177
gptme/eval/suites/practical4.py 47 24 176
tests/test_hooks_cwd_changed.py 55 24 176
gptme/llm/validate.py 30 29 174
tests/test_tools_todo.py 81 65 173
tests/test_chats_export.py 48 17 172
gptme/eval/suites/practical10.py 55 65 171
tests/test_acp_types.py 35 12 171
tests/test_tools_patch.py 91 214 171
gptme/commands/session.py 58 47 170
tests/test_server_v2_hooks.py 70 59 170
tests/test_llm_openai_subscription.py 37 9 169
gptme/hooks/cache_awareness.py 118 186 168
gptme/oauth/openrouter.py 48 43 168
tests/test_util_terminal.py 52 34 168
tests/test_tools_elicit.py 50 25 167
tests/test_tree.py 59 37 167
gptme/server/acp_session_runtime.py 34 30 165
tests/test_util_cli_skills.py 63 42 165
gptme/eval/suites/practical2.py 46 18 164
gptme/server/auth.py 57 80 160
tests/test_acp_protocol_logging.py 56 15 160
gptme/llm/utils.py 56 84 159
tests/test_acp_client.py 64 34 159
gptme/eval/suites/practical3.py 27 19 158
gptme/tools/subagent/__init__.py 31 134 158
tests/test_acp_stdout.py 76 37 158
tests/test_uri.py 55 30 158
gptme/tools/_browser_thread.py 27 12 156
tests/test_commands_account.py 37 6 156
gptme/util/__init__.py 34 29 155
gptme/util/reduce.py 45 45 155
tests/test_tools_time_awareness.py 52 34 155
gptme/eval/suites/practical15.py 65 92 154
tests/test_cost_tracker.py 21 24 154
tests/test_shell_allowlist_autoconfirm.py 38 38 154
tests/test_tools_tmux.py 69 63 154
gptme/init.py 33 39 153
gptme/hooks/cli_confirm.py 50 54 152
gptme/tools/autocompact/scoring.py 53 89 152
gptme/commands/account.py 45 20 151
gptme/eval/suites/behavioral/add_deprecation_warning.py 73 138 151
gptme/eval/suites/practical9.py 69 76 151
gptme/llm/llm_openai_models_deprecated.py 5 13 151
gptme/tools/rag.py 62 74 151
gptme/util/tool_format.py 48 75 151
tests/test_util_tree.py 44 33 151
gptme/eval/agents/swebench.py 26 22 150
gptme/tools/restart.py 51 81 150
tests/test_server_api_v2_common.py 46 46 150
gptme/acp/__main__.py 58 70 149
gptme/server/client.py 63 79 149
tests/test_util_install.py 34 31 148
gptme/eval/agents/__init__.py 24 15 147
gptme/util/clipboard.py 22 12 147
scripts/check_rst_formatting.py 41 52 147
tests/test_master_context.py 39 24 147
tests/test_reduce.py 42 41 146
gptme/tools/form.py 38 55 145
tests/test_file_selector_integration.py 50 23 145
gptme/commands/checkpoint.py 21 4 143
tests/test_gptme_provider.py 66 20 143
tests/test_util_tokens.py 72 35 143
gptme/hooks/token_awareness.py 44 50 142
gptme/cli/cmd_mcp.py 41 14 140
gptme/hooks/types.py 74 112 139
tests/test_dspy_integration.py 54 32 139
gptme/eval/suites/practical5.py 67 80 138
tests/test_tools_vision.py 36 31 138
tests/test_server_elicitation.py 47 17 137
tests/test_util_cli_models.py 15 11 137
tests/test_util_content.py 49 25 137
gptme/hooks/agents_md_inject.py 36 59 136
gptme/lessons/auto_include.py 50 59 136
gptme/tools/elicit.py 36 109 135
gptme/eval/swebench/utils.py 29 10 134
gptme/server/api_v2_common.py 75 62 133
gptme/hooks/tool_target_instructions.py 34 48 132
gptme/eval/suites/practical17.py 64 137 131
tests/test_agent_workspace_timeouts.py 41 22 129
gptme/tools/subagent/types.py 47 65 128
tests/test_acp_adapter.py 42 33 128
tests/test_cwe214_docker_env_leak.py 42 41 128
gptme/hooks/tests/test_markdown_validation.py 29 21 127
gptme/llm/llm_gptme.py 47 58 127
tests/test_lessons_auto_include.py 38 27 127
gptme/commands/base.py 54 58 126
gptme/config/cli_setup.py 22 38 126
gptme/eval/suites/practical21.py 76 184 126
tests/test_active_context.py 41 22 126
tests/test_eval_pass_rate_gate.py 38 1 126
tests/test_tools_token_awareness.py 59 47 126
gptme/hooks/tests/test_cache_awareness.py 47 34 125
gptme/tools/complete.py 34 45 125
tests/test_util_context_dedup.py 61 43 125
tests/test_tools_python.py 56 19 124
gptme/eval/suites/behavioral/handle_specific_exception.py 15 8 123
gptme/hooks/form_autodetect.py 48 65 123
tests/test_prompt.py 36 36 123
gptme/commands/export.py 31 21 122
gptme/eval/suites/practical11.py 53 26 122
gptme/eval/suites/practical12.py 56 49 122
gptme/hooks/server_confirm.py 51 58 122
tests/test_util_interrupt.py 48 38 121
tests/test_integration_phase4.py 22 19 119
gptme/eval/suites/practical20.py 77 190 118
tests/test_cost_cache_cold_warning.py 33 8 118
tests/test_util_clipboard_paste.py 27 14 117
gptme/eval/suites/behavioral/add_type_hints.py 40 97 116
gptme/tools/autocompact/hook.py 40 48 116
tests/test_agent_service_timeouts.py 19 18 116
tests/test_llm_validate.py 26 20 116
gptme/config/core.py 40 33 115
gptme/llm/models/types.py 49 60 115
gptme/plugins/registry.py 40 32 115
scripts/auto_rename_logs.py 34 23 115
gptme/eval/suites/practical18.py 52 117 114
gptme/server/api_v2_agents.py 25 17 114
tests/test_misc_subprocess_timeouts.py 43 27 114
gptme/hooks/server_elicit.py 52 56 113
tests/test_lessons_status.py 67 96 113
tests/test_chats_rename.py 42 17 112
gptme/util/export.py 26 29 111
tests/test_eval_swebench.py 39 32 111
gptme/hooks/confirm.py 53 88 109
gptme/hooks/tests/test_time_awareness.py 36 11 109
gptme/util/cost_tracker.py 43 62 109
tests/test_cost_awareness_delayed_warning.py 42 32 108
gptme/dirs.py 45 35 107
gptme/eval/suites/practical29.py 69 129 107
tests/test_server_v2_tool_confirmation.py 32 32 107
gptme/eval/suites/practical28.py 66 155 106
gptme/cli/checkpoint.py 23 14 105
gptme/eval/suites/behavioral/implement_lru_cache.py 56 101 105
gptme/eval/suites/practical13.py 47 47 105
gptme/eval/suites/practical19.py 58 133 105
gptme/eval/suites/behavioral/implement_event_emitter.py 48 94 104
gptme/eval/suites/practical22.py 76 174 104
scripts/train/collect.py 35 52 104
gptme/lessons/matcher.py 35 47 103
gptme/tools/choice.py 32 38 103
tests/test_util_cost.py 21 19 103
tests/test_util_output_storage.py 23 13 103
gptme/eval/suites/practical23.py 75 190 102
gptme/eval/suites/practical30.py 68 110 102
tests/test_git_worktree.py 31 19 102
gptme/eval/suites/practical25.py 70 147 101
gptme/eval/suites/practical27.py 70 154 101
gptme/eval/suites/practical33.py 68 109 101
gptme/eval/suites/behavioral/refactor_for_testability.py 22 45 100
gptme/eval/suites/practical32.py 70 134 100
gptme/hooks/active_context.py 25 23 100
tests/test_command_completion.py 33 23 100
tests/test_hooks_mcp_namespace_hint.py 30 14 100
gptme/eval/suites/practical24.py 78 204 99
gptme/eval/suites/practical26.py 72 162 99
gptme/eval/suites/practical31.py 69 112 99
gptme/eval/suites/behavioral/implement_priority_queue.py 61 109 98
gptme/eval/suites/behavioral/optimize_n_squared.py 31 43 96
tests/test_session.py 40 21 95
gptme/tools/screenshot.py 25 29 94
gptme/prompts/chat_history.py 34 27 91
tests/test_tools_choice.py 47 24 91
gptme/acp/types.py 25 13 90
tests/test_agent_memory.py 26 17 90
tests/test_browser_lynx.py 35 15 90
gptme/eval/tbench/run.py 16 12 89
gptme/util/ask_execute.py 25 40 89
tests/test_swebench_utils.py 27 2 89
gptme/eval/suites/behavioral/circuit_breaker.py 53 118 87
gptme/util/tree.py 21 15 87
gptme/tools/autocompact/decision.py 34 48 86
tests/test_browser_github_routing.py 27 0 86
gptme/commands/__init__.py 15 21 85
gptme/eval/suites/behavioral/implement_memoization.py 50 112 85
gptme/hooks/time_awareness.py 29 31 84
tests/test_server_auth.py 40 19 84
gptme/eval/suites/behavioral/validate_user_input.py 33 55 83
gptme/util/git_worktree.py 25 33 83
gptme/__version__.py 17 5 82
gptme/eval/suites/behavioral/add_docstrings.py 47 103 82
gptme/eval/suites/behavioral/add_feature_preserve_default.py 27 40 82
gptme/tools/autocommit.py 37 58 80
tests/test_prompt_skills_summary.py 44 44 80
gptme/cli/cmd_agents.py 19 14 79
gptme/eval/swe_extra/run_swe_extra.py 16 14 79
tests/test_onboard.py 17 17 79
gptme/eval/suites/behavioral/rate_limiting.py 52 118 78
tests/test_util.py 42 85 78
gptme/util/context_savings.py 20 6 77
tests/test_eval_timeouts.py 32 33 77
gptme/context/compress.py 63 131 76
gptme/eval/types.py 27 31 75
tests/test_markdown_validation.py 43 34 75
tests/test_shell_issue729.py 50 52 75
gptme/eval/suites/behavioral/retry_with_backoff.py 30 49 74
gptme/hooks/tests/test_cwd_awareness.py 13 12 74
tests/test_custom_providers.py 32 44 74
gptme/prompt_queue.py 30 5 73
gptme/tools/vision.py 25 14 73
tests/test_shell_issue772.py 48 47 73
tests/test_chat_config.py 24 19 72
gptme/util/output_storage.py 29 37 71
gptme/llm/llm_anthropic_models_deprecated.py 5 11 70
gptme/session.py 39 64 70
gptme/config/project.py 23 28 69
gptme/context/selector/llm_based.py 32 38 69
gptme/util/generate_name.py 5 6 69
tests/test_hooks_form_autodetect.py 22 34 68
gptme/prompts/context_cmd.py 11 12 67
tests/test_tools_form.py 22 19 67
gptme/eval/swe_extra/swe_bench_constants.py 9 9 66
gptme/util/master_context.py 28 38 66
tests/test_util_context_savings.py 12 0 66
gptme/eval/suites/behavioral/fix_mutable_default.py 31 57 65
gptme/eval/tbench/agent.py 20 24 65
gptme/config/__init__.py 6 15 63
gptme/eval/filestore.py 11 8 63
gptme/lessons/skills/python-repl/python_helpers.py 28 26 63
gptme/eval/suites/__init__.py 22 18 62
gptme/eval/suites/behavioral/test_driven_error_handling.py 35 56 62
gptme/eval/suites/init_projects.py 21 1 62
gptme/server/app.py 23 27 62
gptme/util/_sound_cmd.py 22 17 62
gptme/eval/suites/behavioral/add_logging.py 27 39 61
gptme/llm/models/__init__.py 3 12 60
gptme/tools/_browser_lynx.py 12 12 60
gptme/tools/_browser_perplexity.py 22 16 60
gptme/util/tokens.py 20 20 60
tests/test_server_cors.py 27 13 60
tests/test_shell_output_mixing_issue408.py 25 29 60
gptme/context/selector/rule_based.py 20 13 59
gptme/eval/pass_rate_gate.py 17 36 59
gptme/eval/suites/behavioral/merge_conflict_resolution.py 31 63 59
gptme/eval/suites/behavioral/noisy_worktree_fix.py 45 77 59
gptme/eval/suites/behavioral/scope_discipline_bugfix.py 37 52 59
gptme/util/uri.py 29 42 59
tests/test_eval_practical20.py 27 8 59
tests/test_server_client.py 33 26 59
gptme/eval/suites/behavioral/fix_data_mutation.py 26 44 58
gptme/eval/suites/behavioral/fix_security_path_traversal.py 23 31 58
gptme/prompts/skills.py 16 10 58
gptme/eval/dspy/signatures.py 19 21 56
gptme/eval/suites/behavioral/extract_function_refactor.py 30 52 56
tests/test_chat_history.py 14 12 56
gptme/context/selector/file_integration.py 13 10 55
gptme/eval/suites/behavioral/write_test_suite.py 24 33 55
gptme/tools/autocompact/handlers.py 19 9 55
gptme/hooks/cwd_changed.py 15 11 54
gptme/hooks/mcp_namespace_hint.py 21 24 54
gptme/credentials.py 16 7 53
gptme/tools/subagent/batch.py 26 47 53
gptme/util/context_dedup.py 41 93 53
gptme/util/terminal.py 28 23 53
tests/test_eval_practical17.py 33 3 53
tests/test_eval_practical18.py 23 4 53
tests/test_eval_practical19.py 23 6 53
gptme/hooks/markdown_validation.py 36 41 51
tests/test_tools_chats.py 16 13 51
gptme/eval/suites/behavioral/remove_dead_code.py 40 63 50
tests/test_server_v2_sse.py 15 13 50
gptme/eval/suites/behavioral/multi_file_rename.py 27 42 49
gptme/eval/suites/behavioral/use_existing_helper.py 32 45 49
gptme/eval/swebench/info.py 8 3 49
gptme/llm/provider_plugins.py 39 35 48
gptme/eval/suites/behavioral/git_selective_commit.py 21 52 47
gptme/util/cost.py 12 9 47
tests/test_dspy_gepa.py 18 9 46
gptme/eval/suites/behavioral/debug_data_pipeline.py 30 61 45
tests/test_demo_capture.py 19 9 45
tests/test_util_generate_name.py 17 10 45
tests/test_pdf_to_images.py 13 13 43
gptme/eval/suites/behavioral/stage_new_files.py 12 18 42
gptme/plugins/entrypoints.py 15 13 42
tests/test_server_cli_fallback.py 16 12 42
gptme/context/selector/file_config.py 10 8 41
tests/test_xml_format.py 19 68 41
gptme/logmanager/__init__.py 3 9 40
gptme/util/file_storage.py 30 47 40
gptme/context/selector/hybrid.py 14 16 39
gptme/tools/subagent/hooks.py 19 25 39
gptme/util/keyword_matching.py 35 66 39
tests/test_shell_fd_leak.py 23 16 39
tests/test_telemetry.py 23 20 38
tests/test_utils.py 14 17 38
gptme/tools/autocompact/__init__.py 3 12 37
gptme/cli/wut.py 13 12 36
tests/test_server_parent_death_watcher.py 14 9 36
tests/test_util_export.py 20 11 36
gptme/eval/suites/behavioral/iterative_debug.py 28 39 35
tests/test_message_command.py 13 12 35
tests/test_cli_confirm_hook.py 24 20 34
tests/test_commands_llm.py 7 0 34
tests/test_credentials.py 16 0 34
tests/test_tools_rag.py 15 8 34
gptme/context/__init__.py 8 8 33
gptme/hooks/test.py 12 5 33
tests/test_shell_for_loop_issue724.py 16 24 33
gptme/eval/suites/behavioral/_common.py 9 5 32
gptme/hooks/tests/test_auto_confirm.py 12 4 32
gptme/context/selector/__init__.py 12 16 31
gptme/util/content.py 18 24 30
gptme/util/install.py 13 25 30
tests/test_package_exports.py 10 3 29
gptme/eval/swebench/__init__.py 1 0 28
gptme/hooks/cwd_awareness.py 11 17 28
tests/test_eval_practical16.py 11 0 28
gptme/constants.py 19 25 27
gptme/util/useredit.py 11 13 26
tests/test_quota_skip.py 5 3 26
gptme/acp/adapter.py 19 22 25
gptme/executor.py 18 26 24
gptme/hooks/auto_confirm.py 11 9 24
tests/test_tool_loading_duplicate.py 16 15 24
gptme/context/selector/base.py 14 23 23
gptme/util/interrupt.py 13 15 23
gptme/__init__.py 6 0 22
tests/test_credentials_integration.py 8 0 22
tests/test_setup_completions.py 9 6 22
gptme/acp/__init__.py 5 13 21
gptme/context/selector/config.py 8 8 21
gptme/agent/__init__.py 3 6 19
gptme/context/config.py 12 25 19
tests/test_tools_shell_multiline.py 7 19 19
gptme/lessons/__init__.py 7 15 18
tests/test_browser_format.py 8 6 18
gptme/eval/suites/browser.py 5 0 17
gptme/plugins/plugin.py 25 39 17
gptme/cli/__init__.py 10 13 15
tests/test_screenshot.py 9 6 15
gptme/mcp/__init__.py 1 0 14
gptme/__main__.py 2 0 12
gptme/prompts/architect.py 26 52 11
gptme/server/constants.py 7 11 9
gptme/eval/tbench/__init__.py 13 22 8
gptme/eval/dspy/__init__.py 6 6 7
gptme/eval/cost.py 12 24 6
gptme/llm/constants.py 2 6 5
scripts/eval_trends.py 2 1 5
gptme/eval/__init__.py 2 2 4
scripts/eval_leaderboard.py 2 1 4
gptme/eval/__main__.py 1 0 3
gptme/eval/dspy/__main__.py 3 5 3
gptme/eval/swebench/__main__.py 1 0 3
gptme/server/__init__.py 2 3 3
gptme/server/__main__.py 1 0 3
gptme/tools/_browser_format.py 3 5 3
gptme/oauth/__init__.py 1 4 0
---------------------------------------------------------------------------------------------------------------
SUM: 39310 38162 135916
---------------------------------------------------------------------------------------------------------------
make[2]: Leaving directory '/home/runner/work/gptme/gptme'
Code Metrics#
$ make metrics
make[2]: Entering directory '/home/runner/work/gptme/gptme'
=== Code Metrics Summary ===
Project Overview:
Files: 613
Total blocks: 11051
Average complexity: 3.6114378789249844
Most Complex Functions (D+):
gptme/util/tool_format.py
F 104:0 format_tools_list - D
gptme/util/prompt.py
M 294:4 GptmeCompleter.get_completions - D
gptme/util/_telemetry.py
F 284:0 init_telemetry - D
gptme/util/gh.py
F 978:0 get_github_run_logs - D
F 1161:0 search_github_issues - D
F 1267:0 search_github_prs - D
F 1369:0 merge_github_pr - D
gptme/util/context.py
F 462:0 include_paths - E
F 809:0 _resource_to_codeblock - E
gptme/util/cost_display.py
F 280:0 display_costs - D
gptme/commands/llm.py
F 129:0 cmd_tools - D
F 212:0 cmd_context - D
gptme/commands/meta.py
F 140:0 cmd_plugin - E
gptme/commands/checkpoint.py
F 43:0 cmd_checkpoint - D
gptme/acp/agent.py
M 521:4 GptmeAgent.new_session - D
M 951:4 GptmeAgent.prompt - D
gptme/codeblock.py
gptme/eval/leaderboard.py
F 915:0 compute_rate_trends - D
F 679:0 aggregate_per_test - D
gptme/eval/main.py
gptme/eval/trends.py
F 157:0 compute_diff - D
gptme/eval/run.py
F 286:0 execute - D
gptme/eval/suites/practical16.py
F 68:0 check_queue_all_producers_mentioned - D
gptme/eval/dspy/hybrid_optimizer.py
C 239:0 TaskComplexity - D
M 283:4 TaskComplexity.analyze - D
gptme/cli/main.py
gptme/cli/cmd_agents.py
F 25:0 run_scan - D
gptme/cli/cmd_hooks.py
F 265:0 run - D
gptme/cli/cmd_skills.py
F 17:0 skills_list - D
gptme/cli/util.py
F 725:0 models_test - D
gptme/context/selector/file_selector.py
gptme/context/selector/rule_based.py
M 27:4 RuleBasedSelector.select - D
gptme/llm/llm_anthropic.py
F 1146:0 _prepare_messages_for_api - D
gptme/llm/llm_openai.py
F 705:0 chat - E
F 327:0 init - E
F 928:0 _stream_responses - D
F 1078:0 stream - D
F 1422:0 _transform_msgs_for_special_provider - D
F 514:0 _handle_openai_transient_error - D
gptme/llm/__init__.py
F 422:0 _reply_stream - E
gptme/llm/llm_openai_subscription.py
F 500:0 stream - D
gptme/llm/models/listing.py
F 276:0 list_models - D
gptme/llm/models/resolution.py
F 164:0 get_model - E
gptme/plugins/__init__.py
F 154:0 _load_plugin - D
gptme/chat.py
F 311:0 _process_message_conversation - D
F 174:0 _run_chat_loop - D
gptme/config/cli_setup.py
gptme/config/core.py
M 61:4 Config.mcp - D
gptme/prompts/chat_history.py
F 20:0 prompt_chat_history - E
gptme/prompts/__init__.py
F 112:0 get_prompt - E
gptme/prompts/workspace.py
gptme/info.py
F 335:0 format_version_info - D
gptme/telemetry.py
F 287:0 record_llm_request - E
gptme/tools/chats.py
gptme/tools/shell.py
M 705:4 ShellSession._read_output_unix - E
F 1229:0 _format_shell_output - E
M 546:4 ShellSession._read_output_windows - D
M 413:4 ShellSession._run_pipe - D
F 1488:0 execute_shell - D
gptme/tools/subagent/api.py
F 34:0 subagent - D
gptme/tools/subagent/execution.py
F 97:0 _create_subagent_thread - D
gptme/tools/lessons.py
F 244:0 auto_include_lessons_hook - D
gptme/tools/autocompact/engine.py
gptme/tools/tmux.py
F 405:0 execute_tmux - D
gptme/tools/gh.py
F 549:0 execute_gh - E
F 99:0 _wait_for_checks - D
gptme/tools/mcp.py
gptme/tools/__init__.py
F 132:0 init_tools - D
gptme/tools/shell_background.py
M 56:4 BackgroundJob._read_output - D
gptme/tools/computer.py
F 580:0 computer - E
gptme/agent/doctor.py
F 337:0 check_lessons - E
gptme/hooks/registry.py
M 112:4 HookRegistry.trigger - D
gptme/hooks/tool_target_instructions.py
F 64:0 _extract_paths - D
gptme/hooks/cli_confirm.py
F 162:0 _looks_like_diff - D
gptme/hooks/token_awareness.py
F 88:0 add_token_usage_warning - D
gptme/server/api_v2_sessions.py
F 246:0 api_conversation_step - E
F 483:0 api_conversation_tool_confirm - D
gptme/server/api_v2.py
F 748:0 api_conversation_edit_message - E
F 451:0 api_conversation_put - D
gptme/server/session_step.py
F 512:0 step - E
gptme/server/tasks_api.py
F 380:0 get_git_status - D
gptme/server/openapi_docs.py
F 760:0 _convert_to_openapi_nullable - D
gptme/lessons/parser.py
F 265:0 parse_lesson - D
gptme/lessons/index.py
M 96:4 LessonIndex._default_dirs - E
gptme/lessons/installer.py
F 239:0 install_skill - E
F 506:0 check_dependencies - D
tests/test_server_v2_auto_stepping.py
F 16:0 test_auto_stepping - E
tests/test_config.py
F 540:0 test_project_config_loaded_from_toml - D
F 577:0 test_project_config_loaded_from_json - D
tests/test_eval_behavioral_solutions.py
F 54:0 _apply_solution - E
tests/test_util_cli.py
F 181:0 test_tools_list - D
F 261:0 test_models_list - D
scripts/demo_capture.py
F 485:0 main - D
scripts/check_rst_formatting.py
F 26:0 check_file - E
scripts/auto_rename_logs.py
F 32:0 auto_rename_logs - D
Largest Files (>300 SLOC):
1875 tests/test_llm_openai.py
1737 tests/test_eval_behavioral.py
1426 gptme/tools/shell.py
1425 tests/test_server_v2.py
1269 tests/test_tools_shell.py
1258 gptme/llm/llm_openai.py
1257 tests/test_init.py
1198 gptme/server/api_v2.py
1193 tests/test_tools_subagent.py
1178 gptme/util/gh.py
1174 gptme/eval/leaderboard.py
1075 tests/test_acp_agent.py
1059 tests/test_util_gh.py
1023 tests/test_eval_behavioral_solutions.py
983 gptme/acp/agent.py
947 gptme/eval/dspy/tasks.py
902 tests/test_config.py
889 tests/test_eval_leaderboard.py
888 gptme/hooks/workspace_agents.py
878 tests/test_info.py
869 tests/test_codeblock.py
866 gptme/eval/main.py
837 gptme/llm/llm_anthropic.py
784 tests/test_util_gh_mocked.py
737 gptme/cli/main.py
715 gptme/eval/suites/basic.py
708 gptme/hooks/tests/test_workspace_agents.py
703 gptme/cli/doctor.py
702 tests/test_tasks_api.py
701 tests/test_agent.py
697 tests/test_tools_browser.py
694 gptme/cli/util.py
678 gptme/tools/browser.py
675 tests/test_tools_gh.py
675 gptme/server/api_v2_sessions.py
661 gptme/server/session_step.py
654 gptme/server/openapi_docs.py
647 gptme/tools/computer.py
640 tests/test_hooks_registry.py
639 gptme/server/tasks_api.py
636 tests/test_prompt_templates.py
635 tests/test_acp_session_runtime.py
625 tests/test_llm_utils.py
615 gptme/util/context.py
612 tests/test_lessons.py
612 gptme/tools/mcp_adapter.py
605 tests/test_server_workspace.py
595 tests/test_doctor.py
592 tests/test_llm_anthropic.py
592 gptme/tools/gh.py
585 gptme/cli/setup.py
580 tests/test_tools_lessons.py
580 tests/test_auto_compact.py
580 gptme/tools/base.py
578 tests/test_tools_precommit.py
576 tests/test_lessons_parser.py
573 tests/test_skill_installer.py
548 tests/test_llm_models_resolution.py
541 gptme/logmanager/manager.py
535 tests/test_server_v2_sessions.py
533 gptme/tools/_browser_playwright.py
526 gptme/eval/execenv.py
516 tests/test_hooks_cost_awareness.py
513 gptme/lessons/installer.py
498 gptme/llm/llm_openai_subscription.py
493 gptme/eval/run.py
491 gptme/llm/__init__.py
484 tests/test_hooks_cache_awareness.py
476 tests/test_llm_auth.py
472 tests/test_tools_base.py
471 gptme/tools/tmux.py
466 tests/test_server_session_models.py
463 gptme/tools/computer_transport.py
456 tests/test_tools_shell_background.py
456 tests/test_cost_display.py
456 tests/test_commands.py
451 scripts/demo_capture.py
449 tests/test_computer_transport.py
445 scripts/analyze_compression.py
441 tests/test_chat.py
437 gptme/server/workspace_api.py
434 tests/test_util_cli.py
433 gptme/llm/models/data.py
432 tests/test_tools_computer.py
430 gptme/util/prompt.py
424 tests/test_eval.py
422 tests/test_lessons_commands.py
422 gptme/chat.py
421 tests/test_dirs.py
421 gptme/eval/dspy/prompt_optimizer.py
419 gptme/agent/service.py
418 tests/context/test_task_analyzer.py
418 scripts/github_bot.py
404 gptme/tools/subagent/api.py
399 tests/test_tools_shell_validation.py
398 tests/test_tools_mcp.py
396 gptme/message.py
395 gptme/agent/workspace.py
395 gptme/agent/cli.py
394 tests/test_lessons_index.py
391 gptme/tools/chats.py
388 tests/test_server_path_traversal.py
387 gptme/agent/doctor.py
381 gptme/hooks/registry.py
380 tests/test_util_cli_mcp.py
372 tests/test_lessons_matcher.py
370 gptme/util/_telemetry.py
367 gptme/hooks/tests/test_cost_awareness.py
364 gptme/eval/dspy/cli.py
363 gptme/cli/cmd_hooks.py
355 gptme/eval/dspy/experiments.py
354 tests/test_profiles.py
353 tests/test_cli.py
351 gptme/tools/mcp.py
350 gptme/eval/dspy/metrics.py
347 tests/test_util_hooks.py
346 tests/test_tools_patch.py
346 tests/lessons/test_wildcard_matching.py
343 gptme/hooks/tests/test_elicitation.py
342 tests/test_workspace_api.py
342 tests/test_shell_background.py
342 gptme/telemetry.py
341 tests/test_unified_plugins.py
339 tests/test_message.py
336 tests/test_eval_trends.py
335 gptme/tools/subagent/execution.py
333 tests/test_provider_plugins.py
329 tests/test_workspace_agents.py
327 gptme/hooks/tests/test_agents_md_inject.py
326 gptme/eval/suites/practical.py
322 tests/test_util_tool_format.py
320 gptme/checkpoint.py
319 tests/conftest.py
318 tests/test_agent_doctor.py
317 gptme/eval/suites/practical16.py
316 gptme/eval/trends.py
315 tests/test_mcp_discovery.py
313 tests/test_mcp_adapter.py
311 tests/test_hybrid_lessons.py
310 tests/test_tools_morph.py
309 gptme/tools/patch.py
309 gptme/hooks/tests/test_confirm.py
302 gptme/cli/cmd_chats.py
make[3]: Entering directory '/home/runner/work/gptme/gptme'
Most Duplicated Files:
npm warn exec The following package was not found and will be installed: jscpd@4.2.3
Clone found (python):
- gptme/util/_sound_sounddevice.py [103:5 - 115:71] (12 lines, 113 tokens)
gptme/util/_sound_sounddevice.py [62:5 - 74:31]
Clone found (python):
- gptme/tools/autocompact/engine.py [235:17 - 245:39] (10 lines, 92 tokens)
gptme/tools/autocompact/engine.py [185:13 - 195:32]
Clone found (python):
- gptme/tools/shell_background.py [89:39 - 97:25] (8 lines, 84 tokens)
gptme/tools/shell_background.py [71:24 - 79:43]
Clone found (python):
- gptme/tools/precommit.py [124:65 - 132:11] (8 lines, 71 tokens)
gptme/tools/precommit.py [113:50 - 122:59]
Clone found (python):
- gptme/tools/patch.py [330:5 - 344:8] (14 lines, 93 tokens)
gptme/tools/save.py [127:5 - 141:45]
Clone found (python):
- gptme/tools/gh.py [151:13 - 160:15] (9 lines, 80 tokens)
gptme/tools/gh.py [78:9 - 89:15]
Clone found (python):
- gptme/tools/computer.py [684:13 - 703:73] (19 lines, 147 tokens)
gptme/tools/computer_transport.py [188:13 - 207:79]
Clone found (python):
- gptme/server/workspace_api.py [64:5 - 71:25] (7 lines, 94 tokens)
gptme/server/workspace_api.py [45:68 - 52:23]
Clone found (python):
- gptme/server/workspace_api.py [587:9 - 609:15] (22 lines, 230 tokens)
gptme/server/workspace_api.py [509:9 - 531:14]
Clone found (python):
- gptme/server/tasks_api.py [502:49 - 513:50] (11 lines, 79 tokens)
gptme/server/tasks_api.py [489:71 - 499:13]
Clone found (python):
- gptme/server/session_models.py [285:29 - 299:60] (14 lines, 118 tokens)
gptme/server/session_models.py [229:25 - 242:25]
Clone found (python):
- gptme/server/session_models.py [308:17 - 324:45] (16 lines, 104 tokens)
gptme/server/session_models.py [254:21 - 270:23]
Clone found (python):
- gptme/server/external_sessions.py [247:103 - 258:20] (11 lines, 99 tokens)
gptme/server/external_sessions.py [131:97 - 142:17]
Clone found (python):
- gptme/server/api_v2_sessions.py [644:5 - 653:11] (9 lines, 82 tokens)
gptme/server/api_v2_sessions.py [250:5 - 259:15]
Clone found (python):
- gptme/server/api_v2_sessions.py [899:5 - 913:7] (14 lines, 129 tokens)
gptme/server/api_v2_sessions.py [248:5 - 262:11]
Clone found (python):
- gptme/plugins/__init__.py [412:5 - 437:29] (25 lines, 183 tokens)
gptme/util/install.py [14:5 - 39:32]
Clone found (python):
- gptme/llm/models/listing.py [342:32 - 348:38] (6 lines, 75 tokens)
gptme/llm/models/listing.py [169:21 - 175:27]
Clone found (python):
- gptme/llm/models/data.py [35:26 - 47:62] (12 lines, 90 tokens)
gptme/llm/models/data.py [21:26 - 33:43]
Clone found (python):
- gptme/llm/models/data.py [114:33 - 125:35] (11 lines, 88 tokens)
gptme/llm/models/data.py [103:35 - 114:33]
Clone found (python):
- gptme/llm/validate.py [205:45 - 219:18] (14 lines, 99 tokens)
gptme/llm/validate.py [188:48 - 202:23]
Clone found (python):
- gptme/llm/validate.py [222:37 - 233:64] (11 lines, 93 tokens)
gptme/llm/validate.py [188:48 - 199:64]
Clone found (python):
- gptme/hooks/tests/test_workspace_agents.py [707:13 - 719:63] (12 lines, 89 tokens)
gptme/hooks/tests/test_workspace_agents.py [431:13 - 443:53]
Clone found (python):
- gptme/hooks/tests/test_tool_target_instructions.py [154:32 - 159:67] (5 lines, 77 tokens)
gptme/hooks/tests/test_tool_target_instructions.py [133:31 - 138:72]
Clone found (python):
- gptme/hooks/tests/test_tool_target_instructions.py [245:36 - 253:42] (8 lines, 84 tokens)
gptme/hooks/tests/test_tool_target_instructions.py [131:43 - 137:63]
Clone found (python):
- gptme/hooks/tests/test_time_awareness.py [130:32 - 136:23] (6 lines, 77 tokens)
gptme/hooks/tests/test_time_awareness.py [112:36 - 118:22]
Clone found (python):
- gptme/hooks/tests/test_time_awareness.py [144:31 - 150:22] (6 lines, 77 tokens)
gptme/hooks/tests/test_time_awareness.py [112:36 - 118:22]
Clone found (python):
- gptme/hooks/tests/test_server_confirm.py [254:35 - 266:34] (12 lines, 124 tokens)
gptme/hooks/tests/test_server_elicit.py [265:35 - 277:34]
Clone found (python):
- gptme/hooks/tests/test_cost_awareness.py [271:9 - 284:40] (13 lines, 86 tokens)
gptme/hooks/tests/test_cost_awareness.py [239:9 - 252:35]
Clone found (python):
- gptme/hooks/tests/test_cost_awareness.py [383:9 - 399:48] (16 lines, 97 tokens)
gptme/hooks/tests/test_cost_awareness.py [360:9 - 376:47]
Clone found (python):
- gptme/hooks/tests/test_agents_md_inject.py [131:9 - 142:69] (11 lines, 87 tokens)
gptme/hooks/tests/test_agents_md_inject.py [62:9 - 72:15]
Clone found (python):
- gptme/hooks/tests/test_agents_md_inject.py [188:46 - 203:38] (15 lines, 112 tokens)
gptme/hooks/tests/test_agents_md_inject.py [156:74 - 171:38]
Clone found (python):
- gptme/hooks/tests/test_agents_md_inject.py [236:55 - 252:19] (16 lines, 116 tokens)
gptme/hooks/tests/test_agents_md_inject.py [156:74 - 172:21]
Clone found (python):
- gptme/hooks/tests/test_agents_md_inject.py [260:54 - 275:62] (15 lines, 104 tokens)
gptme/hooks/tests/test_agents_md_inject.py [156:74 - 170:69]
Clone found (python):
- gptme/hooks/tests/test_agents_md_inject.py [286:48 - 302:29] (16 lines, 118 tokens)
gptme/hooks/tests/test_agents_md_inject.py [156:74 - 252:41]
Clone found (python):
- gptme/hooks/tests/test_agents_md_inject.py [369:44 - 384:38] (15 lines, 115 tokens)
gptme/hooks/tests/test_agents_md_inject.py [332:68 - 347:38]
Clone found (python):
- gptme/eval/suites/behavioral/implement_event_emitter.py [68:5 - 75:79] (7 lines, 106 tokens)
gptme/eval/suites/behavioral/implement_event_emitter.py [54:5 - 61:77]
Clone found (python):
- gptme/eval/suites/behavioral/implement_event_emitter.py [85:5 - 92:78] (7 lines, 106 tokens)
gptme/eval/suites/behavioral/implement_event_emitter.py [54:5 - 61:77]
Clone found (python):
- gptme/eval/suites/behavioral/circuit_breaker.py [3:1 - 19:37] (16 lines, 115 tokens)
gptme/eval/suites/behavioral/rate_limiting.py [3:1 - 19:32]
Clone found (python):
- gptme/eval/suites/behavioral/add_type_hints.py [42:5 - 50:15] (8 lines, 100 tokens)
gptme/eval/suites/behavioral/add_type_hints.py [20:5 - 36:16]
Clone found (python):
- gptme/eval/suites/behavioral/add_type_hints.py [83:5 - 90:41] (7 lines, 89 tokens)
gptme/eval/suites/behavioral/add_type_hints.py [20:5 - 27:44]
Clone found (python):
- gptme/eval/dspy/cli.py [316:66 - 331:49] (15 lines, 104 tokens)
gptme/eval/dspy/cli.py [78:1 - 93:7]
Clone found (python):
- gptme/eval/dspy/cli.py [423:45 - 439:60] (16 lines, 93 tokens)
gptme/eval/dspy/cli.py [160:9 - 176:55]
Clone found (python):
- gptme/eval/dspy/cli.py [450:13 - 456:27] (6 lines, 84 tokens)
gptme/eval/dspy/cli.py [187:13 - 192:69]
Clone found (python):
- gptme/eval/agents/swebench.py [109:13 - 118:16] (9 lines, 93 tokens)
gptme/eval/agents/swebench.py [85:9 - 92:11]
Clone found (python):
- gptme/eval/execenv.py [237:57 - 249:72] (12 lines, 139 tokens)
gptme/eval/filestore.py [59:60 - 71:14]
Clone found (python):
- gptme/eval/execenv.py [482:9 - 503:66] (21 lines, 109 tokens)
gptme/eval/execenv.py [180:9 - 201:64]
Clone found (python):
- gptme/eval/execenv.py [508:13 - 521:23] (13 lines, 93 tokens)
gptme/eval/execenv.py [207:13 - 220:15]
Clone found (python):
- gptme/eval/execenv.py [585:5 - 605:21] (20 lines, 118 tokens)
gptme/eval/execenv.py [360:5 - 380:21]
Clone found (python):
- gptme/eval/execenv.py [615:17 - 634:31] (19 lines, 143 tokens)
gptme/eval/execenv.py [395:17 - 414:88]
Clone found (python):
- gptme/eval/execenv.py [718:13 - 737:86] (19 lines, 144 tokens)
gptme/eval/execenv.py [207:13 - 527:80]
Clone found (python):
- gptme/context/adaptive_compressor.py [69:46 - 81:16] (12 lines, 86 tokens)
gptme/tools/autocompact/scoring.py [158:24 - 167:61]
Clone found (python):
- gptme/context/adaptive_compressor.py [203:48 - 212:49] (9 lines, 86 tokens)
gptme/tools/autocompact/scoring.py [263:25 - 272:49]
Clone found (python):
- gptme/context/__init__.py [36:55 - 49:75] (13 lines, 101 tokens)
gptme/context/selector/__init__.py [46:61 - 59:75]
Clone found (python):
- gptme/commands/meta.py [212:9 - 221:19] (9 lines, 90 tokens)
gptme/commands/meta.py [163:9 - 172:18]
Clone found (python):
- gptme/cli/util.py [922:5 - 929:85] (7 lines, 79 tokens)
gptme/cli/util.py [889:9 - 896:82]
Clone found (python):
- gptme/cli/doctor.py [263:47 - 278:47] (15 lines, 97 tokens)
gptme/cli/doctor.py [241:37 - 256:45]
Clone found (python):
- gptme/agent/cli.py [97:6 - 120:13] (23 lines, 121 tokens)
gptme/cli/cmd_agents.py [76:8 - 99:9]
Clone found (python):
- gptme/acp/client.py [428:5 - 435:19] (7 lines, 139 tokens)
gptme/acp/client.py [239:9 - 246:14]
Clone found (python):
- scripts/generate_sounds.py [165:18 - 173:17] (8 lines, 81 tokens)
scripts/generate_sounds.py [91:16 - 99:15]
Clone found (python):
- scripts/analyze_compression.py [152:54 - 164:33] (12 lines, 97 tokens)
scripts/analyze_compression.py [55:82 - 67:35]
Clone found (python):
- scripts/analyze_compression.py [220:9 - 231:57] (11 lines, 97 tokens)
scripts/analyze_compression.py [116:9 - 127:53]
Clone found (python):
- gptme/telemetry.py [56:24 - 79:8] (23 lines, 106 tokens)
gptme/util/_telemetry.py [281:48 - 304:11]
Clone found (python):
- gptme/telemetry.py [446:5 - 457:19] (11 lines, 90 tokens)
gptme/telemetry.py [109:9 - 120:22]
Clone found (python):
- gptme/__init__.py [10:44 - 21:55] (11 lines, 89 tokens)
gptme/context/selector/__init__.py [46:61 - 58:15]
┌────────────┬────────────────┬─────────────┬──────────────┬──────────────┬──────────────────┬───────────────────┐
│ Format │ Files analyzed │ Total lines │ Total tokens │ Clones found │ Duplicated lines │ Duplicated tokens │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ python │ 361 │ 98533 │ 606606 │ 64 │ 795 (0.81%) │ 6601 (1.09%) │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ css │ 3 │ 225 │ 1446 │ 0 │ 0 (0%) │ 0 (0%) │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ javascript │ 3 │ 652 │ 5980 │ 0 │ 0 (0%) │ 0 (0%) │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ markup │ 2 │ 320 │ 2766 │ 0 │ 0 (0%) │ 0 (0%) │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ markdown │ 7 │ 820 │ 8022 │ 0 │ 0 (0%) │ 0 (0%) │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ yaml │ 3 │ 73 │ 231 │ 0 │ 0 (0%) │ 0 (0%) │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ txt │ 1 │ 78 │ 300 │ 0 │ 0 (0%) │ 0 (0%) │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ bash │ 15 │ 1243 │ 4358 │ 0 │ 0 (0%) │ 0 (0%) │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ toml │ 1 │ 137 │ 326 │ 0 │ 0 (0%) │ 0 (0%) │
├────────────┼────────────────┼─────────────┼──────────────┼──────────────┼──────────────────┼───────────────────┤
│ Total: │ 396 │ 102081 │ 630035 │ 64 │ 795 (0.78%) │ 6601 (1.05%) │
└────────────┴────────────────┴─────────────┴──────────────┴──────────────┴──────────────────┴───────────────────┘
Found 64 clones.
time: 4.732s
make[3]: Leaving directory '/home/runner/work/gptme/gptme'
make[2]: Leaving directory '/home/runner/work/gptme/gptme'
The metrics above show:
Project Overview: Basic stats about the codebase size and complexity
Complex Functions: Functions rated D+ (high complexity, should be refactored)
Large Files: Files over 300 SLOC (should be split into smaller modules)
Duplicated Files: Using jscpd to find duplicated code
We should aim to:
Keep average complexity below 4.0
Have no E-rated functions (extremely complex)
Have few D-rated functions (very complex)
Keep files under 300 SLOC where possible