tunacode-cli 0.2.0__tar.gz → 0.2.2__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.
Files changed (449) hide show
  1. tunacode_cli-0.2.2/.githooks/pre-commit +11 -0
  2. tunacode_cli-0.2.2/.githooks/pre-push +11 -0
  3. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/.github/pull_request_template.md +1 -1
  4. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/.github/workflows/lint.yml +1 -0
  5. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/.gitignore +1 -0
  6. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/.pre-commit-config.yaml +26 -1
  7. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/AGENTS.md +15 -8
  8. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/CHANGELOG.md +31 -0
  9. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/HARNESS.md +21 -2
  10. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/Makefile +6 -7
  11. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/PKG-INFO +8 -30
  12. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/README.md +6 -28
  13. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/CODE-STANDARDS.md +9 -0
  14. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/README.md +14 -0
  15. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/architecture/dependencies/DEPENDENCY_LAYERS.md +9 -0
  16. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/architecture/patterns/agent-message-serialization.md +6 -0
  17. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/codebase-map/structure/tree-structure.txt +1 -2
  18. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/deployment.md +9 -0
  19. tunacode_cli-0.2.2/docs/git/changelog-update.md +73 -0
  20. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/git/practices.md +31 -0
  21. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/modules/configuration/configuration.md +6 -1
  22. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/modules/configuration/models-registry.md +5 -0
  23. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/modules/core/core.md +9 -2
  24. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/modules/index.md +4 -0
  25. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/modules/infrastructure/infrastructure.md +5 -0
  26. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/modules/skills/skills.md +5 -0
  27. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/modules/tools/hashline-subsystem.md +6 -2
  28. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/modules/tools/tools-system.md +7 -5
  29. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/modules/tools/tools.md +7 -3
  30. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/modules/types/types.md +5 -0
  31. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/modules/ui/commands.md +6 -1
  32. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/modules/ui/ui.md +9 -2
  33. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/modules/utils/utils.md +5 -0
  34. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/reviews/2026-03-24-input-latency-research-artifact.md +9 -0
  35. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/reviews/2026-03-25-provider-stream-stall-artifact.md +9 -0
  36. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/reviews/pr-429-coderabbit-review.md +9 -0
  37. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/skills/audit-harness/SKILL.md +6 -0
  38. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/ui/css-architecture.md +14 -1
  39. tunacode_cli-0.2.2/docs/workflows/DEBUG.md +93 -0
  40. tunacode_cli-0.2.2/docs/workflows/DOCS.md +82 -0
  41. tunacode_cli-0.2.2/docs/workflows/DREAM.md +66 -0
  42. tunacode_cli-0.2.2/docs/workflows/FEATURES.md +86 -0
  43. tunacode_cli-0.2.2/docs/workflows/HARNESS.md +72 -0
  44. tunacode_cli-0.2.2/docs/workflows/HOTFIX.md +8 -0
  45. tunacode_cli-0.2.2/docs/workflows/QA.md +65 -0
  46. tunacode_cli-0.2.2/docs/workflows/README.md +39 -0
  47. tunacode_cli-0.2.2/package-lock.json +6 -0
  48. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/pyproject.toml +2 -3
  49. tunacode_cli-0.2.2/rules/ast-grep/baseline/no-getattr-in-src.json +47 -0
  50. tunacode_cli-0.2.2/rules/ast-grep/rule-tests/__snapshots__/no-getattr-in-src-snapshot.yml +10 -0
  51. tunacode_cli-0.2.2/rules/ast-grep/rule-tests/no-getattr-in-src-test.yml +12 -0
  52. tunacode_cli-0.2.2/rules/ast-grep/rules/no-getattr-in-src.yml +8 -0
  53. tunacode_cli-0.2.2/rules/ast-grep/sgconfig.yml +5 -0
  54. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/check-file-length.sh +2 -0
  55. tunacode_cli-0.2.2/scripts/check_ast_grep_baseline.py +127 -0
  56. tunacode_cli-0.2.2/scripts/check_markdown_frontmatter.py +135 -0
  57. tunacode_cli-0.2.2/scripts/check_stale_symbol_surfaces.py +37 -0
  58. tunacode_cli-0.2.2/scripts/dev-setup.sh +31 -0
  59. tunacode_cli-0.2.2/scripts/install-git-hooks.sh +17 -0
  60. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/preview_tool_panels.py +3 -22
  61. tunacode_cli-0.2.2/scripts/run-pre-commit-hook.sh +43 -0
  62. tunacode_cli-0.2.2/scripts/run_ast_grep_checks.sh +22 -0
  63. tunacode_cli-0.2.2/scripts/stale_symbol_surfaces_analysis.py +244 -0
  64. tunacode_cli-0.2.2/scripts/stale_symbol_surfaces_models.py +186 -0
  65. tunacode_cli-0.2.2/scripts/stale_symbol_surfaces_visitors.py +224 -0
  66. tunacode_cli-0.2.2/scripts/validate_ast_grep_rules.py +63 -0
  67. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/configuration/defaults.py +0 -4
  68. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/configuration/ignore_patterns.py +18 -34
  69. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/configuration/user_config.py +0 -10
  70. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/constants.py +45 -16
  71. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/agents/agent_components/__init__.py +0 -2
  72. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/agents/agent_components/agent_config.py +2 -0
  73. tunacode_cli-0.2.2/src/tunacode/core/agents/agent_components/agent_helpers.py +59 -0
  74. tunacode_cli-0.2.2/src/tunacode/core/agents/agent_components/agent_streaming.py +416 -0
  75. tunacode_cli-0.2.2/src/tunacode/core/agents/agent_components/agent_turn_control.py +37 -0
  76. tunacode_cli-0.2.2/src/tunacode/core/agents/helpers.py +71 -0
  77. tunacode_cli-0.2.2/src/tunacode/core/agents/main.py +262 -0
  78. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/agents/resume/sanitize.py +1 -6
  79. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/debug/usage_trace.py +1 -1
  80. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/logging/manager.py +1 -1
  81. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/session/state.py +1 -2
  82. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/types/__init__.py +0 -1
  83. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/types/state_structures.py +2 -11
  84. tunacode_cli-0.2.2/src/tunacode/core/ui_api/__init__.py +8 -0
  85. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/ui_api/file_filter.py +2 -2
  86. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/exceptions.py +0 -22
  87. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/prompts/system_prompt.md +1 -0
  88. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/skills/models.py +2 -2
  89. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/hashline_edit.py +1 -2
  90. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/write_file.py +1 -3
  91. tunacode_cli-0.2.2/src/tunacode/types/__init__.py +185 -0
  92. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/types/base.py +2 -8
  93. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/app.py +13 -45
  94. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/commands/clear.py +2 -3
  95. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/commands/compact.py +2 -1
  96. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/commands/model.py +8 -10
  97. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/commands/resume.py +1 -1
  98. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/commands/theme.py +1 -1
  99. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/commands/thoughts.py +2 -2
  100. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/commands/update.py +2 -4
  101. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/context_panel.py +1 -1
  102. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/lifecycle.py +2 -2
  103. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/main.py +5 -4
  104. tunacode_cli-0.2.2/src/tunacode/ui/render_safety.py +153 -0
  105. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/renderers/__init__.py +0 -2
  106. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/renderers/agent_response.py +1 -5
  107. tunacode_cli-0.2.2/src/tunacode/ui/renderers/errors.py +87 -0
  108. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/renderers/panel_widths.py +1 -1
  109. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/renderers/panels.py +4 -5
  110. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/renderers/search.py +1 -1
  111. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/renderers/tools/base.py +1 -1
  112. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/renderers/tools/bash.py +1 -1
  113. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/renderers/tools/discover.py +1 -1
  114. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/renderers/tools/hashline_edit.py +5 -30
  115. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/renderers/tools/read_file.py +3 -3
  116. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/renderers/tools/web_fetch.py +1 -1
  117. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/renderers/tools/write_file.py +1 -1
  118. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/repl_support.py +4 -28
  119. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/request_debug.py +3 -20
  120. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/screens/api_key_entry.py +2 -2
  121. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/screens/model_picker.py +3 -4
  122. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/screens/session_picker.py +1 -1
  123. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/screens/setup.py +3 -3
  124. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/shell_runner.py +2 -2
  125. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/styles.py +1 -1
  126. tunacode_cli-0.2.2/src/tunacode/ui/thinking_state.py +138 -0
  127. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/welcome.py +16 -2
  128. tunacode_cli-0.2.2/src/tunacode/ui/widgets/autocomplete_positioning.py +21 -0
  129. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/widgets/chat.py +19 -3
  130. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/widgets/command_autocomplete.py +2 -14
  131. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/widgets/editor.py +12 -10
  132. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/widgets/file_autocomplete.py +6 -0
  133. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/widgets/messages.py +1 -1
  134. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/widgets/resource_bar.py +2 -22
  135. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/widgets/skills_autocomplete.py +6 -0
  136. tunacode_cli-0.2.2/src/tunacode/utils/messaging/adapter.py +208 -0
  137. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/utils/messaging/token_counter.py +3 -20
  138. tunacode_cli-0.2.2/tc-cvurren.png +0 -0
  139. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/architecture/test_import_order.py +26 -1
  140. tunacode_cli-0.2.2/tests/architecture/test_ui_api_surface.py +16 -0
  141. tunacode_cli-0.2.2/tests/integration/ui/test_theme_render_crash_regression.py +65 -0
  142. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/system/cli/test_repl_support.py +4 -19
  143. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/system/cli/test_tmux_tools.py +1 -0
  144. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/test_dependency_layers.py +2 -3
  145. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/configuration/test_ignore_patterns.py +2 -3
  146. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/configuration/test_user_config_loading.py +0 -5
  147. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/core/test_logging.py +12 -0
  148. tunacode_cli-0.2.2/tests/unit/core/test_provider_error_surfacing.py +109 -0
  149. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/core/test_tool_concurrency_limit.py +18 -0
  150. tunacode_cli-0.2.2/tests/unit/test_stale_symbol_surfaces.py +102 -0
  151. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/tools/test_ignore_manager.py +1 -3
  152. tunacode_cli-0.2.2/tests/unit/ui/test_context_panel.py +38 -0
  153. tunacode_cli-0.2.2/tests/unit/ui/test_render_safety.py +86 -0
  154. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/ui/test_request_threading.py +22 -19
  155. tunacode_cli-0.2.2/tests/unit/ui/test_theme_wrapping.py +62 -0
  156. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/ui/test_thinking_state.py +17 -16
  157. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/utils/test_shell_command_escape.py +29 -1
  158. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/uv.lock +6 -6
  159. tunacode_cli-0.2.0/.artifacts/README.md +0 -32
  160. tunacode_cli-0.2.0/.artifacts/debug_history/2026-03-25_tinyagent-1-2-27-gil-hotfix-validation.md +0 -132
  161. tunacode_cli-0.2.0/.artifacts/debug_history/REQUEST_CONTEXT_CUTOVER_LESSON.md +0 -34
  162. tunacode_cli-0.2.0/.artifacts/debug_history/postmortem-defensive-message-typing-2026-03-17.md +0 -74
  163. tunacode_cli-0.2.0/.artifacts/debug_history/postmortem-loading-indicator-submit-regression-2026-03-24.md +0 -126
  164. tunacode_cli-0.2.0/.artifacts/debug_history/slop_fixture.py +0 -14
  165. tunacode_cli-0.2.0/.artifacts/execute/2026-03-22_19-54-47_tinyagent-message-typing-cleanup.md +0 -98
  166. tunacode_cli-0.2.0/.artifacts/execute/2026-03-24_19-20-38_input-latency-threaded-request-execution.md +0 -185
  167. tunacode_cli-0.2.0/.artifacts/execute/2026-03-26_16-20-32_models-loading-unification.md +0 -101
  168. tunacode_cli-0.2.0/.artifacts/execute/2026-03-28_12-18-53_pr-444-review-fixes.md +0 -57
  169. tunacode_cli-0.2.0/.artifacts/issue_analysis_report_2026-03-21.md +0 -52
  170. tunacode_cli-0.2.0/.artifacts/plan/2026-03-22_09-58-20_native-tinyagent-tool-contract.md +0 -341
  171. tunacode_cli-0.2.0/.artifacts/plan/2026-03-22_18-08-41_tinyagent-message-typing-cleanup.md +0 -215
  172. tunacode_cli-0.2.0/.artifacts/plan/2026-03-23_15-35-00_command-autocomplete-positioning.md +0 -145
  173. tunacode_cli-0.2.0/.artifacts/plan/2026-03-24_19-15-16_input-latency-threaded-request-execution.md +0 -326
  174. tunacode_cli-0.2.0/.artifacts/plan/2026-03-26_15-34-01_models-loading-unification/PLAN.md +0 -271
  175. tunacode_cli-0.2.0/.artifacts/plan/2026-03-26_15-34-01_models-loading-unification/tickets/INDEX.md +0 -16
  176. tunacode_cli-0.2.0/.artifacts/plan/2026-03-26_15-34-01_models-loading-unification/tickets/T001.md +0 -37
  177. tunacode_cli-0.2.0/.artifacts/plan/2026-03-26_15-34-01_models-loading-unification/tickets/T002.md +0 -46
  178. tunacode_cli-0.2.0/.artifacts/plan/2026-03-26_15-34-01_models-loading-unification/tickets/T003.md +0 -35
  179. tunacode_cli-0.2.0/.artifacts/plan/2026-03-26_15-34-01_models-loading-unification/tickets/T004.md +0 -70
  180. tunacode_cli-0.2.0/.artifacts/plan/2026-03-27_13-59-15_pr-444-review-fixes/PLAN.md +0 -202
  181. tunacode_cli-0.2.0/.artifacts/plan/2026-03-31_17-00-48_ui-api-passthrough-reduction/PLAN.md +0 -251
  182. tunacode_cli-0.2.0/.artifacts/plan/2026-03-31_17-00-48_ui-api-passthrough-reduction/tickets/INDEX.md +0 -16
  183. tunacode_cli-0.2.0/.artifacts/plan/2026-03-31_17-00-48_ui-api-passthrough-reduction/tickets/T001.md +0 -41
  184. tunacode_cli-0.2.0/.artifacts/plan/2026-03-31_17-00-48_ui-api-passthrough-reduction/tickets/T002.md +0 -53
  185. tunacode_cli-0.2.0/.artifacts/plan/2026-03-31_17-00-48_ui-api-passthrough-reduction/tickets/T003.md +0 -38
  186. tunacode_cli-0.2.0/.artifacts/plan/2026-03-31_17-00-48_ui-api-passthrough-reduction/tickets/T004.md +0 -76
  187. tunacode_cli-0.2.0/.artifacts/plans/consolidate-main-support-plan.md +0 -82
  188. tunacode_cli-0.2.0/.artifacts/plans/reduce-src-python-files-to-500-lines-plan.md +0 -67
  189. tunacode_cli-0.2.0/.artifacts/query_data_flow.md +0 -99
  190. tunacode_cli-0.2.0/.artifacts/release/model-registry-refresh-release-blocker-2026-03-21.md +0 -134
  191. tunacode_cli-0.2.0/.artifacts/release/release-v0.1.94-run.md +0 -422
  192. tunacode_cli-0.2.0/.artifacts/release/tmux-suite-validation-2026-03-21.md +0 -82
  193. tunacode_cli-0.2.0/.artifacts/research/2026-03-17_13-01-09_replace_messages-cutover.md +0 -98
  194. tunacode_cli-0.2.0/.artifacts/research/2026-03-17_14-04-53_mypy-main-py-errors-map.md +0 -93
  195. tunacode_cli-0.2.0/.artifacts/research/2026-03-21_14-07-44_prompt-versioning-map.md +0 -65
  196. tunacode_cli-0.2.0/.artifacts/research/2026-03-22_09-42-58_tools-implementation.md +0 -76
  197. tunacode_cli-0.2.0/.artifacts/research/2026-03-22_09-43-01_tools-context-synthesis.md +0 -137
  198. tunacode_cli-0.2.0/.artifacts/research/2026-03-22_09-43-03_codebase-locator_tool-system.md +0 -101
  199. tunacode_cli-0.2.0/.artifacts/research/2026-03-22_09-45-29_tools-data-inputs-contracts.md +0 -193
  200. tunacode_cli-0.2.0/.artifacts/research/2026-03-22_09-53-07_tool-result-adapter-runtime.md +0 -65
  201. tunacode_cli-0.2.0/.artifacts/research/2026-03-22_09-53-52_minimax-tinyagent-contract-shape-vs-runtime.md +0 -120
  202. tunacode_cli-0.2.0/.artifacts/research/2026-03-22_17-57-53_message-ingress-data-contract-map.md +0 -137
  203. tunacode_cli-0.2.0/.artifacts/research/2026-03-23_15-30-00_command-autocomplete-positioning.md +0 -221
  204. tunacode_cli-0.2.0/.artifacts/research/2026-03-24_16-58-32_tui-submit-latency.md +0 -165
  205. tunacode_cli-0.2.0/.artifacts/research/2026-03-24_18-46-40_input-latency-ui-loop-coupling.md +0 -111
  206. tunacode_cli-0.2.0/.artifacts/research/2026-03-24_20-07-05_input-latency-regression-probe.md +0 -265
  207. tunacode_cli-0.2.0/.artifacts/research/2026-03-26_15-29-02_models-loading-conflict-map.md +0 -212
  208. tunacode_cli-0.2.0/.artifacts/research/2026-03-31_11-32-31_theme-switch-dim-background-crash.md +0 -139
  209. tunacode_cli-0.2.0/.artifacts/research/2026-03-31_16-51-07_ui-api.md +0 -381
  210. tunacode_cli-0.2.0/.artifacts/research/2026-04-01_23-32-20_session-save-tail-and-message-boundary.md +0 -78
  211. tunacode_cli-0.2.0/.artifacts/research/2026-04-01_tinyagent-boundary.md +0 -62
  212. tunacode_cli-0.2.0/.artifacts/tunacode_action_audit.md +0 -98
  213. tunacode_cli-0.2.0/.test_reports/.gitkeep +0 -0
  214. tunacode_cli-0.2.0/LOG.md +0 -73
  215. tunacode_cli-0.2.0/docs/docs_audit.html +0 -162
  216. tunacode_cli-0.2.0/plan.md +0 -275
  217. tunacode_cli-0.2.0/scripts/dev-setup.sh +0 -31
  218. tunacode_cli-0.2.0/src/tunacode/core/agents/agent_components/agent_helpers.py +0 -108
  219. tunacode_cli-0.2.0/src/tunacode/core/agents/helpers.py +0 -144
  220. tunacode_cli-0.2.0/src/tunacode/core/agents/main.py +0 -775
  221. tunacode_cli-0.2.0/src/tunacode/core/types/tool_registry.py +0 -188
  222. tunacode_cli-0.2.0/src/tunacode/core/ui_api/__init__.py +0 -8
  223. tunacode_cli-0.2.0/src/tunacode/core/ui_api/configuration.py +0 -101
  224. tunacode_cli-0.2.0/src/tunacode/core/ui_api/constants.py +0 -47
  225. tunacode_cli-0.2.0/src/tunacode/core/ui_api/lsp_status.py +0 -58
  226. tunacode_cli-0.2.0/src/tunacode/core/ui_api/messaging.py +0 -36
  227. tunacode_cli-0.2.0/src/tunacode/core/ui_api/shared_types.py +0 -17
  228. tunacode_cli-0.2.0/src/tunacode/core/ui_api/system_paths.py +0 -44
  229. tunacode_cli-0.2.0/src/tunacode/core/ui_api/user_configuration.py +0 -51
  230. tunacode_cli-0.2.0/src/tunacode/tools/lsp/__init__.py +0 -107
  231. tunacode_cli-0.2.0/src/tunacode/tools/lsp/client.py +0 -352
  232. tunacode_cli-0.2.0/src/tunacode/tools/lsp/diagnostics.py +0 -60
  233. tunacode_cli-0.2.0/src/tunacode/tools/lsp/servers.py +0 -101
  234. tunacode_cli-0.2.0/src/tunacode/types/__init__.py +0 -107
  235. tunacode_cli-0.2.0/src/tunacode/types/canonical.py +0 -365
  236. tunacode_cli-0.2.0/src/tunacode/ui/renderers/errors.py +0 -207
  237. tunacode_cli-0.2.0/src/tunacode/ui/renderers/tools/diagnostics.py +0 -186
  238. tunacode_cli-0.2.0/src/tunacode/ui/thinking_state.py +0 -125
  239. tunacode_cli-0.2.0/src/tunacode/utils/messaging/adapter.py +0 -506
  240. tunacode_cli-0.2.0/tests/architecture/test_init_bloat.py +0 -58
  241. tunacode_cli-0.2.0/tests/unit/core/test_agent_helpers.py +0 -34
  242. tunacode_cli-0.2.0/tests/unit/core/test_openrouter_usage_metrics.py +0 -45
  243. tunacode_cli-0.2.0/tests/unit/core/test_provider_error_surfacing.py +0 -50
  244. tunacode_cli-0.2.0/tests/unit/core/test_request_orchestrator_parallel_tools.py +0 -261
  245. tunacode_cli-0.2.0/tests/unit/core/test_stream_phase_debug.py +0 -90
  246. tunacode_cli-0.2.0/tests/unit/core/test_usage_trace_debug.py +0 -138
  247. tunacode_cli-0.2.0/tests/unit/test_sanitize_canonicalization.py +0 -61
  248. tunacode_cli-0.2.0/tests/unit/types/test_adapter.py +0 -229
  249. tunacode_cli-0.2.0/tests/unit/types/test_canonical.py +0 -418
  250. tunacode_cli-0.2.0/tests/unit/types/test_tool_registry.py +0 -102
  251. tunacode_cli-0.2.0/tests/unit/utils/test_token_counter.py +0 -77
  252. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/.coderabbit.yaml +0 -0
  253. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  254. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  255. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  256. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/.github/ISSUE_TEMPLATE/question.yml +0 -0
  257. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/.github/dependabot.yml +0 -0
  258. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/.github/workflows/dependency-map.yml +0 -0
  259. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/.github/workflows/empty-dir-check.yml +0 -0
  260. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/.github/workflows/publish-release.yml +0 -0
  261. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/.github/workflows/release.yml +0 -0
  262. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/.github/workflows/tech-debt.yml +0 -0
  263. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/LICENSE +0 -0
  264. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/MANIFEST.in +0 -0
  265. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/assets/hashline-edit.png +0 -0
  266. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/assets/home.png +0 -0
  267. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/architecture/dependencies/DEPENDENCY_LAYERS.dot +0 -0
  268. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/architecture/dependencies/DEPENDENCY_LAYERS.png +0 -0
  269. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/images/dream-ui/tunacode-cli-home-catpu.png +0 -0
  270. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/images/dream-ui/tunacode-cli-home.png +0 -0
  271. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/images/dream-ui/tunacode-cli-lsp.png +0 -0
  272. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/images/dream-ui/tunacode-cli-response.png +0 -0
  273. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/images/tool-calls.png +0 -0
  274. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/docs/images/tunacode.png +0 -0
  275. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/pytest.ini +0 -0
  276. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/benchmarks/input_latency.py +0 -0
  277. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/benchmarks/input_paint_latency.py +0 -0
  278. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/benchmarks/input_tmux_latency.py +0 -0
  279. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/check-defensive-slop.py +0 -0
  280. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/check-naming-conventions.py +0 -0
  281. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/check-unused-constants.py +0 -0
  282. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/check_agents_freshness.py +0 -0
  283. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/check_unused_modules.py +0 -0
  284. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/download_ripgrep.py +0 -0
  285. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/generate-release-notes.sh +0 -0
  286. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/generate_structure_tree.py +0 -0
  287. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/grimp_layers_report.py +0 -0
  288. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/install_linux.sh +0 -0
  289. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/playwright_cache.py +0 -0
  290. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/run-dead-imports.sh +0 -0
  291. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/run_gates.py +0 -0
  292. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/startup_timer.py +0 -0
  293. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/todo_baseline.json +0 -0
  294. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/todo_scanner.py +0 -0
  295. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/ui_import_timer.py +0 -0
  296. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/uninstall.sh +0 -0
  297. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/update_models_registry.sh +0 -0
  298. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/utils/check_empty_dirs.py +0 -0
  299. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/scripts/utils/vulture_whitelist.py +0 -0
  300. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/skills/pypi-release/SKILL.md +0 -0
  301. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/skills/pypi-release/references/common-issues.md +0 -0
  302. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/skills/pypi-release/references/workflow-structure.md +0 -0
  303. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/skills/pypi-release/scripts/bump_version.py +0 -0
  304. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/skills/pypi-release/scripts/local_publish.py +0 -0
  305. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/skills/pypi-release/scripts/release.py +0 -0
  306. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/__init__.py +0 -0
  307. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/configuration/__init__.py +0 -0
  308. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/configuration/limits.py +0 -0
  309. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/configuration/models.py +0 -0
  310. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/configuration/models_registry.json +0 -0
  311. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/configuration/paths.py +0 -0
  312. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/configuration/pricing.py +0 -0
  313. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/configuration/settings.py +0 -0
  314. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/__init__.py +0 -0
  315. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/agents/__init__.py +0 -0
  316. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/agents/agent_components/agent_session_config.py +0 -0
  317. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/agents/resume/__init__.py +0 -0
  318. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/agents/resume/sanitize_debug.py +0 -0
  319. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/compaction/__init__.py +0 -0
  320. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/compaction/controller.py +0 -0
  321. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/compaction/prompts.py +0 -0
  322. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/compaction/summarizer.py +0 -0
  323. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/compaction/types.py +0 -0
  324. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/debug/__init__.py +0 -0
  325. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/logging/__init__.py +0 -0
  326. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/logging/handlers.py +0 -0
  327. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/logging/levels.py +0 -0
  328. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/logging/records.py +0 -0
  329. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/session/__init__.py +0 -0
  330. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/types/agent_state.py +0 -0
  331. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/types/state.py +0 -0
  332. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/core/ui_api/formatting.py +0 -0
  333. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/infrastructure/__init__.py +0 -0
  334. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/infrastructure/cache/__init__.py +0 -0
  335. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/infrastructure/cache/caches/__init__.py +0 -0
  336. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/infrastructure/cache/caches/agents.py +0 -0
  337. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/infrastructure/cache/caches/limits_settings.py +0 -0
  338. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/infrastructure/cache/caches/models_registry.py +0 -0
  339. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/infrastructure/cache/caches/skills.py +0 -0
  340. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/infrastructure/cache/caches/tunacode_context.py +0 -0
  341. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/infrastructure/cache/manager.py +0 -0
  342. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/infrastructure/cache/metadata.py +0 -0
  343. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/infrastructure/cache/strategies.py +0 -0
  344. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/infrastructure/file_filter.py +0 -0
  345. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/py.typed +0 -0
  346. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/skills/__init__.py +0 -0
  347. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/skills/discovery.py +0 -0
  348. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/skills/loader.py +0 -0
  349. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/skills/prompting.py +0 -0
  350. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/skills/registry.py +0 -0
  351. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/skills/search.py +0 -0
  352. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/skills/selection.py +0 -0
  353. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/__init__.py +0 -0
  354. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/bash.py +0 -0
  355. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/cache_accessors/__init__.py +0 -0
  356. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/cache_accessors/ignore_manager_cache.py +0 -0
  357. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/cache_accessors/ripgrep_cache.py +0 -0
  358. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/discover.py +0 -0
  359. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/hashline.py +0 -0
  360. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/ignore.py +0 -0
  361. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/ignore_manager.py +0 -0
  362. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/line_cache.py +0 -0
  363. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/read_file.py +0 -0
  364. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/utils/__init__.py +0 -0
  365. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/utils/discover_pipeline.py +0 -0
  366. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/utils/discover_terms.py +0 -0
  367. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/utils/discover_types.py +0 -0
  368. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/utils/file_errors.py +0 -0
  369. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/utils/formatting.py +0 -0
  370. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/utils/ripgrep.py +0 -0
  371. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/tools/web_fetch.py +0 -0
  372. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/types/callbacks.py +0 -0
  373. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/types/dataclasses.py +0 -0
  374. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/types/models_registry.py +0 -0
  375. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/__init__.py +0 -0
  376. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/assets/logo.ansi +0 -0
  377. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/clipboard.py +0 -0
  378. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/command_registry.py +0 -0
  379. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/commands/__init__.py +0 -0
  380. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/commands/base.py +0 -0
  381. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/commands/cancel.py +0 -0
  382. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/commands/debug.py +0 -0
  383. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/commands/exit.py +0 -0
  384. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/commands/help.py +0 -0
  385. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/commands/skills.py +0 -0
  386. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/esc/__init__.py +0 -0
  387. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/esc/handler.py +0 -0
  388. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/esc/types.py +0 -0
  389. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/logo_assets.py +0 -0
  390. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/model_display.py +0 -0
  391. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/renderers/thinking.py +0 -0
  392. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/renderers/tools/__init__.py +0 -0
  393. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/renderers/tools/syntax_utils.py +0 -0
  394. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/request_bridge.py +0 -0
  395. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/screens/__init__.py +0 -0
  396. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/screens/theme_picker.py +0 -0
  397. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/screens/update_confirm.py +0 -0
  398. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/slopgotchi/__init__.py +0 -0
  399. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/slopgotchi/panel.py +0 -0
  400. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/streaming.py +0 -0
  401. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/styles/layout.tcss +0 -0
  402. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/styles/modals.tcss +0 -0
  403. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/styles/panels.tcss +0 -0
  404. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/styles/widgets.tcss +0 -0
  405. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/ui/widgets/__init__.py +0 -0
  406. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/utils/__init__.py +0 -0
  407. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/utils/messaging/__init__.py +0 -0
  408. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/utils/system/__init__.py +0 -0
  409. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/src/tunacode/utils/system/gitignore.py +0 -0
  410. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/__init__.py +0 -0
  411. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/architecture/__init__.py +0 -0
  412. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/architecture/test_imports_in_init.py +0 -0
  413. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/architecture/test_layer_dependencies.py +0 -0
  414. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/conftest.py +0 -0
  415. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/integration/core/test_minimax_execution_path.py +0 -0
  416. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/integration/core/test_mtime_caches_end_to_end.py +0 -0
  417. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/integration/core/test_tinyagent_alchemy_usage_contract_live.py +0 -0
  418. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/integration/ui/test_submit_loading_lifecycle.py +0 -0
  419. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/system/cli/test_cli_default_command.py +0 -0
  420. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/system/cli/test_startup.py +0 -0
  421. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/test_compaction.py +0 -0
  422. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/configuration/test_default_config_minimax_keys.py +0 -0
  423. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/configuration/test_default_config_stream_agent_text.py +0 -0
  424. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/configuration/test_models_registry_loading_behavior.py +0 -0
  425. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/configuration/test_models_registry_minimax_contract.py +0 -0
  426. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/configuration/test_pricing_registry_loading.py +0 -0
  427. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/configuration/test_provider_api_key_env_fallback.py +0 -0
  428. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/core/test_agent_cache_abort.py +0 -0
  429. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/core/test_agent_init_debug.py +0 -0
  430. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/core/test_agent_skills_prompt_injection.py +0 -0
  431. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/core/test_agent_stream_provider_debug.py +0 -0
  432. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/core/test_compaction_controller_outcomes.py +0 -0
  433. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/core/test_compaction_summarizer.py +0 -0
  434. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/core/test_context_overflow_detection.py +0 -0
  435. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/core/test_exceptions.py +0 -0
  436. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/core/test_session_state_defaults.py +0 -0
  437. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/core/test_session_state_model_registry_loading.py +0 -0
  438. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/core/test_session_usage_schema.py +0 -0
  439. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/core/test_thinking_stream_routing.py +0 -0
  440. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/core/test_tinyagent_openrouter_model_config.py +0 -0
  441. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/infrastructure/test_cache_infrastructure.py +0 -0
  442. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/infrastructure/test_file_filter.py +0 -0
  443. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/infrastructure/test_migrated_lru_cache_replacements.py +0 -0
  444. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/infrastructure/test_typed_cache_accessors.py +0 -0
  445. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/skills/test_registry.py +0 -0
  446. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/skills/test_selection.py +0 -0
  447. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/ui/test_app_loading_indicator.py +0 -0
  448. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/tests/unit/ui/test_request_debug.py +0 -0
  449. {tunacode_cli-0.2.0 → tunacode_cli-0.2.2}/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
 
