kolega-code 0.1.0__tar.gz → 0.3.0__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 (230) hide show
  1. {kolega_code-0.1.0 → kolega_code-0.3.0}/.env.example +4 -0
  2. kolega_code-0.3.0/.github/workflows/ci.yml +46 -0
  3. {kolega_code-0.1.0 → kolega_code-0.3.0}/.github/workflows/docs.yml +10 -3
  4. {kolega_code-0.1.0 → kolega_code-0.3.0}/PKG-INFO +14 -6
  5. {kolega_code-0.1.0 → kolega_code-0.3.0}/README.md +12 -5
  6. {kolega_code-0.1.0 → kolega_code-0.3.0}/RELEASING.md +6 -6
  7. {kolega_code-0.1.0 → kolega_code-0.3.0}/conftest.py +3 -1
  8. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/package-lock.json +107 -564
  9. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/package.json +3 -0
  10. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/content/docs/cli/ask.md +2 -0
  11. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/content/docs/cli/doctor.md +11 -6
  12. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/content/docs/cli/overview.md +4 -4
  13. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/content/docs/concepts/how-it-works.md +3 -3
  14. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/content/docs/configuration/environment-variables.md +17 -5
  15. kolega_code-0.3.0/docs/src/content/docs/configuration/providers-and-models.mdx +129 -0
  16. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/content/docs/configuration/settings-and-api-keys.mdx +11 -5
  17. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/content/docs/getting-started/installation.mdx +11 -4
  18. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/content/docs/getting-started/introduction.md +2 -2
  19. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/content/docs/getting-started/quick-start.mdx +5 -4
  20. kolega_code-0.3.0/docs/src/content/docs/index.mdx +52 -0
  21. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/content/docs/tui/composer.md +1 -0
  22. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/content/docs/tui/interface.md +2 -2
  23. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/content/docs/tui/sessions-and-resume.md +1 -1
  24. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/content/docs/tui/slash-commands.md +10 -1
  25. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/styles/brand.css +58 -23
  26. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/__init__.py +1 -1
  27. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/__init__.py +1 -1
  28. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/baseagent.py +38 -32
  29. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/coder.py +0 -1
  30. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/generalagent.py +0 -1
  31. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/planningagent.py +11 -3
  32. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/prompt_provider.py +17 -0
  33. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/prompt_templates/agents/browser.j2 +18 -3
  34. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/prompt_templates/agents/coder_cli_mode.j2 +13 -3
  35. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/prompt_templates/agents/general.j2 +17 -2
  36. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/prompt_templates/agents/investigation.j2 +18 -3
  37. kolega_code-0.3.0/kolega_code/agent/prompt_templates/common/kolega_md_instructions.md +15 -0
  38. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/prompts.py +0 -38
  39. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/llm/test_anthropic_token_counting.py +0 -1
  40. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/llm/test_client.py +7 -10
  41. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/llm/test_dashscope_mapping.py +4 -4
  42. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/llm/test_error_boundary.py +7 -2
  43. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/llm/test_exceptions.py +50 -21
  44. kolega_code-0.3.0/kolega_code/agent/tests/llm/test_google_thought_signature.py +78 -0
  45. kolega_code-0.3.0/kolega_code/agent/tests/llm/test_google_tool_signature_live.py +110 -0
  46. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/llm/test_instrumented_client_integration.py +20 -23
  47. kolega_code-0.3.0/kolega_code/agent/tests/llm/test_live_providers.py +137 -0
  48. kolega_code-0.3.0/kolega_code/agent/tests/llm/test_model_specs.py +31 -0
  49. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/llm/test_openai_token_counting.py +0 -1
  50. kolega_code-0.3.0/kolega_code/agent/tests/llm/test_thinking_effort.py +146 -0
  51. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/llm/test_tool_execution_ids.py +19 -9
  52. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/test_base_agent.py +98 -1
  53. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/test_coder_attachments.py +0 -1
  54. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/test_coder_prompt_extensions.py +4 -4
  55. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/test_duplicate_tool_results.py +1 -1
  56. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/test_general_agent.py +1 -1
  57. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/test_parallel_tool_calls.py +1 -1
  58. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/test_planning_agent.py +1 -2
  59. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/test_prompt_provider.py +22 -2
  60. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/test_tools.py +138 -15
  61. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/tool_backend/test_agent_tool.py +1 -1
  62. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/tool_backend/test_base_tool.py +1 -1
  63. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/tool_backend/test_create_file_tool.py +1 -1
  64. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/tool_backend/test_glob_tool.py +1 -1
  65. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/tool_backend/test_glob_tool_sandbox_parity.py +1 -1
  66. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/tool_backend/test_read_file_tool.py +1 -1
  67. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/tool_backend/test_replace_entire_file_tool.py +1 -1
  68. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/tool_backend/test_replace_lines_tool.py +1 -1
  69. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/tool_backend/test_search_codebase_tool.py +1 -1
  70. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/tool_backend/test_terminal_tool.py +1 -1
  71. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/tool_backend/test_think_hard_integration.py +2 -3
  72. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/tool_backend/test_think_hard_streaming.py +1 -2
  73. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/tool_backend/test_web_fetch_tool.py +1 -1
  74. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tool_backend/memory_tool.py +17 -15
  75. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tool_backend/think_hard_tool.py +2 -12
  76. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tools.py +19 -57
  77. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/app.py +579 -67
  78. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/config.py +60 -46
  79. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/main.py +75 -12
  80. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/messages.py +17 -4
  81. kolega_code-0.3.0/kolega_code/cli/provider_registry.py +218 -0
  82. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/settings.py +7 -3
  83. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/slash_commands.py +3 -0
  84. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/tests/test_app.py +984 -72
  85. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/tests/test_cli_config.py +86 -25
  86. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/tests/test_main.py +249 -8
  87. kolega_code-0.3.0/kolega_code/cli/tests/test_settings.py +116 -0
  88. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/tests/test_slash_commands.py +3 -0
  89. kolega_code-0.3.0/kolega_code/cli/tests/test_updater.py +87 -0
  90. kolega_code-0.3.0/kolega_code/cli/updater.py +102 -0
  91. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/config.py +14 -12
  92. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/llm/client.py +18 -42
  93. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/llm/exceptions.py +138 -19
  94. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/llm/instrumented_client.py +3 -3
  95. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/llm/models.py +91 -51
  96. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/llm/providers/anthropic.py +18 -17
  97. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/llm/providers/base.py +2 -6
  98. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/llm/providers/google.py +28 -9
  99. kolega_code-0.3.0/kolega_code/llm/providers/models.py +18 -0
  100. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/llm/providers/openai.py +26 -6
  101. kolega_code-0.3.0/kolega_code/llm/specs.py +336 -0
  102. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/tools/__init__.py +7 -1
  103. kolega_code-0.3.0/kolega_code/tools/definitions.py +141 -0
  104. kolega_code-0.3.0/kolega_code/tools/tests/__init__.py +0 -0
  105. kolega_code-0.3.0/kolega_code/tools/tests/test_definitions.py +114 -0
  106. {kolega_code-0.1.0 → kolega_code-0.3.0}/pyproject.toml +2 -1
  107. kolega_code-0.1.0/scripts/install-kolega-code → kolega_code-0.3.0/scripts/install-kolega-code.sh +1 -1
  108. {kolega_code-0.1.0 → kolega_code-0.3.0}/uv.lock +55 -53
  109. kolega_code-0.1.0/docs/src/content/docs/configuration/providers-and-models.mdx +0 -92
  110. kolega_code-0.1.0/docs/src/content/docs/index.mdx +0 -70
  111. kolega_code-0.1.0/kolega_code/agent/prompt_templates/common/kolega_md_instructions.md +0 -14
  112. kolega_code-0.1.0/kolega_code/agent/tests/llm/test_model_specs.py +0 -17
  113. kolega_code-0.1.0/kolega_code/agent/tool_backend/apply_edit_tool.py +0 -98
  114. kolega_code-0.1.0/kolega_code/cli/provider_registry.py +0 -96
  115. kolega_code-0.1.0/kolega_code/cli/tests/test_settings.py +0 -62
  116. kolega_code-0.1.0/kolega_code/llm/providers/models.py +0 -37
  117. kolega_code-0.1.0/kolega_code/llm/specs.py +0 -67
  118. kolega_code-0.1.0/kolega_code/tools/definitions.py +0 -81
  119. {kolega_code-0.1.0 → kolega_code-0.3.0}/.github/workflows/release.yml +0 -0
  120. {kolega_code-0.1.0 → kolega_code-0.3.0}/.gitignore +0 -0
  121. {kolega_code-0.1.0 → kolega_code-0.3.0}/CONTRIBUTING.md +0 -0
  122. {kolega_code-0.1.0 → kolega_code-0.3.0}/LICENSE +0 -0
  123. {kolega_code-0.1.0 → kolega_code-0.3.0}/SECURITY.md +0 -0
  124. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/.gitignore +0 -0
  125. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/README.md +0 -0
  126. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/astro.config.mjs +0 -0
  127. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/public/favicon.svg +0 -0
  128. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/assets/kolega-dark.svg +0 -0
  129. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/assets/kolega-light.svg +0 -0
  130. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/content/docs/cli/sessions.md +0 -0
  131. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/content/docs/concepts/agents.md +0 -0
  132. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/content/docs/concepts/tools.md +0 -0
  133. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/content/docs/skills.mdx +0 -0
  134. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/content/docs/tui/modes.md +0 -0
  135. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/src/content.config.ts +0 -0
  136. {kolega_code-0.1.0 → kolega_code-0.3.0}/docs/tsconfig.json +0 -0
  137. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/browseragent.py +0 -0
  138. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/common.py +0 -0
  139. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/compression.py +0 -0
  140. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/context.py +0 -0
  141. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/conversation.py +0 -0
  142. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/investigationagent.py +0 -0
  143. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/prompt_templates/common/frontend_guidance.md +0 -0
  144. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/prompt_templates/environment_variables/workspace_env_vars.md +0 -0
  145. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/prompt_templates/template_guidance/expo-template.md +0 -0
  146. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/prompt_templates/template_guidance/html-website-template.md +0 -0
  147. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/prompt_templates/template_guidance/mern-stack-template.md +0 -0
  148. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/prompt_templates/template_guidance/react-vite-shadcdn-template.md +0 -0
  149. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/__init__.py +0 -0
  150. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/llm/__init__.py +0 -0
  151. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/llm/test_billing_openai_cache.py +0 -0
  152. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/llm/test_instrumented_client.py +0 -0
  153. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/llm/test_langfuse_normalization.py +0 -0
  154. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/llm/test_openai_cached_tokens.py +0 -0
  155. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/llm/test_openai_cached_tokens_stream.py +0 -0
  156. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/llm/test_openai_message_conversion.py +0 -0
  157. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/services/__init__.py +0 -0
  158. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/services/test_browser.py +0 -0
  159. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/services/test_browser_parity.py +0 -0
  160. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/services/test_file_system.py +0 -0
  161. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/services/test_sandbox_terminal_input.py +0 -0
  162. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/services/test_terminal.py +0 -0
  163. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/services/test_terminal_command_tracking.py +0 -0
  164. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/services/test_terminal_state_serializer.py +0 -0
  165. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/test_agent_tools_inventory.py +0 -0
  166. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/test_commands.py +0 -0
  167. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/test_empty_message_handling.py +0 -0
  168. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/test_html.py +0 -0
  169. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/test_tool_registry.py +0 -0
  170. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/tool_backend/__init__.py +0 -0
  171. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/tool_backend/test_browser_tool.py +0 -0
  172. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/tool_backend/test_build_tool.py +0 -0
  173. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/tool_backend/test_list_directory_tool.py +0 -0
  174. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tests/tool_backend/test_search_and_replace_tool.py +0 -0
  175. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tool_backend/agent_tool.py +0 -0
  176. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tool_backend/apply_patch_tool.py +0 -0
  177. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tool_backend/base_tool.py +0 -0
  178. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tool_backend/browser_tool.py +0 -0
  179. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tool_backend/build_tool.py +0 -0
  180. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tool_backend/create_file_tool.py +0 -0
  181. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tool_backend/glob_tool.py +0 -0
  182. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tool_backend/list_directory_tool.py +0 -0
  183. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tool_backend/read_file_tool.py +0 -0
  184. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tool_backend/replace_entire_file_tool.py +0 -0
  185. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tool_backend/replace_lines_tool.py +0 -0
  186. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tool_backend/search_and_replace_tool.py +0 -0
  187. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tool_backend/search_codebase_tool.py +0 -0
  188. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
  189. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tool_backend/terminal_tool.py +0 -0
  190. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/tool_backend/web_fetch_tool.py +0 -0
  191. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/agent/utils/commands.py +0 -0
  192. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/__init__.py +0 -0
  193. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/connection.py +0 -0
  194. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/file_index.py +0 -0
  195. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/mentions.py +0 -0
  196. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/session_store.py +0 -0
  197. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/skills.py +0 -0
  198. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/tests/__init__.py +0 -0
  199. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/tests/test_connection.py +0 -0
  200. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/tests/test_file_index.py +0 -0
  201. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/tests/test_mentions.py +0 -0
  202. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/tests/test_session_store.py +0 -0
  203. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/tests/test_skills.py +0 -0
  204. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/cli/theme.py +0 -0
  205. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/events.py +0 -0
  206. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/llm/providers/__init__.py +0 -0
  207. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/llm/ratelimit.py +0 -0
  208. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/llm/tool_execution_ids.py +0 -0
  209. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/models/__init__.py +0 -0
  210. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/models/sandbox_terminal_state.py +0 -0
  211. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/runtime.py +0 -0
  212. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/sandbox/README.md +0 -0
  213. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/sandbox/__init__.py +0 -0
  214. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/sandbox/async_filesystem.py +0 -0
  215. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/sandbox/base.py +0 -0
  216. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/sandbox/browser.py +0 -0
  217. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/sandbox/event_loop.py +0 -0
  218. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/sandbox/filesystem.py +0 -0
  219. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/sandbox/local.py +0 -0
  220. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/sandbox/serializer.py +0 -0
  221. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/sandbox/terminal.py +0 -0
  222. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/sandbox/utils.py +0 -0
  223. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/services/base.py +0 -0
  224. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/services/browser.py +0 -0
  225. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/services/file_system.py +0 -0
  226. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/services/html.py +0 -0
  227. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/services/terminal.py +0 -0
  228. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/tools/core.py +0 -0
  229. {kolega_code-0.1.0 → kolega_code-0.3.0}/kolega_code/tools/registry.py +0 -0
  230. {kolega_code-0.1.0 → kolega_code-0.3.0}/run_tests.sh +0 -0
