tunacode-cli 0.2.0__tar.gz → 0.2.1__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.
- tunacode_cli-0.2.1/.githooks/pre-commit +11 -0
- tunacode_cli-0.2.1/.githooks/pre-push +11 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/.github/pull_request_template.md +1 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/.github/workflows/lint.yml +1 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/.gitignore +1 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/.pre-commit-config.yaml +26 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/AGENTS.md +13 -6
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/CHANGELOG.md +24 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/HARNESS.md +21 -2
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/Makefile +6 -7
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/PKG-INFO +7 -29
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/README.md +6 -28
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/CODE-STANDARDS.md +9 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/README.md +14 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/architecture/dependencies/DEPENDENCY_LAYERS.md +9 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/architecture/patterns/agent-message-serialization.md +6 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/codebase-map/structure/tree-structure.txt +1 -2
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/deployment.md +9 -0
- tunacode_cli-0.2.1/docs/git/changelog-update.md +73 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/git/practices.md +31 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/modules/configuration/configuration.md +6 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/modules/configuration/models-registry.md +5 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/modules/core/core.md +5 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/modules/index.md +4 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/modules/infrastructure/infrastructure.md +5 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/modules/skills/skills.md +5 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/modules/tools/hashline-subsystem.md +6 -2
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/modules/tools/tools-system.md +7 -5
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/modules/tools/tools.md +7 -3
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/modules/types/types.md +5 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/modules/ui/commands.md +6 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/modules/ui/ui.md +9 -2
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/modules/utils/utils.md +5 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/reviews/2026-03-24-input-latency-research-artifact.md +9 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/reviews/2026-03-25-provider-stream-stall-artifact.md +9 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/reviews/pr-429-coderabbit-review.md +9 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/skills/audit-harness/SKILL.md +6 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/ui/css-architecture.md +14 -1
- tunacode_cli-0.2.1/docs/workflows/DEBUG.md +93 -0
- tunacode_cli-0.2.1/docs/workflows/DOCS.md +82 -0
- tunacode_cli-0.2.1/docs/workflows/DREAM.md +66 -0
- tunacode_cli-0.2.1/docs/workflows/FEATURES.md +86 -0
- tunacode_cli-0.2.1/docs/workflows/HARNESS.md +72 -0
- tunacode_cli-0.2.1/docs/workflows/HOTFIX.md +8 -0
- tunacode_cli-0.2.1/docs/workflows/QA.md +65 -0
- tunacode_cli-0.2.1/docs/workflows/README.md +39 -0
- tunacode_cli-0.2.1/package-lock.json +6 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/pyproject.toml +1 -2
- tunacode_cli-0.2.1/rules/ast-grep/baseline/no-getattr-in-src.json +47 -0
- tunacode_cli-0.2.1/rules/ast-grep/rule-tests/__snapshots__/no-getattr-in-src-snapshot.yml +10 -0
- tunacode_cli-0.2.1/rules/ast-grep/rule-tests/no-getattr-in-src-test.yml +12 -0
- tunacode_cli-0.2.1/rules/ast-grep/rules/no-getattr-in-src.yml +8 -0
- tunacode_cli-0.2.1/rules/ast-grep/sgconfig.yml +5 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/check-file-length.sh +2 -0
- tunacode_cli-0.2.1/scripts/check_ast_grep_baseline.py +127 -0
- tunacode_cli-0.2.1/scripts/check_markdown_frontmatter.py +135 -0
- tunacode_cli-0.2.1/scripts/check_stale_symbol_surfaces.py +37 -0
- tunacode_cli-0.2.1/scripts/dev-setup.sh +31 -0
- tunacode_cli-0.2.1/scripts/install-git-hooks.sh +17 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/preview_tool_panels.py +3 -22
- tunacode_cli-0.2.1/scripts/run-pre-commit-hook.sh +43 -0
- tunacode_cli-0.2.1/scripts/run_ast_grep_checks.sh +22 -0
- tunacode_cli-0.2.1/scripts/stale_symbol_surfaces_analysis.py +244 -0
- tunacode_cli-0.2.1/scripts/stale_symbol_surfaces_models.py +186 -0
- tunacode_cli-0.2.1/scripts/stale_symbol_surfaces_visitors.py +224 -0
- tunacode_cli-0.2.1/scripts/validate_ast_grep_rules.py +63 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/configuration/defaults.py +0 -4
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/configuration/ignore_patterns.py +18 -34
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/configuration/user_config.py +0 -10
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/constants.py +45 -16
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/agents/agent_components/__init__.py +0 -2
- tunacode_cli-0.2.1/src/tunacode/core/agents/agent_components/agent_helpers.py +59 -0
- tunacode_cli-0.2.1/src/tunacode/core/agents/agent_components/agent_streaming.py +426 -0
- tunacode_cli-0.2.1/src/tunacode/core/agents/helpers.py +71 -0
- tunacode_cli-0.2.1/src/tunacode/core/agents/main.py +267 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/agents/resume/sanitize.py +1 -6
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/debug/usage_trace.py +1 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/logging/manager.py +1 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/session/state.py +1 -2
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/types/__init__.py +0 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/types/state_structures.py +2 -11
- tunacode_cli-0.2.1/src/tunacode/core/ui_api/__init__.py +8 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/ui_api/file_filter.py +2 -2
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/exceptions.py +0 -21
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/skills/models.py +2 -2
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/hashline_edit.py +1 -2
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/write_file.py +1 -3
- tunacode_cli-0.2.1/src/tunacode/types/__init__.py +185 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/types/base.py +2 -8
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/app.py +6 -14
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/commands/clear.py +2 -3
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/commands/compact.py +2 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/commands/model.py +8 -10
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/commands/resume.py +1 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/commands/theme.py +1 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/commands/update.py +2 -4
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/context_panel.py +1 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/lifecycle.py +2 -2
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/main.py +5 -4
- tunacode_cli-0.2.1/src/tunacode/ui/render_safety.py +153 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/renderers/__init__.py +0 -2
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/renderers/agent_response.py +1 -5
- tunacode_cli-0.2.1/src/tunacode/ui/renderers/errors.py +87 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/renderers/panel_widths.py +1 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/renderers/panels.py +4 -5
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/renderers/search.py +1 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/renderers/tools/base.py +1 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/renderers/tools/bash.py +1 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/renderers/tools/discover.py +1 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/renderers/tools/hashline_edit.py +5 -30
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/renderers/tools/read_file.py +3 -3
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/renderers/tools/web_fetch.py +1 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/renderers/tools/write_file.py +1 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/repl_support.py +4 -28
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/request_debug.py +3 -20
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/screens/api_key_entry.py +2 -2
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/screens/model_picker.py +3 -4
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/screens/session_picker.py +1 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/screens/setup.py +3 -3
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/shell_runner.py +2 -2
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/styles.py +1 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/thinking_state.py +2 -4
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/welcome.py +16 -2
- tunacode_cli-0.2.1/src/tunacode/ui/widgets/autocomplete_positioning.py +21 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/widgets/chat.py +14 -2
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/widgets/command_autocomplete.py +2 -14
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/widgets/editor.py +12 -10
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/widgets/file_autocomplete.py +6 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/widgets/messages.py +1 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/widgets/resource_bar.py +2 -22
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/widgets/skills_autocomplete.py +6 -0
- tunacode_cli-0.2.1/src/tunacode/utils/messaging/adapter.py +208 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/utils/messaging/token_counter.py +3 -20
- tunacode_cli-0.2.1/tc-cvurren.png +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/architecture/test_import_order.py +26 -1
- tunacode_cli-0.2.1/tests/architecture/test_ui_api_surface.py +16 -0
- tunacode_cli-0.2.1/tests/integration/ui/test_theme_render_crash_regression.py +65 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/system/cli/test_repl_support.py +4 -19
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/system/cli/test_tmux_tools.py +1 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/test_dependency_layers.py +2 -3
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/configuration/test_ignore_patterns.py +2 -3
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/configuration/test_user_config_loading.py +0 -5
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/core/test_logging.py +12 -0
- tunacode_cli-0.2.1/tests/unit/core/test_provider_error_surfacing.py +109 -0
- tunacode_cli-0.2.1/tests/unit/test_stale_symbol_surfaces.py +102 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/tools/test_ignore_manager.py +1 -3
- tunacode_cli-0.2.1/tests/unit/ui/test_context_panel.py +38 -0
- tunacode_cli-0.2.1/tests/unit/ui/test_render_safety.py +86 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/ui/test_request_threading.py +2 -10
- tunacode_cli-0.2.1/tests/unit/ui/test_theme_wrapping.py +62 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/utils/test_shell_command_escape.py +29 -1
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/uv.lock +1 -1
- tunacode_cli-0.2.0/.artifacts/README.md +0 -32
- tunacode_cli-0.2.0/.artifacts/debug_history/2026-03-25_tinyagent-1-2-27-gil-hotfix-validation.md +0 -132
- tunacode_cli-0.2.0/.artifacts/debug_history/REQUEST_CONTEXT_CUTOVER_LESSON.md +0 -34
- tunacode_cli-0.2.0/.artifacts/debug_history/postmortem-defensive-message-typing-2026-03-17.md +0 -74
- tunacode_cli-0.2.0/.artifacts/debug_history/postmortem-loading-indicator-submit-regression-2026-03-24.md +0 -126
- tunacode_cli-0.2.0/.artifacts/debug_history/slop_fixture.py +0 -14
- tunacode_cli-0.2.0/.artifacts/execute/2026-03-22_19-54-47_tinyagent-message-typing-cleanup.md +0 -98
- tunacode_cli-0.2.0/.artifacts/execute/2026-03-24_19-20-38_input-latency-threaded-request-execution.md +0 -185
- tunacode_cli-0.2.0/.artifacts/execute/2026-03-26_16-20-32_models-loading-unification.md +0 -101
- tunacode_cli-0.2.0/.artifacts/execute/2026-03-28_12-18-53_pr-444-review-fixes.md +0 -57
- tunacode_cli-0.2.0/.artifacts/issue_analysis_report_2026-03-21.md +0 -52
- tunacode_cli-0.2.0/.artifacts/plan/2026-03-22_09-58-20_native-tinyagent-tool-contract.md +0 -341
- tunacode_cli-0.2.0/.artifacts/plan/2026-03-22_18-08-41_tinyagent-message-typing-cleanup.md +0 -215
- tunacode_cli-0.2.0/.artifacts/plan/2026-03-23_15-35-00_command-autocomplete-positioning.md +0 -145
- tunacode_cli-0.2.0/.artifacts/plan/2026-03-24_19-15-16_input-latency-threaded-request-execution.md +0 -326
- tunacode_cli-0.2.0/.artifacts/plan/2026-03-26_15-34-01_models-loading-unification/PLAN.md +0 -271
- tunacode_cli-0.2.0/.artifacts/plan/2026-03-26_15-34-01_models-loading-unification/tickets/INDEX.md +0 -16
- tunacode_cli-0.2.0/.artifacts/plan/2026-03-26_15-34-01_models-loading-unification/tickets/T001.md +0 -37
- tunacode_cli-0.2.0/.artifacts/plan/2026-03-26_15-34-01_models-loading-unification/tickets/T002.md +0 -46
- tunacode_cli-0.2.0/.artifacts/plan/2026-03-26_15-34-01_models-loading-unification/tickets/T003.md +0 -35
- tunacode_cli-0.2.0/.artifacts/plan/2026-03-26_15-34-01_models-loading-unification/tickets/T004.md +0 -70
- tunacode_cli-0.2.0/.artifacts/plan/2026-03-27_13-59-15_pr-444-review-fixes/PLAN.md +0 -202
- tunacode_cli-0.2.0/.artifacts/plan/2026-03-31_17-00-48_ui-api-passthrough-reduction/PLAN.md +0 -251
- tunacode_cli-0.2.0/.artifacts/plan/2026-03-31_17-00-48_ui-api-passthrough-reduction/tickets/INDEX.md +0 -16
- tunacode_cli-0.2.0/.artifacts/plan/2026-03-31_17-00-48_ui-api-passthrough-reduction/tickets/T001.md +0 -41
- tunacode_cli-0.2.0/.artifacts/plan/2026-03-31_17-00-48_ui-api-passthrough-reduction/tickets/T002.md +0 -53
- tunacode_cli-0.2.0/.artifacts/plan/2026-03-31_17-00-48_ui-api-passthrough-reduction/tickets/T003.md +0 -38
- tunacode_cli-0.2.0/.artifacts/plan/2026-03-31_17-00-48_ui-api-passthrough-reduction/tickets/T004.md +0 -76
- tunacode_cli-0.2.0/.artifacts/plans/consolidate-main-support-plan.md +0 -82
- tunacode_cli-0.2.0/.artifacts/plans/reduce-src-python-files-to-500-lines-plan.md +0 -67
- tunacode_cli-0.2.0/.artifacts/query_data_flow.md +0 -99
- tunacode_cli-0.2.0/.artifacts/release/model-registry-refresh-release-blocker-2026-03-21.md +0 -134
- tunacode_cli-0.2.0/.artifacts/release/release-v0.1.94-run.md +0 -422
- tunacode_cli-0.2.0/.artifacts/release/tmux-suite-validation-2026-03-21.md +0 -82
- tunacode_cli-0.2.0/.artifacts/research/2026-03-17_13-01-09_replace_messages-cutover.md +0 -98
- tunacode_cli-0.2.0/.artifacts/research/2026-03-17_14-04-53_mypy-main-py-errors-map.md +0 -93
- tunacode_cli-0.2.0/.artifacts/research/2026-03-21_14-07-44_prompt-versioning-map.md +0 -65
- tunacode_cli-0.2.0/.artifacts/research/2026-03-22_09-42-58_tools-implementation.md +0 -76
- tunacode_cli-0.2.0/.artifacts/research/2026-03-22_09-43-01_tools-context-synthesis.md +0 -137
- tunacode_cli-0.2.0/.artifacts/research/2026-03-22_09-43-03_codebase-locator_tool-system.md +0 -101
- tunacode_cli-0.2.0/.artifacts/research/2026-03-22_09-45-29_tools-data-inputs-contracts.md +0 -193
- tunacode_cli-0.2.0/.artifacts/research/2026-03-22_09-53-07_tool-result-adapter-runtime.md +0 -65
- tunacode_cli-0.2.0/.artifacts/research/2026-03-22_09-53-52_minimax-tinyagent-contract-shape-vs-runtime.md +0 -120
- tunacode_cli-0.2.0/.artifacts/research/2026-03-22_17-57-53_message-ingress-data-contract-map.md +0 -137
- tunacode_cli-0.2.0/.artifacts/research/2026-03-23_15-30-00_command-autocomplete-positioning.md +0 -221
- tunacode_cli-0.2.0/.artifacts/research/2026-03-24_16-58-32_tui-submit-latency.md +0 -165
- tunacode_cli-0.2.0/.artifacts/research/2026-03-24_18-46-40_input-latency-ui-loop-coupling.md +0 -111
- tunacode_cli-0.2.0/.artifacts/research/2026-03-24_20-07-05_input-latency-regression-probe.md +0 -265
- tunacode_cli-0.2.0/.artifacts/research/2026-03-26_15-29-02_models-loading-conflict-map.md +0 -212
- tunacode_cli-0.2.0/.artifacts/research/2026-03-31_11-32-31_theme-switch-dim-background-crash.md +0 -139
- tunacode_cli-0.2.0/.artifacts/research/2026-03-31_16-51-07_ui-api.md +0 -381
- tunacode_cli-0.2.0/.artifacts/research/2026-04-01_23-32-20_session-save-tail-and-message-boundary.md +0 -78
- tunacode_cli-0.2.0/.artifacts/research/2026-04-01_tinyagent-boundary.md +0 -62
- tunacode_cli-0.2.0/.artifacts/tunacode_action_audit.md +0 -98
- tunacode_cli-0.2.0/.test_reports/.gitkeep +0 -0
- tunacode_cli-0.2.0/LOG.md +0 -73
- tunacode_cli-0.2.0/docs/docs_audit.html +0 -162
- tunacode_cli-0.2.0/plan.md +0 -275
- tunacode_cli-0.2.0/scripts/dev-setup.sh +0 -31
- tunacode_cli-0.2.0/src/tunacode/core/agents/agent_components/agent_helpers.py +0 -108
- tunacode_cli-0.2.0/src/tunacode/core/agents/helpers.py +0 -144
- tunacode_cli-0.2.0/src/tunacode/core/agents/main.py +0 -775
- tunacode_cli-0.2.0/src/tunacode/core/types/tool_registry.py +0 -188
- tunacode_cli-0.2.0/src/tunacode/core/ui_api/__init__.py +0 -8
- tunacode_cli-0.2.0/src/tunacode/core/ui_api/configuration.py +0 -101
- tunacode_cli-0.2.0/src/tunacode/core/ui_api/constants.py +0 -47
- tunacode_cli-0.2.0/src/tunacode/core/ui_api/lsp_status.py +0 -58
- tunacode_cli-0.2.0/src/tunacode/core/ui_api/messaging.py +0 -36
- tunacode_cli-0.2.0/src/tunacode/core/ui_api/shared_types.py +0 -17
- tunacode_cli-0.2.0/src/tunacode/core/ui_api/system_paths.py +0 -44
- tunacode_cli-0.2.0/src/tunacode/core/ui_api/user_configuration.py +0 -51
- tunacode_cli-0.2.0/src/tunacode/tools/lsp/__init__.py +0 -107
- tunacode_cli-0.2.0/src/tunacode/tools/lsp/client.py +0 -352
- tunacode_cli-0.2.0/src/tunacode/tools/lsp/diagnostics.py +0 -60
- tunacode_cli-0.2.0/src/tunacode/tools/lsp/servers.py +0 -101
- tunacode_cli-0.2.0/src/tunacode/types/__init__.py +0 -107
- tunacode_cli-0.2.0/src/tunacode/types/canonical.py +0 -365
- tunacode_cli-0.2.0/src/tunacode/ui/renderers/errors.py +0 -207
- tunacode_cli-0.2.0/src/tunacode/ui/renderers/tools/diagnostics.py +0 -186
- tunacode_cli-0.2.0/src/tunacode/utils/messaging/adapter.py +0 -506
- tunacode_cli-0.2.0/tests/architecture/test_init_bloat.py +0 -58
- tunacode_cli-0.2.0/tests/unit/core/test_agent_helpers.py +0 -34
- tunacode_cli-0.2.0/tests/unit/core/test_openrouter_usage_metrics.py +0 -45
- tunacode_cli-0.2.0/tests/unit/core/test_provider_error_surfacing.py +0 -50
- tunacode_cli-0.2.0/tests/unit/core/test_request_orchestrator_parallel_tools.py +0 -261
- tunacode_cli-0.2.0/tests/unit/core/test_stream_phase_debug.py +0 -90
- tunacode_cli-0.2.0/tests/unit/core/test_usage_trace_debug.py +0 -138
- tunacode_cli-0.2.0/tests/unit/test_sanitize_canonicalization.py +0 -61
- tunacode_cli-0.2.0/tests/unit/types/test_adapter.py +0 -229
- tunacode_cli-0.2.0/tests/unit/types/test_canonical.py +0 -418
- tunacode_cli-0.2.0/tests/unit/types/test_tool_registry.py +0 -102
- tunacode_cli-0.2.0/tests/unit/utils/test_token_counter.py +0 -77
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/.coderabbit.yaml +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/.github/ISSUE_TEMPLATE/question.yml +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/.github/dependabot.yml +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/.github/workflows/dependency-map.yml +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/.github/workflows/empty-dir-check.yml +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/.github/workflows/publish-release.yml +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/.github/workflows/release.yml +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/.github/workflows/tech-debt.yml +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/LICENSE +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/MANIFEST.in +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/assets/hashline-edit.png +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/assets/home.png +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/architecture/dependencies/DEPENDENCY_LAYERS.dot +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/architecture/dependencies/DEPENDENCY_LAYERS.png +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/images/dream-ui/tunacode-cli-home-catpu.png +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/images/dream-ui/tunacode-cli-home.png +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/images/dream-ui/tunacode-cli-lsp.png +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/images/dream-ui/tunacode-cli-response.png +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/images/tool-calls.png +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/images/tunacode.png +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/pytest.ini +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/benchmarks/input_latency.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/benchmarks/input_paint_latency.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/benchmarks/input_tmux_latency.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/check-defensive-slop.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/check-naming-conventions.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/check-unused-constants.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/check_agents_freshness.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/check_unused_modules.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/download_ripgrep.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/generate-release-notes.sh +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/generate_structure_tree.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/grimp_layers_report.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/install_linux.sh +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/playwright_cache.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/run-dead-imports.sh +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/run_gates.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/startup_timer.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/todo_baseline.json +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/todo_scanner.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/ui_import_timer.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/uninstall.sh +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/update_models_registry.sh +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/utils/check_empty_dirs.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/scripts/utils/vulture_whitelist.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/skills/pypi-release/SKILL.md +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/skills/pypi-release/references/common-issues.md +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/skills/pypi-release/references/workflow-structure.md +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/skills/pypi-release/scripts/bump_version.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/skills/pypi-release/scripts/local_publish.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/skills/pypi-release/scripts/release.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/configuration/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/configuration/limits.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/configuration/models.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/configuration/models_registry.json +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/configuration/paths.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/configuration/pricing.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/configuration/settings.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/agents/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/agents/agent_components/agent_config.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/agents/agent_components/agent_session_config.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/agents/resume/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/agents/resume/sanitize_debug.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/compaction/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/compaction/controller.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/compaction/prompts.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/compaction/summarizer.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/compaction/types.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/debug/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/logging/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/logging/handlers.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/logging/levels.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/logging/records.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/session/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/types/agent_state.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/types/state.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/core/ui_api/formatting.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/infrastructure/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/infrastructure/cache/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/infrastructure/cache/caches/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/infrastructure/cache/caches/agents.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/infrastructure/cache/caches/limits_settings.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/infrastructure/cache/caches/models_registry.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/infrastructure/cache/caches/skills.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/infrastructure/cache/caches/tunacode_context.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/infrastructure/cache/manager.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/infrastructure/cache/metadata.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/infrastructure/cache/strategies.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/infrastructure/file_filter.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/prompts/system_prompt.md +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/py.typed +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/skills/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/skills/discovery.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/skills/loader.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/skills/prompting.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/skills/registry.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/skills/search.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/skills/selection.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/bash.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/cache_accessors/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/cache_accessors/ignore_manager_cache.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/cache_accessors/ripgrep_cache.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/discover.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/hashline.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/ignore.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/ignore_manager.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/line_cache.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/read_file.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/utils/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/utils/discover_pipeline.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/utils/discover_terms.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/utils/discover_types.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/utils/file_errors.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/utils/formatting.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/utils/ripgrep.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/tools/web_fetch.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/types/callbacks.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/types/dataclasses.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/types/models_registry.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/assets/logo.ansi +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/clipboard.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/command_registry.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/commands/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/commands/base.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/commands/cancel.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/commands/debug.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/commands/exit.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/commands/help.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/commands/skills.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/commands/thoughts.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/esc/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/esc/handler.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/esc/types.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/logo_assets.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/model_display.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/renderers/thinking.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/renderers/tools/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/renderers/tools/syntax_utils.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/request_bridge.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/screens/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/screens/theme_picker.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/screens/update_confirm.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/slopgotchi/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/slopgotchi/panel.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/streaming.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/styles/layout.tcss +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/styles/modals.tcss +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/styles/panels.tcss +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/styles/widgets.tcss +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/ui/widgets/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/utils/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/utils/messaging/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/utils/system/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/src/tunacode/utils/system/gitignore.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/architecture/__init__.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/architecture/test_imports_in_init.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/architecture/test_layer_dependencies.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/conftest.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/integration/core/test_minimax_execution_path.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/integration/core/test_mtime_caches_end_to_end.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/integration/core/test_tinyagent_alchemy_usage_contract_live.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/integration/ui/test_submit_loading_lifecycle.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/system/cli/test_cli_default_command.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/system/cli/test_startup.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/test_compaction.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/configuration/test_default_config_minimax_keys.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/configuration/test_default_config_stream_agent_text.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/configuration/test_models_registry_loading_behavior.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/configuration/test_models_registry_minimax_contract.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/configuration/test_pricing_registry_loading.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/configuration/test_provider_api_key_env_fallback.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/core/test_agent_cache_abort.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/core/test_agent_init_debug.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/core/test_agent_skills_prompt_injection.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/core/test_agent_stream_provider_debug.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/core/test_compaction_controller_outcomes.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/core/test_compaction_summarizer.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/core/test_context_overflow_detection.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/core/test_exceptions.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/core/test_session_state_defaults.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/core/test_session_state_model_registry_loading.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/core/test_session_usage_schema.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/core/test_thinking_stream_routing.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/core/test_tinyagent_openrouter_model_config.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/core/test_tool_concurrency_limit.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/infrastructure/test_cache_infrastructure.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/infrastructure/test_file_filter.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/infrastructure/test_migrated_lru_cache_replacements.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/infrastructure/test_typed_cache_accessors.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/skills/test_registry.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/skills/test_selection.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/ui/test_app_loading_indicator.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/ui/test_request_debug.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/ui/test_thinking_state.py +0 -0
- {tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/tests/unit/utils/test_gitignore.py +0 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
SOURCE="${BASH_SOURCE[0]}"
|
|
5
|
+
while [[ -L "$SOURCE" ]]; do
|
|
6
|
+
HOOK_DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
|
|
7
|
+
SOURCE="$(readlink "$SOURCE")"
|
|
8
|
+
[[ "$SOURCE" != /* ]] && SOURCE="$HOOK_DIR/$SOURCE"
|
|
9
|
+
done
|
|
10
|
+
HOOK_DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
|
|
11
|
+
exec "$HOOK_DIR/../scripts/run-pre-commit-hook.sh" pre-commit "$@"
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
SOURCE="${BASH_SOURCE[0]}"
|
|
5
|
+
while [[ -L "$SOURCE" ]]; do
|
|
6
|
+
HOOK_DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
|
|
7
|
+
SOURCE="$(readlink "$SOURCE")"
|
|
8
|
+
[[ "$SOURCE" != /* ]] && SOURCE="$HOOK_DIR/$SOURCE"
|
|
9
|
+
done
|
|
10
|
+
HOOK_DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
|
|
11
|
+
exec "$HOOK_DIR/../scripts/run-pre-commit-hook.sh" pre-push "$@"
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
- [ ] All pre-commit hooks pass
|
|
34
34
|
- [ ] Code formatted with `ruff format`
|
|
35
35
|
- [ ] Code passes `ruff check` without warnings
|
|
36
|
-
- [ ] No Python file exceeds **600 lines**
|
|
36
|
+
- [ ] No non-test Python file exceeds **600 lines**
|
|
37
37
|
|
|
38
38
|
## Checklist
|
|
39
39
|
- [ ] My code follows the Python coding standards (type hints, f-strings, pathlib, etc.)
|
|
@@ -22,6 +22,7 @@ jobs:
|
|
|
22
22
|
run: |
|
|
23
23
|
uv run unimport --check --gitignore --exclude 'venv/*' --exclude '.venv/*' --exclude '.uv-cache/*' --exclude '.uv_cache/*' src
|
|
24
24
|
uv run vulture --min-confidence 80 scripts/utils/vulture_whitelist.py src
|
|
25
|
+
uv run python scripts/check_stale_symbol_surfaces.py
|
|
25
26
|
- name: Check for orphan modules
|
|
26
27
|
run: uv run python scripts/check_unused_modules.py
|
|
27
28
|
|
|
@@ -68,6 +68,13 @@ repos:
|
|
|
68
68
|
files: \.py$
|
|
69
69
|
stages: [pre-commit]
|
|
70
70
|
|
|
71
|
+
- id: stale-symbol-surfaces
|
|
72
|
+
name: Check for stale symbol surfaces
|
|
73
|
+
entry: uv run python scripts/check_stale_symbol_surfaces.py
|
|
74
|
+
language: system
|
|
75
|
+
pass_filenames: false
|
|
76
|
+
stages: [pre-push]
|
|
77
|
+
|
|
71
78
|
- id: vulture-changed
|
|
72
79
|
name: Check for dead code in changed files
|
|
73
80
|
entry: uv run vulture --min-confidence 80 scripts/utils/vulture_whitelist.py
|
|
@@ -104,7 +111,7 @@ repos:
|
|
|
104
111
|
entry: scripts/check-file-length.sh
|
|
105
112
|
language: script
|
|
106
113
|
files: \.py$
|
|
107
|
-
exclude: ^tests/benchmarks/bench_discover\.py$
|
|
114
|
+
exclude: ^tests/|^tests/benchmarks/bench_discover\.py$
|
|
108
115
|
pass_filenames: true
|
|
109
116
|
|
|
110
117
|
# Check naming conventions
|
|
@@ -142,6 +149,15 @@ repos:
|
|
|
142
149
|
pass_filenames: false
|
|
143
150
|
stages: [pre-push]
|
|
144
151
|
|
|
152
|
+
- id: ast-grep-getattr-ratchet
|
|
153
|
+
name: Run ast-grep getattr ratchet
|
|
154
|
+
entry: scripts/run_ast_grep_checks.sh
|
|
155
|
+
language: script
|
|
156
|
+
files: ^(src/.*\.py|rules/ast-grep/.*|scripts/run_ast_grep_checks\.sh|scripts/validate_ast_grep_rules\.py|scripts/check_ast_grep_baseline\.py)$
|
|
157
|
+
always_run: true
|
|
158
|
+
pass_filenames: false
|
|
159
|
+
stages: [pre-push]
|
|
160
|
+
|
|
145
161
|
# Check for empty directories or __init__.py-only directories (runs on push)
|
|
146
162
|
- id: empty-dir-check
|
|
147
163
|
name: Check for Empty Directories
|
|
@@ -150,6 +166,15 @@ repos:
|
|
|
150
166
|
pass_filenames: false
|
|
151
167
|
stages: [pre-push]
|
|
152
168
|
|
|
169
|
+
- id: markdown-frontmatter
|
|
170
|
+
name: Require markdown frontmatter in root/docs
|
|
171
|
+
entry: uv run python scripts/check_markdown_frontmatter.py
|
|
172
|
+
language: system
|
|
173
|
+
files: ^docs/.*\.md$|^[^/]+\.md$
|
|
174
|
+
exclude: ^(AGENTS|README)\.md$
|
|
175
|
+
pass_filenames: false
|
|
176
|
+
stages: [pre-push]
|
|
177
|
+
|
|
153
178
|
# Dependency layer check (runs on commit - architectural check)
|
|
154
179
|
# Note: Map visualization generated by GitHub Action on master pushes
|
|
155
180
|
- id: dependency-layers
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# AGENTS.md
|
|
2
|
-
Last Updated: 2026-04-
|
|
2
|
+
Last Updated: 2026-04-27
|
|
3
3
|
|
|
4
4
|
## Repository Orientation
|
|
5
5
|
- This is `tunacode-cli`, a terminal AI coding agent with a Textual UI and tiny-agent tool loop.
|
|
@@ -9,11 +9,11 @@ Last Updated: 2026-04-02
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
## Start Here
|
|
12
|
-
- `README.md` — user-facing setup, supported features, and command usage.
|
|
13
12
|
- `docs/modules/index.md` — module layer map and reading order.
|
|
14
13
|
- `docs/architecture/dependencies/DEPENDENCY_LAYERS.md` — generated dependency summary.
|
|
15
14
|
- `docs/skills/audit-harness/SKILL.md` — strict harness-audit procedure; treat any mismatch or failed gate as critical and run checks manually one by one.
|
|
16
15
|
- `docs/modules/ui/commands.md` — command model and command registration notes.
|
|
16
|
+
- `docs/workflows/README.md` — accepted development workflows and execution guidance.
|
|
17
17
|
- `scripts/check_agents_freshness.py` — validates this file is current.
|
|
18
18
|
|
|
19
19
|
## Harness Documentation Purpose
|
|
@@ -24,6 +24,7 @@ Last Updated: 2026-04-02
|
|
|
24
24
|
|
|
25
25
|
## Git Safety and Non-Destructive Defaults
|
|
26
26
|
- Follow `docs/git/practices.md` for local Git workflow and safety rules.
|
|
27
|
+
- Use `docs/git/changelog-update.md` when the task is to refresh `CHANGELOG.md` from recently merged PRs.
|
|
27
28
|
- Before performing any Git operation (`git status`, `git add`, `git commit`, etc.), read `docs/git/practices.md` in that session.
|
|
28
29
|
- Default behavior is non-destructive: never delete or clean untracked files/directories unless explicitly requested by the user.
|
|
29
30
|
- If unknown files appear during checks, pause and ask before cleanup.
|
|
@@ -44,7 +45,7 @@ Last Updated: 2026-04-02
|
|
|
44
45
|
- Developer entry: `Makefile` target `make run` -> `uv run tunacode`.
|
|
45
46
|
|
|
46
47
|
## Source Structure (high-level)
|
|
47
|
-
- `src/tunacode/ui/` — terminal UI, widgets, screens, CSS, command shell.
|
|
48
|
+
- `src/tunacode/ui/` — terminal UI, widgets, screens, CSS, command shell, and render-safety helpers for Rich/Textual theme stability.
|
|
48
49
|
- `src/tunacode/core/` — agents, compaction, session, prompting, logging.
|
|
49
50
|
- `src/tunacode/tools/` — native tinyagent tool implementations (`bash`, `discover`, `read_file`, `hashline_edit`, `web_fetch`, `write_file`) plus supporting helpers.
|
|
50
51
|
- `src/tunacode/configuration/` — settings, model registry, API paths, limits, pricing, and ignore patterns.
|
|
@@ -52,7 +53,7 @@ Last Updated: 2026-04-02
|
|
|
52
53
|
- `src/tunacode/utils/` — adapters, messaging helpers, token counting, gitignore, system utilities.
|
|
53
54
|
- `src/tunacode/types/` — canonical data models, callbacks, protocol types.
|
|
54
55
|
- Shared packages: `src/tunacode/constants.py`, `src/tunacode/exceptions.py`, `src/tunacode/skills/`, `src/tunacode/prompts/`.
|
|
55
|
-
- Notable sub-packages: `src/tunacode/core/ui_api/` (core→UI bridge)
|
|
56
|
+
- Notable sub-packages: `src/tunacode/core/ui_api/` (core→UI bridge).
|
|
56
57
|
|
|
57
58
|
## Architecture Boundaries
|
|
58
59
|
- Documented conceptual stack (bottom-up): `types -> utils -> infrastructure -> configuration -> tools -> core -> ui`.
|
|
@@ -69,6 +70,9 @@ Last Updated: 2026-04-02
|
|
|
69
70
|
- Review notes for active PR triage: `docs/reviews/`.
|
|
70
71
|
- Debugging and investigation artifacts: `docs/reviews/*-artifact.md`.
|
|
71
72
|
- Git workflow and safety practices: `docs/git/practices.md`.
|
|
73
|
+
- Changelog refresh procedure for merged PR summaries: `docs/git/changelog-update.md`.
|
|
74
|
+
- Workflow guidance: `docs/workflows/README.md` and workflow-specific files such
|
|
75
|
+
as `docs/workflows/REFACTOR.md`.
|
|
72
76
|
- Module-specific docs:
|
|
73
77
|
- `docs/modules/core/core.md`
|
|
74
78
|
- `docs/modules/ui/ui.md`
|
|
@@ -83,8 +87,9 @@ Last Updated: 2026-04-02
|
|
|
83
87
|
- UI design reference: `docs/ui/css-architecture.md` and generated map at `docs/codebase-map/structure/tree-structure.txt`.
|
|
84
88
|
|
|
85
89
|
## Routine Commands
|
|
86
|
-
- Setup: `make dev
|
|
87
|
-
-
|
|
90
|
+
- Setup: `make install` (canonical full dev environment bootstrap).
|
|
91
|
+
- Installs repo-managed `pre-commit` and `pre-push` git hooks from `.githooks/`.
|
|
92
|
+
- Compatibility alias: `make dev-setup`.
|
|
88
93
|
- Run app: `make run`.
|
|
89
94
|
- Full tests: `make test`.
|
|
90
95
|
- Linters + hooks: `make lint`.
|
|
@@ -110,6 +115,7 @@ Last Updated: 2026-04-02
|
|
|
110
115
|
## Quality Constraints (Do not break)
|
|
111
116
|
- `README.md` and docs should stay consistent with implementation.
|
|
112
117
|
- Keep `AGENTS.md` updated with `Last Updated: YYYY-MM-DD` whenever `src/` or `docs/` changes.
|
|
118
|
+
- The 2026-04-13 getattr baseline follow-up reduced the scoped UI/runtime and owned-exception `getattr(...)` usage; the committed ast-grep baseline should stay aligned with those removals.
|
|
113
119
|
- Do not add TunaCode-owned message-contract wrappers around tinyagent message types; use tinyagent models directly in memory and keep dict payloads at real boundaries.
|
|
114
120
|
- Preserve existing architecture order rules; do not add new imports across forbidden layers.
|
|
115
121
|
- Treat current file-length allowlist entries as temporary debt only. Do not add any new file-specific exemptions to the `>600` line rule; fix the enforcement path or split the code instead.
|
|
@@ -121,4 +127,5 @@ Last Updated: 2026-04-02
|
|
|
121
127
|
- Prefer small, scoped changes.
|
|
122
128
|
- Keep edits minimal and targeted.
|
|
123
129
|
- Prefer existing patterns; mirror command/test naming used in nearby code.
|
|
130
|
+
- Treat `src/tunacode/ui/render_safety.py` plus built-in theme wrapping in `src/tunacode/constants.py` as part of the startup/theme stability path; keep Rich default/ANSI color handling local to TunaCode rather than patching Textual.
|
|
124
131
|
- Run validation commands before handoff when touching architecture, dependencies, or shared packages.
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Changelog
|
|
3
|
+
summary: Release history for TunaCode versions and notable changes.
|
|
4
|
+
when_to_read:
|
|
5
|
+
- When preparing a release note
|
|
6
|
+
- When reviewing past changes or version history
|
|
7
|
+
last_updated: "2026-04-27"
|
|
8
|
+
---
|
|
9
|
+
|
|
1
10
|
# Changelog
|
|
2
11
|
|
|
3
12
|
All notable changes to this project will be documented in this file.
|
|
@@ -7,6 +16,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
16
|
|
|
8
17
|
## [Unreleased]
|
|
9
18
|
|
|
19
|
+
## [0.2.1] - 2026-04-27
|
|
20
|
+
|
|
21
|
+
### Added
|
|
22
|
+
- Added a stale-symbol surface checker, related unit coverage, and lint/pre-push enforcement to catch dead re-export and annotation-only APIs.
|
|
23
|
+
|
|
24
|
+
### Changed
|
|
25
|
+
- Simplified stream orchestration and interrupted-stream cleanup by moving the stream loop into a dedicated module, tracking per-stream baselines, and tightening callback typing.
|
|
26
|
+
- Removed dead agent component helpers and legacy dangling-tool-call patching paths from the runtime cleanup flow.
|
|
27
|
+
- Documented explicit `bug:`/`refactor:` style labels for issues and PRs and clarified that the repository root `README.md` is exempt from markdown frontmatter requirements.
|
|
28
|
+
- Updated release-gate enums to `StrEnum` and restored tmux marker selection for the release E2E test.
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
- Fixed abort-time tool reconciliation so completed tool results are preserved and interrupted tool calls are patched with explicit error results instead of rolling history back.
|
|
32
|
+
- Fixed Textual startup and theme-switch rendering crashes by hardening built-in theme colors and normalizing Rich dim/default styles before Textual filtering.
|
|
33
|
+
|
|
10
34
|
## [0.2.0] - 2026-04-02
|
|
11
35
|
|
|
12
36
|
### Changed
|
|
@@ -1,9 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Harness
|
|
3
|
+
summary: Repository code-quality harness for hooks, CI checks, and local enforcement.
|
|
4
|
+
when_to_read:
|
|
5
|
+
- When auditing pre-commit or pre-push hooks
|
|
6
|
+
- When checking local and CI enforcement behavior
|
|
7
|
+
last_updated: "2026-04-13"
|
|
8
|
+
---
|
|
9
|
+
|
|
1
10
|
# HARNESS.md
|
|
2
11
|
|
|
3
12
|
## Pre-commits
|
|
4
13
|
|
|
5
14
|
Source of truth: `.pre-commit-config.yaml`
|
|
6
15
|
|
|
16
|
+
Git hook entrypoints are repo-managed wrappers in `.githooks/`, installed into `.git/hooks/` as relative symlinks by `scripts/install-git-hooks.sh`. This keeps hook execution tied to the checkout's local `.venv` after the repository directory moves.
|
|
17
|
+
|
|
7
18
|
### Global pre-commit settings
|
|
8
19
|
- Python runtime: `python3`
|
|
9
20
|
- Global exclude regex:
|
|
@@ -35,10 +46,13 @@ Source of truth: `.pre-commit-config.yaml`
|
|
|
35
46
|
- `ruff` (repo: `astral-sh/ruff-pre-commit`, args: `--fix --show-fixes`)
|
|
36
47
|
- `ruff-format` (repo: `astral-sh/ruff-pre-commit`, excludes `models_registry.json`)
|
|
37
48
|
- `dead-imports` (repo: `local`, entry: `scripts/run-dead-imports.sh`, files: `\.py$`)
|
|
49
|
+
- `stale-symbol-surfaces` (repo: `local`, entry: `uv run python scripts/check_stale_symbol_surfaces.py`, stage: `pre-push`)
|
|
50
|
+
- Detects public symbols that survive only via package `__init__` re-exports or same-module annotation scaffolding.
|
|
38
51
|
- `vulture-changed` (repo: `local`, entry: `uv run vulture --min-confidence 80 scripts/utils/vulture_whitelist.py`, files: `^src/.*\.py$`, exclude: `tests/|test_`)
|
|
39
52
|
- `naming-conventions` (repo: `local`, entry: `uv run python scripts/check-naming-conventions.py`, files: `^src/.*\.py$`, exclude: `tests/|scripts/`)
|
|
40
53
|
- `defensive-slop` (repo: `local`, entry: `uv run python scripts/check-defensive-slop.py`, files: `^src/.*\.py$`, stages: `pre-commit`, `pre-push`)
|
|
41
|
-
- `check-file-length` (repo: `local`, entry: `scripts/check-file-length.sh`, files: `\.py$`, exclude: `tests
|
|
54
|
+
- `check-file-length` (repo: `local`, entry: `scripts/check-file-length.sh`, files: `\.py$`, exclude: `tests/`)
|
|
55
|
+
- Current behavior: enforces the `>600` line rule for non-test Python files only. All files under `tests/` are intentionally excluded from this gate.
|
|
42
56
|
|
|
43
57
|
#### Security and safeguards
|
|
44
58
|
- `bandit` (repo: `PyCQA/bandit`, args: `-c pyproject.toml`, dep: `bandit[toml]`)
|
|
@@ -55,6 +69,7 @@ Source of truth: `.pre-commit-config.yaml`
|
|
|
55
69
|
- `tests/architecture/test_init_bloat.py` enforces thin `__init__.py` modules.
|
|
56
70
|
- `scripts/check_agents_freshness.py` validates `AGENTS.md` freshness against recent `src/` and `docs/` changes.
|
|
57
71
|
- `doc8` (repo: `pycqa/doc8`, args: `--max-line-length=120`)
|
|
72
|
+
- Current behavior: the hook is configured, but `pre-commit run doc8 --all-files` skips in this repository because no matching doc8-supported files are selected.
|
|
58
73
|
|
|
59
74
|
### Currently disabled in config
|
|
60
75
|
- `isort` (commented out; replaced by Ruff import sorting)
|
|
@@ -66,10 +81,14 @@ Pre-push hooks run from `.pre-commit-config.yaml` with stage `pre-push`.
|
|
|
66
81
|
|
|
67
82
|
### Active pre-push hooks
|
|
68
83
|
- `mypy` (local, `uv run mypy --ignore-missing-imports --no-strict-optional`, scoped to `src/**/*.py`)
|
|
84
|
+
- `stale-symbol-surfaces` (local, `uv run python scripts/check_stale_symbol_surfaces.py`)
|
|
69
85
|
- `defensive-slop` (local, `uv run python scripts/check-defensive-slop.py`, scoped to `src/**/*.py`)
|
|
70
86
|
- `pylint-duplicates` (local, duplicate-code check)
|
|
71
87
|
- `pytest` (local, `uv run pytest -x -q`)
|
|
88
|
+
- `ast-grep-getattr-ratchet` (local, `scripts/run_ast_grep_checks.sh`, scoped to `src/**/*.py`, `rules/ast-grep/**`, and ast-grep helper scripts)
|
|
89
|
+
- Validates the ast-grep rule file, runs the rule test, then scans all of `src/` for `getattr(...)` and fails only on findings not present in the committed baseline.
|
|
72
90
|
- `empty-dir-check` (local, `uv run python scripts/utils/check_empty_dirs.py`)
|
|
91
|
+
- `markdown-frontmatter` (local, `uv run python scripts/check_markdown_frontmatter.py`, scoped to repo-root/docs markdown except `AGENTS.md` and root `README.md`)
|
|
73
92
|
|
|
74
93
|
### Run hooks manually
|
|
75
94
|
- Canonical local harness entrypoint: `make check`
|
|
@@ -89,7 +108,7 @@ Pre-push hooks run from `.pre-commit-config.yaml` with stage `pre-push`.
|
|
|
89
108
|
- Local source of truth: `make check` runs the full pre-commit and pre-push hook stages across all files, plus the CI enforcement checks for full dead-code scan, orphan-module detection, and `deptry`.
|
|
90
109
|
- Local supplemental check: `uv run python scripts/run_gates.py` is a subset spot-check and does not mirror the full local or CI harness.
|
|
91
110
|
- CI enforcement: pre-commit and pre-push remain the first enforcement line before CI.
|
|
92
|
-
- CI enforcement: `.github/workflows/lint.yml` runs `pre-commit`, full dead-code checks, orphan-module detection, and a separate `deptry` job.
|
|
111
|
+
- CI enforcement: `.github/workflows/lint.yml` runs `pre-commit`, full dead-code checks, stale symbol surface detection, orphan-module detection, and a separate `deptry` job.
|
|
93
112
|
- CI enforcement: `.github/workflows/empty-dir-check.yml` enforces the empty-directory / `__init__.py`-only directory rule in CI.
|
|
94
113
|
- CI artifact generation: `.github/workflows/dependency-map.yml` runs on pushes to `main`/`master`, regenerates `docs/architecture/dependencies/DEPENDENCY_LAYERS.*`, and pushes changes to `automation/dependency-map` for PR review.
|
|
95
114
|
- CI report / issue automation: `.github/workflows/tech-debt.yml` scans TODO/FIXME-style debt and the scheduled report job can open or update a GitHub issue.
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
help:
|
|
8
8
|
@echo "Tunacode Development Commands:"
|
|
9
9
|
@echo ""
|
|
10
|
-
@echo " make
|
|
11
|
-
@echo " make
|
|
10
|
+
@echo " make install - Cleanly bootstrap the verified dev environment"
|
|
11
|
+
@echo " make dev-setup - Alias for make install"
|
|
12
12
|
@echo " make run - Run the development server"
|
|
13
13
|
@echo " make test - Run test suite"
|
|
14
14
|
@echo " make test-tmux - Run the tmux system test suite"
|
|
@@ -17,13 +17,12 @@ help:
|
|
|
17
17
|
@echo " make clean - Clean build artifacts"
|
|
18
18
|
@echo ""
|
|
19
19
|
|
|
20
|
-
#
|
|
21
|
-
|
|
20
|
+
# Cleanly bootstrap the full development environment
|
|
21
|
+
install:
|
|
22
22
|
@bash scripts/dev-setup.sh
|
|
23
23
|
|
|
24
|
-
#
|
|
25
|
-
install
|
|
26
|
-
uv sync --extra dev
|
|
24
|
+
# Backwards-compatible alias for the canonical install target
|
|
25
|
+
dev-setup: install
|
|
27
26
|
|
|
28
27
|
# Run the development server
|
|
29
28
|
run:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tunacode-cli
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: Your agentic CLI developer.
|
|
5
5
|
Project-URL: Homepage, https://tunacode.xyz/
|
|
6
6
|
Project-URL: Repository, https://github.com/alchemiststudiosDOTai/tunacode
|
|
@@ -74,13 +74,11 @@ A terminal-based AI coding agent with a NeXTSTEP-inspired interface.
|
|
|
74
74
|
|
|
75
75
|
## Features
|
|
76
76
|
|
|
77
|
-
- **Any model** - Works with any OpenAI-compatible API
|
|
78
|
-
- **Native tinyagent tools** - Direct tinyagent tool contracts with no legacy wrapper compatibility layer
|
|
77
|
+
- **Any model** - Works with any OpenAI-compatible API
|
|
79
78
|
- **File operations** - Read files with hash-tagged lines, create files, and edit existing files with hash-validated references
|
|
80
79
|
- **Shell access** - Run bash commands with output capture
|
|
81
80
|
- **Repository discovery** - Use `discover` for natural-language code search and repository exploration
|
|
82
81
|
- **Session persistence** - Resume previous conversations with `/resume`
|
|
83
|
-
- **LSP diagnostics** - Real-time code errors after file writes (Python, TypeScript, Go, Rust)
|
|
84
82
|
- **Themeable UI** - CSS-based theming with NeXTSTEP-inspired design
|
|
85
83
|
- **Text selection + clipboard copy** - Mouse selection works across Rich-rendered chat content; copy with `ctrl+y` or `ctrl+shift+c`
|
|
86
84
|
- **Agent loop** - Powered by [tinyAgent](https://github.com/alchemiststudiosDOTai/tinyAgent)
|
|
@@ -112,7 +110,7 @@ pip install tunacode-cli
|
|
|
112
110
|
```bash
|
|
113
111
|
git clone https://github.com/alchemiststudiosDOTai/tunacode.git
|
|
114
112
|
cd tunacode
|
|
115
|
-
make
|
|
113
|
+
make install
|
|
116
114
|
```
|
|
117
115
|
|
|
118
116
|
Or without make:
|
|
@@ -127,14 +125,16 @@ cd tunacode
|
|
|
127
125
|
Common development tasks:
|
|
128
126
|
|
|
129
127
|
```bash
|
|
130
|
-
make
|
|
131
|
-
make
|
|
128
|
+
make install # Cleanly bootstrap the verified dev environment
|
|
129
|
+
make dev-setup # Alias for make install
|
|
132
130
|
make run # Run the development server
|
|
133
131
|
make test # Run test suite
|
|
134
132
|
make lint # Run linters
|
|
135
133
|
make clean # Clean build artifacts
|
|
136
134
|
```
|
|
137
135
|
|
|
136
|
+
`make install` also installs repo-managed `pre-commit` and `pre-push` hooks from `.githooks/` using relative symlinks, so moving the checkout does not strand the hooks on an old absolute virtualenv path.
|
|
137
|
+
|
|
138
138
|
View technical debt:
|
|
139
139
|
|
|
140
140
|
```bash
|
|
@@ -188,16 +188,6 @@ Slash commands are command objects in `tunacode.ui.commands`; each one is a `Com
|
|
|
188
188
|
| `/exit` | Exit TunaCode |
|
|
189
189
|
| `exit` | Legacy alias for exit |
|
|
190
190
|
|
|
191
|
-
### Confirm Parallel Tool Calls
|
|
192
|
-
|
|
193
|
-
Run `/debug` to enable lifecycle logs. During agent execution, parallel batches are reported with lines prefixed by:
|
|
194
|
-
|
|
195
|
-
- `[LIFECYCLE] Parallel tool calls active: ...`
|
|
196
|
-
- `[LIFECYCLE] Parallel tool calls update: ...`
|
|
197
|
-
- `[LIFECYCLE] Parallel tool calls complete`
|
|
198
|
-
|
|
199
|
-
If no `Parallel tool calls` lifecycle lines appear, that request did not execute a parallel tool batch.
|
|
200
|
-
## Tools
|
|
201
191
|
|
|
202
192
|
The agent has access to:
|
|
203
193
|
|
|
@@ -210,7 +200,6 @@ The agent has access to:
|
|
|
210
200
|
| `web_fetch` | Fetch web page content |
|
|
211
201
|
| `write_file` | Create new files |
|
|
212
202
|
|
|
213
|
-
TunaCode now uses the native tinyagent tool surface directly. Legacy wrapper-based tools such as `update_file`, `glob`, `grep`, and `list_dir` are removed rather than translated through a compatibility layer.
|
|
214
203
|
|
|
215
204
|
Important tool rules:
|
|
216
205
|
|
|
@@ -223,17 +212,6 @@ Important tool rules:
|
|
|
223
212
|
|
|
224
213
|
<img src="assets/hashline-edit.png" alt="hashline-edit tool in tunacode" width="600"/>
|
|
225
214
|
|
|
226
|
-
## LSP Integration
|
|
227
|
-
|
|
228
|
-
Automatic code diagnostics when LSP servers are in PATH:
|
|
229
|
-
|
|
230
|
-
| Language | Server |
|
|
231
|
-
|----------|--------|
|
|
232
|
-
| Python | `ruff server` |
|
|
233
|
-
| TypeScript/JS | `typescript-language-server` |
|
|
234
|
-
| Go | `gopls` |
|
|
235
|
-
| Rust | `rust-analyzer` |
|
|
236
|
-
|
|
237
215
|
## Security
|
|
238
216
|
|
|
239
217
|
TunaCode has **full shell access** with no permission prompts. If you're concerned:
|
|
@@ -14,13 +14,11 @@ A terminal-based AI coding agent with a NeXTSTEP-inspired interface.
|
|
|
14
14
|
|
|
15
15
|
## Features
|
|
16
16
|
|
|
17
|
-
- **Any model** - Works with any OpenAI-compatible API
|
|
18
|
-
- **Native tinyagent tools** - Direct tinyagent tool contracts with no legacy wrapper compatibility layer
|
|
17
|
+
- **Any model** - Works with any OpenAI-compatible API
|
|
19
18
|
- **File operations** - Read files with hash-tagged lines, create files, and edit existing files with hash-validated references
|
|
20
19
|
- **Shell access** - Run bash commands with output capture
|
|
21
20
|
- **Repository discovery** - Use `discover` for natural-language code search and repository exploration
|
|
22
21
|
- **Session persistence** - Resume previous conversations with `/resume`
|
|
23
|
-
- **LSP diagnostics** - Real-time code errors after file writes (Python, TypeScript, Go, Rust)
|
|
24
22
|
- **Themeable UI** - CSS-based theming with NeXTSTEP-inspired design
|
|
25
23
|
- **Text selection + clipboard copy** - Mouse selection works across Rich-rendered chat content; copy with `ctrl+y` or `ctrl+shift+c`
|
|
26
24
|
- **Agent loop** - Powered by [tinyAgent](https://github.com/alchemiststudiosDOTai/tinyAgent)
|
|
@@ -52,7 +50,7 @@ pip install tunacode-cli
|
|
|
52
50
|
```bash
|
|
53
51
|
git clone https://github.com/alchemiststudiosDOTai/tunacode.git
|
|
54
52
|
cd tunacode
|
|
55
|
-
make
|
|
53
|
+
make install
|
|
56
54
|
```
|
|
57
55
|
|
|
58
56
|
Or without make:
|
|
@@ -67,14 +65,16 @@ cd tunacode
|
|
|
67
65
|
Common development tasks:
|
|
68
66
|
|
|
69
67
|
```bash
|
|
70
|
-
make
|
|
71
|
-
make
|
|
68
|
+
make install # Cleanly bootstrap the verified dev environment
|
|
69
|
+
make dev-setup # Alias for make install
|
|
72
70
|
make run # Run the development server
|
|
73
71
|
make test # Run test suite
|
|
74
72
|
make lint # Run linters
|
|
75
73
|
make clean # Clean build artifacts
|
|
76
74
|
```
|
|
77
75
|
|
|
76
|
+
`make install` also installs repo-managed `pre-commit` and `pre-push` hooks from `.githooks/` using relative symlinks, so moving the checkout does not strand the hooks on an old absolute virtualenv path.
|
|
77
|
+
|
|
78
78
|
View technical debt:
|
|
79
79
|
|
|
80
80
|
```bash
|
|
@@ -128,16 +128,6 @@ Slash commands are command objects in `tunacode.ui.commands`; each one is a `Com
|
|
|
128
128
|
| `/exit` | Exit TunaCode |
|
|
129
129
|
| `exit` | Legacy alias for exit |
|
|
130
130
|
|
|
131
|
-
### Confirm Parallel Tool Calls
|
|
132
|
-
|
|
133
|
-
Run `/debug` to enable lifecycle logs. During agent execution, parallel batches are reported with lines prefixed by:
|
|
134
|
-
|
|
135
|
-
- `[LIFECYCLE] Parallel tool calls active: ...`
|
|
136
|
-
- `[LIFECYCLE] Parallel tool calls update: ...`
|
|
137
|
-
- `[LIFECYCLE] Parallel tool calls complete`
|
|
138
|
-
|
|
139
|
-
If no `Parallel tool calls` lifecycle lines appear, that request did not execute a parallel tool batch.
|
|
140
|
-
## Tools
|
|
141
131
|
|
|
142
132
|
The agent has access to:
|
|
143
133
|
|
|
@@ -150,7 +140,6 @@ The agent has access to:
|
|
|
150
140
|
| `web_fetch` | Fetch web page content |
|
|
151
141
|
| `write_file` | Create new files |
|
|
152
142
|
|
|
153
|
-
TunaCode now uses the native tinyagent tool surface directly. Legacy wrapper-based tools such as `update_file`, `glob`, `grep`, and `list_dir` are removed rather than translated through a compatibility layer.
|
|
154
143
|
|
|
155
144
|
Important tool rules:
|
|
156
145
|
|
|
@@ -163,17 +152,6 @@ Important tool rules:
|
|
|
163
152
|
|
|
164
153
|
<img src="assets/hashline-edit.png" alt="hashline-edit tool in tunacode" width="600"/>
|
|
165
154
|
|
|
166
|
-
## LSP Integration
|
|
167
|
-
|
|
168
|
-
Automatic code diagnostics when LSP servers are in PATH:
|
|
169
|
-
|
|
170
|
-
| Language | Server |
|
|
171
|
-
|----------|--------|
|
|
172
|
-
| Python | `ruff server` |
|
|
173
|
-
| TypeScript/JS | `typescript-language-server` |
|
|
174
|
-
| Go | `gopls` |
|
|
175
|
-
| Rust | `rust-analyzer` |
|
|
176
|
-
|
|
177
155
|
## Security
|
|
178
156
|
|
|
179
157
|
TunaCode has **full shell access** with no permission prompts. If you're concerned:
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Code Standards
|
|
3
|
+
summary: Repository coding standards and guardrails for keeping changes simple and scoped.
|
|
4
|
+
when_to_read:
|
|
5
|
+
- When editing source code
|
|
6
|
+
- When reviewing local style and complexity rules
|
|
7
|
+
last_updated: "2026-04-04"
|
|
8
|
+
---
|
|
9
|
+
|
|
1
10
|
# CODE-STANDARDS.md
|
|
2
11
|
|
|
3
12
|
## Purpose
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Documentation Index
|
|
3
|
+
summary: Overview of the repository documentation tree and where to find each doc family.
|
|
4
|
+
when_to_read:
|
|
5
|
+
- When locating documentation
|
|
6
|
+
- When navigating docs by topic
|
|
7
|
+
last_updated: "2026-04-04"
|
|
8
|
+
---
|
|
9
|
+
|
|
1
10
|
# Docs
|
|
2
11
|
|
|
3
12
|
This directory contains project documentation, architecture artifacts, and reference materials for TunaCode.
|
|
@@ -21,6 +30,11 @@ This directory contains project documentation, architecture artifacts, and refer
|
|
|
21
30
|
| `ui/css-architecture.md` | CSS theming and NeXTSTEP-inspired design system |
|
|
22
31
|
| `codebase-map/structure/tree-structure.txt` | Auto-generated source tree structure |
|
|
23
32
|
|
|
33
|
+
## Markdown Metadata Note
|
|
34
|
+
|
|
35
|
+
- `README.md` is exempt from any Markdown frontmatter requirement.
|
|
36
|
+
- If a frontmatter rule is applied to docs pages in the future, do not require YAML frontmatter in the repository root `README.md`.
|
|
37
|
+
|
|
24
38
|
## Generated Artifacts
|
|
25
39
|
|
|
26
40
|
- `docs_audit.html` — documentation consistency audit report (review before cleanup)
|
{tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/architecture/dependencies/DEPENDENCY_LAYERS.md
RENAMED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Dependency Layers
|
|
3
|
+
summary: Generated layer dependency summary for the current TunaCode codebase.
|
|
4
|
+
when_to_read:
|
|
5
|
+
- When auditing layer imports or dependency direction.
|
|
6
|
+
- When regenerating the dependency map artifact.
|
|
7
|
+
last_updated: "2026-04-04"
|
|
8
|
+
---
|
|
9
|
+
|
|
1
10
|
# Dependency Layers
|
|
2
11
|
|
|
3
12
|
Generated: 2026-02-15
|
{tunacode_cli-0.2.0 → tunacode_cli-0.2.1}/docs/architecture/patterns/agent-message-serialization.md
RENAMED
|
@@ -13,6 +13,12 @@ depends_on:
|
|
|
13
13
|
- src/tunacode/types/canonical.py
|
|
14
14
|
feeds_into:
|
|
15
15
|
- docs/modules/core/core.md
|
|
16
|
+
when_to_read:
|
|
17
|
+
- Modifying agent message handling
|
|
18
|
+
- Working on abort/resume logic
|
|
19
|
+
- Reviewing type boundary violations
|
|
20
|
+
- Understanding message type ownership
|
|
21
|
+
last_updated: "2026-04-04"
|
|
16
22
|
---
|
|
17
23
|
|
|
18
24
|
## The Problem: Three Type Systems for One Concept
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Deployment
|
|
3
|
+
summary: Runbook for publishing tunacode-cli to PyPI and handling the release flow.
|
|
4
|
+
when_to_read:
|
|
5
|
+
- When preparing a PyPI release
|
|
6
|
+
- When reviewing the deployment runbook
|
|
7
|
+
last_updated: "2026-04-04"
|
|
8
|
+
---
|
|
9
|
+
|
|
1
10
|
# Deployment
|
|
2
11
|
|
|
3
12
|
This document is the repository runbook for publishing `tunacode-cli` to PyPI.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Changelog Update Procedure
|
|
3
|
+
summary: Manual policy and workflow for refreshing CHANGELOG.md from merged pull requests.
|
|
4
|
+
when_to_read:
|
|
5
|
+
- When asked to update CHANGELOG.md from recent PRs
|
|
6
|
+
- When deciding whether a merged PR needs a changelog edit
|
|
7
|
+
last_updated: "2026-04-11"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Changelog Updates
|
|
11
|
+
|
|
12
|
+
## Policy
|
|
13
|
+
|
|
14
|
+
- Updating `CHANGELOG.md` from merged PRs is a manual maintenance task.
|
|
15
|
+
- A PR merging to `master` does **not** automatically require its own changelog edit before merge.
|
|
16
|
+
- Do **not** treat changelog updates as a default merge blocker for normal PR flow.
|
|
17
|
+
- Refresh the `## [Unreleased]` section only when the user explicitly asks for it or when changelog coverage is explicitly part of the task being reviewed.
|
|
18
|
+
|
|
19
|
+
## Scope
|
|
20
|
+
|
|
21
|
+
Use this workflow when the goal is to summarize recently merged pull requests into `CHANGELOG.md`.
|
|
22
|
+
|
|
23
|
+
Do not use it to:
|
|
24
|
+
- add entries for open or unmerged PRs
|
|
25
|
+
- invent release notes without checking the merged PR content
|
|
26
|
+
- force every feature or fix PR to include a changelog change in the same branch
|
|
27
|
+
|
|
28
|
+
## Workflow
|
|
29
|
+
|
|
30
|
+
1. Identify the recent merged PRs on `master`.
|
|
31
|
+
|
|
32
|
+
Example:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
gh pr list --state merged --base master --limit 5 \
|
|
36
|
+
--json number,title,mergedAt,author,url
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
2. Inspect each relevant PR before summarizing it.
|
|
40
|
+
|
|
41
|
+
Example:
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
gh pr view 460 --json title,body,files,commits,url
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
3. Update `CHANGELOG.md` under `## [Unreleased]` using the existing Keep a Changelog headings already present in the file.
|
|
48
|
+
|
|
49
|
+
Preferred headings:
|
|
50
|
+
- `### Added`
|
|
51
|
+
- `### Changed`
|
|
52
|
+
- `### Fixed`
|
|
53
|
+
- `### Removed` when needed
|
|
54
|
+
|
|
55
|
+
4. Write concise user-facing summaries.
|
|
56
|
+
|
|
57
|
+
Rules:
|
|
58
|
+
- summarize the merged outcome, not the implementation play-by-play
|
|
59
|
+
- group related PRs into a small number of bullets when they land on the same theme
|
|
60
|
+
- prefer behavior and operator impact over internal refactor detail
|
|
61
|
+
- avoid duplicating every commit message verbatim
|
|
62
|
+
|
|
63
|
+
5. Update the document metadata in `CHANGELOG.md` when you edit it.
|
|
64
|
+
|
|
65
|
+
6. If the user asked for a commit, commit only the changelog/documentation files that are part of the requested update.
|
|
66
|
+
|
|
67
|
+
## Notes
|
|
68
|
+
|
|
69
|
+
- This workflow is intentionally not automated.
|
|
70
|
+
- The source of truth is the merged PR set plus the actual PR content, not branch names alone.
|
|
71
|
+
- If the task is ambiguous, clarify whether the user wants:
|
|
72
|
+
- the last N merged PRs summarized into `Unreleased`, or
|
|
73
|
+
- a release-specific changelog entry for a versioned cut
|