kolega-code 0.8.3__tar.gz → 0.8.4__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 (414) hide show
  1. kolega_code-0.8.4/.githooks/pre-commit +4 -0
  2. kolega_code-0.8.4/.github/ISSUE_TEMPLATE/bug_report.yml +84 -0
  3. kolega_code-0.8.4/.github/ISSUE_TEMPLATE/config.yml +8 -0
  4. kolega_code-0.8.4/.github/ISSUE_TEMPLATE/feature_request.yml +46 -0
  5. kolega_code-0.8.4/.github/workflows/ci.yml +131 -0
  6. {kolega_code-0.8.3 → kolega_code-0.8.4}/.github/workflows/docs.yml +5 -4
  7. kolega_code-0.8.4/.github/workflows/release.yml +205 -0
  8. {kolega_code-0.8.3 → kolega_code-0.8.4}/.gitignore +3 -0
  9. kolega_code-0.8.4/.pre-commit-config.yaml +17 -0
  10. kolega_code-0.8.4/CHANGELOG.md +77 -0
  11. {kolega_code-0.8.3 → kolega_code-0.8.4}/CONTRIBUTING.md +42 -2
  12. {kolega_code-0.8.3 → kolega_code-0.8.4}/PKG-INFO +20 -1
  13. {kolega_code-0.8.3 → kolega_code-0.8.4}/README.md +11 -0
  14. {kolega_code-0.8.3 → kolega_code-0.8.4}/RELEASING.md +37 -5
  15. kolega_code-0.8.4/docs/src/assets/coverage.svg +1 -0
  16. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/tui/composer.md +9 -0
  17. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/tui/slash-commands.md +2 -2
  18. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/__init__.py +1 -1
  19. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/__init__.py +1 -1
  20. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/baseagent.py +2 -5
  21. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/conversation.py +2 -5
  22. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/orchestration/budget.py +1 -3
  23. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/orchestration/executor.py +61 -10
  24. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/planningagent.py +1 -3
  25. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +2 -2
  26. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +1 -1
  27. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -1
  28. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +4 -4
  29. kolega_code-0.8.4/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +3 -0
  30. kolega_code-0.8.4/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +3 -0
  31. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +3 -3
  32. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompts.py +1 -3
  33. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/agent_tool.py +1 -2
  34. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/base_tool.py +0 -1
  35. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/browser_tool.py +3 -3
  36. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/create_file_tool.py +1 -1
  37. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/glob_tool.py +3 -3
  38. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/list_directory_tool.py +7 -8
  39. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/read_image_tool.py +1 -3
  40. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/replace_entire_file_tool.py +1 -1
  41. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/search_and_replace_tool.py +2 -2
  42. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/search_backends/__init__.py +2 -5
  43. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +1 -3
  44. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +1 -3
  45. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/search_backends/tavily.py +1 -3
  46. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/search_codebase_tool.py +26 -19
  47. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/terminal_tool.py +0 -1
  48. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/web_fetch_tool.py +1 -3
  49. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/web_search_tool.py +1 -2
  50. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/auth/chatgpt_oauth.py +1 -3
  51. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/app.py +155 -38
  52. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/clipboard_image.py +1 -3
  53. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/config.py +4 -12
  54. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/messages.py +2 -7
  55. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/session_store.py +5 -5
  56. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/settings.py +2 -14
  57. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/skills.py +1 -3
  58. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/slash_commands.py +11 -5
  59. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/tui/agent_runtime.py +11 -4
  60. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/tui/command_handlers.py +11 -17
  61. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/tui/settings_panel.py +3 -1
  62. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/tui/state.py +2 -0
  63. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/tui/styles.tcss +9 -2
  64. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/tui/sub_agent_screen.py +2 -0
  65. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/tui/transcript.py +15 -11
  66. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/tui/widgets.py +111 -10
  67. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/updater.py +1 -4
  68. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/events.py +3 -3
  69. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/llm/client.py +9 -3
  70. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/llm/exceptions.py +10 -31
  71. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/llm/models.py +0 -1
  72. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/llm/providers/anthropic.py +2 -2
  73. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/llm/providers/openai.py +0 -1
  74. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/llm/providers/responses_common.py +1 -3
  75. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/llm/specs.py +49 -8
  76. kolega_code-0.8.4/kolega_code/local_state.py +38 -0
  77. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/models/sandbox_terminal_state.py +1 -2
  78. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/permissions.py +4 -4
  79. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/sandbox/async_filesystem.py +7 -10
  80. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/sandbox/base.py +3 -1
  81. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/sandbox/event_loop.py +0 -1
  82. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/sandbox/filesystem.py +6 -8
  83. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/sandbox/local.py +3 -1
  84. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/sandbox/serializer.py +1 -1
  85. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/sandbox/utils.py +17 -13
  86. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/services/browser.py +0 -1
  87. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/services/terminal.py +1 -3
  88. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/utils/images.py +2 -6
  89. {kolega_code-0.8.3 → kolega_code-0.8.4}/pyproject.toml +9 -1
  90. {kolega_code-0.8.3 → kolega_code-0.8.4}/run_tests.sh +13 -0
  91. kolega_code-0.8.4/scripts/check-dev-hooks.sh +18 -0
  92. kolega_code-0.8.4/scripts/setup-dev.sh +7 -0
  93. kolega_code-0.8.4/tests/agent/conftest.py +50 -0
  94. kolega_code-0.8.4/tests/agent/llm/_token_counting_utils.py +71 -0
  95. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/llm/test_anthropic_token_counting.py +60 -113
  96. kolega_code-0.8.4/tests/agent/llm/test_billing_openai_cache.py +74 -0
  97. kolega_code-0.8.4/tests/agent/llm/test_chatgpt_oauth_auth_config.py +86 -0
  98. kolega_code-0.8.4/tests/agent/llm/test_chatgpt_oauth_conversion.py +200 -0
  99. kolega_code-0.8.4/tests/agent/llm/test_chatgpt_oauth_provider.py +2 -0
  100. kolega_code-0.8.4/tests/agent/llm/test_chatgpt_oauth_provider_generate.py +135 -0
  101. kolega_code-0.8.4/tests/agent/llm/test_chatgpt_oauth_streaming.py +273 -0
  102. kolega_code-0.8.4/tests/agent/llm/test_client.py +2 -0
  103. kolega_code-0.8.4/tests/agent/llm/test_client_live.py +338 -0
  104. kolega_code-0.8.4/tests/agent/llm/test_client_runtime.py +171 -0
  105. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/llm/test_dashscope_mapping.py +8 -8
  106. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/llm/test_google_tool_signature_live.py +28 -8
  107. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/llm/test_instrumented_client.py +2 -151
  108. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/llm/test_instrumented_client_integration.py +1 -0
  109. kolega_code-0.8.4/tests/agent/llm/test_instrumented_client_stream.py +165 -0
  110. kolega_code-0.8.4/tests/agent/llm/test_langfuse_normalization.py +73 -0
  111. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/llm/test_live_providers.py +3 -1
  112. kolega_code-0.8.4/tests/agent/llm/test_message_conversion.py +187 -0
  113. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/llm/test_openai_cached_tokens.py +9 -12
  114. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/llm/test_openai_cached_tokens_stream.py +9 -12
  115. kolega_code-0.8.4/tests/agent/llm/test_openai_message_conversion.py +151 -0
  116. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/llm/test_openai_responses_provider.py +3 -1
  117. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/llm/test_openai_token_counting.py +30 -82
  118. kolega_code-0.8.4/tests/agent/llm/test_provider_usage_mapping.py +284 -0
  119. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/llm/test_thinking_effort.py +10 -2
  120. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/orchestration/test_orchestration.py +3 -16
  121. kolega_code-0.8.4/tests/agent/services/test_browser.py +2 -0
  122. kolega_code-0.8.3/tests/agent/services/test_browser.py → kolega_code-0.8.4/tests/agent/services/test_browser_console_logs.py +13 -146
  123. kolega_code-0.8.4/tests/agent/services/test_browser_content.py +94 -0
  124. kolega_code-0.8.4/tests/agent/services/test_browser_integration.py +120 -0
  125. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/services/test_browser_parity.py +1 -1
  126. kolega_code-0.8.4/tests/agent/services/test_file_system.py +2 -0
  127. kolega_code-0.8.4/tests/agent/services/test_file_system_integration.py +127 -0
  128. kolega_code-0.8.4/tests/agent/services/test_file_system_path.py +206 -0
  129. kolega_code-0.8.3/tests/agent/services/test_file_system.py → kolega_code-0.8.4/tests/agent/services/test_local_file_system.py +1 -321
  130. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/services/test_terminal_state_serializer.py +1 -2
  131. kolega_code-0.8.4/tests/agent/test_base_agent.py +2 -0
  132. kolega_code-0.8.4/tests/agent/test_base_agent_anthropic_history_validation.py +119 -0
  133. kolega_code-0.8.4/tests/agent/test_base_agent_compaction.py +215 -0
  134. kolega_code-0.8.4/tests/agent/test_base_agent_effective_history.py +173 -0
  135. kolega_code-0.8.4/tests/agent/test_base_agent_history_serialization.py +238 -0
  136. kolega_code-0.8.4/tests/agent/test_base_agent_prompt_context.py +78 -0
  137. kolega_code-0.8.4/tests/agent/test_base_agent_role_overrides.py +91 -0
  138. kolega_code-0.8.4/tests/agent/test_base_agent_runtime.py +205 -0
  139. kolega_code-0.8.4/tests/agent/test_base_agent_tool_call_repair.py +861 -0
  140. kolega_code-0.8.4/tests/agent/test_base_agent_tool_call_repair_integration.py +527 -0
  141. kolega_code-0.8.4/tests/agent/test_base_agent_tool_execution.py +84 -0
  142. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_coder_attachments.py +5 -14
  143. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_compaction_tui_events.py +1 -3
  144. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_duplicate_tool_results.py +10 -14
  145. kolega_code-0.8.3/tests/agent/test_image_compat.py → kolega_code-0.8.4/tests/agent/test_history_adapter_thinking.py +1 -200
  146. kolega_code-0.8.4/tests/agent/test_history_image_blocks.py +220 -0
  147. kolega_code-0.8.4/tests/agent/test_image_compat.py +2 -0
  148. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_permissions.py +21 -0
  149. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_planning_agent.py +4 -13
  150. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_read_image_tool.py +3 -9
  151. kolega_code-0.8.4/tests/agent/test_tool_collection_builtin_dispatch.py +229 -0
  152. kolega_code-0.8.4/tests/agent/test_tool_collection_config.py +243 -0
  153. kolega_code-0.8.4/tests/agent/test_tool_collection_extensions.py +161 -0
  154. kolega_code-0.8.4/tests/agent/test_tool_collection_initialization.py +186 -0
  155. kolega_code-0.8.4/tests/agent/test_tool_collection_memory.py +193 -0
  156. kolega_code-0.8.4/tests/agent/test_tools.py +2 -0
  157. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/tool_backend/test_agent_tool.py +5 -4
  158. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/tool_backend/test_base_tool.py +4 -1
  159. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/tool_backend/test_browser_tool.py +1 -1
  160. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/tool_backend/test_build_tool.py +0 -2
  161. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/tool_backend/test_create_file_tool.py +4 -1
  162. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/tool_backend/test_glob_tool.py +4 -1
  163. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/tool_backend/test_glob_tool_sandbox_parity.py +7 -6
  164. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/tool_backend/test_read_file_tool.py +4 -1
  165. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/tool_backend/test_replace_entire_file_tool.py +4 -1
  166. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/tool_backend/test_replace_lines_tool.py +4 -1
  167. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/tool_backend/test_search_codebase_tool.py +4 -2
  168. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/tool_backend/test_terminal_tool.py +5 -4
  169. kolega_code-0.8.4/tests/agent/tool_backend/test_think_hard_streaming.py +2 -0
  170. kolega_code-0.8.3/tests/agent/tool_backend/test_think_hard_streaming.py → kolega_code-0.8.4/tests/agent/tool_backend/test_think_hard_streaming_content.py +1 -197
  171. kolega_code-0.8.4/tests/agent/tool_backend/test_think_hard_streaming_errors.py +165 -0
  172. kolega_code-0.8.4/tests/agent/tool_backend/test_think_hard_streaming_updates.py +238 -0
  173. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/tool_backend/test_web_fetch_tool.py +82 -62
  174. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/tool_backend/test_workflow_tool.py +4 -7
  175. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/auth/test_tokens.py +1 -3
  176. kolega_code-0.8.4/tests/cli/_app_test_utils.py +227 -0
  177. kolega_code-0.8.4/tests/cli/test_app.py +2 -0
  178. kolega_code-0.8.4/tests/cli/test_app_agent_wiring.py +190 -0
  179. kolega_code-0.8.4/tests/cli/test_app_bootstrap_settings.py +798 -0
  180. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/cli/test_app_compaction_restore.py +5 -11
  181. kolega_code-0.8.4/tests/cli/test_app_composer_commands.py +1 -0
  182. kolega_code-0.8.4/tests/cli/test_app_composer_input.py +494 -0
  183. kolega_code-0.8.4/tests/cli/test_app_conversation_rendering.py +1 -0
  184. kolega_code-0.8.4/tests/cli/test_app_focus_behavior.py +298 -0
  185. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/cli/test_app_image_vision_warning.py +4 -12
  186. kolega_code-0.8.4/tests/cli/test_app_mention_dropdown.py +196 -0
  187. kolega_code-0.8.4/tests/cli/test_app_misc_commands.py +321 -0
  188. kolega_code-0.8.4/tests/cli/test_app_model_effort_commands.py +601 -0
  189. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/cli/test_app_model_switch_vision.py +5 -9
  190. kolega_code-0.8.4/tests/cli/test_app_modes_planning.py +1 -0
  191. kolega_code-0.8.4/tests/cli/test_app_navigation_commands.py +251 -0
  192. kolega_code-0.8.4/tests/cli/test_app_permission_prompts.py +262 -0
  193. kolega_code-0.8.4/tests/cli/test_app_persistence_history.py +681 -0
  194. kolega_code-0.8.4/tests/cli/test_app_plan_lifecycle.py +529 -0
  195. kolega_code-0.8.4/tests/cli/test_app_planning_questions.py +442 -0
  196. kolega_code-0.8.4/tests/cli/test_app_planning_restore.py +210 -0
  197. kolega_code-0.8.4/tests/cli/test_app_rendering_entries.py +376 -0
  198. kolega_code-0.8.4/tests/cli/test_app_rendering_errors.py +298 -0
  199. kolega_code-0.8.4/tests/cli/test_app_rendering_scroll.py +277 -0
  200. kolega_code-0.8.4/tests/cli/test_app_rendering_selection.py +556 -0
  201. kolega_code-0.8.4/tests/cli/test_app_rendering_status.py +449 -0
  202. kolega_code-0.8.4/tests/cli/test_app_rendering_streaming.py +311 -0
  203. kolega_code-0.8.4/tests/cli/test_app_rendering_terminal_logs.py +456 -0
  204. kolega_code-0.8.4/tests/cli/test_app_rendering_tools.py +587 -0
  205. kolega_code-0.8.4/tests/cli/test_app_skill_commands.py +168 -0
  206. kolega_code-0.8.4/tests/cli/test_app_slash_dropdown.py +166 -0
  207. kolega_code-0.8.4/tests/cli/test_app_status_modes.py +627 -0
  208. kolega_code-0.8.4/tests/cli/test_app_sub_agents_workflows.py +761 -0
  209. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/cli/test_cli_config.py +3 -9
  210. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/cli/test_clipboard_image.py +1 -3
  211. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/cli/test_main.py +3 -9
  212. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/cli/test_mentions.py +3 -1
  213. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/cli/test_session_store.py +19 -0
  214. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/cli/test_skills.py +3 -1
  215. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/cli/test_themes.py +2 -1
  216. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/cli/test_tui_stylesheet.py +3 -9
  217. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/cli/test_updater.py +9 -3
  218. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/utils/test_images_ascii.py +1 -3
  219. {kolega_code-0.8.3 → kolega_code-0.8.4}/uv.lock +522 -2
  220. kolega_code-0.8.3/.github/workflows/ci.yml +0 -46
  221. kolega_code-0.8.3/.github/workflows/release.yml +0 -121
  222. kolega_code-0.8.3/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -3
  223. kolega_code-0.8.3/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -3
  224. kolega_code-0.8.3/tests/agent/llm/test_billing_openai_cache.py +0 -74
  225. kolega_code-0.8.3/tests/agent/llm/test_chatgpt_oauth_provider.py +0 -561
  226. kolega_code-0.8.3/tests/agent/llm/test_client.py +0 -910
  227. kolega_code-0.8.3/tests/agent/llm/test_langfuse_normalization.py +0 -56
  228. kolega_code-0.8.3/tests/agent/llm/test_openai_message_conversion.py +0 -140
  229. kolega_code-0.8.3/tests/agent/test_base_agent.py +0 -2303
  230. kolega_code-0.8.3/tests/agent/test_tools.py +0 -670
  231. kolega_code-0.8.3/tests/cli/test_app.py +0 -8772
  232. {kolega_code-0.8.3 → kolega_code-0.8.4}/.env.example +0 -0
  233. {kolega_code-0.8.3 → kolega_code-0.8.4}/LICENSE +0 -0
  234. {kolega_code-0.8.3 → kolega_code-0.8.4}/SECURITY.md +0 -0
  235. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/.gitignore +0 -0
  236. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/README.md +0 -0
  237. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/astro.config.mjs +0 -0
  238. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/package-lock.json +0 -0
  239. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/package.json +0 -0
  240. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/public/favicon.svg +0 -0
  241. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/assets/demo.gif +0 -0
  242. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/assets/kolega-dark.svg +0 -0
  243. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/assets/kolega-light.svg +0 -0
  244. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/cli/ask.md +0 -0
  245. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/cli/doctor.md +0 -0
  246. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/cli/overview.md +0 -0
  247. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/cli/sessions.md +0 -0
  248. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/concepts/agents.md +0 -0
  249. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/concepts/how-it-works.md +0 -0
  250. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/concepts/tools.md +0 -0
  251. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/configuration/environment-variables.md +0 -0
  252. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/configuration/providers-and-models.mdx +0 -0
  253. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/configuration/settings-and-api-keys.mdx +0 -0
  254. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/configuration/sign-in-with-chatgpt.mdx +0 -0
  255. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/getting-started/installation.mdx +0 -0
  256. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/getting-started/quick-start.mdx +0 -0
  257. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/gigacode.mdx +0 -0
  258. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/hooks.md +0 -0
  259. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/index.mdx +0 -0
  260. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/skills.mdx +0 -0
  261. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/tui/interface.md +0 -0
  262. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/tui/modes.md +0 -0
  263. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content/docs/tui/sessions-and-resume.md +0 -0
  264. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/content.config.ts +0 -0
  265. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/src/styles/brand.css +0 -0
  266. {kolega_code-0.8.3 → kolega_code-0.8.4}/docs/tsconfig.json +0 -0
  267. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/browseragent.py +0 -0
  268. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/coder.py +0 -0
  269. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/common.py +0 -0
  270. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/compression.py +0 -0
  271. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/context.py +0 -0
  272. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/errors.py +0 -0
  273. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/generalagent.py +0 -0
  274. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/investigationagent.py +0 -0
  275. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/orchestration/__init__.py +0 -0
  276. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/orchestration/errors.py +0 -0
  277. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/orchestration/guide.py +0 -0
  278. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/orchestration/journal.py +0 -0
  279. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/orchestration/runtime.py +0 -0
  280. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/orchestration/types.py +0 -0
  281. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_provider.py +0 -0
  282. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
  283. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
  284. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
  285. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
  286. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/auxiliary/tools/think_hard.system.md +0 -0
  287. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
  288. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
  289. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -0
  290. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
  291. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +0 -0
  292. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +0 -0
  293. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
  294. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
  295. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +0 -0
  296. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
  297. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/build_tool.py +0 -0
  298. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
  299. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
  300. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/read_file_tool.py +0 -0
  301. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/replace_lines_tool.py +0 -0
  302. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
  303. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
  304. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
  305. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
  306. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
  307. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/think_hard_tool.py +0 -0
  308. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
  309. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/tools.py +0 -0
  310. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/agent/utils/commands.py +0 -0
  311. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/auth/__init__.py +0 -0
  312. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/auth/_jwt.py +0 -0
  313. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/auth/constants.py +0 -0
  314. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/auth/tokens.py +0 -0
  315. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/__init__.py +0 -0
  316. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/connection.py +0 -0
  317. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/file_index.py +0 -0
  318. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/main.py +0 -0
  319. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/mentions.py +0 -0
  320. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/provider_registry.py +0 -0
  321. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/theme.py +0 -0
  322. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/tui/__init__.py +0 -0
  323. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/tui/constants.py +0 -0
  324. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/tui/prompt_flows.py +0 -0
  325. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/cli/tui/status_dashboard.py +0 -0
  326. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/config.py +0 -0
  327. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/hooks/__init__.py +0 -0
  328. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/hooks/backends.py +0 -0
  329. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/hooks/config.py +0 -0
  330. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/hooks/dispatcher.py +0 -0
  331. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/hooks/events.py +0 -0
  332. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/hooks/matcher.py +0 -0
  333. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/hooks/outcome.py +0 -0
  334. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/llm/instrumented_client.py +0 -0
  335. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/llm/providers/__init__.py +0 -0
  336. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/llm/providers/base.py +0 -0
  337. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
  338. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/llm/providers/google.py +0 -0
  339. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/llm/providers/models.py +0 -0
  340. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/llm/providers/openai_responses.py +0 -0
  341. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/llm/ratelimit.py +0 -0
  342. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/llm/tool_execution_ids.py +0 -0
  343. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/models/__init__.py +0 -0
  344. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/runtime.py +0 -0
  345. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/sandbox/README.md +0 -0
  346. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/sandbox/__init__.py +0 -0
  347. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/sandbox/browser.py +0 -0
  348. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/sandbox/terminal.py +0 -0
  349. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/services/base.py +0 -0
  350. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/services/file_system.py +0 -0
  351. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/services/html.py +0 -0
  352. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/services/terminal_buffer.py +0 -0
  353. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/tools/__init__.py +0 -0
  354. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/tools/core.py +0 -0
  355. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/tools/definitions.py +0 -0
  356. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/tools/registry.py +0 -0
  357. {kolega_code-0.8.3 → kolega_code-0.8.4}/kolega_code/utils/__init__.py +0 -0
  358. {kolega_code-0.8.3 → kolega_code-0.8.4}/scripts/install-kolega-code.sh +0 -0
  359. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/__init__.py +0 -0
  360. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/__init__.py +0 -0
  361. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/compaction_helpers.py +0 -0
  362. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/llm/__init__.py +0 -0
  363. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/llm/test_chatgpt_live.py +0 -0
  364. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/llm/test_error_boundary.py +0 -0
  365. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/llm/test_exceptions.py +0 -0
  366. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/llm/test_google_thought_signature.py +0 -0
  367. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/llm/test_model_specs.py +0 -0
  368. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/llm/test_supports_vision.py +0 -0
  369. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/llm/test_tool_execution_ids.py +0 -0
  370. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/orchestration/__init__.py +0 -0
  371. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/services/__init__.py +0 -0
  372. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/services/test_sandbox_terminal_input.py +0 -0
  373. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/services/test_terminal.py +0 -0
  374. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/services/test_terminal_buffer.py +0 -0
  375. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_agent_tools_inventory.py +0 -0
  376. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_coder_prompt_extensions.py +0 -0
  377. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_commands.py +0 -0
  378. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_compaction_integration.py +0 -0
  379. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_compaction_persistence.py +0 -0
  380. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_compaction_subagent.py +0 -0
  381. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_compress_command.py +0 -0
  382. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_compression.py +0 -0
  383. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_conversation_compaction.py +0 -0
  384. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_empty_message_handling.py +0 -0
  385. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_event_emitter.py +0 -0
  386. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_general_agent.py +0 -0
  387. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_gigacode_gating.py +0 -0
  388. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_hooks_integration.py +0 -0
  389. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_html.py +0 -0
  390. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_parallel_tool_calls.py +0 -0
  391. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_prompt_provider.py +0 -0
  392. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_prompts.py +0 -0
  393. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/test_tool_registry.py +0 -0
  394. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/tool_backend/__init__.py +0 -0
  395. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/tool_backend/test_edit_preview.py +0 -0
  396. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/tool_backend/test_list_directory_tool.py +0 -0
  397. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/tool_backend/test_search_and_replace_tool.py +0 -0
  398. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/tool_backend/test_think_hard_integration.py +0 -0
  399. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/agent/tool_backend/test_web_search_tool.py +0 -0
  400. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/auth/__init__.py +0 -0
  401. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/auth/test_chatgpt_oauth.py +0 -0
  402. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/cli/__init__.py +0 -0
  403. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/cli/test_connection.py +0 -0
  404. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/cli/test_file_index.py +0 -0
  405. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/cli/test_provider_registry.py +0 -0
  406. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/cli/test_settings.py +0 -0
  407. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/cli/test_slash_commands.py +0 -0
  408. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/conftest.py +0 -0
  409. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/hooks/__init__.py +0 -0
  410. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/hooks/test_hooks.py +0 -0
  411. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/tools/__init__.py +0 -0
  412. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/tools/test_definitions.py +0 -0
  413. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/utils/__init__.py +0 -0
  414. {kolega_code-0.8.3 → kolega_code-0.8.4}/tests/utils/test_images.py +0 -0
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ exec uv run pre-commit run --all-files --show-diff-on-failure
@@ -0,0 +1,84 @@
1
+ name: Bug report
2
+ description: Report a reproducible problem with Kolega Code
3
+ title: "bug: "
4
+ labels: ["bug"]
5
+ body:
6
+ - type: textarea
7
+ id: summary
8
+ attributes:
9
+ label: Summary
10
+ description: What went wrong?
11
+ placeholder: "Kolega Code ..."
12
+ validations:
13
+ required: true
14
+
15
+ - type: input
16
+ id: version
17
+ attributes:
18
+ label: Kolega Code version
19
+ description: Run `kolega-code --version`.
20
+ placeholder: "kolega-code 0.8.3"
21
+ validations:
22
+ required: true
23
+
24
+ - type: input
25
+ id: os
26
+ attributes:
27
+ label: Operating system
28
+ placeholder: "macOS 15.5, Ubuntu 24.04, Fedora 42, etc."
29
+ validations:
30
+ required: true
31
+
32
+ - type: input
33
+ id: terminal
34
+ attributes:
35
+ label: Terminal
36
+ description: Include terminal app and shell if relevant.
37
+ placeholder: "Ghostty + zsh, Terminal.app + zsh, iTerm2 + fish, GNOME Terminal + bash"
38
+ validations:
39
+ required: true
40
+
41
+ - type: input
42
+ id: install-method
43
+ attributes:
44
+ label: Install method
45
+ placeholder: "install script, uv tool install, pipx, pip"
46
+ validations:
47
+ required: true
48
+
49
+ - type: textarea
50
+ id: repro
51
+ attributes:
52
+ label: Reproduction steps
53
+ description: Keep this as small and specific as possible.
54
+ placeholder: |
55
+ 1. Run `kolega-code .`
56
+ 2. ...
57
+ 3. ...
58
+ validations:
59
+ required: true
60
+
61
+ - type: textarea
62
+ id: expected
63
+ attributes:
64
+ label: Expected behavior
65
+ placeholder: "I expected ..."
66
+ validations:
67
+ required: true
68
+
69
+ - type: textarea
70
+ id: actual
71
+ attributes:
72
+ label: Actual behavior
73
+ placeholder: "Instead ..."
74
+ validations:
75
+ required: true
76
+
77
+ - type: textarea
78
+ id: logs
79
+ attributes:
80
+ label: Logs or screenshots
81
+ description: Paste relevant output. Please remove API keys, tokens, project-private code, and other secrets.
82
+ render: shell
83
+ validations:
84
+ required: false
@@ -0,0 +1,8 @@
1
+ blank_issues_enabled: true
2
+ contact_links:
3
+ - name: Security vulnerability
4
+ url: https://github.com/kolega-ai/kolega-code/security/policy
5
+ about: Please report security issues privately.
6
+ - name: Documentation
7
+ url: https://kolega-ai.github.io/kolega-code/
8
+ about: Check the docs for setup, configuration, and usage guidance.
@@ -0,0 +1,46 @@
1
+ name: Feature request
2
+ description: Suggest an improvement or new capability
3
+ title: "feat: "
4
+ labels: ["enhancement"]
5
+ body:
6
+ - type: textarea
7
+ id: problem
8
+ attributes:
9
+ label: Problem
10
+ description: What are you trying to do, and what makes it hard today?
11
+ placeholder: "I want to ..."
12
+ validations:
13
+ required: true
14
+
15
+ - type: textarea
16
+ id: proposal
17
+ attributes:
18
+ label: Proposed solution
19
+ description: What would you like Kolega Code to do?
20
+ placeholder: "It would be useful if ..."
21
+ validations:
22
+ required: true
23
+
24
+ - type: input
25
+ id: os
26
+ attributes:
27
+ label: Operating system
28
+ placeholder: "macOS 15.5, Ubuntu 24.04, Fedora 42, etc."
29
+ validations:
30
+ required: false
31
+
32
+ - type: input
33
+ id: terminal
34
+ attributes:
35
+ label: Terminal
36
+ placeholder: "Ghostty + zsh, Terminal.app + zsh, iTerm2 + fish, GNOME Terminal + bash"
37
+ validations:
38
+ required: false
39
+
40
+ - type: textarea
41
+ id: context
42
+ attributes:
43
+ label: Additional context
44
+ description: Add examples, alternatives considered, screenshots, or links if useful.
45
+ validations:
46
+ required: false
@@ -0,0 +1,131 @@
1
+ name: CI
2
+
3
+ on:
4
+ pull_request:
5
+ branches: [main]
6
+ types: [opened, synchronize, reopened, ready_for_review]
7
+ push:
8
+ branches: [main]
9
+ workflow_dispatch:
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ concurrency:
15
+ group: ci-${{ github.workflow }}-${{ github.ref }}
16
+ cancel-in-progress: true
17
+
18
+ jobs:
19
+ tests:
20
+ name: Python ${{ matrix.python-version }}
21
+ runs-on: ubuntu-latest
22
+ strategy:
23
+ fail-fast: false
24
+ matrix:
25
+ python-version: ["3.11", "3.12"]
26
+
27
+ steps:
28
+ - name: Checkout
29
+ uses: actions/checkout@v5
30
+
31
+ - name: Setup Python
32
+ uses: actions/setup-python@v6
33
+ with:
34
+ python-version: ${{ matrix.python-version }}
35
+
36
+ - name: Setup uv
37
+ uses: astral-sh/setup-uv@v7
38
+ with:
39
+ enable-cache: true
40
+ cache-dependency-glob: uv.lock
41
+
42
+ - name: Install dependencies
43
+ run: uv sync --extra dev --frozen
44
+
45
+ - name: Run pre-commit hooks
46
+ run: uv run pre-commit run --all-files --show-diff-on-failure
47
+
48
+ - name: Run fast tests with coverage
49
+ run: ./run_tests.sh --coverage
50
+
51
+ - name: Upload coverage report
52
+ uses: actions/upload-artifact@v6
53
+ with:
54
+ name: coverage-xml-python-${{ matrix.python-version }}
55
+ path: coverage.xml
56
+ if-no-files-found: error
57
+
58
+ coverage-badge:
59
+ name: Update coverage badge
60
+ needs: tests
61
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
62
+ runs-on: ubuntu-latest
63
+ permissions:
64
+ contents: write
65
+ steps:
66
+ - name: Checkout
67
+ uses: actions/checkout@v5
68
+
69
+ - name: Setup Python
70
+ uses: actions/setup-python@v6
71
+ with:
72
+ python-version: "3.11"
73
+
74
+ - name: Setup uv
75
+ uses: astral-sh/setup-uv@v7
76
+ with:
77
+ enable-cache: true
78
+ cache-dependency-glob: uv.lock
79
+
80
+ - name: Install dependencies
81
+ run: uv sync --extra dev --frozen
82
+
83
+ - name: Download Python 3.11 coverage report
84
+ uses: actions/download-artifact@v6
85
+ with:
86
+ name: coverage-xml-python-3.11
87
+ path: coverage-artifact
88
+
89
+ - name: Generate coverage badge
90
+ run: |
91
+ uv run genbadge coverage -i coverage-artifact/coverage.xml -o docs/src/assets/coverage.svg
92
+ python - <<'PY'
93
+ from pathlib import Path
94
+
95
+ badge = Path("docs/src/assets/coverage.svg")
96
+ badge.write_text(badge.read_text().rstrip("\n") + "\n")
97
+ PY
98
+
99
+ - name: Commit coverage badge
100
+ run: |
101
+ if [ -z "$(git status --porcelain -- docs/src/assets/coverage.svg)" ]; then
102
+ echo "Coverage badge is already up to date."
103
+ exit 0
104
+ fi
105
+
106
+ git config user.name "github-actions[bot]"
107
+ git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
108
+ git add docs/src/assets/coverage.svg
109
+ git commit -m "chore: update coverage badge [skip ci]"
110
+ git push
111
+
112
+ dependency-audit:
113
+ name: Dependency audit
114
+ runs-on: ubuntu-latest
115
+ steps:
116
+ - name: Checkout
117
+ uses: actions/checkout@v5
118
+
119
+ - name: Setup Python
120
+ uses: actions/setup-python@v6
121
+ with:
122
+ python-version: "3.11"
123
+
124
+ - name: Setup uv
125
+ uses: astral-sh/setup-uv@v7
126
+ with:
127
+ enable-cache: true
128
+ cache-dependency-glob: uv.lock
129
+
130
+ - name: Audit locked dependencies
131
+ run: uv audit --locked
@@ -29,10 +29,10 @@ jobs:
29
29
  working-directory: docs