@@ -6,6 +6,10 @@ OPENAI_API_KEY=
6
6
  GOOGLE_API_KEY=
7
7
  MOONSHOT_API_KEY=
8
8
  DEEPSEEK_API_KEY=
9
+ ZAI_API_KEY=
10
+ KIMI_CODING_API_KEY=
11
+
12
+ KOLEGA_CODE_THINKING_EFFORT=
9
13
 
10
14
  BROWSERLESS_API_KEY=
11
15
 
@@ -0,0 +1,46 @@
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@v4
30
+
31
+ - name: Setup Python
32
+ uses: actions/setup-python@v5
33
+ with:
34
+ python-version: ${{ matrix.python-version }}
35
+
36
+ - name: Setup uv
37
+ uses: astral-sh/setup-uv@v5
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 fast tests
46
+ run: uv run pytest -ra --durations=50 --import-mode=importlib -m "not slow"
@@ -6,13 +6,15 @@ on:
6
6
  paths:
7
7
  - "docs/**"
8
8
  - ".github/workflows/docs.yml"
9
+ pull_request:
10
+ branches: [main]
11
+ paths:
12
+ - "docs/**"
13
+ - ".github/workflows/docs.yml"
9
14
  workflow_dispatch:
10
15
 
11
- # Allow this workflow to publish to GitHub Pages.
12
16
  permissions:
