tunacode-cli 0.0.77.1__tar.gz → 0.0.77.3__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.77.1 → tunacode_cli-0.0.77.3}/.claude/debug_history/debug_sessions.json +28 -0
- tunacode_cli-0.0.77.3/.claude/delta_summaries/2025-10-01-startup-banner-panel.md +14 -0
- tunacode_cli-0.0.77.3/.claude/delta_summaries/2025-10-03-tool_handler-behavior-optimization.md +70 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/delta_summaries/api_change_logs.json +37 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/delta_summaries/behavior_changes.json +83 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/delta_summaries/reasoning_logs.json +74 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/docs_model_friendly/component_purpose.md +14 -5
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/docs_model_friendly/component_relationships.md +6 -0
- tunacode_cli-0.0.77.3/.claude/memory_anchors/anchors.json +60 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/metadata/file_classifications.json +35 -0
- tunacode_cli-0.0.77.3/.claude/qa/context_logs/latest_session.txt +1 -0
- tunacode_cli-0.0.77.3/.claude/qa/context_logs/tool-rejection-feedback-20251010-000001/summary.md +7 -0
- tunacode_cli-0.0.77.3/.claude/qa/reasoning_docs/tool-rejection-feedback-20251010-000001.md +16 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/semantic_index/function_call_graphs.json +43 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/semantic_index/intent_mappings.json +11 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/semantic_index/type_relationships.json +19 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.pre-commit-config.yaml +2 -2
- tunacode_cli-0.0.77.3/AGENTS.md +147 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/PKG-INFO +2 -2
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/changelog/CHANGELOG.md +10 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/development/publishing-workflow.md +10 -10
- tunacode_cli-0.0.77.3/memory-bank/execute/2025-10-02_14-45-00_release_process_automation.md +25 -0
- tunacode_cli-0.0.77.3/memory-bank/plan/2025-10-02_14-30-45_release_process_automation.md +114 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/research/2025-10-01_11-15-38_model_validation_error.md +1 -1
- tunacode_cli-0.0.77.3/memory-bank/research/2025-10-02_12-19-05_startup_performance_analysis.md +183 -0
- tunacode_cli-0.0.77.3/memory-bank/research/2025-10-02_14-26-18_release_process_analysis.md +151 -0
- tunacode_cli-0.0.77.3/memory-bank/research/2025-10-03_11-17-55_repl-test-analysis.md +101 -0
- tunacode_cli-0.0.77.3/memory-bank/research/2025-10-10_11-44-51_userabort_error_analysis.md +76 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/pyproject.toml +3 -3
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/scripts/check-file-length.sh +1 -0
- tunacode_cli-0.0.77.3/scripts/run-dead-imports.sh +81 -0
- tunacode_cli-0.0.77.3/scripts/ui_import_timer.py +199 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/repl.py +2 -1
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/constants.py +1 -1
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/agents/agent_components/node_processor.py +3 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/tool_handler.py +16 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/types.py +1 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/ui/console.py +61 -11
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/ui/output.py +31 -4
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/ui/panels.py +69 -32
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/ui/tool_ui.py +30 -8
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/repl/test_error_handling.py +4 -2
- tunacode_cli-0.0.77.3/tests/characterization/repl_components/test_tool_handler.py +76 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/ui/test_console_output.py +5 -2
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/ui/test_tool_confirmations.py +24 -5
- tunacode_cli-0.0.77.3/tests/characterization/version/test_version_metadata.py +29 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/test_plan_mode.py +44 -1
- tunacode_cli-0.0.77.3/tests/ui/test_lazy_rich_loading.py +96 -0
- tunacode_cli-0.0.77.1/.claude/memory_anchors/anchors.json +0 -24
- tunacode_cli-0.0.77.1/.claude/qa/context_logs/latest_session.txt +0 -1
- tunacode_cli-0.0.77.1/AGENTS.md +0 -161
- tunacode_cli-0.0.77.1/src/tunacode/context.py +0 -71
- tunacode_cli-0.0.77.1/tests/characterization/context/README.md +0 -28
- tunacode_cli-0.0.77.1/tests/characterization/context/__init__.py +0 -1
- tunacode_cli-0.0.77.1/tests/characterization/context/test_context_acceptance.py +0 -103
- tunacode_cli-0.0.77.1/tests/characterization/context/test_context_integration.py +0 -116
- tunacode_cli-0.0.77.1/tests/characterization/context/test_context_loading.py +0 -152
- tunacode_cli-0.0.77.1/tests/characterization/context/test_tunacode_logging.py +0 -96
- tunacode_cli-0.0.77.1/tests/characterization/test_characterization_repl.py +0 -372
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/README.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/debug_history/2025-09-21-rag-search-hyphen-gotcha.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/delta_summaries/2025-01-05-baseline.yml +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/delta_summaries/2025-09-21-models_registry-pydantic-conversion.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/delta_summaries/2025-09-21-models_registry-validation-tests.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/delta_summaries/2025-09-21-test-update-model-command-characterization.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/delta_summaries/fix-text-alignment-layout-task3.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/delta_summaries/prompt_system_xml_migration.json +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/delta_summaries/task4_ui_formatting_fix.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/delta_summaries/v0.0.53_to_v0.0.54.diff +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/development/always-on-display-implementation.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/development/cli-json-recovery-incident.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/development/directory-caching-optimization.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/development/esc-investigation/ESC_KEY_INVESTIGATION.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/development/esc-investigation/ESC_KEY_STREAMING_ANALYSIS.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/development/hatch-commands.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/development/model-updates-2025.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/development/onboarding-improvements.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/development/openai_tool_calling_evaluation.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/development/phase5-prompt-injection-system.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/development/slash-commands.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/development/uv-hatch-setup.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/development/uv-installer-updates.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/development/version-management.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/docs_model_friendly/rag_modules_overview.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/kv/github-actions-release-fix.json +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/metadata/components.yml +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/metadata/hotspots.txt +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/patterns/canonical_patterns/backward_compatibility_refactor.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/patterns/json_retry_implementation.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/qa/context_logs/main-agent-integration-20250917-123100/commits.txt +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/qa/context_logs/main-agent-integration-20250917-123100/diffstat.txt +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/qa/context_logs/main-agent-integration-20250917-123100/files.json +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/qa/context_logs/main-agent-integration-20250917-123100/hunks.txt +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/qa/context_logs/main-agent-integration-20250917-141518/commits.txt +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/qa/context_logs/main-agent-integration-20250917-141518/diffstat.txt +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/qa/context_logs/main-agent-integration-20250917-141518/files.json +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/qa/context_logs/main-agent-integration-20250917-141518/hunks.txt +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/qa/context_logs/react-tool-session-20250120-000002/summary.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/qa/context_logs/smart-git-20250917-122934/commits.txt +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/qa/context_logs/smart-git-20250917-122934/diffstat.txt +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/qa/context_logs/smart-git-20250917-122934/files.json +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/qa/fix-agent-errors.yml +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/qa/fix-publish-script.yml +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/qa/fix-runtime-warnings.yml +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/qa/reasoning_docs/main-agent-integration-20250917-123100.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/qa/reasoning_docs/main-agent-integration-20250917-141518.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/qa/reasoning_docs/simplified-agent-handoff-20250929.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/qa/reasoning_docs/smart-git-20250917-122934.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/rag_knowledge.db +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/semantic_index/prompt_system_changes.json +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.github/pull_request_template.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.github/scripts/check_file_size.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.github/workflows/lint.yml +0 -0
- /tunacode_cli-0.0.77.1/.github/workflows/publish-release-v2.yml → /tunacode_cli-0.0.77.3/.github/workflows/publish-release.yml +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.gitignore +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/CLAUDE.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/LICENSE +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/MANIFEST.in +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/README.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/TODO.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/assets/tunacode_example.png +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/docs/reports/subagent_analysis/code-synthesis-analyzer_report.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/docs/reports/subagent_analysis/codebase-analyzer_report.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/docs/reviews/FAGAN_PLAN.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/docs/reviews/agent_seams.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/docs/reviews/fagan_inspection_defects.json +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/docs/reviews/fagan_inspection_summary.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/docs/reviews/main_agent_refactor_issues.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/docs/reviews/main_agent_refactor_plan.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/README.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/agent/TOOLS_WORKFLOW.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/agent/agent-flow.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/agent/agent-inspo.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/agent/how-tunacode-agent-works.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/agent/main-agent-architecture.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/agent/main-agent.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/agent/swepmini-example.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/agent/tunacode-tool-system.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/agent-tools/ReAct-vs-ReWoo.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/agent-tools/tools-architecture.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/configuration/.env.example +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/configuration/config-file-example.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/configuration/config-flow-diagram.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/configuration/config-touch-points.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/configuration/environment-variables.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/configuration/local-models.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/configuration/logging-configuration.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/configuration/tunacode-json-example.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/configuration/tunacode.json.example +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/development/codebase-hygiene.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/development/command-system-architecture.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/development/creating-custom-commands.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/development/hatch-build-system.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/development/performance-optimizations.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/development/prompt-principles.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/development/streaming-text-prefix-fix.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/tests/README.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/tests/characterization-testing.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/tests/mocking-strategies.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/tests/troubleshooting.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/ui/ui-architecture.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/user/commands.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/user/getting-started.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/documentation/user/tools.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/llm-agent-tools/.gitignore +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/llm-agent-tools/README.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/llm-agent-tools/kb_synch/Cargo.lock +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/llm-agent-tools/kb_synch/Cargo.toml +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/llm-agent-tools/kb_synch/anchor_drop.rs +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/llm-agent-tools/rag_modules/README.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/llm-agent-tools/rag_modules/indexer.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/llm-agent-tools/rag_modules/rag-cli.sh +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/llm-agent-tools/rag_modules/search.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/llm-agent-tools/rag_modules/stats.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/execute/2025-09-12_15-20-00_model_selection_config_persistence_fix.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/execute/2025-09-15_12-30-00_configuration_dashboard_implementation.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/execute/2025-09-15_configuration_dashboard_ux_improvements.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/execute/2025-09-29_12-15-00_git_safety_branch_removal_log.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/plan/2025-09-11_13-30-00_agent_loop_architecture_enhancement.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/plan/2025-09-11_14-00-00_enum_state_machine_implementation.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/plan/2025-09-11_14-15-00_automated_cli_tool_testing_framework.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/plan/2025-09-12_12-20-00_global_graceful_error_handling_implementation.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/plan/2025-09-12_15-08-14_model_selection_config_persistence_fix.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/plan/2025-09-15_12-29-04_configuration_dashboard_implementation.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/plan/2025-09-17_15-30-00_main-agent-refactor_plan.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/plan/2025-09-19_11-30-00_tunacode_md_to_agents_md_migration.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/plan/2025-09-24_cli_prompt_toolkit_fuzzy_plan.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/plan/2025-09-29_11-15-30_simplified_agent_implementation.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/plan/2025-09-29_11-45-00_git_safety_branch_removal_plan.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/research/2025-01-19_react-shim-analysis.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/research/2025-09-07_21-13-37_agent_loop_architecture.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/research/2025-09-11_13-14-06_agent_loop_enhancement_analysis.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/research/2025-09-12_12-15-48_global_graceful_error_handling_analysis.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/research/2025-09-12_14-54-43_model_configuration_crash_analysis.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/research/2025-09-12_15-06-58_model_selection_config_update_issue.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/research/2025-09-12_ai-agent-tools-architecture.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/research/2025-09-15_12-19-00_configuration_system_and_dashboard.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/research/2025-09-15_13-54-11_first-chunk_character_loss_investigation.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/research/2025-09-16_11-12-45_setup_py_usage_and_location_analysis.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/research/2025-09-19_11-25-00_tunacode_md_to_agents_md_migration.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/research/2025-09-21_models-registry-pydantic-conversion.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/research/2025-09-24_fuzzy_logic_implementation_analysis.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/research/2025-09-26_10-56-29_main_agent_architecture.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/research/2025-09-29_11-08-14_state_and_task_logic.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/research/2025-09-29_11-41-39_git_safety_branch_removal_analysis.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/memory-bank/research/main_agent_refactor_plan.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/plan-models.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/pytest.ini +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/reports/dead_code_vulture.txt +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/reports/unused_imports.txt +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/scripts/download_ripgrep.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/scripts/install_linux.sh +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/scripts/playwright_cache.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/scripts/setup_dev_env.sh +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/scripts/startup_timer.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/scripts/uninstall.sh +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/scripts/utils/vulture_whitelist.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/scripts/verify_dev_env.sh +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/README.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/base.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/implementations/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/implementations/command_reload.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/implementations/conversation.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/implementations/debug.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/implementations/development.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/implementations/model.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/implementations/plan.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/implementations/quickstart.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/implementations/system.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/implementations/template.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/implementations/todo.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/registry.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/slash/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/slash/command.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/slash/loader.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/slash/processor.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/slash/types.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/slash/validator.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/commands/template_shortcut.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/main.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/repl_components/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/repl_components/command_parser.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/repl_components/error_recovery.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/repl_components/output_display.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/cli/repl_components/tool_executor.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/configuration/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/configuration/defaults.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/configuration/key_descriptions.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/configuration/models.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/configuration/settings.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/agents/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/agents/agent_components/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/agents/agent_components/agent_config.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/agents/agent_components/agent_helpers.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/agents/agent_components/json_tool_parser.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/agents/agent_components/message_handler.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/agents/agent_components/response_state.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/agents/agent_components/result_wrapper.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/agents/agent_components/state_transition.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/agents/agent_components/streaming.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/agents/agent_components/task_completion.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/agents/agent_components/tool_buffer.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/agents/agent_components/tool_executor.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/agents/agent_components/truncation_checker.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/agents/main.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/agents/utils.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/background/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/background/manager.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/code_index.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/llm/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/logging/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/logging/config.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/logging/formatters.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/logging/handlers.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/logging/logger.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/setup/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/setup/agent_setup.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/setup/base.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/setup/config_setup.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/setup/config_wizard.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/setup/coordinator.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/setup/environment_setup.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/setup/template_setup.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/state.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/token_usage/api_response_parser.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/token_usage/cost_calculator.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/core/token_usage/usage_tracker.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/exceptions.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/prompts/system.md.bak +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/prompts/system.xml +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/py.typed +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/services/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/services/mcp.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/setup.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/templates/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/templates/loader.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/base.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/bash.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/exit_plan_mode.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/glob.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/grep.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/grep_components/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/grep_components/file_filter.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/grep_components/pattern_matcher.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/grep_components/result_formatter.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/grep_components/search_result.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/list_dir.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/present_plan.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/prompts/bash_prompt.xml +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/prompts/exit_plan_mode_prompt.xml +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/prompts/glob_prompt.xml +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/prompts/grep_prompt.xml +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/prompts/list_dir_prompt.xml +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/prompts/present_plan_prompt.xml +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/prompts/react_prompt.xml +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/prompts/read_file_prompt.xml +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/prompts/run_command_prompt.xml +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/prompts/todo_prompt.xml +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/prompts/update_file_prompt.xml +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/prompts/write_file_prompt.xml +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/react.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/read_file.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/run_command.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/schema_assembler.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/todo.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/update_file.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/write_file.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tools/xml_helper.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tutorial/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tutorial/content.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tutorial/manager.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/tutorial/steps.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/ui/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/ui/completers.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/ui/config_dashboard.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/ui/constants.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/ui/decorators.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/ui/input.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/ui/keybindings.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/ui/lexers.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/ui/logging_compat.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/ui/model_selector.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/ui/path_heuristics.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/ui/prompt_manager.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/ui/tool_descriptions.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/ui/utils.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/ui/validators.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/utils/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/utils/api_key_validation.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/utils/bm25.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/utils/config_comparator.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/utils/diff_utils.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/utils/file_utils.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/utils/import_cache.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/utils/json_utils.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/utils/message_utils.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/utils/models_registry.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/utils/retry.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/utils/ripgrep.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/utils/security.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/utils/system.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/utils/text_utils.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/utils/token_counter.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/src/tunacode/utils/user_configuration.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/CHARACTERIZATION_README.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/CHARACTERIZATION_TEST_PLAN.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/CHARACTERIZATION_TEST_PLAN_AGENT_MAIN.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/CHARACTERIZATION_TEST_PLAN_COMMANDS.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/FILE_OPERATIONS_TEST_GUIDE.md +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/agent/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/agent/conftest.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/agent/test_agent_creation.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/agent/test_json_tool_parsing.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/agent/test_process_node.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/agent/test_process_request.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/agent/test_tool_message_patching.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/background/test_background_edge_cases.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/background/test_cleanup.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/background/test_task_cancellation.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/background/test_task_creation.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/background/test_task_execution.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/code_index/test_cache_management.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/code_index/test_file_scanning.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/code_index/test_index_building.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/code_index/test_search_operations.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/code_index/test_symbol_extraction.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/commands/__init__.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/commands/test_init_command.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/commands/test_model_selection_persistence.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/conftest.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/repl/test_command_parsing.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/repl/test_escape_key_behavior.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/repl/test_input_handling.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/repl/test_keyboard_interrupts.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/repl/test_multiline_input.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/repl/test_output_display_logic.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/repl/test_repl_initialization.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/repl/test_session_flow.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/services/test_error_recovery.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/services/test_llm_routing.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/services/test_mcp_integration.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/services/test_service_lifecycle.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/state/test_agent_tracking.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/state/test_message_history.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/state/test_permissions.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/state/test_session_management.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/state/test_state_initialization.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/state/test_user_config.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/test_characterization_commands.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/test_characterization_grep.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/test_characterization_main.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/test_cli_fuzzy_matching.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/test_setup_flow.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/ui/test_async_ui.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/ui/test_diff_display.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/ui/test_prompt_rendering.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/ui/test_spinner_messages.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/utils/test_expand_file_refs.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/utils/test_file_operations.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/utils/test_token_counting.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/characterization/utils/test_utils_edge_cases.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/conftest.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/integration/test_startup_dashboard.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/test_agent_output_formatting.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/test_command_parser_retry.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/test_completion_detection.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/test_glob_phase3.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/test_json_concatenation_recovery.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/test_json_retry.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/test_logging_config.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/test_onboarding_features.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/test_phase2_type_hints.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/test_prompt_changes_validation.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/test_prompt_injection.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/test_security.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/test_slash_commands_comprehensive.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/test_slash_commands_functional.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/test_slash_commands_integration.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/test_slash_commands_isolated.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/test_spinner_updates.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/test_tool_batching_retry.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/ui/test_config_dashboard.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/unit/commands/test_model_selection_persistence_new.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/unit/config/test_user_configuration_permissions.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/unit/test_constants_enums.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/unit/test_react_tool.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/unit/utils/test_models_registry.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/unit/utils/test_models_registry_validation.py +0 -0
- {tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/tests/utils/test_config_comparator.py +0 -0
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
3
|
"sessions": [
|
|
4
|
+
{
|
|
5
|
+
"id": "tool-rejection-feedback-20251010-000001",
|
|
6
|
+
"time": "2025-10-10T00:00:01",
|
|
7
|
+
"branch": "master",
|
|
8
|
+
"base": "current",
|
|
9
|
+
"head": "current",
|
|
10
|
+
"changed_files": [
|
|
11
|
+
"src/tunacode/ui/tool_ui.py",
|
|
12
|
+
"src/tunacode/core/tool_handler.py",
|
|
13
|
+
"src/tunacode/types.py",
|
|
14
|
+
"src/tunacode/cli/repl.py",
|
|
15
|
+
"tests/characterization/ui/test_tool_confirmations.py",
|
|
16
|
+
"tests/characterization/repl/test_error_handling.py",
|
|
17
|
+
"tests/test_plan_mode.py"
|
|
18
|
+
],
|
|
19
|
+
"notes": "Golden test captured existing abort-only option 3, failing test asserted rejection guidance should become a user message. Added instructions field to ToolConfirmationResponse, prompted for feedback in ToolUI, and routed guidance via create_user_message so the agent receives corrective direction."
|
|
20
|
+
},
|
|
4
21
|
{
|
|
5
22
|
"id": "publish-workflow-cache-bust-20250105-000000",
|
|
6
23
|
"time": "2025-01-05T00:00:00",
|
|
@@ -18,6 +35,17 @@
|
|
|
18
35
|
],
|
|
19
36
|
"notes": "Release pipeline fix: renamed publish workflow to publish-release.yml, added memory anchor, synced docs, and pinned Python 3.12 so Hatch test runs avoid the 3.13 --filter sentinel bug."
|
|
20
37
|
},
|
|
38
|
+
{
|
|
39
|
+
"id": "version-metadata-test-fallback-20251002-000004",
|
|
40
|
+
"time": "2025-10-02T00:00:04Z",
|
|
41
|
+
"branch": "master",
|
|
42
|
+
"base": "current",
|
|
43
|
+
"head": "current",
|
|
44
|
+
"changed_files": [
|
|
45
|
+
"tests/characterization/version/test_version_metadata.py"
|
|
46
|
+
],
|
|
47
|
+
"notes": "Pytest run failed on Python 3.10 because tomllib is 3.11+. Added tomli fallback import in new characterization test to restore compatibility."
|
|
48
|
+
},
|
|
21
49
|
{
|
|
22
50
|
"id": "smart-git-20250917-122934",
|
|
23
51
|
"time": "2025-09-17T12:29:34",
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Startup Banner Panel Refresh
|
|
2
|
+
|
|
3
|
+
**Date**: 2025-10-01
|
|
4
|
+
**Component**: `src/tunacode/ui/output.py`
|
|
5
|
+
|
|
6
|
+
## Change
|
|
7
|
+
- Replaced the multiline ASCII banner padding with a Rich `Panel` helper using a rounded box and themed border color.
|
|
8
|
+
- Centered the TunaCode fish art within the panel and added explicit padding constants for consistent spacing.
|
|
9
|
+
|
|
10
|
+
## Impact
|
|
11
|
+
- CLI startup now presents a framed, easier-to-read banner without altering downstream messaging behavior.
|
|
12
|
+
|
|
13
|
+
## Verification
|
|
14
|
+
- `ruff check --fix .`
|
tunacode_cli-0.0.77.3/.claude/delta_summaries/2025-10-03-tool_handler-behavior-optimization.md
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Tool Handler Behavior Optimization
|
|
2
|
+
|
|
3
|
+
**Date**: 2025-10-03
|
|
4
|
+
**Component**: `tool_handler` function in `src/tunacode/cli/repl_components/tool_executor.py`
|
|
5
|
+
**Change Type**: Test optimization and behavior clarification
|
|
6
|
+
|
|
7
|
+
## Summary
|
|
8
|
+
|
|
9
|
+
Optimized test coverage for `tool_handler` to focus on the specific behavior we rely on: fail-fast cancellation path and handler instantiation. Removed redundant shell commands, REPL loops, and parsing assertions already covered elsewhere.
|
|
10
|
+
|
|
11
|
+
## Key Behavioral Changes
|
|
12
|
+
|
|
13
|
+
### 1. Fail-Fast Cancellation Path
|
|
14
|
+
- **Location**: `tool_executor.py:31-34`
|
|
15
|
+
- **Behavior**: Immediate `CancelledError` raise when `state_manager.session.operation_cancelled` is `True`
|
|
16
|
+
- **Test Coverage**: `tests/characterization/repl_components/test_tool_handler.py:22-37`
|
|
17
|
+
- **Key Assertion**: `parse_args` and `ToolHandler` constructors are NOT called when cancelled
|
|
18
|
+
|
|
19
|
+
### 2. Handler Instantiation Path
|
|
20
|
+
- **Location**: `tool_executor.py:37-41`
|
|
21
|
+
- **Behavior**: Creates new `ToolHandler` only if `state_manager.tool_handler` is `None`
|
|
22
|
+
- **Test Coverage**: `tests/characterization/repl_components/test_tool_handler.py:41-70`
|
|
23
|
+
- **Key Assertions**:
|
|
24
|
+
- `ToolHandler` called with `state_manager`
|
|
25
|
+
- `state_manager.set_tool_handler` called with new instance
|
|
26
|
+
- `parse_args` processes tool arguments
|
|
27
|
+
|
|
28
|
+
## Implementation Details
|
|
29
|
+
|
|
30
|
+
### Clear Fixtures and Constants
|
|
31
|
+
```python
|
|
32
|
+
TOOL_NAME = "read_file"
|
|
33
|
+
TOOL_ARGS: Dict[str, Any] = {"file_path": "example.py"}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### Semantic Anchor
|
|
37
|
+
- **UUID**: `8f5a4d92` (line 18)
|
|
38
|
+
- **Purpose**: Golden baseline for tool_handler cancellation and handler creation
|
|
39
|
+
|
|
40
|
+
### Minimal Mocking Strategy
|
|
41
|
+
- Patch only what `tool_handler` directly touches
|
|
42
|
+
- Avoid over-mocked setup from previous implementation
|
|
43
|
+
- Assert exact side effects we care about
|
|
44
|
+
|
|
45
|
+
## Style Compliance
|
|
46
|
+
|
|
47
|
+
- **Variable Birth Adjacent**: All variables declared immediately before first use
|
|
48
|
+
- **Explicit Typing**: All function parameters and return types annotated
|
|
49
|
+
- **Early Returns**: Cancellation check at function entry for fail-fast behavior
|
|
50
|
+
- **No Magic Literals**: Symbolic constants used throughout
|
|
51
|
+
|
|
52
|
+
## Dependencies
|
|
53
|
+
|
|
54
|
+
- `asyncio.exceptions.CancelledError` for cancellation behavior
|
|
55
|
+
- `unittest.mock.AsyncMock` for async function mocking
|
|
56
|
+
- `prompt_toolkit.application.run_in_terminal` for terminal operations
|
|
57
|
+
|
|
58
|
+
## Testing Approach
|
|
59
|
+
|
|
60
|
+
1. **Golden Baseline First**: Capture current behavior before changes
|
|
61
|
+
2. **Focused Assertions**: Test only the specific paths we care about
|
|
62
|
+
3. **Minimal Patching**: Mock only direct dependencies
|
|
63
|
+
4. **Clear Intent**: Intention-revealing test names and fixtures
|
|
64
|
+
|
|
65
|
+
## Impact Assessment
|
|
66
|
+
|
|
67
|
+
- **Backward Compatibility**: Maintained - no functional changes to `tool_handler`
|
|
68
|
+
- **Test Coverage**: Improved - more focused and reliable tests
|
|
69
|
+
- **Maintenance**: Reduced - simpler test setup and clearer intent
|
|
70
|
+
- **Performance**: No impact - same execution paths
|
{tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/delta_summaries/api_change_logs.json
RENAMED
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
3
|
"sessions": [
|
|
4
|
+
{
|
|
5
|
+
"id": "tool-rejection-feedback-20251010-000000",
|
|
6
|
+
"time": "2025-10-10T00:00:00",
|
|
7
|
+
"branch": "master",
|
|
8
|
+
"base": "current",
|
|
9
|
+
"head": "current",
|
|
10
|
+
"bullets": [
|
|
11
|
+
"ToolConfirmationResponse gains an optional instructions field emitted when the user rejects a tool.",
|
|
12
|
+
"ToolHandler.process_confirmation now calls create_user_message with rejection guidance so the agent can react.",
|
|
13
|
+
"ToolUI prompts for corrective instructions during option 3 without altering approval or skip semantics.",
|
|
14
|
+
"process_request stops emitting the legacy \"Operation aborted\" UI banner after guided aborts."
|
|
15
|
+
]
|
|
16
|
+
},
|
|
4
17
|
{
|
|
5
18
|
"id": "triple-redundancy-removal-20250919-115649",
|
|
6
19
|
"time": "2025-09-19T11:56:49",
|
|
@@ -79,6 +92,30 @@
|
|
|
79
92
|
"EXTENDED StateManager API with react_scratchpad helpers",
|
|
80
93
|
"REMOVED react from registered tool list; process_request now issues up to five auto snapshots every two iterations"
|
|
81
94
|
]
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"id": "version-bump-0.0.77.2-20251002-000002",
|
|
98
|
+
"time": "2025-10-02T00:00:02",
|
|
99
|
+
"branch": "master",
|
|
100
|
+
"base": "current",
|
|
101
|
+
"head": "current",
|
|
102
|
+
"bullets": [
|
|
103
|
+
"BUMPED project metadata and APP_VERSION to 0.0.77.2 for next PyPI release",
|
|
104
|
+
"RENAMED publish workflow file back to publish-release.yml so docs and automation match",
|
|
105
|
+
"ADDED version characterization test ensuring pyproject and constants stay synchronized"
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"id": "version-bump-0.0.77.3-20251010-120000",
|
|
110
|
+
"time": "2025-10-10T12:00:00",
|
|
111
|
+
"branch": "master",
|
|
112
|
+
"base": "current",
|
|
113
|
+
"head": "current",
|
|
114
|
+
"bullets": [
|
|
115
|
+
"BUMPED project metadata and Hatch script versions to 0.0.77.3 for the upcoming release",
|
|
116
|
+
"SYNCHRONIZED src/tunacode/constants.APP_VERSION with the new patch number",
|
|
117
|
+
"UPDATED release documentation and changelog to guide GitHub release creation"
|
|
118
|
+
]
|
|
82
119
|
}
|
|
83
120
|
]
|
|
84
121
|
}
|
{tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/delta_summaries/behavior_changes.json
RENAMED
|
@@ -1,6 +1,65 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
3
|
"sessions": [
|
|
4
|
+
{
|
|
5
|
+
"id": "tool-rejection-feedback-20251010-000000",
|
|
6
|
+
"time": "2025-10-10T00:00:00Z",
|
|
7
|
+
"branch": "master",
|
|
8
|
+
"base": "current",
|
|
9
|
+
"head": "current",
|
|
10
|
+
"bullets": [
|
|
11
|
+
"Tool confirmation option 3 now prompts for follow-up guidance instead of silently aborting.",
|
|
12
|
+
"ToolHandler injects user-provided rejection instructions into session messages for the agent to read.",
|
|
13
|
+
"Skip-future and approval flows remain unchanged; only the abort path gains guidance capture.",
|
|
14
|
+
"REPL no longer prints the \"Operation aborted\" banner once guidance has been captured."
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "context-py-removal-20251003-000000",
|
|
19
|
+
"time": "2025-10-03T00:00:00Z",
|
|
20
|
+
"branch": "master",
|
|
21
|
+
"base": "current",
|
|
22
|
+
"head": "current",
|
|
23
|
+
"bullets": [
|
|
24
|
+
"Removed src/tunacode/context.py - identified as completely dead code with zero production usage",
|
|
25
|
+
"Context functions were never imported or called in production code, only existed in test files",
|
|
26
|
+
"Actual context loading uses agent_config.py:load_tunacode_context() directly, bypassing context.py entirely",
|
|
27
|
+
"Dead code analysis tools failed to detect this unused module despite it having no production dependencies"
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"id": "check-file-length-cache-exclusion-20251005-000001",
|
|
32
|
+
"time": "2025-10-05T00:00:01Z",
|
|
33
|
+
"branch": "current",
|
|
34
|
+
"base": "current",
|
|
35
|
+
"head": "current",
|
|
36
|
+
"bullets": [
|
|
37
|
+
"Updated scripts/check-file-length.sh to prune .uv_cache artifacts from max-line scan.",
|
|
38
|
+
"Pre-commit check-file-length hook now ignores uv package caches to avoid false positives."
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"id": "ui-rich-typing-fix-20251005-000002",
|
|
43
|
+
"time": "2025-10-05T00:00:02Z",
|
|
44
|
+
"branch": "current",
|
|
45
|
+
"base": "current",
|
|
46
|
+
"head": "current",
|
|
47
|
+
"bullets": [
|
|
48
|
+
"Reworked Rich console typing to rely on TYPE_CHECKING-only imports while preserving lazy runtime loading.",
|
|
49
|
+
"Introduced RenderableContent alias so StreamingAgentPanel stays mypy-safe without importing Rich eagerly."
|
|
50
|
+
]
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"id": "dead-imports-runner-fallback-20251005-000003",
|
|
54
|
+
"time": "2025-10-05T00:00:03Z",
|
|
55
|
+
"branch": "current",
|
|
56
|
+
"base": "current",
|
|
57
|
+
"head": "current",
|
|
58
|
+
"bullets": [
|
|
59
|
+
"Swapped dead-imports pre-commit entry to scripts/run-dead-imports.sh for portable execution.",
|
|
60
|
+
"Script detects uv run/tool support via help output and falls back to .venv python while ignoring cache directories, preventing legacy uv noise."
|
|
61
|
+
]
|
|
62
|
+
},
|
|
4
63
|
{
|
|
5
64
|
"id": "publish-workflow-slim-20251001-195201",
|
|
6
65
|
"time": "2025-10-01T19:52:01Z",
|
|
@@ -13,6 +72,30 @@
|
|
|
13
72
|
"Documentation updated to explain the streamlined release pipeline and emphasize manual testing before tagging."
|
|
14
73
|
]
|
|
15
74
|
},
|
|
75
|
+
{
|
|
76
|
+
"id": "version-metadata-guard-20251002-000003",
|
|
77
|
+
"time": "2025-10-02T00:00:03Z",
|
|
78
|
+
"branch": "master",
|
|
79
|
+
"base": "current",
|
|
80
|
+
"head": "current",
|
|
81
|
+
"bullets": [
|
|
82
|
+
"Bumped release metadata to 0.0.77.2 across pyproject and runtime constants.",
|
|
83
|
+
"Renamed publish-release workflow file so GitHub Actions tracks the documented path.",
|
|
84
|
+
"Added characterization test asserting APP_VERSION stays aligned with both pyproject version declarations."
|
|
85
|
+
]
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"id": "version-metadata-0.0.77.3-20251010-120001",
|
|
89
|
+
"time": "2025-10-10T12:00:01Z",
|
|
90
|
+
"branch": "master",
|
|
91
|
+
"base": "current",
|
|
92
|
+
"head": "current",
|
|
93
|
+
"bullets": [
|
|
94
|
+
"Updated pyproject version metadata and hatch script declarations to 0.0.77.3.",
|
|
95
|
+
"Synchronized src/tunacode/constants.APP_VERSION with the new 0.0.77.3 release number.",
|
|
96
|
+
"Refreshed changelog and publishing workflow documentation to point at the 0.0.77.3 release process."
|
|
97
|
+
]
|
|
98
|
+
},
|
|
16
99
|
{
|
|
17
100
|
"id": "version-bump-0.0.77-20251001-190636",
|
|
18
101
|
"time": "2025-10-01T19:06:36Z",
|
|
@@ -1,6 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
3
|
"sessions": [
|
|
4
|
+
{
|
|
5
|
+
"id": "tool-rejection-feedback-20251010-000001",
|
|
6
|
+
"time": "2025-10-10T00:00:01Z",
|
|
7
|
+
"branch": "master",
|
|
8
|
+
"base": "current",
|
|
9
|
+
"head": "current",
|
|
10
|
+
"reasoning": {
|
|
11
|
+
"problem": "Option 3 in the tool confirmation dialog promised to collect corrective guidance but only aborted tool execution.",
|
|
12
|
+
"why_change": "Agents need the user's replacement instructions to continue productively after a rejection, otherwise the workflow stalls without direction.",
|
|
13
|
+
"solution": "Expanded ToolUI to prompt for instructions, extended ToolConfirmationResponse with an instructions field, and taught ToolHandler.process_confirmation to dispatch the guidance via create_user_message when the tool is aborted.",
|
|
14
|
+
"benefits": [
|
|
15
|
+
"Agents immediately see what to do after a rejected tool call",
|
|
16
|
+
"Keeps skip-future and approval flows untouched, minimizing surface area",
|
|
17
|
+
"Characterization coverage documents both legacy abort behavior and the new guidance routing",
|
|
18
|
+
"REPL output stays quiet—no more legacy abort banner once guidance is captured"
|
|
19
|
+
],
|
|
20
|
+
"risks": [
|
|
21
|
+
"Empty guidance texts would generate noise",
|
|
22
|
+
"Potential for duplicate prompts if the UI loop miscounts inputs"
|
|
23
|
+
],
|
|
24
|
+
"mitigations": [
|
|
25
|
+
"Strip and ignore empty instructions before creating messages",
|
|
26
|
+
"Golden test ensures option sequencing remains stable"
|
|
27
|
+
]
|
|
28
|
+
}
|
|
29
|
+
},
|
|
4
30
|
{
|
|
5
31
|
"id": "publish-workflow-slim-20251001-195209",
|
|
6
32
|
"time": "2025-10-01T19:52:09Z",
|
|
@@ -24,6 +50,54 @@
|
|
|
24
50
|
]
|
|
25
51
|
}
|
|
26
52
|
},
|
|
53
|
+
{
|
|
54
|
+
"id": "version-bump-0.0.77.2-20251002-000001",
|
|
55
|
+
"time": "2025-10-02T00:00:01Z",
|
|
56
|
+
"branch": "master",
|
|
57
|
+
"base": "current",
|
|
58
|
+
"head": "current",
|
|
59
|
+
"reasoning": {
|
|
60
|
+
"problem": "Project metadata and runtime constant still reported 0.0.77.1, causing upcoming release tags to fail workflow version checks.",
|
|
61
|
+
"why_change": "Shipping v0.0.77.2 requires pyproject metadata, Hatch scripts, constants, and release docs to agree on the new patch version.",
|
|
62
|
+
"solution": "Bump pyproject version fields and src/tunacode/constants.APP_VERSION to 0.0.77.2, update publishing documentation, rename the workflow back to publish-release.yml, and add a characterization test locking the version contract.",
|
|
63
|
+
"benefits": [
|
|
64
|
+
"Prevents publish workflow from rejecting v0.0.77.2 tags",
|
|
65
|
+
"Keeps maintainers aligned on release commands and version files",
|
|
66
|
+
"Provides regression coverage so future bumps fail fast if a file is missed"
|
|
67
|
+
],
|
|
68
|
+
"risks": [
|
|
69
|
+
"New version test could become brittle if metadata layout changes"
|
|
70
|
+
],
|
|
71
|
+
"mitigations": [
|
|
72
|
+
"Characterization test reads TOML structure instead of relying on sed, and .claude anchors document the dependency"
|
|
73
|
+
]
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"id": "version-bump-0.0.77.3-20251010-120002",
|
|
78
|
+
"time": "2025-10-10T12:00:02Z",
|
|
79
|
+
"branch": "master",
|
|
80
|
+
"base": "current",
|
|
81
|
+
"head": "current",
|
|
82
|
+
"reasoning": {
|
|
83
|
+
"problem": "All release metadata still advertised v0.0.77.2, so a fresh GitHub release would fail the version consistency checks baked into the publishing workflow.",
|
|
84
|
+
"why_change": "Preparing v0.0.77.3 demands that pyproject, hatch scripts, runtime constants, documentation, and knowledge base references share the same patch number.",
|
|
85
|
+
"solution": "Increment pyproject version declarations, update src/tunacode/constants.APP_VERSION and uv.lock, refresh changelog and publishing docs, and synchronize .claude anchors and delta summaries to the new release number.",
|
|
86
|
+
"benefits": [
|
|
87
|
+
"Guarantees the GitHub release workflow sees matching metadata before packaging",
|
|
88
|
+
"Keeps maintainers and future agents aligned on the current release number and commands",
|
|
89
|
+
"Extends knowledge base traceability so the 0.0.77.3 bump is discoverable via RAG tooling"
|
|
90
|
+
],
|
|
91
|
+
"risks": [
|
|
92
|
+
"Missing an embedded version string would leave inconsistent metadata",
|
|
93
|
+
"Knowledge base edits could drift from the source files if the version changes again soon"
|
|
94
|
+
],
|
|
95
|
+
"mitigations": [
|
|
96
|
+
"Searched repository for the previous version string and updated every hit in code and docs",
|
|
97
|
+
"Captured the change in .claude delta summaries and refreshed the memory anchor for APP_VERSION"
|
|
98
|
+
]
|
|
99
|
+
}
|
|
100
|
+
},
|
|
27
101
|
{
|
|
28
102
|
"id": "version-bump-0.0.77-20251001-190642",
|
|
29
103
|
"time": "2025-10-01T19:06:42Z",
|
{tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/docs_model_friendly/component_purpose.md
RENAMED
|
@@ -65,13 +65,22 @@ This document describes the purpose and responsibilities of each component in th
|
|
|
65
65
|
|
|
66
66
|
#### 4.1 Tool Executor (`tool_executor.py`)
|
|
67
67
|
|
|
68
|
-
**Purpose**: Coordinates
|
|
68
|
+
**Purpose**: Coordinates tool execution with fail-fast cancellation and handler instantiation.
|
|
69
69
|
|
|
70
70
|
**Key Responsibilities**:
|
|
71
|
-
- Execute tools
|
|
72
|
-
-
|
|
73
|
-
-
|
|
74
|
-
-
|
|
71
|
+
- Execute tools with immediate cancellation when operation_cancelled=True
|
|
72
|
+
- Manage ToolHandler lifecycle (create if None, reuse existing)
|
|
73
|
+
- Handle tool confirmation dialogs and plan mode restrictions
|
|
74
|
+
- Coordinate with prompt_toolkit for terminal interactions
|
|
75
|
+
- Provide graceful error handling for user aborts
|
|
76
|
+
|
|
77
|
+
**Critical Behavior Patterns**:
|
|
78
|
+
- **Fail-Fast Cancellation**: Checks `state_manager.session.operation_cancelled` before any processing
|
|
79
|
+
- **Handler Instantiation**: Creates `ToolHandler(state_manager)` only when needed, caches in `state_manager.tool_handler`
|
|
80
|
+
- **Confirmation Flow**: Uses `run_in_terminal` for synchronous confirmation dialogs
|
|
81
|
+
- **Plan Mode Enforcement**: Blocks write-only tools in plan mode with clear error messages
|
|
82
|
+
|
|
83
|
+
**Test Coverage**: Golden baseline tests in `tests/characterization/repl_components/test_tool_handler.py` with semantic anchor `8f5a4d92`
|
|
75
84
|
|
|
76
85
|
#### 4.2 Tool Buffer (`tool_buffer.py`)
|
|
77
86
|
|
|
@@ -85,6 +85,12 @@ JSON Tool Parser → Tool Buffer → Tool Executor → Parallel Execution
|
|
|
85
85
|
- **JSON Tool Parser** handles JSON-formatted tool calls
|
|
86
86
|
- **Result Aggregation** combines tool results
|
|
87
87
|
|
|
88
|
+
#### Rejection Guidance Loop
|
|
89
|
+
|
|
90
|
+
- When the user rejects a tool via option 3, **ToolUI** now prompts for corrective guidance and stores it on `ToolConfirmationResponse.instructions`.
|
|
91
|
+
- **ToolHandler.process_confirmation** detects guided aborts and calls `agent_helpers.create_user_message` so the agent receives the user's corrective instructions on the next turn.
|
|
92
|
+
- The REPL suppresses the legacy "Operation aborted" banner once guidance is captured, keeping the transcript focused on the new instructions instead of noise.
|
|
93
|
+
|
|
88
94
|
## Dependency Graph
|
|
89
95
|
|
|
90
96
|
### Core Dependencies
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"generated": "2025-09-26T17:12:31Z",
|
|
4
|
+
"anchors": [
|
|
5
|
+
{
|
|
6
|
+
"key": "d595ceb5",
|
|
7
|
+
"path": "src/tunacode/core/agents/main.py",
|
|
8
|
+
"line": 34,
|
|
9
|
+
"kind": "line",
|
|
10
|
+
"description": "Direct UI console import aligns with removal of defensive shim",
|
|
11
|
+
"status": "active",
|
|
12
|
+
"created": "2025-09-26T17:12:31Z"
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
"key": "f4dc6db7",
|
|
16
|
+
"path": "src/tunacode/constants.py",
|
|
17
|
+
"line": 12,
|
|
18
|
+
"kind": "line",
|
|
19
|
+
"description": "APP_VERSION updated to 0.0.77.3; keep in sync with pyproject metadata for releases.",
|
|
20
|
+
"status": "active",
|
|
21
|
+
"created": "2025-10-10T00:00:00Z"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"key": "9e2d3a1c",
|
|
25
|
+
"path": "tests/characterization/version/test_version_metadata.py",
|
|
26
|
+
"line": 1,
|
|
27
|
+
"kind": "file",
|
|
28
|
+
"description": "Golden characterization test pinning APP_VERSION to pyproject metadata to guard release workflow failures.",
|
|
29
|
+
"status": "active",
|
|
30
|
+
"created": "2025-10-02T00:00:00Z"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"key": "8f5a4d92",
|
|
34
|
+
"path": "tests/characterization/repl_components/test_tool_handler.py",
|
|
35
|
+
"line": 18,
|
|
36
|
+
"kind": "line",
|
|
37
|
+
"description": "Golden baseline for tool_handler cancellation and handler creation - fail-fast behavior and instantiation path",
|
|
38
|
+
"status": "active",
|
|
39
|
+
"created": "2025-10-03T00:00:00Z"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"key": "3c8b1f70",
|
|
43
|
+
"path": "src/tunacode/core/tool_handler.py",
|
|
44
|
+
"line": 82,
|
|
45
|
+
"kind": "line",
|
|
46
|
+
"description": "Abort path routes user rejection guidance into create_user_message so the agent can react next turn.",
|
|
47
|
+
"status": "active",
|
|
48
|
+
"created": "2025-10-10T00:00:00Z"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"key": "7b2c1d4e",
|
|
52
|
+
"path": "src/tunacode/cli/repl.py",
|
|
53
|
+
"line": 392,
|
|
54
|
+
"kind": "line",
|
|
55
|
+
"description": "Guided aborts skip the legacy 'Operation aborted' banner; UI stays focused on user instructions.",
|
|
56
|
+
"status": "active",
|
|
57
|
+
"created": "2025-10-10T00:00:00Z"
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
}
|
|
@@ -125,6 +125,21 @@
|
|
|
125
125
|
"classification": "implementation",
|
|
126
126
|
"type": "source"
|
|
127
127
|
},
|
|
128
|
+
"src/tunacode/core/tool_handler.py": {
|
|
129
|
+
"category": "core",
|
|
130
|
+
"classification": "implementation",
|
|
131
|
+
"type": "source"
|
|
132
|
+
},
|
|
133
|
+
"src/tunacode/types.py": {
|
|
134
|
+
"category": "core",
|
|
135
|
+
"classification": "support",
|
|
136
|
+
"type": "source"
|
|
137
|
+
},
|
|
138
|
+
"src/tunacode/ui/tool_ui.py": {
|
|
139
|
+
"category": "ui",
|
|
140
|
+
"classification": "interface",
|
|
141
|
+
"type": "source"
|
|
142
|
+
},
|
|
128
143
|
"tests/characterization/agent/test_agent_creation.py": {
|
|
129
144
|
"category": "agent",
|
|
130
145
|
"classification": "test",
|
|
@@ -150,6 +165,26 @@
|
|
|
150
165
|
"classification": "test",
|
|
151
166
|
"type": "test"
|
|
152
167
|
},
|
|
168
|
+
"tests/characterization/version/test_version_metadata.py": {
|
|
169
|
+
"category": "version",
|
|
170
|
+
"classification": "test",
|
|
171
|
+
"type": "test"
|
|
172
|
+
},
|
|
173
|
+
"tests/characterization/ui/test_tool_confirmations.py": {
|
|
174
|
+
"category": "ui",
|
|
175
|
+
"classification": "test",
|
|
176
|
+
"type": "test"
|
|
177
|
+
},
|
|
178
|
+
"tests/characterization/repl/test_error_handling.py": {
|
|
179
|
+
"category": "repl",
|
|
180
|
+
"classification": "test",
|
|
181
|
+
"type": "test"
|
|
182
|
+
},
|
|
183
|
+
"tests/test_plan_mode.py": {
|
|
184
|
+
"category": "plan_mode",
|
|
185
|
+
"classification": "test",
|
|
186
|
+
"type": "test"
|
|
187
|
+
},
|
|
153
188
|
"tests/unit/test_react_tool.py": {
|
|
154
189
|
"category": "tools",
|
|
155
190
|
"classification": "test",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
tool-rejection-feedback-20251010-000001
|
tunacode_cli-0.0.77.3/.claude/qa/context_logs/tool-rejection-feedback-20251010-000001/summary.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Tool Rejection Feedback Session
|
|
2
|
+
|
|
3
|
+
- Option 3 in the tool confirmation dialog now collects user guidance via `ToolUI`, storing it on `ToolConfirmationResponse.instructions`.
|
|
4
|
+
- `ToolHandler.process_confirmation` detects guided aborts and calls `create_user_message`, injecting the corrective instructions into the session timeline for the agent.
|
|
5
|
+
- Characterization coverage keeps the legacy abort baseline while the new plan mode test ensures rejection guidance is recorded.
|
|
6
|
+
- No changes to approval or skip semantics; only the abort path gains the guidance recording behavior.
|
|
7
|
+
- REPL skips the old "Operation aborted" banner so the agent immediately focuses on the injected guidance message.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Tool Rejection Feedback Reasoning Log
|
|
2
|
+
|
|
3
|
+
## Problem Signal
|
|
4
|
+
- Users selecting option 3 "No, and tell TunaCode what to do differently" triggered `UserAbortError` without collecting any guidance.
|
|
5
|
+
- Research document 2025-10-10_11-44-51_userabort_error_analysis.md confirmed this path was intentionally aborting but lacked the promised feedback hook.
|
|
6
|
+
|
|
7
|
+
## Approach
|
|
8
|
+
1. Captured a golden baseline around the existing abort path to guard regressions.
|
|
9
|
+
2. Introduced a failing test asserting that rejection guidance becomes a session message the next agent turn can consume.
|
|
10
|
+
3. Extended `ToolConfirmationResponse` with an `instructions` field, updated `ToolUI` to prompt for guidance, and routed non-empty guidance through `create_user_message` in `ToolHandler.process_confirmation`.
|
|
11
|
+
|
|
12
|
+
## Outcome
|
|
13
|
+
- Agents now receive explicit user instructions after a rejected tool call, removing ambiguity around option 3.
|
|
14
|
+
- Approval and skip logic remains unchanged; only aborts now append corrective guidance.
|
|
15
|
+
- Characterization coverage documents both the baseline abort behavior and the new guidance routing.
|
|
16
|
+
- The REPL no longer prints the legacy "Operation aborted" banner, preventing noise after guided aborts.
|
{tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/semantic_index/function_call_graphs.json
RENAMED
|
@@ -262,6 +262,49 @@
|
|
|
262
262
|
"purpose": "Inject guidance as system prompt to influence next LLM turn"
|
|
263
263
|
}
|
|
264
264
|
]
|
|
265
|
+
},
|
|
266
|
+
"tool_handler_flow": {
|
|
267
|
+
"description": "Tool execution handler with fail-fast cancellation and instantiation",
|
|
268
|
+
"entry_point": "tunacode.cli.repl_components.tool_executor.tool_handler",
|
|
269
|
+
"flow": [
|
|
270
|
+
{
|
|
271
|
+
"step": 1,
|
|
272
|
+
"function": "cancellation_check",
|
|
273
|
+
"location": "tool_executor.py:31-34",
|
|
274
|
+
"purpose": "Fail-fast cancellation when operation_cancelled=True",
|
|
275
|
+
"raises": "CancelledError"
|
|
276
|
+
},
|
|
277
|
+
{
|
|
278
|
+
"step": 2,
|
|
279
|
+
"function": "handler_instantiation",
|
|
280
|
+
"location": "tool_executor.py:37-41",
|
|
281
|
+
"purpose": "Create ToolHandler if not exists, reuse existing instance",
|
|
282
|
+
"dependency": "tunacode.core.tool_handler.ToolHandler"
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
"step": 3,
|
|
286
|
+
"function": "confirmation_flow",
|
|
287
|
+
"location": "tool_executor.py:43-84",
|
|
288
|
+
"purpose": "Handle tool confirmation dialogs and plan mode restrictions",
|
|
289
|
+
"dependency": "prompt_toolkit.application.run_in_terminal"
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
"step": 4,
|
|
293
|
+
"function": "user_feedback_routing",
|
|
294
|
+
"location": "core/tool_handler.py:60-93",
|
|
295
|
+
"purpose": "Convert rejection guidance into an inline user message the agent can consume",
|
|
296
|
+
"dependency": "agent_components.agent_helpers.create_user_message"
|
|
297
|
+
}
|
|
298
|
+
],
|
|
299
|
+
"test_coverage": {
|
|
300
|
+
"file": "tests/characterization/repl_components/test_tool_handler.py",
|
|
301
|
+
"anchor": "8f5a4d92",
|
|
302
|
+
"behaviors_tested": [
|
|
303
|
+
"fail_fast_cancellation",
|
|
304
|
+
"handler_instantiation_without_confirmation",
|
|
305
|
+
"rejection_feedback_routing"
|
|
306
|
+
]
|
|
307
|
+
}
|
|
265
308
|
}
|
|
266
309
|
},
|
|
267
310
|
"refactor_summary": {
|
|
@@ -100,6 +100,17 @@
|
|
|
100
100
|
"inject_system_prompt"
|
|
101
101
|
],
|
|
102
102
|
"state_dependency": "increments SessionState.react_forced_calls"
|
|
103
|
+
},
|
|
104
|
+
"ToolHandler.process_confirmation": {
|
|
105
|
+
"file": "src/tunacode/core/tool_handler.py",
|
|
106
|
+
"intent": "TOOL_CONFIRMATION_ROUTING",
|
|
107
|
+
"purpose": "Resolve confirmation responses, persist trust choices, and surface rejection guidance to the agent",
|
|
108
|
+
"semantic_role": "Bridge between UI confirmation responses and agent state",
|
|
109
|
+
"key_responsibilities": [
|
|
110
|
+
"Persist skip-future decisions per tool",
|
|
111
|
+
"Abort execution when approval is denied",
|
|
112
|
+
"Promote rejection instructions into session user messages via create_user_message"
|
|
113
|
+
]
|
|
103
114
|
}
|
|
104
115
|
},
|
|
105
116
|
"node_processing": {
|
{tunacode_cli-0.0.77.1 → tunacode_cli-0.0.77.3}/.claude/semantic_index/type_relationships.json
RENAMED
|
@@ -61,6 +61,25 @@
|
|
|
61
61
|
"completion_detection": "Integrated with state machine",
|
|
62
62
|
"thread_safety": "Through AgentStateMachine"
|
|
63
63
|
}
|
|
64
|
+
},
|
|
65
|
+
"ToolConfirmationResponse": {
|
|
66
|
+
"definition": "src/tunacode/types.py",
|
|
67
|
+
"purpose": "Structured response emitted by tool confirmation dialogs",
|
|
68
|
+
"fields": {
|
|
69
|
+
"approved": "bool flag to allow tool execution",
|
|
70
|
+
"skip_future": "bool flag to trust future calls without prompting",
|
|
71
|
+
"abort": "bool flag indicating the tool should not run",
|
|
72
|
+
"instructions": "str with optional user guidance when aborting"
|
|
73
|
+
},
|
|
74
|
+
"relationships": {
|
|
75
|
+
"produced_by": [
|
|
76
|
+
"ToolUI.show_confirmation",
|
|
77
|
+
"ToolUI.show_sync_confirmation"
|
|
78
|
+
],
|
|
79
|
+
"consumed_by": [
|
|
80
|
+
"ToolHandler.process_confirmation"
|
|
81
|
+
]
|
|
82
|
+
}
|
|
64
83
|
}
|
|
65
84
|
},
|
|
66
85
|
"state_machine_types": {
|
|
@@ -75,8 +75,8 @@ repos:
|
|
|
75
75
|
# UV-managed standalone tools (not in hatch environments)
|
|
76
76
|
- id: dead-imports
|
|
77
77
|
name: Check for unused imports in changed files
|
|
78
|
-
entry:
|
|
79
|
-
language:
|
|
78
|
+
entry: scripts/run-dead-imports.sh
|
|
79
|
+
language: script
|
|
80
80
|
files: \.py$
|
|
81
81
|
stages: [pre-commit]
|
|
82
82
|
|