30
30
  steps:
31
31
  - name: Checkout
32
- uses: actions/checkout@v4
32
+ uses: actions/checkout@v5
33
33
 
34
34
  - name: Setup Node
35
- uses: actions/setup-node@v4
35
+ uses: actions/setup-node@v5
36
36
  with:
37
37
  node-version: "22.12.0"
38
38
  cache: npm
@@ -46,9 +46,10 @@ jobs:
46
46
 
47
47
  - name: Upload Pages artifact
48
48
  if: github.event_name != 'pull_request'
49
- uses: actions/upload-pages-artifact@v3
49
+ uses: actions/upload-pages-artifact@v5
50
50
  with:
51
51
  path: docs/dist
52
+ include-hidden-files: true
52
53
 
53
54
  deploy:
54
55
  if: github.event_name != 'pull_request'
@@ -63,4 +64,4 @@ jobs:
63
64
  steps:
64
65
  - name: Deploy to GitHub Pages
65
66
  id: deployment
66
- uses: actions/deploy-pages@v4
67
+ uses: actions/deploy-pages@v5
@@ -0,0 +1,205 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*"
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ jobs:
12
+ build:
13
+ name: Build and test package
14
+ runs-on: ubuntu-latest
15
+ permissions:
16
+ contents: read
17
+ attestations: write
18
+ id-token: write
19
+ steps:
20
+ - name: Checkout
21
+ uses: actions/checkout@v5
22
+
23
+ - name: Setup Python
24
+ uses: actions/setup-python@v6
25
+ with:
26
+ python-version: "3.11"
27
+
28
+ - name: Setup uv
29
+ uses: astral-sh/setup-uv@v7
30
+ with:
31
+ enable-cache: true
32
+ cache-dependency-glob: uv.lock
33
+
34
+ - name: Install dependencies
35
+ run: uv sync --extra dev --frozen
36
+
37
+ - name: Verify release version metadata
38
+ run: |
39
+ uv run python - <<'PY'
40
+ import ast
41
+ import os
42
+ import sys
43
+ import tomllib
44
+ from pathlib import Path
45
+
46
+ def module_version(path: str) -> str:
47
+ tree = ast.parse(Path(path).read_text(encoding="utf-8"), filename=path)
48
+ for node in tree.body:
49
+ if isinstance(node, ast.Assign):
50
+ for target in node.targets:
51
+ if isinstance(target, ast.Name) and target.id == "__version__":
52
+ if isinstance(node.value, ast.Constant) and isinstance(node.value.value, str):
53
+ return node.value.value
54
+ raise RuntimeError(f"Could not find string __version__ assignment in {path}")
55
+
56
+ tag = os.environ["GITHUB_REF_NAME"]
57
+ with open("pyproject.toml", "rb") as fh:
58
+ version = tomllib.load(fh)["project"]["version"]
59
+ expected_tag = f"v{version}"
60
+ if tag != expected_tag:
61
+ print(f"Release tag {tag!r} does not match pyproject.toml version {version!r}; expected {expected_tag!r}.")
62
+ sys.exit(1)
63
+
64
+ module_versions = {
65
+ "kolega_code/__init__.py": module_version("kolega_code/__init__.py"),
66
+ "kolega_code/agent/__init__.py": module_version("kolega_code/agent/__init__.py"),
67
+ }
68
+ mismatches = {path: value for path, value in module_versions.items() if value != version}
69
+ if mismatches:
70
+ print("Version metadata mismatch:")
71
+ print(f" pyproject.toml: {version}")
72
+ for path, value in mismatches.items():
73
+ print(f" {path}: {value}")
74
+ sys.exit(1)
75
+ PY
76
+
77
+ - name: Run tests
78
+ run: uv run pytest -ra --durations=50 --import-mode=importlib -m "not slow"
79
+
80
+ - name: Build distributions
81
+ run: uv build
82
+
83
+ - name: Check distributions
84
+ run: uv run twine check dist/*
85
+
86
+ - name: Prepare release asset directory
87
+ run: mkdir -p release-assets
88
+
89
+ - name: Generate SBOM
90
+ uses: anchore/sbom-action@v0
91
+ with:
92
+ path: .
93
+ format: spdx-json
94
+ output-file: release-assets/kolega-code-sbom.spdx.json
95
+ upload-artifact: false
96
+
97
+ - name: Attest release artifacts
98
+ uses: actions/attest-build-provenance@v3
99
+ with:
100
+ subject-path: "dist/*"
101
+
102
+ - name: Upload distributions
103
+ uses: actions/upload-artifact@v6
104
+ with:
105
+ name: python-distributions
106
+ path: dist/
107
+ if-no-files-found: error
108
+
109
+ - name: Upload SBOM
110
+ uses: actions/upload-artifact@v6
111
+ with:
112
+ name: release-sbom
113
+ path: release-assets/kolega-code-sbom.spdx.json
114
+ if-no-files-found: error
115
+
116
+ smoke:
117
+ name: Smoke-test artifacts on Python ${{ matrix.python-version }}
118
+ needs: build
119
+ runs-on: ubuntu-latest
120
+ strategy:
121
+ fail-fast: false
122
+ matrix:
123
+ python-version: ["3.11", "3.12"]
124
+ steps:
125
+ - name: Setup Python
126
+ uses: actions/setup-python@v6
127
+ with:
128
+ python-version: ${{ matrix.python-version }}
129
+
130
+ - name: Download distributions
131
+ uses: actions/download-artifact@v7
132
+ with:
133
+ name: python-distributions
134
+ path: dist/
135
+
136
+ - name: Smoke-test wheel
137
+ run: |
138
+ python -m venv /tmp/kolega-code-wheel-smoke
139
+ /tmp/kolega-code-wheel-smoke/bin/python -m pip install --upgrade pip
140
+ /tmp/kolega-code-wheel-smoke/bin/python -m pip install dist/*.whl
141
+ /tmp/kolega-code-wheel-smoke/bin/kolega-code --version
142
+
143
+ - name: Smoke-test sdist
144
+ run: |
145
+ python -m venv /tmp/kolega-code-sdist-smoke
146
+ /tmp/kolega-code-sdist-smoke/bin/python -m pip install --upgrade pip
147
+ /tmp/kolega-code-sdist-smoke/bin/python -m pip install dist/*.tar.gz
148
+ /tmp/kolega-code-sdist-smoke/bin/kolega-code --version
149
+
150
+ publish:
151
+ name: Publish to PyPI
152
+ needs: [build, smoke]
153
+ runs-on: ubuntu-latest
154
+ environment:
155
+ name: pypi
156
+ url: https://pypi.org/p/kolega-code
157
+ permissions:
158
+ contents: read
159
+ id-token: write
160
+ steps:
161
+ - name: Download distributions
162
+ uses: actions/download-artifact@v7
163
+ with:
164
+ name: python-distributions
165
+ path: dist/
166
+
167
+ - name: Publish distributions to PyPI
168
+ uses: pypa/gh-action-pypi-publish@release/v1
169
+ with:
170
+ packages-dir: dist/
171
+ skip-existing: false
172
+
173
+ github-release:
174
+ name: Create GitHub Release
175
+ needs: publish
176
+ runs-on: ubuntu-latest
177
+ permissions:
178
+ contents: write
179
+ env:
180
+ GH_TOKEN: ${{ github.token }}
181
+ steps:
182
+ - name: Create release
183
+ run: |
184
+ if gh release view "$GITHUB_REF_NAME" --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1; then
185
+ echo "GitHub Release $GITHUB_REF_NAME already exists."
186
+ exit 0
187
+ fi
188
+
189
+ version="${GITHUB_REF_NAME#v}"
190
+ prelude=$(printf '%s\n\n%s\n\n%s\n%s\n%s\n\n%s\n' \
191
+ "PyPI: https://pypi.org/project/kolega-code/${version}/" \
192
+ "Update with:" \
193
+ '```bash' \
194
+ 'uv tool install --force kolega-code' \
195
+ '```' \
196
+ "PyPI is the canonical package distribution. GitHub provides source archives for this release."
197
+ )
198
+
199
+ gh release create "$GITHUB_REF_NAME" \
200
+ --repo "$GITHUB_REPOSITORY" \
201
+ --verify-tag \
202
+ --title "$GITHUB_REF_NAME" \
203
+ --latest \
204
+ --generate-notes \
205
+ --notes "$prelude"
@@ -11,3 +11,6 @@ __pycache__/
11
11
  dist/
12
12
  build/
13
13
  *.egg-info/
14
+ .coverage
15
+ coverage.xml
16
+ htmlcov/
@@ -0,0 +1,17 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ rev: v0.15.12
4
+ hooks:
5
+ - id: ruff-check
6
+ args: [--fix]
7
+ - id: ruff-format
8
+
9
+ - repo: https://github.com/pre-commit/pre-commit-hooks
10
+ rev: v6.0.0
11
+ hooks:
12
+ - id: trailing-whitespace
13
+ args: [--markdown-linebreak-ext=md]
14
+ - id: end-of-file-fixer
15
+ - id: check-yaml
16
+ - id: debug-statements
17
+ - id: detect-private-key
@@ -0,0 +1,77 @@
1
+ # Changelog
2
+
3
+ All notable changes to Kolega Code are documented here.
4
+
5
+ This project uses GitHub Releases for detailed generated release notes. This file provides a concise, human-maintained summary of user-visible changes.
6
+
7
+ ## Unreleased
8
+
9
+ ## 0.8.4 - 2026-06-24
10
+
11
+ ### Added
12
+
13
+ - Added minimal GitHub issue templates for bug reports and feature requests.
14
+ - Added project links (homepage, documentation, changelog, security) to package metadata.
15
+ - Added pre-commit configuration and a repository coverage badge.
16
+ - Added Ruff lint/formatting checks and dependency vulnerability auditing to CI.
17
+ - Added coverage reporting and SBOM/provenance attestation to the release workflow.
18
+
19
+ ### Changed
20
+
21
+ - Hardened local state file permissions for settings, sessions, and project permission files.
22
+ - Hardened the release workflow with lockfile-backed installs, version parity checks, and artifact smoke tests.
23
+ - Split and reformatted oversized test modules to keep the suite maintainable.
24
+ - Reduced the Logs and Terminal TUI scrollback caps to 2000 lines for better performance.
25
+ - Updated GitHub Actions to Node 24-compatible versions.
26
+
27
+ ### Fixed
28
+
29
+ - Fixed the chat composer to auto-grow as text wraps across multiple lines.
30
+ - Fixed `ctrl-u` so it clears multiline composer drafts.
31
+ - Fixed composer select-all shortcuts.
32
+ - Fixed prompt-option focus handoff so focus returns from the composer correctly.
33
+ - Fixed chat focus restoration after the app resumes or a turn is cancelled.
34
+ - Fixed runtime output clearing when a planning thread is reset.
35
+ - Optimized planning sidebar markdown rendering to reduce lag.
36
+
37
+ ## 0.8.3 - 2026-06-23
38
+
39
+ ### Fixed
40
+
41
+ - Persisted TUI permission mode across sessions.
42
+ - Updated the `idna` dependency to a patched version.
43
+
44
+ ### Changed
45
+
46
+ - Externalized the TUI stylesheet.
47
+ - Moved tests into the top-level `tests/` directory.
48
+
49
+ ## 0.8.2 - 2026-06-22
50
+
51
+ ### Added
52
+
53
+ - Improved gigacode workflow transcript artifacts.
54
+ - Documented branch and pull request naming guidance.
55
+ - Documented the optional logs sidebar flag.
56
+
57
+ ### Fixed
58
+
59
+ - Fixed long TUI approval prompt layout.
60
+ - Fixed transcript jump-to-bottom locking.
61
+
62
+ ### Changed
63
+
64
+ - Optimized sidebar terminal/log rendering and streaming render updates.
65
+ - Moved TUI session persistence off the event loop.
66
+ - Refactored the CLI TUI package layout and controller mixins.
67
+
68
+ ## 0.8.1 - 2026-06-21
69
+
70
+ ### Added
71
+
72
+ - Added an optional agent iteration cap.
73
+
74
+ ### Changed
75
+
76
+ - Migrated the API-key OpenAI provider to the Responses API.
77
+ - Preserved OpenAI Responses reasoning continuity.
@@ -4,12 +4,25 @@
4
4
 
5
5
  Kolega Code requires Python 3.11 or newer.
6
6
 
7
- Install the CLI and development dependencies with `uv`:
7
+ Install the CLI, development dependencies, and the tracked Git hooks with the setup script:
8
+
9
+ ```bash
10
+ ./scripts/setup-dev.sh
11
+ ```
12
+
13
+ If you prefer to run the steps manually:
8
14
 
9
15
  ```bash
10
16
  uv sync --extra cli --extra dev
17
+ git config core.hooksPath .githooks
18
+ uv run pre-commit install-hooks
19
+ uv run pre-commit run --all-files --show-diff-on-failure
11
20
  ```
12
21
 
22
+ Installing the `pre-commit` Python package is not enough. This repository uses a tracked
23
+ `.githooks/pre-commit` wrapper that runs the exact same all-files command as CI. Run
24
+ `./scripts/setup-dev.sh` or `git config core.hooksPath .githooks` once per clone.
25
+
13
26
  If you prefer `pip`, install the package in editable mode:
14
27
 
15
28
  ```bash
@@ -29,7 +42,34 @@ environment file only when you need those tests, and never commit real secrets:
29
42
  cp .env.example .env
30
43
  ```
31
44
 
32
- ## Tests
45
+ ## Tests and quality checks
46
+
47
+ Verify that Git is configured to use the tracked hooks:
48
+
49
+ ```bash
50
+ ./scripts/check-dev-hooks.sh
51
+ ```
52
+
53
+ Local commits run the same all-files pre-commit command as CI when `core.hooksPath` points
54
+ to `.githooks`:
55
+
56
+ ```bash
57
+ uv run pre-commit run --all-files --show-diff-on-failure
58
+ ```
59
+
60
+ CI runs Ruff through pre-commit. You can also run Ruff directly for one-off linting and
61
+ formatting checks:
62
+
63
+ ```bash
64
+ uv run ruff check .
65
+ uv run ruff format --check .
66
+ ```
67
+
68
+ To apply formatting locally:
69
+
70
+ ```bash
71
+ uv run ruff format .
72
+ ```
33
73
 
34
74
  Run the fast test suite before opening a pull request:
35
75