13
17
  contents: read
14
- pages: write
15
- id-token: write
16
18
 
17
19
  # Allow one concurrent deployment; don't cancel an in-progress production deploy.
18
20
  concurrency:
@@ -43,13 +45,18 @@ jobs:
43
45
  run: npm run build
44
46
 
45
47
  - name: Upload Pages artifact
48
+ if: github.event_name != 'pull_request'
46
49
  uses: actions/upload-pages-artifact@v3
47
50
  with:
48
51
  path: docs/dist
49
52
 
50
53
  deploy:
54
+ if: github.event_name != 'pull_request'
51
55
  needs: build
52
56
  runs-on: ubuntu-latest
57
+ permissions:
58
+ pages: write
59
+ id-token: write
53
60
  environment:
54
61
  name: github-pages
55
62
  url: ${{ steps.deployment.outputs.page_url }}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kolega-code
3
- Version: 0.1.0
3
+ Version: 0.3.0
4
4
  Summary: Local-first AI coding agent for the terminal
5
5
  Project-URL: Homepage, https://kolega-ai.github.io/kolega-code/
6
6
  Project-URL: Documentation, https://kolega-ai.github.io/kolega-code/
@@ -49,6 +49,7 @@ Requires-Dist: jinja2==3.1.6
49
49
  Requires-Dist: langfuse==3.14.5