@@ -60,6 +60,7 @@ REFACTOR*
60
60
  todo.md
61
61
 
62
62
  # Agent workflow temporary files
63
+ .artifacts/
63
64
  .current_scratchpad_file
64
65
  .current_qa_log_path
65
66
  .qa_temp/
@@ -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-02
2
+ Last Updated: 2026-06-22
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), `src/tunacode/tools/lsp/` (LSP client integration).
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`.
@@ -60,7 +61,7 @@ Last Updated: 2026-04-02
60
61
  - Allowed import direction: `ui -> core -> tools`, with shared-layer imports from `utils`, `types`, `configuration`, `constants`, `exceptions`.
61
62
  - Import ordering test: `tests/architecture/test_import_order.py`.
62
63
  - Layer order constant includes shared modules (`configuration, constants, exceptions, prompts, skills, types, utils`) then layered modules (`tools, infrastructure, core, ui`).
63
- - Public-init constraint: `tests/architecture/test_init_bloat.py`.
64
+ - Public-init constraint: `tests/architecture/test_imports_in_init.py`.
64
65
  - Dependency map regeneration pipeline: `scripts/grimp_layers_report.py`, committed to `docs/architecture/dependencies/` by workflow.
65
66
 
66
67
  ## Documentation Sources to Trust
@@ -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-setup`.
87
- - Install/update dependencies: `make install`.
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`.
@@ -93,7 +98,7 @@ Last Updated: 2026-04-02
93
98
  - `uv run pytest`
94
99
  - `uv run pytest tests/test_dependency_layers.py -v`
95
100
  - `uv run pytest tests/architecture/test_import_order.py`
96
- - `uv run pytest tests/architecture/test_init_bloat.py`
101
+ - `uv run pytest tests/architecture/test_imports_in_init.py`
97
102
  - `uv run python scripts/run_gates.py`
98
103
  - `uv run python scripts/check_agents_freshness.py`
99
104
  - `uv run python scripts/generate_structure_tree.py`
@@ -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-06-22"
8
+ ---
9
+
1
10
  # Changelog
2
11
 
3
12
  All notable changes to this project will be documented in this file.
@@ -7,6 +16,28 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
16
 
8
17
  ## [Unreleased]
9
18
 
19
+ ## [0.2.2] - 2026-06-22
20
+
21
+ ### Changed
22
+ - Moved thinking panel state management out of the app layer and addressed follow-up review feedback.
23
+ - Bumped `tiny-agent-os` to `1.2.28` and moved max-iteration enforcement to tinyagent's `should_stop_after_turn` hook so capped tool loops end through the normal turn-completion path.
24
+ - Updated the system prompt to tell the agent how to report progress when configured turn limits stop further tool calls.
25
+
26
+ ## [0.2.1] - 2026-04-27
27
+
28
+ ### Added
29
+ - Added a stale-symbol surface checker, related unit coverage, and lint/pre-push enforcement to catch dead re-export and annotation-only APIs.
30
+
31
+ ### Changed
32
+ - Simplified stream orchestration and interrupted-stream cleanup by moving the stream loop into a dedicated module, tracking per-stream baselines, and tightening callback typing.
33
+ - Removed dead agent component helpers and legacy dangling-tool-call patching paths from the runtime cleanup flow.
34
+ - Documented explicit `bug:`/`refactor:` style labels for issues and PRs and clarified that the repository root `README.md` is exempt from markdown frontmatter requirements.
35
+ - Updated release-gate enums to `StrEnum` and restored tmux marker selection for the release E2E test.
36
+
37
+ ### Fixed
38
+ - 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.
39
+ - Fixed Textual startup and theme-switch rendering crashes by hardening built-in theme colors and normalizing Rich dim/default styles before Textual filtering.
40
+
10
41
  ## [0.2.0] - 2026-04-02
11
42
 
12
43
  ### 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/benchmarks/bench_discover.py`)
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 dev-setup - Full setup for fresh clone (installs deps, hooks)"
11
- @echo " make install - Install/update dependencies"
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
- # Full setup for fresh clone
21
- dev-setup:
20
+ # Cleanly bootstrap the full development environment
21
+ install:
22
22
  @bash scripts/dev-setup.sh
