tunacode-cli 0.0.78.14__tar.gz → 0.1.24__tar.gz
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.
Potentially problematic release.
This version of tunacode-cli might be problematic. Click here for more details.
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/.github/pull_request_template.md +1 -1
- tunacode_cli-0.1.24/.github/workflows/lint.yml +20 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/.github/workflows/publish-release.yml +2 -2
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/.gitignore +3 -1
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/.pre-commit-config.yaml +5 -25
- tunacode_cli-0.1.24/AGENTS.md +302 -0
- tunacode_cli-0.1.24/CHANGELOG.md +155 -0
- tunacode_cli-0.1.24/CLAUDE.md +302 -0
- tunacode_cli-0.1.24/CONTRIBUTING.md +156 -0
- tunacode_cli-0.1.24/PKG-INFO +170 -0
- tunacode_cli-0.1.24/README.md +117 -0
- tunacode_cli-0.1.24/docs/codebase-map/MAP.md +467 -0
- tunacode_cli-0.1.24/docs/codebase-map/architecture/architecture.md +718 -0
- tunacode_cli-0.1.24/docs/codebase-map/modules/00-overview.md +57 -0
- tunacode_cli-0.1.24/docs/codebase-map/modules/INDEX.md +116 -0
- tunacode_cli-0.1.24/docs/codebase-map/modules/configuration.md +99 -0
- tunacode_cli-0.1.24/docs/codebase-map/modules/constants.md +163 -0
- tunacode_cli-0.1.24/docs/codebase-map/modules/core-agents.md +110 -0
- tunacode_cli-0.1.24/docs/codebase-map/modules/core-compaction.md +68 -0
- tunacode_cli-0.1.24/docs/codebase-map/modules/core-prompting.md +100 -0
- tunacode_cli-0.1.24/docs/codebase-map/modules/core-state.md +57 -0
- tunacode_cli-0.1.24/docs/codebase-map/modules/exceptions.md +187 -0
- tunacode_cli-0.1.24/docs/codebase-map/modules/indexing.md +95 -0
- tunacode_cli-0.1.24/docs/codebase-map/modules/lsp.md +112 -0
- tunacode_cli-0.1.24/docs/codebase-map/modules/prompts.md +151 -0
- tunacode_cli-0.1.24/docs/codebase-map/modules/templates.md +113 -0
- tunacode_cli-0.1.24/docs/codebase-map/modules/tools-overview.md +214 -0
- tunacode_cli-0.1.24/docs/codebase-map/modules/types.md +95 -0
- tunacode_cli-0.1.24/docs/codebase-map/modules/ui-overview.md +166 -0
- tunacode_cli-0.1.24/docs/codebase-map/modules/utils.md +149 -0
- tunacode_cli-0.1.24/docs/codebase-map/state/state.md +324 -0
- tunacode_cli-0.1.24/docs/codebase-map/structure/00-root-overview.md +82 -0
- tunacode_cli-0.1.24/docs/codebase-map/structure/01-ui-directory.md +129 -0
- tunacode_cli-0.1.24/docs/codebase-map/structure/02-core-directory.md +136 -0
- tunacode_cli-0.1.24/docs/codebase-map/structure/03-tools-directory.md +169 -0
- tunacode_cli-0.1.24/docs/codebase-map/structure/04-configuration-directory.md +171 -0
- tunacode_cli-0.1.24/docs/codebase-map/structure/05-cli-directory.md +123 -0
- tunacode_cli-0.1.24/docs/codebase-map/structure/06-supporting-modules.md +216 -0
- tunacode_cli-0.1.24/docs/codebase-map/structure/ANALYSIS_SUMMARY.md +266 -0
- tunacode_cli-0.1.24/docs/codebase-map/structure/README.md +233 -0
- tunacode_cli-0.1.24/docs/codebase-map/structure/tree-structure.txt +264 -0
- tunacode_cli-0.1.24/docs/configuration/README.md +20 -0
- {tunacode_cli-0.0.78.14/documentation → tunacode_cli-0.1.24/docs}/configuration/tunacode.json.example +8 -16
- tunacode_cli-0.1.24/docs/images/theme.png +0 -0
- tunacode_cli-0.1.24/docs/images/tui-model-setup.png +0 -0
- tunacode_cli-0.1.24/docs/images/tui.png +0 -0
- tunacode_cli-0.1.24/docs/tools/architecture.md +221 -0
- tunacode_cli-0.1.24/docs/ui/design_philosophy.md +26 -0
- tunacode_cli-0.1.24/docs/ui/nextstep_panels.md +108 -0
- tunacode_cli-0.1.24/pyproject.toml +185 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/pytest.ini +13 -1
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/scripts/check-file-length.sh +28 -2
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/scripts/download_ripgrep.py +13 -13
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/scripts/playwright_cache.py +1 -2
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/scripts/run-dead-imports.sh +1 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/scripts/startup_timer.py +7 -7
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/scripts/ui_import_timer.py +2 -7
- tunacode_cli-0.1.24/scripts/update_models_registry.sh +4 -0
- tunacode_cli-0.1.24/src/tunacode/cli/textual_repl.tcss +283 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/configuration/defaults.py +9 -3
- tunacode_cli-0.1.24/src/tunacode/configuration/models.py +147 -0
- tunacode_cli-0.1.24/src/tunacode/configuration/models_registry.json +1 -0
- tunacode_cli-0.1.24/src/tunacode/configuration/pricing.py +74 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/configuration/settings.py +0 -1
- tunacode_cli-0.1.24/src/tunacode/constants.py +227 -0
- tunacode_cli-0.1.24/src/tunacode/core/__init__.py +6 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/__init__.py +0 -10
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/agent_components/__init__.py +0 -6
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/agent_components/agent_config.py +124 -92
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/agent_components/agent_helpers.py +16 -19
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/agent_components/message_handler.py +8 -9
- tunacode_cli-0.1.24/src/tunacode/core/agents/agent_components/node_processor.py +477 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/agent_components/response_state.py +1 -2
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/agent_components/result_wrapper.py +2 -1
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/agent_components/state_transition.py +3 -7
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/agent_components/streaming.py +49 -74
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/agent_components/task_completion.py +1 -2
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/agent_components/tool_buffer.py +6 -6
- tunacode_cli-0.1.24/src/tunacode/core/agents/agent_components/tool_executor.py +101 -0
- tunacode_cli-0.1.24/src/tunacode/core/agents/agent_components/truncation_checker.py +37 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/delegation_tools.py +10 -10
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/main.py +46 -116
- tunacode_cli-0.1.24/src/tunacode/core/agents/research_agent.py +231 -0
- tunacode_cli-0.1.24/src/tunacode/core/compaction.py +218 -0
- tunacode_cli-0.1.24/src/tunacode/core/prompting/__init__.py +27 -0
- tunacode_cli-0.1.24/src/tunacode/core/prompting/loader.py +66 -0
- tunacode_cli-0.1.24/src/tunacode/core/prompting/prompting_engine.py +98 -0
- tunacode_cli-0.1.24/src/tunacode/core/prompting/sections.py +50 -0
- tunacode_cli-0.1.24/src/tunacode/core/prompting/templates.py +69 -0
- tunacode_cli-0.1.24/src/tunacode/core/state.py +409 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/exceptions.py +127 -80
- tunacode_cli-0.1.24/src/tunacode/indexing/__init__.py +5 -0
- {tunacode_cli-0.0.78.14/src/tunacode/core → tunacode_cli-0.1.24/src/tunacode/indexing}/code_index.py +117 -218
- tunacode_cli-0.1.24/src/tunacode/indexing/constants.py +86 -0
- tunacode_cli-0.1.24/src/tunacode/lsp/__init__.py +112 -0
- tunacode_cli-0.1.24/src/tunacode/lsp/client.py +351 -0
- tunacode_cli-0.1.24/src/tunacode/lsp/diagnostics.py +19 -0
- tunacode_cli-0.1.24/src/tunacode/lsp/servers.py +101 -0
- tunacode_cli-0.0.78.14/src/tunacode/prompts/system.xml → tunacode_cli-0.1.24/src/tunacode/prompts/default_prompt.md +568 -518
- tunacode_cli-0.1.24/src/tunacode/prompts/research/sections/agent_role.xml +5 -0
- tunacode_cli-0.1.24/src/tunacode/prompts/research/sections/constraints.xml +14 -0
- tunacode_cli-0.0.78.14/src/tunacode/prompts/research/system.xml → tunacode_cli-0.1.24/src/tunacode/prompts/research/sections/output_format.xml +0 -42
- tunacode_cli-0.1.24/src/tunacode/prompts/research/sections/tool_use.xml +23 -0
- tunacode_cli-0.1.24/src/tunacode/prompts/sections/advanced_patterns.xml +255 -0
- tunacode_cli-0.1.24/src/tunacode/prompts/sections/agent_role.xml +8 -0
- tunacode_cli-0.1.24/src/tunacode/prompts/sections/completion.xml +10 -0
- tunacode_cli-0.1.24/src/tunacode/prompts/sections/critical_rules.xml +37 -0
- tunacode_cli-0.1.24/src/tunacode/prompts/sections/examples.xml +220 -0
- tunacode_cli-0.1.24/src/tunacode/prompts/sections/output_style.xml +94 -0
- tunacode_cli-0.1.24/src/tunacode/prompts/sections/parallel_exec.xml +105 -0
- tunacode_cli-0.1.24/src/tunacode/prompts/sections/search_pattern.xml +100 -0
- tunacode_cli-0.1.24/src/tunacode/prompts/sections/system_info.xml +6 -0
- tunacode_cli-0.1.24/src/tunacode/prompts/sections/tool_use.xml +84 -0
- tunacode_cli-0.1.24/src/tunacode/prompts/sections/user_instructions.xml +3 -0
- tunacode_cli-0.1.24/src/tunacode/templates/__init__.py +5 -0
- tunacode_cli-0.1.24/src/tunacode/templates/loader.py +15 -0
- tunacode_cli-0.1.24/src/tunacode/tools/authorization/__init__.py +29 -0
- tunacode_cli-0.1.24/src/tunacode/tools/authorization/context.py +32 -0
- tunacode_cli-0.1.24/src/tunacode/tools/authorization/factory.py +20 -0
- tunacode_cli-0.1.24/src/tunacode/tools/authorization/handler.py +58 -0
- tunacode_cli-0.1.24/src/tunacode/tools/authorization/notifier.py +35 -0
- tunacode_cli-0.1.24/src/tunacode/tools/authorization/policy.py +19 -0
- tunacode_cli-0.1.24/src/tunacode/tools/authorization/requests.py +119 -0
- tunacode_cli-0.1.24/src/tunacode/tools/authorization/rules.py +72 -0
- tunacode_cli-0.1.24/src/tunacode/tools/bash.py +222 -0
- tunacode_cli-0.1.24/src/tunacode/tools/decorators.py +213 -0
- tunacode_cli-0.1.24/src/tunacode/tools/glob.py +353 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/tools/grep.py +70 -153
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/tools/grep_components/file_filter.py +7 -7
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/tools/grep_components/pattern_matcher.py +15 -9
- tunacode_cli-0.1.24/src/tunacode/tools/grep_components/result_formatter.py +87 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/tools/grep_components/search_result.py +4 -5
- tunacode_cli-0.1.24/src/tunacode/tools/list_dir.py +205 -0
- tunacode_cli-0.1.24/src/tunacode/tools/prompts/bash_prompt.xml +10 -0
- tunacode_cli-0.1.24/src/tunacode/tools/prompts/glob_prompt.xml +7 -0
- tunacode_cli-0.1.24/src/tunacode/tools/prompts/grep_prompt.xml +10 -0
- tunacode_cli-0.1.24/src/tunacode/tools/prompts/list_dir_prompt.xml +7 -0
- tunacode_cli-0.1.24/src/tunacode/tools/prompts/read_file_prompt.xml +9 -0
- tunacode_cli-0.1.24/src/tunacode/tools/prompts/todoclear_prompt.xml +12 -0
- tunacode_cli-0.1.24/src/tunacode/tools/prompts/todoread_prompt.xml +16 -0
- tunacode_cli-0.1.24/src/tunacode/tools/prompts/todowrite_prompt.xml +28 -0
- tunacode_cli-0.1.24/src/tunacode/tools/prompts/update_file_prompt.xml +9 -0
- tunacode_cli-0.1.24/src/tunacode/tools/prompts/web_fetch_prompt.xml +11 -0
- tunacode_cli-0.1.24/src/tunacode/tools/prompts/write_file_prompt.xml +7 -0
- tunacode_cli-0.1.24/src/tunacode/tools/react.py +111 -0
- tunacode_cli-0.1.24/src/tunacode/tools/read_file.py +68 -0
- tunacode_cli-0.1.24/src/tunacode/tools/todo.py +222 -0
- tunacode_cli-0.1.24/src/tunacode/tools/update_file.py +62 -0
- tunacode_cli-0.1.24/src/tunacode/tools/utils/__init__.py +1 -0
- {tunacode_cli-0.0.78.14/src/tunacode/tools_utils → tunacode_cli-0.1.24/src/tunacode/tools/utils}/ripgrep.py +17 -46
- {tunacode_cli-0.0.78.14/src/tunacode/tools_utils → tunacode_cli-0.1.24/src/tunacode/tools/utils}/text_match.py +32 -18
- tunacode_cli-0.1.24/src/tunacode/tools/web_fetch.py +245 -0
- tunacode_cli-0.1.24/src/tunacode/tools/write_file.py +34 -0
- tunacode_cli-0.1.24/src/tunacode/tools/xml_helper.py +34 -0
- tunacode_cli-0.1.24/src/tunacode/types/__init__.py +166 -0
- tunacode_cli-0.1.24/src/tunacode/types/base.py +94 -0
- tunacode_cli-0.1.24/src/tunacode/types/callbacks.py +53 -0
- tunacode_cli-0.1.24/src/tunacode/types/dataclasses.py +121 -0
- tunacode_cli-0.1.24/src/tunacode/types/pydantic_ai.py +31 -0
- tunacode_cli-0.1.24/src/tunacode/types/state.py +122 -0
- tunacode_cli-0.1.24/src/tunacode/ui/__init__.py +6 -0
- tunacode_cli-0.1.24/src/tunacode/ui/app.py +542 -0
- tunacode_cli-0.1.24/src/tunacode/ui/commands/__init__.py +430 -0
- tunacode_cli-0.1.24/src/tunacode/ui/components/__init__.py +1 -0
- tunacode_cli-0.1.24/src/tunacode/ui/headless/__init__.py +5 -0
- tunacode_cli-0.1.24/src/tunacode/ui/headless/output.py +72 -0
- tunacode_cli-0.1.24/src/tunacode/ui/main.py +252 -0
- tunacode_cli-0.1.24/src/tunacode/ui/renderers/__init__.py +41 -0
- tunacode_cli-0.1.24/src/tunacode/ui/renderers/errors.py +197 -0
- tunacode_cli-0.1.24/src/tunacode/ui/renderers/panels.py +550 -0
- tunacode_cli-0.1.24/src/tunacode/ui/renderers/search.py +314 -0
- tunacode_cli-0.1.24/src/tunacode/ui/renderers/tools/__init__.py +21 -0
- tunacode_cli-0.1.24/src/tunacode/ui/renderers/tools/bash.py +247 -0
- tunacode_cli-0.1.24/src/tunacode/ui/renderers/tools/diagnostics.py +186 -0
- tunacode_cli-0.1.24/src/tunacode/ui/renderers/tools/glob.py +226 -0
- tunacode_cli-0.1.24/src/tunacode/ui/renderers/tools/grep.py +228 -0
- tunacode_cli-0.1.24/src/tunacode/ui/renderers/tools/list_dir.py +198 -0
- tunacode_cli-0.1.24/src/tunacode/ui/renderers/tools/read_file.py +226 -0
- tunacode_cli-0.1.24/src/tunacode/ui/renderers/tools/research.py +294 -0
- tunacode_cli-0.1.24/src/tunacode/ui/renderers/tools/update_file.py +237 -0
- tunacode_cli-0.1.24/src/tunacode/ui/renderers/tools/web_fetch.py +182 -0
- tunacode_cli-0.1.24/src/tunacode/ui/repl_support.py +226 -0
- tunacode_cli-0.1.24/src/tunacode/ui/screens/__init__.py +16 -0
- tunacode_cli-0.1.24/src/tunacode/ui/screens/model_picker.py +303 -0
- tunacode_cli-0.1.24/src/tunacode/ui/screens/session_picker.py +181 -0
- tunacode_cli-0.1.24/src/tunacode/ui/screens/setup.py +218 -0
- tunacode_cli-0.1.24/src/tunacode/ui/screens/theme_picker.py +90 -0
- tunacode_cli-0.1.24/src/tunacode/ui/screens/update_confirm.py +69 -0
- tunacode_cli-0.1.24/src/tunacode/ui/shell_runner.py +129 -0
- tunacode_cli-0.1.24/src/tunacode/ui/styles/layout.tcss +98 -0
- tunacode_cli-0.1.24/src/tunacode/ui/styles/modals.tcss +38 -0
- tunacode_cli-0.1.24/src/tunacode/ui/styles/panels.tcss +81 -0
- tunacode_cli-0.1.24/src/tunacode/ui/styles/theme-nextstep.tcss +303 -0
- tunacode_cli-0.1.24/src/tunacode/ui/styles/widgets.tcss +33 -0
- tunacode_cli-0.1.24/src/tunacode/ui/styles.py +18 -0
- tunacode_cli-0.1.24/src/tunacode/ui/widgets/__init__.py +23 -0
- tunacode_cli-0.1.24/src/tunacode/ui/widgets/command_autocomplete.py +62 -0
- tunacode_cli-0.1.24/src/tunacode/ui/widgets/editor.py +402 -0
- tunacode_cli-0.1.24/src/tunacode/ui/widgets/file_autocomplete.py +47 -0
- tunacode_cli-0.1.24/src/tunacode/ui/widgets/messages.py +46 -0
- tunacode_cli-0.1.24/src/tunacode/ui/widgets/resource_bar.py +182 -0
- tunacode_cli-0.1.24/src/tunacode/ui/widgets/status_bar.py +98 -0
- tunacode_cli-0.1.24/src/tunacode/utils/config/__init__.py +13 -0
- {tunacode_cli-0.0.78.14/src/tunacode/utils → tunacode_cli-0.1.24/src/tunacode/utils/config}/user_configuration.py +14 -61
- tunacode_cli-0.1.24/src/tunacode/utils/messaging/__init__.py +10 -0
- {tunacode_cli-0.0.78.14/src/tunacode/utils → tunacode_cli-0.1.24/src/tunacode/utils/messaging}/message_utils.py +5 -0
- {tunacode_cli-0.0.78.14/src/tunacode/utils → tunacode_cli-0.1.24/src/tunacode/utils/messaging}/token_counter.py +5 -20
- tunacode_cli-0.1.24/src/tunacode/utils/parsing/__init__.py +13 -0
- {tunacode_cli-0.0.78.14/src/tunacode/cli/repl_components → tunacode_cli-0.1.24/src/tunacode/utils/parsing}/command_parser.py +5 -18
- {tunacode_cli-0.0.78.14/src/tunacode/utils → tunacode_cli-0.1.24/src/tunacode/utils/parsing}/json_utils.py +41 -59
- {tunacode_cli-0.0.78.14/src/tunacode/utils → tunacode_cli-0.1.24/src/tunacode/utils/parsing}/retry.py +2 -19
- tunacode_cli-0.1.24/src/tunacode/utils/parsing/tool_parser.py +267 -0
- tunacode_cli-0.1.24/src/tunacode/utils/security/__init__.py +15 -0
- tunacode_cli-0.0.78.14/src/tunacode/utils/security.py → tunacode_cli-0.1.24/src/tunacode/utils/security/command.py +2 -105
- tunacode_cli-0.1.24/src/tunacode/utils/system/__init__.py +25 -0
- tunacode_cli-0.1.24/src/tunacode/utils/system/gitignore.py +155 -0
- tunacode_cli-0.1.24/src/tunacode/utils/system/paths.py +190 -0
- tunacode_cli-0.1.24/src/tunacode/utils/ui/__init__.py +9 -0
- tunacode_cli-0.1.24/src/tunacode/utils/ui/file_filter.py +135 -0
- tunacode_cli-0.1.24/src/tunacode/utils/ui/helpers.py +24 -0
- tunacode_cli-0.1.24/tests/__init__.py +1 -0
- tunacode_cli-0.1.24/tests/conftest.py +19 -0
- tunacode_cli-0.1.24/tests/test_cli_default_command.py +29 -0
- tunacode_cli-0.1.24/tests/test_compaction.py +343 -0
- tunacode_cli-0.1.24/tests/test_confirmation_preview.py +46 -0
- tunacode_cli-0.1.24/tests/test_diagnostics_renderer.py +175 -0
- tunacode_cli-0.1.24/tests/test_exceptions.py +94 -0
- tunacode_cli-0.1.24/tests/test_headless_cli.py +37 -0
- tunacode_cli-0.1.24/tests/test_prompting_engine.py +90 -0
- tunacode_cli-0.1.24/tests/test_repl_support.py +26 -0
- tunacode_cli-0.1.24/tests/test_shell_command_escape.py +97 -0
- tunacode_cli-0.1.24/tests/test_text_match.py +132 -0
- tunacode_cli-0.1.24/tests/test_todo_tools.py +48 -0
- tunacode_cli-0.1.24/tests/test_tool_conformance.py +143 -0
- tunacode_cli-0.1.24/tests/test_tool_decorators.py +219 -0
- tunacode_cli-0.1.24/tests/test_tool_parser.py +306 -0
- tunacode_cli-0.1.24/tests/test_tool_retry.py +253 -0
- tunacode_cli-0.1.24/tests/test_update_file_renderer.py +23 -0
- tunacode_cli-0.1.24/tests/test_web_fetch.py +141 -0
- tunacode_cli-0.1.24/uv.lock +3643 -0
- tunacode_cli-0.0.78.14/.claude/README.md +0 -28
- tunacode_cli-0.0.78.14/.claude/cheatsheets/agents.core.json +0 -12
- tunacode_cli-0.0.78.14/.claude/debug_history/2025-09-21-rag-search-hyphen-gotcha.md +0 -8
- tunacode_cli-0.0.78.14/.claude/debug_history/2025-11-05_tool_handler_refactoring.md +0 -236
- tunacode_cli-0.0.78.14/.claude/debug_history/agent.state.json +0 -13
- tunacode_cli-0.0.78.14/.claude/debug_history/agent.tool_execution.json +0 -13
- tunacode_cli-0.0.78.14/.claude/debug_history/agent_components.streaming.json +0 -13
- tunacode_cli-0.0.78.14/.claude/debug_history/agents.delegation.json +0 -13
- tunacode_cli-0.0.78.14/.claude/debug_history/cli.tool_confirmation.json +0 -13
- tunacode_cli-0.0.78.14/.claude/debug_history/core.agents.main.json +0 -13
- tunacode_cli-0.0.78.14/.claude/debug_history/core.agents.prompts.json +0 -13
- tunacode_cli-0.0.78.14/.claude/debug_history/debug_sessions.json +0 -142
- tunacode_cli-0.0.78.14/.claude/debug_history/error-handling.json +0 -13
- tunacode_cli-0.0.78.14/.claude/debug_history/streaming.json +0 -13
- tunacode_cli-0.0.78.14/.claude/debug_history/ui.panels.json +0 -13
- tunacode_cli-0.0.78.14/.claude/debug_history/ui.research_agent.json +0 -13
- tunacode_cli-0.0.78.14/.claude/debug_history/ui.research_feedback.json +0 -13
- tunacode_cli-0.0.78.14/.claude/delta_summaries/2025-01-05-baseline.yml +0 -27
- tunacode_cli-0.0.78.14/.claude/delta_summaries/2025-09-21-models_registry-pydantic-conversion.md +0 -26
- tunacode_cli-0.0.78.14/.claude/delta_summaries/2025-09-21-models_registry-validation-tests.md +0 -18
- tunacode_cli-0.0.78.14/.claude/delta_summaries/2025-09-21-test-update-model-command-characterization.md +0 -17
- tunacode_cli-0.0.78.14/.claude/delta_summaries/2025-10-01-startup-banner-panel.md +0 -14
- tunacode_cli-0.0.78.14/.claude/delta_summaries/2025-10-03-tool_handler-behavior-optimization.md +0 -70
- tunacode_cli-0.0.78.14/.claude/delta_summaries/2025-11-05_tool_handler_api_changes.md +0 -372
- tunacode_cli-0.0.78.14/.claude/delta_summaries/api_change_logs.json +0 -133
- tunacode_cli-0.0.78.14/.claude/delta_summaries/behavior_changes.json +0 -394
- tunacode_cli-0.0.78.14/.claude/delta_summaries/fix-text-alignment-layout-task3.md +0 -48
- tunacode_cli-0.0.78.14/.claude/delta_summaries/prompt_system_xml_migration.json +0 -23
- tunacode_cli-0.0.78.14/.claude/delta_summaries/reasoning_logs.json +0 -352
- tunacode_cli-0.0.78.14/.claude/delta_summaries/task4_ui_formatting_fix.md +0 -75
- tunacode_cli-0.0.78.14/.claude/delta_summaries/v0.0.53_to_v0.0.54.diff +0 -13
- tunacode_cli-0.0.78.14/.claude/development/always-on-display-implementation.md +0 -11
- tunacode_cli-0.0.78.14/.claude/development/cli-json-recovery-incident.md +0 -181
- tunacode_cli-0.0.78.14/.claude/development/directory-caching-optimization.md +0 -195
- tunacode_cli-0.0.78.14/.claude/development/esc-investigation/ESC_KEY_INVESTIGATION.md +0 -84
- tunacode_cli-0.0.78.14/.claude/development/esc-investigation/ESC_KEY_STREAMING_ANALYSIS.md +0 -308
- tunacode_cli-0.0.78.14/.claude/development/hatch-commands.md +0 -120
- tunacode_cli-0.0.78.14/.claude/development/model-updates-2025.md +0 -18
- tunacode_cli-0.0.78.14/.claude/development/onboarding-improvements.md +0 -20
- tunacode_cli-0.0.78.14/.claude/development/openai_tool_calling_evaluation.md +0 -85
- tunacode_cli-0.0.78.14/.claude/development/phase5-prompt-injection-system.md +0 -119
- tunacode_cli-0.0.78.14/.claude/development/slash-commands.md +0 -34
- tunacode_cli-0.0.78.14/.claude/development/uv-hatch-setup.md +0 -102
- tunacode_cli-0.0.78.14/.claude/development/uv-installer-updates.md +0 -67
- tunacode_cli-0.0.78.14/.claude/development/version-management.md +0 -73
- tunacode_cli-0.0.78.14/.claude/docs_model_friendly/component_purpose.md +0 -273
- tunacode_cli-0.0.78.14/.claude/docs_model_friendly/component_relationships.md +0 -341
- tunacode_cli-0.0.78.14/.claude/docs_model_friendly/option3_feedback_flow.md +0 -207
- tunacode_cli-0.0.78.14/.claude/docs_model_friendly/rag_modules_overview.md +0 -21
- tunacode_cli-0.0.78.14/.claude/kv/github-actions-release-fix.json +0 -1
- tunacode_cli-0.0.78.14/.claude/manifest.json +0 -326
- tunacode_cli-0.0.78.14/.claude/memory_anchors/anchors.json +0 -60
- tunacode_cli-0.0.78.14/.claude/metadata/components.yml +0 -84
- tunacode_cli-0.0.78.14/.claude/metadata/file_classifications.json +0 -195
- tunacode_cli-0.0.78.14/.claude/metadata/hotspots.txt +0 -20
- tunacode_cli-0.0.78.14/.claude/patterns/agent.state.json +0 -11
- tunacode_cli-0.0.78.14/.claude/patterns/agents.delegation.json +0 -11
- tunacode_cli-0.0.78.14/.claude/patterns/agents.main_beta.json +0 -11
- tunacode_cli-0.0.78.14/.claude/patterns/agents.parallel_execution.json +0 -15
- tunacode_cli-0.0.78.14/.claude/patterns/canonical_patterns/backward_compatibility_refactor.md +0 -18
- tunacode_cli-0.0.78.14/.claude/patterns/core.agents.agent_config.json +0 -11
- tunacode_cli-0.0.78.14/.claude/patterns/core.agents.main.json +0 -11
- tunacode_cli-0.0.78.14/.claude/patterns/error-handling.json +0 -15
- tunacode_cli-0.0.78.14/.claude/patterns/json_retry_implementation.md +0 -111
- tunacode_cli-0.0.78.14/.claude/patterns/tool_handler_refactoring_pattern.md +0 -245
- tunacode_cli-0.0.78.14/.claude/patterns/ui.concurrent_updates.json +0 -11
- tunacode_cli-0.0.78.14/.claude/patterns/ui.research_agent.json +0 -11
- tunacode_cli-0.0.78.14/.claude/patterns/ui.research_agent_panel.json +0 -11
- tunacode_cli-0.0.78.14/.claude/qa/agents.core.json +0 -11
- tunacode_cli-0.0.78.14/.claude/qa/context_logs/latest_session.txt +0 -1
- tunacode_cli-0.0.78.14/.claude/qa/context_logs/main-agent-integration-20250917-123100/commits.txt +0 -6
- tunacode_cli-0.0.78.14/.claude/qa/context_logs/main-agent-integration-20250917-123100/diffstat.txt +0 -1
- tunacode_cli-0.0.78.14/.claude/qa/context_logs/main-agent-integration-20250917-123100/files.json +0 -7
- tunacode_cli-0.0.78.14/.claude/qa/context_logs/main-agent-integration-20250917-123100/hunks.txt +0 -4
- tunacode_cli-0.0.78.14/.claude/qa/context_logs/main-agent-integration-20250917-141518/commits.txt +0 -1
- tunacode_cli-0.0.78.14/.claude/qa/context_logs/main-agent-integration-20250917-141518/diffstat.txt +0 -1
- tunacode_cli-0.0.78.14/.claude/qa/context_logs/main-agent-integration-20250917-141518/files.json +0 -22
- tunacode_cli-0.0.78.14/.claude/qa/context_logs/main-agent-integration-20250917-141518/hunks.txt +0 -29
- tunacode_cli-0.0.78.14/.claude/qa/context_logs/react-tool-session-20250120-000002/summary.md +0 -6
- tunacode_cli-0.0.78.14/.claude/qa/context_logs/smart-git-20250917-122934/commits.txt +0 -5
- tunacode_cli-0.0.78.14/.claude/qa/context_logs/smart-git-20250917-122934/diffstat.txt +0 -9
- tunacode_cli-0.0.78.14/.claude/qa/context_logs/smart-git-20250917-122934/files.json +0 -10
- tunacode_cli-0.0.78.14/.claude/qa/context_logs/tool-rejection-feedback-20251010-000001/summary.md +0 -7
- tunacode_cli-0.0.78.14/.claude/qa/core.agents.main.json +0 -11
- tunacode_cli-0.0.78.14/.claude/qa/fix-agent-errors.yml +0 -6
- tunacode_cli-0.0.78.14/.claude/qa/fix-publish-script.yml +0 -6
- tunacode_cli-0.0.78.14/.claude/qa/fix-runtime-warnings.yml +0 -6
- tunacode_cli-0.0.78.14/.claude/qa/reasoning_docs/main-agent-integration-20250917-123100.md +0 -27
- tunacode_cli-0.0.78.14/.claude/qa/reasoning_docs/main-agent-integration-20250917-141518.md +0 -31
- tunacode_cli-0.0.78.14/.claude/qa/reasoning_docs/simplified-agent-handoff-20250929.md +0 -21
- tunacode_cli-0.0.78.14/.claude/qa/reasoning_docs/smart-git-20250917-122934.md +0 -37
- tunacode_cli-0.0.78.14/.claude/qa/reasoning_docs/tool-rejection-feedback-20251010-000001.md +0 -16
- tunacode_cli-0.0.78.14/.claude/rag_knowledge.db +0 -0
- tunacode_cli-0.0.78.14/.claude/semantic_index/function_call_graphs.json +0 -326
- tunacode_cli-0.0.78.14/.claude/semantic_index/intent_mappings.json +0 -266
- tunacode_cli-0.0.78.14/.claude/semantic_index/prompt_system_changes.json +0 -21
- tunacode_cli-0.0.78.14/.claude/semantic_index/type_relationships.json +0 -582
- tunacode_cli-0.0.78.14/.github/scripts/check_file_size.py +0 -56
- tunacode_cli-0.0.78.14/.github/workflows/lint.yml +0 -25
- tunacode_cli-0.0.78.14/AGENTS.md +0 -160
- tunacode_cli-0.0.78.14/CLAUDE.md +0 -169
- tunacode_cli-0.0.78.14/PKG-INFO +0 -260
- tunacode_cli-0.0.78.14/README.md +0 -210
- tunacode_cli-0.0.78.14/documentation/README.md +0 -47
- tunacode_cli-0.0.78.14/documentation/agent/TOOLS_WORKFLOW.md +0 -207
- tunacode_cli-0.0.78.14/documentation/agent/agent-flow.md +0 -85
- tunacode_cli-0.0.78.14/documentation/agent/agent-inspo.md +0 -133
- tunacode_cli-0.0.78.14/documentation/agent/how-tunacode-agent-works.md +0 -482
- tunacode_cli-0.0.78.14/documentation/agent/main-agent-architecture.md +0 -238
- tunacode_cli-0.0.78.14/documentation/agent/main-agent-key-sections.md +0 -20
- tunacode_cli-0.0.78.14/documentation/agent/main-agent.md +0 -86
- tunacode_cli-0.0.78.14/documentation/agent/swepmini-example.md +0 -123
- tunacode_cli-0.0.78.14/documentation/agent/tunacode-tool-system.md +0 -515
- tunacode_cli-0.0.78.14/documentation/agent-tools/ReAct-vs-ReWoo.md +0 -89
- tunacode_cli-0.0.78.14/documentation/agent-tools/tools-architecture.md +0 -222
- tunacode_cli-0.0.78.14/documentation/changelog/CHANGELOG.md +0 -344
- tunacode_cli-0.0.78.14/documentation/configuration/.env.example +0 -12
- tunacode_cli-0.0.78.14/documentation/configuration/chutes-ai-setup.md +0 -263
- tunacode_cli-0.0.78.14/documentation/configuration/config-file-example.md +0 -59
- tunacode_cli-0.0.78.14/documentation/configuration/config-flow-diagram.md +0 -65
- tunacode_cli-0.0.78.14/documentation/configuration/config-touch-points.md +0 -21
- tunacode_cli-0.0.78.14/documentation/configuration/environment-variables.md +0 -195
- tunacode_cli-0.0.78.14/documentation/configuration/local-models.md +0 -107
- tunacode_cli-0.0.78.14/documentation/configuration/logging-configuration.md +0 -187
- tunacode_cli-0.0.78.14/documentation/configuration/tunacode-json-example.md +0 -123
- tunacode_cli-0.0.78.14/documentation/development/codebase-hygiene.md +0 -3
- tunacode_cli-0.0.78.14/documentation/development/command-system-architecture.md +0 -259
- tunacode_cli-0.0.78.14/documentation/development/creating-custom-commands.md +0 -399
- tunacode_cli-0.0.78.14/documentation/development/performance-optimizations.md +0 -106
- tunacode_cli-0.0.78.14/documentation/development/prompt-principles.md +0 -84
- tunacode_cli-0.0.78.14/documentation/development/publishing-workflow.md +0 -119
- tunacode_cli-0.0.78.14/documentation/development/streaming-text-prefix-fix.md +0 -199
- tunacode_cli-0.0.78.14/documentation/tests/README.md +0 -55
- tunacode_cli-0.0.78.14/documentation/tests/characterization-testing.md +0 -142
- tunacode_cli-0.0.78.14/documentation/tests/mocking-strategies.md +0 -340
- tunacode_cli-0.0.78.14/documentation/tests/troubleshooting.md +0 -219
- tunacode_cli-0.0.78.14/documentation/ui/ui-architecture.md +0 -454
- tunacode_cli-0.0.78.14/documentation/user/commands.md +0 -113
- tunacode_cli-0.0.78.14/documentation/user/getting-started.md +0 -251
- tunacode_cli-0.0.78.14/documentation/user/tools.md +0 -28
- tunacode_cli-0.0.78.14/memory-bank/execute/2025-09-12_15-20-00_model_selection_config_persistence_fix.md +0 -146
- tunacode_cli-0.0.78.14/memory-bank/execute/2025-09-15_12-30-00_configuration_dashboard_implementation.md +0 -121
- tunacode_cli-0.0.78.14/memory-bank/execute/2025-09-15_configuration_dashboard_ux_improvements.md +0 -177
- tunacode_cli-0.0.78.14/memory-bank/execute/2025-09-29_12-15-00_git_safety_branch_removal_log.md +0 -112
- tunacode_cli-0.0.78.14/memory-bank/execute/2025-10-02_14-45-00_release_process_automation.md +0 -25
- tunacode_cli-0.0.78.14/memory-bank/execute/2025-11-18_17-15-00_multi-agent-delegation-implementation.md +0 -424
- tunacode_cli-0.0.78.14/memory-bank/execute/2025-11-19_error_handling_hardening.md +0 -194
- tunacode_cli-0.0.78.14/memory-bank/execute/2025-11-19_error_handling_hardening_REPORT.md +0 -236
- tunacode_cli-0.0.78.14/memory-bank/execute/2025-11-20_23-50-00_global-request-timeout.md +0 -185
- tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-11_13-30-00_agent_loop_architecture_enhancement.md +0 -504
- tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-11_14-00-00_enum_state_machine_implementation.md +0 -451
- tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-11_14-15-00_automated_cli_tool_testing_framework.md +0 -461
- tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-12_12-20-00_global_graceful_error_handling_implementation.md +0 -399
- tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-12_15-08-14_model_selection_config_persistence_fix.md +0 -208
- tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-15_12-29-04_configuration_dashboard_implementation.md +0 -485
- tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-17_15-30-00_main-agent-refactor_plan.md +0 -325
- tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-19_11-30-00_tunacode_md_to_agents_md_migration.md +0 -440
- tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-24_cli_prompt_toolkit_fuzzy_plan.md +0 -88
- tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-29_11-15-30_simplified_agent_implementation.md +0 -81
- tunacode_cli-0.0.78.14/memory-bank/plan/2025-09-29_11-45-00_git_safety_branch_removal_plan.md +0 -334
- tunacode_cli-0.0.78.14/memory-bank/plan/2025-10-02_14-30-45_release_process_automation.md +0 -114
- tunacode_cli-0.0.78.14/memory-bank/plan/2025-11-12_15-50-42_critical_thread_safety_resource_fixes.md +0 -433
- tunacode_cli-0.0.78.14/memory-bank/plan/2025-11-18_17-09-12_multi-agent-delegation-implementation.md +0 -474
- tunacode_cli-0.0.78.14/memory-bank/plan/2025-11-19_10-00-00_main_agent_error_handling_hardening.md +0 -321
- tunacode_cli-0.0.78.14/memory-bank/plan/2025-11-20_global-request-timeout-plan.md +0 -243
- tunacode_cli-0.0.78.14/memory-bank/plan/2025-11-20_rate-limit-signaling-plan.md +0 -172
- tunacode_cli-0.0.78.14/memory-bank/plan/2025-11-20_recovery-notification-plan.md +0 -201
- tunacode_cli-0.0.78.14/memory-bank/plan/plan-1.md +0 -389
- tunacode_cli-0.0.78.14/memory-bank/research/2025-01-19_react-shim-analysis.md +0 -101
- tunacode_cli-0.0.78.14/memory-bank/research/2025-09-07_21-13-37_agent_loop_architecture.md +0 -176
- tunacode_cli-0.0.78.14/memory-bank/research/2025-09-11_13-14-06_agent_loop_enhancement_analysis.md +0 -222
- tunacode_cli-0.0.78.14/memory-bank/research/2025-09-12_12-15-48_global_graceful_error_handling_analysis.md +0 -126
- tunacode_cli-0.0.78.14/memory-bank/research/2025-09-12_14-54-43_model_configuration_crash_analysis.md +0 -130
- tunacode_cli-0.0.78.14/memory-bank/research/2025-09-12_15-06-58_model_selection_config_update_issue.md +0 -63
- tunacode_cli-0.0.78.14/memory-bank/research/2025-09-12_ai-agent-tools-architecture.md +0 -222
- tunacode_cli-0.0.78.14/memory-bank/research/2025-09-15_12-19-00_configuration_system_and_dashboard.md +0 -184
- tunacode_cli-0.0.78.14/memory-bank/research/2025-09-15_13-54-11_first-chunk_character_loss_investigation.md +0 -109
- tunacode_cli-0.0.78.14/memory-bank/research/2025-09-16_11-12-45_setup_py_usage_and_location_analysis.md +0 -145
- tunacode_cli-0.0.78.14/memory-bank/research/2025-09-19_11-25-00_tunacode_md_to_agents_md_migration.md +0 -207
- tunacode_cli-0.0.78.14/memory-bank/research/2025-09-21_models-registry-pydantic-conversion.md +0 -217
- tunacode_cli-0.0.78.14/memory-bank/research/2025-09-24_fuzzy_logic_implementation_analysis.md +0 -96
- tunacode_cli-0.0.78.14/memory-bank/research/2025-09-26_10-56-29_main_agent_architecture.md +0 -727
- tunacode_cli-0.0.78.14/memory-bank/research/2025-09-29_11-08-14_state_and_task_logic.md +0 -140
- tunacode_cli-0.0.78.14/memory-bank/research/2025-09-29_11-41-39_git_safety_branch_removal_analysis.md +0 -127
- tunacode_cli-0.0.78.14/memory-bank/research/2025-10-01_11-15-38_model_validation_error.md +0 -42
- tunacode_cli-0.0.78.14/memory-bank/research/2025-10-02_12-19-05_startup_performance_analysis.md +0 -183
- tunacode_cli-0.0.78.14/memory-bank/research/2025-10-02_14-26-18_release_process_analysis.md +0 -151
- tunacode_cli-0.0.78.14/memory-bank/research/2025-10-03_11-17-55_repl-test-analysis.md +0 -101
- tunacode_cli-0.0.78.14/memory-bank/research/2025-10-10_11-44-51_userabort_error_analysis.md +0 -76
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-05_17-35-17_tool_handler_mapping.md +0 -200
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-05_refactored_tool_handler_design.md +0 -580
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-11_12-12-42_option3_feedback_flow.md +0 -526
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-11_12-23-58_plan_mode_architecture.md +0 -956
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-12_15-48-04_ai_agent_system_mapping.md +0 -222
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-12_permission_system_map.md +0 -838
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-16_main-agent-architecture-map.md +0 -863
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-16_venv_setup_complexity_analysis.md +0 -325
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-17_15-00-59_todo-tool-architecture-map.md +0 -806
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-17_15-06-17_retry-rate-limit-configuration.md +0 -348
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-17_16-49-12_parallel-tool-calling-single-batch-issue.md +0 -251
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-17_18-24-31_input-display-truncation.md +0 -243
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-17_23-35-02_tool-output-formatting-inconsistency.md +0 -367
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-18_13-08-42_streaming-retry-state-corruption.md +0 -532
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-18_14-00-45_http-retry-vs-streaming-state-corruption.md +0 -468
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-18_17-01-30_multi-agent-delegation-pydantic-ai.md +0 -809
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-18_agent-feedback-visibility-issue.md +0 -420
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-18_main-py-refactoring-logic-map.md +0 -204
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-19_09-45-17_main_agent_error_handling_analysis.md +0 -174
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-19_11-30-00_node_processor_refactoring_analysis.md +0 -185
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-20_17-33-18_output_visibility_issues.md +0 -121
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-20_23-45-24_global-request-timeout-architecture.md +0 -553
- tunacode_cli-0.0.78.14/memory-bank/research/2025-11-20_error_signaling_gaps_analysis.md +0 -112
- tunacode_cli-0.0.78.14/pyproject.toml +0 -276
- tunacode_cli-0.0.78.14/scripts/setup_dev_env.sh +0 -115
- tunacode_cli-0.0.78.14/src/__init__.py +0 -12
- tunacode_cli-0.0.78.14/src/tunacode/__init__.py +0 -4
- tunacode_cli-0.0.78.14/src/tunacode/cli/__init__.py +0 -4
- tunacode_cli-0.0.78.14/src/tunacode/cli/commands/__init__.py +0 -66
- tunacode_cli-0.0.78.14/src/tunacode/cli/commands/base.py +0 -99
- tunacode_cli-0.0.78.14/src/tunacode/cli/commands/implementations/__init__.py +0 -46
- tunacode_cli-0.0.78.14/src/tunacode/cli/commands/implementations/command_reload.py +0 -48
- tunacode_cli-0.0.78.14/src/tunacode/cli/commands/implementations/conversation.py +0 -115
- tunacode_cli-0.0.78.14/src/tunacode/cli/commands/implementations/debug.py +0 -189
- tunacode_cli-0.0.78.14/src/tunacode/cli/commands/implementations/development.py +0 -82
- tunacode_cli-0.0.78.14/src/tunacode/cli/commands/implementations/model.py +0 -389
- tunacode_cli-0.0.78.14/src/tunacode/cli/commands/implementations/quickstart.py +0 -43
- tunacode_cli-0.0.78.14/src/tunacode/cli/commands/implementations/system.py +0 -309
- tunacode_cli-0.0.78.14/src/tunacode/cli/commands/implementations/template.py +0 -130
- tunacode_cli-0.0.78.14/src/tunacode/cli/commands/registry.py +0 -402
- tunacode_cli-0.0.78.14/src/tunacode/cli/commands/slash/__init__.py +0 -32
- tunacode_cli-0.0.78.14/src/tunacode/cli/commands/slash/command.py +0 -157
- tunacode_cli-0.0.78.14/src/tunacode/cli/commands/slash/loader.py +0 -135
- tunacode_cli-0.0.78.14/src/tunacode/cli/commands/slash/processor.py +0 -294
- tunacode_cli-0.0.78.14/src/tunacode/cli/commands/slash/types.py +0 -93
- tunacode_cli-0.0.78.14/src/tunacode/cli/commands/slash/validator.py +0 -400
- tunacode_cli-0.0.78.14/src/tunacode/cli/commands/template_shortcut.py +0 -93
- tunacode_cli-0.0.78.14/src/tunacode/cli/main.py +0 -147
- tunacode_cli-0.0.78.14/src/tunacode/cli/repl.py +0 -460
- tunacode_cli-0.0.78.14/src/tunacode/cli/repl_components/__init__.py +0 -10
- tunacode_cli-0.0.78.14/src/tunacode/cli/repl_components/error_recovery.py +0 -169
- tunacode_cli-0.0.78.14/src/tunacode/cli/repl_components/output_display.py +0 -44
- tunacode_cli-0.0.78.14/src/tunacode/cli/repl_components/tool_executor.py +0 -86
- tunacode_cli-0.0.78.14/src/tunacode/configuration/key_descriptions.py +0 -303
- tunacode_cli-0.0.78.14/src/tunacode/configuration/models.py +0 -93
- tunacode_cli-0.0.78.14/src/tunacode/constants.py +0 -183
- tunacode_cli-0.0.78.14/src/tunacode/core/agents/agent_components/json_tool_parser.py +0 -109
- tunacode_cli-0.0.78.14/src/tunacode/core/agents/agent_components/node_processor.py +0 -561
- tunacode_cli-0.0.78.14/src/tunacode/core/agents/agent_components/tool_executor.py +0 -59
- tunacode_cli-0.0.78.14/src/tunacode/core/agents/agent_components/truncation_checker.py +0 -81
- tunacode_cli-0.0.78.14/src/tunacode/core/agents/main_legact.py +0 -538
- tunacode_cli-0.0.78.14/src/tunacode/core/agents/research_agent.py +0 -117
- tunacode_cli-0.0.78.14/src/tunacode/core/agents/utils.py +0 -300
- tunacode_cli-0.0.78.14/src/tunacode/core/background/manager.py +0 -36
- tunacode_cli-0.0.78.14/src/tunacode/core/llm/__init__.py +0 -0
- tunacode_cli-0.0.78.14/src/tunacode/core/logging/__init__.py +0 -30
- tunacode_cli-0.0.78.14/src/tunacode/core/logging/config.py +0 -70
- tunacode_cli-0.0.78.14/src/tunacode/core/logging/formatters.py +0 -48
- tunacode_cli-0.0.78.14/src/tunacode/core/logging/handlers.py +0 -117
- tunacode_cli-0.0.78.14/src/tunacode/core/logging/logger.py +0 -8
- tunacode_cli-0.0.78.14/src/tunacode/core/setup/__init__.py +0 -15
- tunacode_cli-0.0.78.14/src/tunacode/core/setup/agent_setup.py +0 -41
- tunacode_cli-0.0.78.14/src/tunacode/core/setup/base.py +0 -37
- tunacode_cli-0.0.78.14/src/tunacode/core/setup/config_setup.py +0 -431
- tunacode_cli-0.0.78.14/src/tunacode/core/setup/config_wizard.py +0 -230
- tunacode_cli-0.0.78.14/src/tunacode/core/setup/coordinator.py +0 -63
- tunacode_cli-0.0.78.14/src/tunacode/core/setup/environment_setup.py +0 -62
- tunacode_cli-0.0.78.14/src/tunacode/core/setup/template_setup.py +0 -75
- tunacode_cli-0.0.78.14/src/tunacode/core/state.py +0 -166
- tunacode_cli-0.0.78.14/src/tunacode/core/token_usage/api_response_parser.py +0 -48
- tunacode_cli-0.0.78.14/src/tunacode/core/token_usage/cost_calculator.py +0 -66
- tunacode_cli-0.0.78.14/src/tunacode/core/token_usage/usage_tracker.py +0 -146
- tunacode_cli-0.0.78.14/src/tunacode/core/tool_authorization.py +0 -352
- tunacode_cli-0.0.78.14/src/tunacode/core/tool_handler.py +0 -125
- tunacode_cli-0.0.78.14/src/tunacode/services/__init__.py +0 -1
- tunacode_cli-0.0.78.14/src/tunacode/services/mcp.py +0 -204
- tunacode_cli-0.0.78.14/src/tunacode/setup.py +0 -40
- tunacode_cli-0.0.78.14/src/tunacode/templates/__init__.py +0 -9
- tunacode_cli-0.0.78.14/src/tunacode/templates/loader.py +0 -210
- tunacode_cli-0.0.78.14/src/tunacode/tools/base.py +0 -374
- tunacode_cli-0.0.78.14/src/tunacode/tools/bash.py +0 -361
- tunacode_cli-0.0.78.14/src/tunacode/tools/glob.py +0 -586
- tunacode_cli-0.0.78.14/src/tunacode/tools/grep_components/result_formatter.py +0 -139
- tunacode_cli-0.0.78.14/src/tunacode/tools/list_dir.py +0 -320
- tunacode_cli-0.0.78.14/src/tunacode/tools/prompts/bash_prompt.xml +0 -72
- tunacode_cli-0.0.78.14/src/tunacode/tools/prompts/glob_prompt.xml +0 -45
- tunacode_cli-0.0.78.14/src/tunacode/tools/prompts/grep_prompt.xml +0 -98
- tunacode_cli-0.0.78.14/src/tunacode/tools/prompts/list_dir_prompt.xml +0 -31
- tunacode_cli-0.0.78.14/src/tunacode/tools/prompts/react_prompt.xml +0 -23
- tunacode_cli-0.0.78.14/src/tunacode/tools/prompts/read_file_prompt.xml +0 -54
- tunacode_cli-0.0.78.14/src/tunacode/tools/prompts/run_command_prompt.xml +0 -64
- tunacode_cli-0.0.78.14/src/tunacode/tools/prompts/update_file_prompt.xml +0 -53
- tunacode_cli-0.0.78.14/src/tunacode/tools/prompts/write_file_prompt.xml +0 -37
- tunacode_cli-0.0.78.14/src/tunacode/tools/react.py +0 -153
- tunacode_cli-0.0.78.14/src/tunacode/tools/read_file.py +0 -191
- tunacode_cli-0.0.78.14/src/tunacode/tools/run_command.py +0 -237
- tunacode_cli-0.0.78.14/src/tunacode/tools/schema_assembler.py +0 -167
- tunacode_cli-0.0.78.14/src/tunacode/tools/update_file.py +0 -206
- tunacode_cli-0.0.78.14/src/tunacode/tools/write_file.py +0 -167
- tunacode_cli-0.0.78.14/src/tunacode/tools/xml_helper.py +0 -83
- tunacode_cli-0.0.78.14/src/tunacode/tools_utils/__init__.py +0 -0
- tunacode_cli-0.0.78.14/src/tunacode/tutorial/__init__.py +0 -9
- tunacode_cli-0.0.78.14/src/tunacode/tutorial/content.py +0 -98
- tunacode_cli-0.0.78.14/src/tunacode/tutorial/manager.py +0 -182
- tunacode_cli-0.0.78.14/src/tunacode/tutorial/steps.py +0 -124
- tunacode_cli-0.0.78.14/src/tunacode/types.py +0 -320
- tunacode_cli-0.0.78.14/src/tunacode/ui/__init__.py +0 -1
- tunacode_cli-0.0.78.14/src/tunacode/ui/completers.py +0 -520
- tunacode_cli-0.0.78.14/src/tunacode/ui/config_dashboard.py +0 -592
- tunacode_cli-0.0.78.14/src/tunacode/ui/console.py +0 -178
- tunacode_cli-0.0.78.14/src/tunacode/ui/constants.py +0 -16
- tunacode_cli-0.0.78.14/src/tunacode/ui/decorators.py +0 -59
- tunacode_cli-0.0.78.14/src/tunacode/ui/input.py +0 -115
- tunacode_cli-0.0.78.14/src/tunacode/ui/keybindings.py +0 -53
- tunacode_cli-0.0.78.14/src/tunacode/ui/lexers.py +0 -45
- tunacode_cli-0.0.78.14/src/tunacode/ui/logging_compat.py +0 -44
- tunacode_cli-0.0.78.14/src/tunacode/ui/model_selector.py +0 -395
- tunacode_cli-0.0.78.14/src/tunacode/ui/output.py +0 -227
- tunacode_cli-0.0.78.14/src/tunacode/ui/panels.py +0 -538
- tunacode_cli-0.0.78.14/src/tunacode/ui/path_heuristics.py +0 -91
- tunacode_cli-0.0.78.14/src/tunacode/ui/prompt_manager.py +0 -139
- tunacode_cli-0.0.78.14/src/tunacode/ui/tool_descriptions.py +0 -115
- tunacode_cli-0.0.78.14/src/tunacode/ui/tool_ui.py +0 -234
- tunacode_cli-0.0.78.14/src/tunacode/ui/utils.py +0 -3
- tunacode_cli-0.0.78.14/src/tunacode/ui/validators.py +0 -23
- tunacode_cli-0.0.78.14/src/tunacode/utils/__init__.py +0 -0
- tunacode_cli-0.0.78.14/src/tunacode/utils/api_key_validation.py +0 -93
- tunacode_cli-0.0.78.14/src/tunacode/utils/bm25.py +0 -55
- tunacode_cli-0.0.78.14/src/tunacode/utils/config_comparator.py +0 -340
- tunacode_cli-0.0.78.14/src/tunacode/utils/diff_utils.py +0 -69
- tunacode_cli-0.0.78.14/src/tunacode/utils/file_utils.py +0 -41
- tunacode_cli-0.0.78.14/src/tunacode/utils/import_cache.py +0 -11
- tunacode_cli-0.0.78.14/src/tunacode/utils/models_registry.py +0 -593
- tunacode_cli-0.0.78.14/src/tunacode/utils/system.py +0 -332
- tunacode_cli-0.0.78.14/src/tunacode/utils/text_utils.py +0 -223
- tunacode_cli-0.0.78.14/tests/conftest.py +0 -50
- tunacode_cli-0.0.78.14/tests/test_agent_config_request_delay.py +0 -232
- tunacode_cli-0.0.78.14/tests/test_agent_helpers.py +0 -89
- tunacode_cli-0.0.78.14/tests/test_agents_main.py +0 -592
- tunacode_cli-0.0.78.14/tests/test_edit_replacers.py +0 -298
- tunacode_cli-0.0.78.14/tests/test_error_boundaries.py +0 -281
- tunacode_cli-0.0.78.14/tests/test_research_agent_delegation.py +0 -256
- tunacode_cli-0.0.78.14/tests/test_tool_buffer.py +0 -30
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/LICENSE +0 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/MANIFEST.in +0 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/assets/tunacode_example.png +0 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/scripts/install_linux.sh +0 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/scripts/uninstall.sh +0 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/scripts/utils/vulture_whitelist.py +0 -0
- {tunacode_cli-0.0.78.14/src/tunacode/core → tunacode_cli-0.1.24/src/tunacode}/__init__.py +0 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/configuration/__init__.py +0 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/core/agents/prompts.py +0 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/py.typed +0 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/tools/__init__.py +0 -0
- {tunacode_cli-0.0.78.14 → tunacode_cli-0.1.24}/src/tunacode/tools/grep_components/__init__.py +0 -0
- {tunacode_cli-0.0.78.14/src/tunacode/core/background → tunacode_cli-0.1.24/src/tunacode/utils}/__init__.py +0 -0
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
## Testing
|
|
15
15
|
<!-- Describe the tests you ran to verify your changes -->
|
|
16
|
-
- [ ] All existing tests pass (`
|
|
16
|
+
- [ ] All existing tests pass (`uv run pytest`)
|
|
17
17
|
- [ ] New tests have been added to cover the changes
|
|
18
18
|
- [ ] Tests have been run locally
|
|
19
19
|
- [ ] Golden/character tests established for new features
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
name: Lint
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main, master]
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
pre-commit:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v4
|
|
13
|
+
- uses: actions/setup-python@v5
|
|
14
|
+
with:
|
|
15
|
+
python-version: "3.11"
|
|
16
|
+
- uses: astral-sh/setup-uv@v4
|
|
17
|
+
- name: Install dependencies
|
|
18
|
+
run: uv sync --extra dev --frozen
|
|
19
|
+
- name: Run pre-commit
|
|
20
|
+
run: uv run pre-commit run --all-files
|
|
@@ -22,7 +22,7 @@ jobs:
|
|
|
22
22
|
- name: Install build tooling
|
|
23
23
|
run: |
|
|
24
24
|
python -m pip install --upgrade pip
|
|
25
|
-
pip install
|
|
25
|
+
pip install build twine ruff pytest pytest-cov pytest-asyncio
|
|
26
26
|
|
|
27
27
|
- name: Install project dependencies
|
|
28
28
|
run: pip install -e '.[dev]'
|
|
@@ -63,7 +63,7 @@ jobs:
|
|
|
63
63
|
fi
|
|
64
64
|
|
|
65
65
|
- name: Build
|
|
66
|
-
run:
|
|
66
|
+
run: python -m build
|
|
67
67
|
|
|
68
68
|
# Preferred: API token secret
|
|
69
69
|
- name: Publish to PyPI (API token)
|
|
@@ -4,7 +4,7 @@ default_language_version:
|
|
|
4
4
|
python: python3
|
|
5
5
|
|
|
6
6
|
# Global exclusions to prevent hooks from scanning unnecessary directories
|
|
7
|
-
exclude: ^(venv/|build/|dist/|\.git/|__pycache__/|.*\.egg-info/|\.pytest_cache/|\.mypy_cache/|\.ruff_cache/|htmlcov/|\.coverage|reports/|llm-agent-tools/)
|
|
7
|
+
exclude: ^(venv/|build/|dist/|\.git/|__pycache__/|.*\.egg-info/|\.pytest_cache/|\.mypy_cache/|\.ruff_cache/|\.uv-cache/|\.uv_cache/|htmlcov/|\.coverage|reports/|llm-agent-tools/)
|
|
8
8
|
|
|
9
9
|
repos:
|
|
10
10
|
# Pre-commit framework hooks
|
|
@@ -39,11 +39,11 @@ repos:
|
|
|
39
39
|
|
|
40
40
|
# Ruff - Fast Python linter and formatter
|
|
41
41
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
42
|
-
rev: v0.
|
|
42
|
+
rev: v0.14.9
|
|
43
43
|
hooks:
|
|
44
44
|
- id: ruff
|
|
45
45
|
args: ['--fix', '--show-fixes']
|
|
46
|
-
|
|
46
|
+
- id: ruff-format # Re-enabled - ruff handles linting, ruff-format handles formatting
|
|
47
47
|
|
|
48
48
|
# Type checking with mypy
|
|
49
49
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
@@ -59,20 +59,9 @@ repos:
|
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
# Local hooks for project-specific checks
|
|
62
|
-
# Strategy: Use 'hatch run' for commands defined in pyproject.toml scripts
|
|
63
|
-
# Use 'uv run' for standalone tools not managed by hatch environments
|
|
64
62
|
- repo: local
|
|
65
63
|
hooks:
|
|
66
|
-
#
|
|
67
|
-
- id: hatch-lint
|
|
68
|
-
name: Run hatch lint check
|
|
69
|
-
entry: hatch run lint
|
|
70
|
-
language: system
|
|
71
|
-
pass_filenames: false
|
|
72
|
-
always_run: true
|
|
73
|
-
stages: [pre-commit]
|
|
74
|
-
|
|
75
|
-
# UV-managed standalone tools (not in hatch environments)
|
|
64
|
+
# UV-managed tools
|
|
76
65
|
- id: dead-imports
|
|
77
66
|
name: Check for unused imports in changed files
|
|
78
67
|
entry: scripts/run-dead-imports.sh
|
|
@@ -88,15 +77,6 @@ repos:
|
|
|
88
77
|
exclude: ^(tests/|test_)
|
|
89
78
|
stages: [pre-commit]
|
|
90
79
|
|
|
91
|
-
# Run test suite using hatch for consistency
|
|
92
|
-
- id: run-tests
|
|
93
|
-
name: Run test suite
|
|
94
|
-
entry: .venv/bin/pytest
|
|
95
|
-
language: system
|
|
96
|
-
pass_filenames: false
|
|
97
|
-
always_run: true
|
|
98
|
-
stages: [pre-commit]
|
|
99
|
-
|
|
100
80
|
# Check for common security issues
|
|
101
81
|
- id: security-check
|
|
102
82
|
name: Security audit
|
|
@@ -153,5 +133,5 @@ ci:
|
|
|
153
133
|
autoupdate_commit_msg: '[pre-commit.ci] pre-commit autoupdate'
|
|
154
134
|
autoupdate_schedule: weekly
|
|
155
135
|
# Skip hooks that require project-specific environment setup
|
|
156
|
-
skip: [
|
|
136
|
+
skip: [vulture-changed]
|
|
157
137
|
submodules: false
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
## Tunacode
|
|
2
|
+
|
|
3
|
+
This project is tunacode, much like you! It's a TUI code agent that can be used to code and debug code or general agentic tasks.
|
|
4
|
+
|
|
5
|
+
src/tunacode/ui is the TUI interface that is used to interact with the user.
|
|
6
|
+
src/tunacode/core is the core agent that is used to code and debug code or general agentic tasks.
|
|
7
|
+
src/tunacode/tools is the tools that are used to code and debug code or general agentic tasks.
|
|
8
|
+
|
|
9
|
+
Tests are located in the `tests/` directory covering tool decorators, tool conformance, compaction, and tool retry logic.
|
|
10
|
+
|
|
11
|
+
## Design Philosophy
|
|
12
|
+
|
|
13
|
+
The TUI design is heavily inspired by the classic **NeXTSTEP** user interface. This choice reflects a commitment to **"the next step of uniformity"**.
|
|
14
|
+
|
|
15
|
+
- **Uniformity:** The interface should provide a consistent and predictable experience across all interactions.
|
|
16
|
+
- **User Informed:** A core tenet is to keep the user constantly informed of the agent's state, actions, and reasoning. No "magic" should happen in the background without visual feedback.
|
|
17
|
+
- **Aesthetic:** The look should be professional, clean, and retro-modern, echoing the clarity and object-oriented nature of the NeXTSTEP environment.
|
|
18
|
+
|
|
19
|
+
**UI Design Rule:** Always call the neXTSTEP-ui skill for any UI changes.
|
|
20
|
+
|
|
21
|
+
**Skill Location:** `.claude/skills/neXTSTEP-ui/`
|
|
22
|
+
|
|
23
|
+
- `SKILL.md` - Design philosophy and guidelines
|
|
24
|
+
- `NeXTSTEP_User_Interface_Guidelines_Release_3_Nov93.pdf` - Original 198-page reference
|
|
25
|
+
- `read_pdf.py` - Chunked PDF reader (`uv run python read_pdf.py --help`)
|
|
26
|
+
|
|
27
|
+
## Workflow Rules
|
|
28
|
+
|
|
29
|
+
- Never begin coding until the objective is **explicitly defined**. If unclear, ask questions or use best practices.
|
|
30
|
+
- Always use `.venv` and `uv` for package management.
|
|
31
|
+
- Small, focused diffs only. Commit frequently.
|
|
32
|
+
|
|
33
|
+
## Code Style & Typing
|
|
34
|
+
|
|
35
|
+
- Enforce `ruff check --fix .` before PRs.
|
|
36
|
+
- Use explicit typing. `cast(...)` and `assert ...` are OK.
|
|
37
|
+
- `# type: ignore` only with strong justification.
|
|
38
|
+
- You must flatten nested conditionals by returning early, so pre-conditions are explicit.
|
|
39
|
+
- If it is never executed, remove it. You MUST make sure what we remove has been committed before in case we need to rollback.
|
|
40
|
+
- Normalize symmetries: you must make identical things look identical and different things look different for faster pattern-spotting.
|
|
41
|
+
- You must reorder elements so a developer meets ideas in the order they need them.
|
|
42
|
+
- You must cluster coupled functions/files so related edits sit together.
|
|
43
|
+
- You must keep a variable's birth and first value adjacent for comprehension & dependency safety.
|
|
44
|
+
- Always extract a sub-expression into a well-named variable to record intent.
|
|
45
|
+
- Always replace magic numbers with symbolic constants that broadcast meaning.
|
|
46
|
+
- Never use magic literals; symbolic constants are preferred.
|
|
47
|
+
- ALWAYS split a routine so all inputs are passed openly, banishing hidden state or maps.
|
|
48
|
+
|
|
49
|
+
## Error Handling
|
|
50
|
+
|
|
51
|
+
- Fail fast, fail loud. No silent fallbacks. This is one of the most important rules to follow.
|
|
52
|
+
- Minimize branching: every `if`/`try` must be justified.
|
|
53
|
+
|
|
54
|
+
## Dependencies
|
|
55
|
+
|
|
56
|
+
- Avoid new core dependencies. Tiny deps OK if widely reused.
|
|
57
|
+
- Run tests with: `uv run pytest`.
|
|
58
|
+
|
|
59
|
+
## Scope & Maintenance
|
|
60
|
+
|
|
61
|
+
- Backward compatibility only if low maintenance cost.
|
|
62
|
+
- Delete dead code (never guard it).
|
|
63
|
+
- Always run `ruff .`.
|
|
64
|
+
- Use `git commit -n` if pre-commit hooks block rollback.
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Card Format
|
|
69
|
+
|
|
70
|
+
Bugs, docs, and module cards all use this unified structure.
|
|
71
|
+
|
|
72
|
+
### Frontmatter
|
|
73
|
+
|
|
74
|
+
```yaml
|
|
75
|
+
---
|
|
76
|
+
title: <Short human-readable title>
|
|
77
|
+
link: <stable-slug-for-links>
|
|
78
|
+
type: <delta | doc | module>
|
|
79
|
+
path: <relative path, for modules/docs>
|
|
80
|
+
depth: <nesting level, 0 = root>
|
|
81
|
+
seams: <[A] architecture | [E] entry | [M] module | [S] state | [D] data>
|
|
82
|
+
ontological_relations:
|
|
83
|
+
- relates_to: [[<primary-system-or-area>]]
|
|
84
|
+
- affects: [[<component-or-module>]]
|
|
85
|
+
- fixes: [[<bug-or-failure-mode>]] # for deltas
|
|
86
|
+
tags:
|
|
87
|
+
- <area>
|
|
88
|
+
- <symptom>
|
|
89
|
+
- <tool-or-feature>
|
|
90
|
+
created_at: <ISO-8601 timestamp>
|
|
91
|
+
updated_at: <ISO-8601 timestamp>
|
|
92
|
+
uuid: <generated-uuid>
|
|
93
|
+
---
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Body Sections
|
|
97
|
+
|
|
98
|
+
- **Summary** - One paragraph, what and why, readable in a year
|
|
99
|
+
- **Context** - Optional, where it lives, how it surfaced
|
|
100
|
+
- **Root Cause** - For bugs: mechanism, not blame
|
|
101
|
+
- **Changes** - Bullet list of concrete changes
|
|
102
|
+
- **Behavioral Impact** - What users notice, what didn't change
|
|
103
|
+
- **Related Cards** - `[[links]]` to other cards
|
|
104
|
+
|
|
105
|
+
### Bug Rules
|
|
106
|
+
|
|
107
|
+
- Fix it, we don't care who caused it
|
|
108
|
+
- Document: what? where? when? why?
|
|
109
|
+
- No shims, fix at root
|
|
110
|
+
- Document how we missed it and how to prevent it
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## Quality Gates
|
|
115
|
+
|
|
116
|
+
These are another layer to prevent slop, not pre-commit hooks.
|
|
117
|
+
|
|
118
|
+
### Gate 0: No Shims
|
|
119
|
+
|
|
120
|
+
Never use shims. It is a mortal sin to allow shims.
|
|
121
|
+
|
|
122
|
+
Instead, fix the interface. In some cases, it may be better to create a new interface for examples:
|
|
123
|
+
|
|
124
|
+
- If 19 files use an interface and our new work has a problem with it, the interface is not the problem
|
|
125
|
+
- If only two files use the interface and it's giving us issues, write it correctly
|
|
126
|
+
- The interface must be written in proper idiomatic way
|
|
127
|
+
- 99% of the time we don't need a unique interface; if a unique situation calls for one, it must be strongly justified with anchor comments
|
|
128
|
+
|
|
129
|
+
### Gate 1: Coupling and Cohesion (Constantine)
|
|
130
|
+
|
|
131
|
+
**High cohesion** = everything in a module serves one purpose
|
|
132
|
+
**Low coupling** = modules don't need to know each other's internals
|
|
133
|
+
|
|
134
|
+
Before writing or modifying code, answer:
|
|
135
|
+
|
|
136
|
+
- **What single responsibility does this module have?** If you can't state it in one sentence, the module is doing too much. Split until each piece has one job.
|
|
137
|
+
- **Can I change this module without changing others?** If no, you have a coupling problem.
|
|
138
|
+
- **Dependencies should flow one direction:** ui → core → tools → utils/types. Never reach backward (core importing from ui).
|
|
139
|
+
- **How many dots?** `state_manager.session.tool_handler._policy.rules[0].name = "allow"` coupling points. Each `.` is a place where changes can break you. More than 2 dots = smell; refactor to hide the chain.
|
|
140
|
+
- **What does this module hide?** "Every module hides a design decision that could change." If a module exposes its internals, it will churn when those internals change. UI hides Textual, core hides agent orchestration, tools hide system access.
|
|
141
|
+
|
|
142
|
+
**Example:** If a file gets touched more than 5 times in a month, it has a cohesion problem. Stop adding to it. Split it.
|
|
143
|
+
|
|
144
|
+
**Wrong:**
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
src/tunacode/ui/main.py → Textual UI + agent orchestration + tool execution + persistence
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**Right:**
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
src/tunacode/ui/main.py → Textual UI concerns only
|
|
154
|
+
src/tunacode/core/agents/main.py → agent orchestration only
|
|
155
|
+
src/tunacode/tools/*.py → tool execution only
|
|
156
|
+
src/tunacode/core/state.py → persistence and session state only
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Gate 2: Dependency Direction (Martin)
|
|
160
|
+
|
|
161
|
+
Dependencies flow inward, never backward.
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
ui → core → tools → utils/types
|
|
165
|
+
↓
|
|
166
|
+
infrastructure (filesystem, shell, network)
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**Rules:**
|
|
170
|
+
|
|
171
|
+
- Inner layers know nothing about outer layers
|
|
172
|
+
- core/ never imports from ui/
|
|
173
|
+
- tools/ never imports from ui/
|
|
174
|
+
- utils/ and types/ import from nothing
|
|
175
|
+
- Infrastructure is a plugin
|
|
176
|
+
- Filesystem, shell, network = details
|
|
177
|
+
- Core logic doesn't know or care which system provider
|
|
178
|
+
- Depend on abstractions, not concretions
|
|
179
|
+
- Pass interfaces, not implementations
|
|
180
|
+
- Makes testing trivial, swapping backends trivial
|
|
181
|
+
|
|
182
|
+
**Example:** If core needs UI state, you're violating the boundary. Extract what you need and pass it as a plain argument.
|
|
183
|
+
|
|
184
|
+
**Wrong:**
|
|
185
|
+
|
|
186
|
+
```python
|
|
187
|
+
from tunacode.ui.app import TunaCodeApp
|
|
188
|
+
|
|
189
|
+
def run_agent(app: TunaCodeApp):
|
|
190
|
+
app.notify_status("Running") # core knows about UI layer
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
**Right:**
|
|
194
|
+
|
|
195
|
+
```python
|
|
196
|
+
from collections.abc import Callable
|
|
197
|
+
|
|
198
|
+
def run_agent(notify_status: Callable[[str], None]):
|
|
199
|
+
notify_status("Running") # core only knows about a callable
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Gate 3: Design by Contract (Meyer)
|
|
203
|
+
|
|
204
|
+
Every function is a contract with three parts:
|
|
205
|
+
|
|
206
|
+
- **Preconditions** - what must be true before calling
|
|
207
|
+
- **Postconditions** - what will be true after
|
|
208
|
+
- **Invariants** - what's always true
|
|
209
|
+
|
|
210
|
+
**Rules:**
|
|
211
|
+
|
|
212
|
+
- Caller guarantees preconditions - don't check inside what should be guaranteed outside
|
|
213
|
+
- Function guarantees postconditions - if it returns, the promise is kept
|
|
214
|
+
- Fail immediately if contract violated - no limping along with bad state
|
|
215
|
+
|
|
216
|
+
**Example:** If a tool expects a valid directory, don't silently return an empty result. That's a contract violation - raise.
|
|
217
|
+
|
|
218
|
+
**Wrong:**
|
|
219
|
+
|
|
220
|
+
```python
|
|
221
|
+
def list_dir(directory: str) -> str | None:
|
|
222
|
+
if not Path(directory).exists():
|
|
223
|
+
return None # silent failure, caller doesn't know why
|
|
224
|
+
return _render_dir(Path(directory))
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**Right:**
|
|
228
|
+
|
|
229
|
+
```python
|
|
230
|
+
def list_dir(directory: str) -> str:
|
|
231
|
+
"""Precondition: directory exists and is a directory."""
|
|
232
|
+
path = Path(directory)
|
|
233
|
+
if not path.exists():
|
|
234
|
+
raise FileNotFoundError(f"Directory not found: {path}")
|
|
235
|
+
if not path.is_dir():
|
|
236
|
+
raise NotADirectoryError(f"Not a directory: {path}")
|
|
237
|
+
return _render_dir(path)
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Gate 4: Documentation is Code (Knuth)
|
|
241
|
+
|
|
242
|
+
Docs and code are one system. If they diverge, the docs are lying.
|
|
243
|
+
|
|
244
|
+
**Rules:**
|
|
245
|
+
|
|
246
|
+
- **Code changes = doc changes**
|
|
247
|
+
- If you change a module's behavior, update its codebase-map doc in the same PR
|
|
248
|
+
- If you add a tool, update docs/codebase-map/modules/tools-overview.md
|
|
249
|
+
- If you add a UI component, update docs/codebase-map/modules/ui-overview.md
|
|
250
|
+
- **Docs describe the system that exists, not the system you wish existed**
|
|
251
|
+
- No aspirational docs ("we plan to...")
|
|
252
|
+
- No stale docs ("this used to...")
|
|
253
|
+
- Only current truth
|
|
254
|
+
- **The /docs/codebase-map folder mirrors src/tunacode**
|
|
255
|
+
- Structure matches structure
|
|
256
|
+
- When code moves, docs move
|
|
257
|
+
- When code dies, docs die
|
|
258
|
+
|
|
259
|
+
**Example:** If you delete src/tunacode/tools/grep.py, you must also remove its entry from docs/codebase-map/modules/tools-overview.md in the same commit.
|
|
260
|
+
|
|
261
|
+
**Wrong:**
|
|
262
|
+
|
|
263
|
+
```
|
|
264
|
+
PR #263: "chore: remove unused grep tool"
|
|
265
|
+
- deletes src/tunacode/tools/grep.py
|
|
266
|
+
- leaves docs/codebase-map/modules/tools-overview.md still referencing it
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
**Right:**
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
PR #263: "chore: remove unused grep tool"
|
|
273
|
+
- deletes src/tunacode/tools/grep.py
|
|
274
|
+
- updates docs/codebase-map/modules/tools-overview.md to remove grep section
|
|
275
|
+
- single atomic commit, code and docs together
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## Memory Bank Directory
|
|
281
|
+
|
|
282
|
+
Maintain a `.claude/markdown` directory with:
|
|
283
|
+
|
|
284
|
+
- **metadata/** — dependency graphs, file classifications, error pattern database
|
|
285
|
+
- **code_index/** — function call graphs, type relationships, interface mappings
|
|
286
|
+
- **debug_history/** — error-solution pairs indexed by component/error type
|
|
287
|
+
- **patterns/** — canonical implementation examples for this codebase
|
|
288
|
+
- **cheatsheets/** — quick-reference guides per component with gotchas
|
|
289
|
+
- **qa/** — solved problems database with reasoning
|
|
290
|
+
- **delta/** — semantic changelogs explaining changes
|
|
291
|
+
|
|
292
|
+
### Continuous Learning
|
|
293
|
+
|
|
294
|
+
Dump bugs, smells, issues here as you encounter them. Raw is fine. A skill will organize this into proper kb entries later.
|
|
295
|
+
|
|
296
|
+
Format: `[date] [type] description`
|
|
297
|
+
|
|
298
|
+
Types: bug, smell, pattern, lesson, antipattern
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
We are currently in the middle of a large rewrite few test exist and documentation and that is okay. We will build the test and documentation as we go
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
## [Unreleased]
|
|
2
|
+
|
|
3
|
+
## [0.1.20] - 2026-01-02
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
- Lazy-load models registry and guardrail picker for faster startup
|
|
7
|
+
- UI refinements and research documentation (#204)
|
|
8
|
+
- neXTSTEP UI guidelines PDF and reader skill
|
|
9
|
+
- Discord server link to README (#194)
|
|
10
|
+
- Consolidated default prompt document
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
- Headless run output extraction (#208)
|
|
14
|
+
- Base URL overrides and CLI baseurl flag (#200)
|
|
15
|
+
- File size handling refactoring (#155, #154)
|
|
16
|
+
- TOOL_VIEWPORT_LINES and DEFAULT_IGNORE_PATTERNS_COUNT (#197)
|
|
17
|
+
|
|
18
|
+
### Changed
|
|
19
|
+
- Refactor headless output extraction to dedicated module
|
|
20
|
+
- Remove dead code: callbacks.py, 3 unused UI components (#205), 35 unused constants (#206)
|
|
21
|
+
- Refactor types.py to package structure
|
|
22
|
+
- Replace magic numbers with symbolic constants
|
|
23
|
+
- Reduce MIN_VIEWPORT_LINES to 5 for more compact tool panels
|
|
24
|
+
- Uniform tool panel width with fixed TOOL_PANEL_WIDTH
|
|
25
|
+
|
|
26
|
+
### Contributors
|
|
27
|
+
Thanks to our community contributors:
|
|
28
|
+
- @ryumacodes - issue fixes and standardization
|
|
29
|
+
|
|
30
|
+
## [0.1.16] - 2025-12-19
|
|
31
|
+
|
|
32
|
+
### Added
|
|
33
|
+
- Minimum viewport padding to tool panels for better readability (#192) - thanks @larock22
|
|
34
|
+
- Standardized tool panel viewport sizing across all renderers (#190)
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
- Eliminate UI freezes during update_file operations
|
|
38
|
+
- LSP diagnostics truncation and hardened diff rendering (#191)
|
|
39
|
+
- Tool return arg hydration issue (#189)
|
|
40
|
+
|
|
41
|
+
### Changed
|
|
42
|
+
- Remove inline comments from LSP module for cleaner code
|
|
43
|
+
|
|
44
|
+
### Contributors
|
|
45
|
+
Thanks to our community contributors for this release:
|
|
46
|
+
- @larock22 - viewport padding improvements and subagent loading states
|
|
47
|
+
- @ryumacodes - update command implementation
|
|
48
|
+
|
|
49
|
+
## [0.1.12] - 2025-12-18
|
|
50
|
+
|
|
51
|
+
### Fixed
|
|
52
|
+
- Prevent TUI hangs when rendering large tool confirmation diffs (e.g., `write_file` with minified content)
|
|
53
|
+
|
|
54
|
+
## [0.1.11] - 2025-12-18
|
|
55
|
+
|
|
56
|
+
### Added
|
|
57
|
+
- `/update` command to check for and install updates from TUI (#182) - thanks @ryumacodes
|
|
58
|
+
- TodoWrite and TodoRead tools for task tracking (#181)
|
|
59
|
+
- LSP status indicator in resource bar showing server name
|
|
60
|
+
- Switched Python LSP from pyright to ruff for better integration
|
|
61
|
+
|
|
62
|
+
### Fixed
|
|
63
|
+
- Paste buffer flow with improved user input wrapping (#188)
|
|
64
|
+
- LSP diagnostics display with NeXTSTEP 4-zone layout (#186)
|
|
65
|
+
- Escape key now cancels shell command input (#187)
|
|
66
|
+
- Paste indicator shows inline with "..." for continued content
|
|
67
|
+
|
|
68
|
+
### Changed
|
|
69
|
+
- Simplify concatenated JSON parsing with fail-loud error handling (#175)
|
|
70
|
+
- Reduced streaming throttle for smoother output
|
|
71
|
+
- Refactored app.py under 600 lines
|
|
72
|
+
|
|
73
|
+
## [0.1.10] - 2025-12-16
|
|
74
|
+
|
|
75
|
+
### Added
|
|
76
|
+
- Subagent UI loading states with progress feedback (#180)
|
|
77
|
+
- Tool start callback for UI feedback (#177)
|
|
78
|
+
- Headless CLI mode for benchmark execution (#174)
|
|
79
|
+
|
|
80
|
+
### Fixed
|
|
81
|
+
- Default tunacode to TUI when no subcommand (#178)
|
|
82
|
+
- Pass parent state_manager to research agent for API key access (#170)
|
|
83
|
+
|
|
84
|
+
### Changed
|
|
85
|
+
- Pin ruff to 0.14.9 (#179)
|
|
86
|
+
- Remove unused GUIDE_FILE_PATTERN constant (#173)
|
|
87
|
+
- Remove unused typing scaffolding from state transition (#171)
|
|
88
|
+
|
|
89
|
+
## [0.1.9] - 2025-12-12
|
|
90
|
+
|
|
91
|
+
### Added
|
|
92
|
+
- Multi-line paste support with collapsed display (#168)
|
|
93
|
+
|
|
94
|
+
### Changed
|
|
95
|
+
- Refactored watch_value editor for better single responsibility (#169)
|
|
96
|
+
- Export screen classes from ui/screens package for external access
|
|
97
|
+
|
|
98
|
+
## [0.1.7] - 2025-12-11
|
|
99
|
+
|
|
100
|
+
### Added
|
|
101
|
+
- NeXTSTEP-style tool panel renderers for consistent UI (#165)
|
|
102
|
+
- web_fetch tool for HTTP GET with HTML-to-text conversion
|
|
103
|
+
- list_dir tree connectors for better directory visualization
|
|
104
|
+
- Section-based prompting engine with template composition
|
|
105
|
+
- Slash command autocompletion in TUI (#160) - thanks @coltonsteinbeck
|
|
106
|
+
- Model-specific context window from registry (#158) - thanks @vincitamore
|
|
107
|
+
|
|
108
|
+
### Changed
|
|
109
|
+
- Tightened XML prompt loading (#164)
|
|
110
|
+
- Removed Python loggers in favor of structured output (#159) - thanks @xan
|
|
111
|
+
|
|
112
|
+
### Contributors
|
|
113
|
+
Thanks to our community contributors for this release:
|
|
114
|
+
- @coltonsteinbeck - slash command autocompletion
|
|
115
|
+
- @xan - logger cleanup
|
|
116
|
+
- @vincitamore - model context windows
|
|
117
|
+
- @ryu - real pricing and Textual repl improvements
|
|
118
|
+
|
|
119
|
+
## [0.1.6] - 2025-12-08
|
|
120
|
+
|
|
121
|
+
### Added
|
|
122
|
+
- Session resume feature (`/resume`) to restore previous conversation sessions
|
|
123
|
+
- Write file preview in confirmation dialog showing file contents before creation
|
|
124
|
+
- CONTRIBUTING.md for open source contributors
|
|
125
|
+
|
|
126
|
+
### Changed
|
|
127
|
+
- Consolidated ruff config and removed redundant .ruffignore
|
|
128
|
+
- Removed stale documentation and knowledge base files
|
|
129
|
+
- Removed unused command security constants and XML schema loader
|
|
130
|
+
|
|
131
|
+
## [0.1.5] - 2025-12-07
|
|
132
|
+
|
|
133
|
+
### Added
|
|
134
|
+
- CHANGELOG.md for tracking version history
|
|
135
|
+
- Enhanced update_file tool with diff preview and result display
|
|
136
|
+
|
|
137
|
+
### Fixed
|
|
138
|
+
- Additional lint error fixes
|
|
139
|
+
|
|
140
|
+
## [0.1.4] - 2025-12-06
|
|
141
|
+
|
|
142
|
+
### Added
|
|
143
|
+
- Tool execution retry mechanism with exponential backoff (max 3 attempts) for improved reliability
|
|
144
|
+
- Clear diff display for edit tool operations showing before/after changes
|
|
145
|
+
- Uniform truncation with NeXTSTEP information hierarchy for better UX
|
|
146
|
+
- Dynamic startup index with progressive loading for faster application launch
|
|
147
|
+
|
|
148
|
+
### Changed
|
|
149
|
+
- Improved error handling to surface retries to user with visual feedback
|
|
150
|
+
- Removed dead code and consolidated ToolCallback type alias
|
|
151
|
+
- Fixed 40+ ruff lint errors for cleaner codebase
|
|
152
|
+
|
|
153
|
+
### Fixed
|
|
154
|
+
- Edit tool now provides proper visual feedback showing what changed in files
|
|
155
|
+
- Tool execution failures no longer halt system immediately, allowing retry attempts
|