50
50
  Requires-Dist: nest-asyncio==1.6.0
51
51
  Requires-Dist: openai==1.109.1
52
+ Requires-Dist: packaging==25.0
52
53
  Requires-Dist: pathspec==1.1.1
53
54
  Requires-Dist: playwright==1.59.0
54
55
  Requires-Dist: psutil==7.2.2
@@ -78,7 +79,7 @@ The package owns the `kolega_code` import namespace and provides the
78
79
  Install with the public installer:
79
80
 
80
81
  ```bash
81
- curl -fsSL https://kolega.dev/install-kolega-code | sh
82
+ curl -fsSL https://kolega.dev/install-kolega-code.sh | sh
82
83
  ```
83
84
 
84
85
  Or install directly from PyPI with uv:
@@ -96,11 +97,14 @@ kolega-code --version
96
97
  Upgrade or uninstall:
97
98
 
98
99
  ```bash
99
- uv tool upgrade kolega-code
100
+ kolega-code update
100
101
  uv tool uninstall kolega-code
101
102
  ```
102
103
 
103
- Run the Textual UI and open the Settings tab to select Moonshot Kimi K2.6 or DeepSeek V4 Pro and save your API key:
104
+ Running the installer again also updates an existing install to the latest
105
+ released version.
106
+
107
+ Run the Textual UI and open the Settings tab to pick any provider and model from the catalog, choose the model's thinking effort, and save your API key:
104
108
 