23
23
 
24
- # Install/update dependencies
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.0
3
+ Version: 0.2.2
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
@@ -32,7 +32,7 @@ Requires-Dist: rich<15.0.0,>=14.2.0
32
32
  Requires-Dist: ruff>=0.14.0
33
33
  Requires-Dist: textual-autocomplete>=4.0.6
34
34
  Requires-Dist: textual<5.0.0,>=4.0.0
35
- Requires-Dist: tiny-agent-os>=1.2.27
35
+ Requires-Dist: tiny-agent-os>=1.2.28
36
36
  Requires-Dist: typer>=0.15.0
37
37
  Provides-Extra: dev
38
38
  Requires-Dist: autoflake>=2.0.0; extra == 'dev'
@@ -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 (Anthropic, OpenAI, Google, Ollama, vLLM, etc.)
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 dev-setup
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 dev-setup # Full setup for fresh clone
131
- make install # Install/update dependencies
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 (Anthropic, OpenAI, Google, Ollama, vLLM, etc.)
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 dev-setup
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 dev-setup # Full setup for fresh clone
71
- make install # Install/update dependencies
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)
@@ -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
@@ -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
@@ -53,8 +53,7 @@ src/tunacode/
53
53
  │ │ ├── __init__.py
54
54
  │ │ ├── agent_state.py
55
55
  │ │ ├── state.py
56
- │ │ ├── state_structures.py
57
- │ │ └── tool_registry.py
56
+ │ │ └── state_structures.py
58
57
  │ ├── ui_api/
59
58
  │ │ ├── __init__.py
60
59
  │ │ ├── configuration.py
@@ -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.