105
109
  ```bash
106
110
  kolega-code .
@@ -115,16 +119,20 @@ kolega-code . --resume
115
119
  kolega-code . --resume <thread-or-session-id>
116
120
  ```
117
121
 
118
- You can also set `MOONSHOT_API_KEY`, `DEEPSEEK_API_KEY`, or keep using env/flag based configuration for non-UI commands:
122
+ You can also use env/flag based configuration for non-UI commands. API key
123
+ variables provide credentials only; set a provider/model explicitly or save one
124
+ in the Settings UI:
119
125
 
120
126
  ```bash
127
+ export KOLEGA_CODE_PROVIDER=deepseek
128
+ export DEEPSEEK_API_KEY=...
121
129
  kolega-code ask "summarize this repository" --project .
122
130
  kolega-code ask "summarize this repository" --project . --provider deepseek --model deepseek-v4-pro
123
131
  kolega-code sessions list --project .
124
132
  kolega-code doctor --project .
125
133
  ```
126
134
 
127
- The Settings UI supports Moonshot `kimi-k2.6` and DeepSeek `deepseek-v4-pro`. A saved UI selection is used for all agent model roles and API keys are stored in the local CLI settings file with restrictive permissions. Existing environment and model/provider flag overrides continue to work. Local session state is stored under the platform state directory unless `KOLEGA_CODE_STATE_DIR` is set.
135
+ The Settings UI exposes every model in the catalog (`kolega_code/llm/specs.py`) across all supported providers — the provider and model dropdowns are derived from that catalog, so adding a model there makes it selectable in the UI automatically. A saved UI selection is used for all agent model roles, and switching models resets thinking effort to that model's default. API keys are stored in the local CLI settings file with restrictive permissions. Existing environment and model/provider flag overrides continue to work, but API key variables alone never select a provider or model. Local session state is stored under the platform state directory unless `KOLEGA_CODE_STATE_DIR` is set.
128
136
 
129
137
  ## From source
130
138
 
@@ -10,7 +10,7 @@ The package owns the `kolega_code` import namespace and provides the
10
10
  Install with the public installer:
11
11
 
12
12
  ```bash
13
- curl -fsSL https://kolega.dev/install-kolega-code | sh
13
+ curl -fsSL https://kolega.dev/install-kolega-code.sh | sh
14
14
  ```
15
15
 
16
16
  Or install directly from PyPI with uv:
@@ -28,11 +28,14 @@ kolega-code --version
28
28
  Upgrade or uninstall:
29
29
 
30
30
  ```bash
31
- uv tool upgrade kolega-code
31
+ kolega-code update
32
32
  uv tool uninstall kolega-code
33
33
  ```
34
34
 
35
- Run the Textual UI and open the Settings tab to select Moonshot Kimi K2.6 or DeepSeek V4 Pro and save your API key:
35
+ Running the installer again also updates an existing install to the latest
36
+ released version.
37
+
38
+ Run the Textual UI and open the Settings tab to pick any provider and model from the catalog, choose the model's thinking effort, and save your API key:
36
39
 
37
40
  ```bash
38
41
  kolega-code .
@@ -47,16 +50,20 @@ kolega-code . --resume
47
50
  kolega-code . --resume <thread-or-session-id>
48
51
  ```
49
52
 
50
- You can also set `MOONSHOT_API_KEY`, `DEEPSEEK_API_KEY`, or keep using env/flag based configuration for non-UI commands:
53
+ You can also use env/flag based configuration for non-UI commands. API key
54
+ variables provide credentials only; set a provider/model explicitly or save one
55
+ in the Settings UI:
51
56
 
52
57
  ```bash
58
+ export KOLEGA_CODE_PROVIDER=deepseek
59
+ export DEEPSEEK_API_KEY=...
53
60
  kolega-code ask "summarize this repository" --project .
54
61
  kolega-code ask "summarize this repository" --project . --provider deepseek --model deepseek-v4-pro
55
62
  kolega-code sessions list --project .
56
63
  kolega-code doctor --project .
57
64
  ```
58
65
 
59
- The Settings UI supports Moonshot `kimi-k2.6` and DeepSeek `deepseek-v4-pro`. A saved UI selection is used for all agent model roles and API keys are stored in the local CLI settings file with restrictive permissions. Existing environment and model/provider flag overrides continue to work. Local session state is stored under the platform state directory unless `KOLEGA_CODE_STATE_DIR` is set.
66
+ The Settings UI exposes every model in the catalog (`kolega_code/llm/specs.py`) across all supported providers — the provider and model dropdowns are derived from that catalog, so adding a model there makes it selectable in the UI automatically. A saved UI selection is used for all agent model roles, and switching models resets thinking effort to that model's default. API keys are stored in the local CLI settings file with restrictive permissions. Existing environment and model/provider flag overrides continue to work, but API key variables alone never select a provider or model. Local session state is stored under the platform state directory unless `KOLEGA_CODE_STATE_DIR` is set.
60
67
 
61
68
  ## From source
62
69
 
@@ -1,7 +1,7 @@
1
1
  # Releasing Kolega Code
2
2
 
3
3
  This project publishes the `kolega-code` package to PyPI and serves the public
4
- installer from `https://kolega.dev/install-kolega-code`.
4
+ installer from `https://kolega.dev/install-kolega-code.sh`.
5
5
 
6
6
  ## First PyPI release
7
7
 
@@ -29,8 +29,8 @@ the organization request.
29
29
  4. Create and push a matching tag:
30
30
 
31
31
  ```bash
32
- git tag v0.1.0
33
- git push origin v0.1.0
32
+ git tag v0.3.0
33
+ git push origin v0.3.0
34
34
  ```
35
35
 
36
36
  5. Approve the `pypi` environment deployment in GitHub Actions.
@@ -47,19 +47,19 @@ the organization request.
47
47
  The canonical installer source is tracked at:
48
48
 
49
49
  ```text
50
- scripts/install-kolega-code
50
+ scripts/install-kolega-code.sh
51
51
  ```
52
52
 
53
53
  The `kolega.dev` site repo should publish that file verbatim at:
54
54
 
55
55
  ```text
56
- https://kolega.dev/install-kolega-code
56
+ https://kolega.dev/install-kolega-code.sh
57
57
  ```
58
58
 
59
59
  After updating the site, verify:
60
60
 
61
61
  ```bash
62
- curl -fsSL https://kolega.dev/install-kolega-code | sh
62
+ curl -fsSL https://kolega.dev/install-kolega-code.sh | sh
63
63
  ```
64
64
 
65
65
  ## Transfer to the PyPI organization
@@ -17,6 +17,7 @@ CLI_CONFIG_ENV_KEYS = {
17
17
  "KOLEGA_CODE_EDIT_MODEL",
18
18
  "KOLEGA_CODE_THINKING_PROVIDER",
19
19
  "KOLEGA_CODE_THINKING_MODEL",
20
+ "KOLEGA_CODE_THINKING_EFFORT",
20
21
  "KOLEGA_CODE_THINKING_TOKENS",
21
22
  "KOLEGA_CODE_ENVIRONMENT",
22
23
  }
@@ -28,7 +29,8 @@ def pytest_configure() -> None:
28
29
 
29
30
 
30
31
  @pytest.fixture
31
- def isolated_cli_env(monkeypatch: pytest.MonkeyPatch) -> None:
32
+ def isolated_cli_env(monkeypatch: pytest.MonkeyPatch, tmp_path: Path) -> None:
32
33
  """Remove process CLI config so unit tests don't depend on a developer .env."""
33
34
  for key in {*API_KEY_ENV.values(), *CLI_CONFIG_ENV_KEYS}:
34
35
  monkeypatch.delenv(key, raising=False)
36
+ monkeypatch.setenv("KOLEGA_CODE_STATE_DIR", str(tmp_path / "state"))