kolega-code 0.5.1__tar.gz → 0.7.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 (277) hide show
  1. kolega_code-0.7.0/PKG-INFO +223 -0
  2. kolega_code-0.7.0/README.md +150 -0
  3. kolega_code-0.7.0/docs/src/assets/demo.gif +0 -0
  4. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/concepts/tools.md +8 -2
  5. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/configuration/environment-variables.md +28 -0
  6. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/configuration/providers-and-models.mdx +36 -0
  7. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/configuration/settings-and-api-keys.mdx +34 -5
  8. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/index.mdx +3 -2
  9. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/__init__.py +1 -1
  10. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/__init__.py +1 -1
  11. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/baseagent.py +86 -31
  12. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/coder.py +0 -1
  13. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/context.py +7 -2
  14. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/generalagent.py +0 -1
  15. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/orchestration/runtime.py +15 -2
  16. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/llm/test_anthropic_token_counting.py +0 -1
  17. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/llm/test_client.py +7 -1
  18. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/llm/test_openai_token_counting.py +0 -1
  19. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/services/test_file_system.py +15 -0
  20. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/services/test_sandbox_terminal_input.py +12 -0
  21. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/test_agent_tools_inventory.py +3 -1
  22. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/test_base_agent.py +113 -6
  23. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/test_coder_attachments.py +3 -7
  24. kolega_code-0.7.0/kolega_code/agent/tests/test_event_emitter.py +84 -0
  25. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/test_general_agent.py +2 -0
  26. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/test_gigacode_gating.py +2 -0
  27. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/test_permissions.py +1 -1
  28. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/test_planning_agent.py +3 -1
  29. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/test_tools.py +21 -31
  30. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/tool_backend/test_create_file_tool.py +39 -5
  31. kolega_code-0.7.0/kolega_code/agent/tests/tool_backend/test_edit_preview.py +83 -0
  32. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/tool_backend/test_list_directory_tool.py +25 -0
  33. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/tool_backend/test_replace_entire_file_tool.py +16 -0
  34. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/tool_backend/test_replace_lines_tool.py +8 -16
  35. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/tool_backend/test_search_and_replace_tool.py +3 -8
  36. kolega_code-0.7.0/kolega_code/agent/tests/tool_backend/test_web_search_tool.py +366 -0
  37. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/tool_backend/test_workflow_tool.py +52 -2
  38. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tool_backend/agent_tool.py +2 -0
  39. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tool_backend/base_tool.py +35 -6
  40. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tool_backend/create_file_tool.py +16 -10
  41. kolega_code-0.7.0/kolega_code/agent/tool_backend/edit_preview.py +152 -0
  42. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tool_backend/list_directory_tool.py +20 -21
  43. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tool_backend/read_file_tool.py +15 -15
  44. kolega_code-0.7.0/kolega_code/agent/tool_backend/replace_entire_file_tool.py +56 -0
  45. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tool_backend/replace_lines_tool.py +17 -20
  46. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tool_backend/search_and_replace_tool.py +19 -23
  47. kolega_code-0.7.0/kolega_code/agent/tool_backend/search_backends/__init__.py +83 -0
  48. kolega_code-0.7.0/kolega_code/agent/tool_backend/search_backends/base.py +58 -0
  49. kolega_code-0.7.0/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +56 -0
  50. kolega_code-0.7.0/kolega_code/agent/tool_backend/search_backends/errors.py +23 -0
  51. kolega_code-0.7.0/kolega_code/agent/tool_backend/search_backends/firecrawl.py +117 -0
  52. kolega_code-0.7.0/kolega_code/agent/tool_backend/search_backends/models.py +28 -0
  53. kolega_code-0.7.0/kolega_code/agent/tool_backend/search_backends/searxng.py +62 -0
  54. kolega_code-0.7.0/kolega_code/agent/tool_backend/search_backends/tavily.py +70 -0
  55. kolega_code-0.7.0/kolega_code/agent/tool_backend/web_search_tool.py +114 -0
  56. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tool_backend/workflow_tool.py +41 -8
  57. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tools.py +49 -92
  58. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/app.py +910 -63
  59. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/config.py +92 -2
  60. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/provider_registry.py +25 -1
  61. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/session_store.py +3 -0
  62. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/settings.py +61 -5
  63. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/tests/test_app.py +665 -20
  64. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/tests/test_cli_config.py +148 -0
  65. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/tests/test_session_store.py +5 -0
  66. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/tests/test_settings.py +85 -2
  67. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/theme.py +4 -0
  68. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/config.py +72 -2
  69. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/events.py +6 -0
  70. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/llm/providers/anthropic.py +4 -2
  71. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/llm/providers/google.py +11 -1
  72. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/llm/providers/openai.py +4 -2
  73. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/llm/specs.py +1 -1
  74. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/permissions.py +3 -6
  75. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/sandbox/terminal.py +10 -0
  76. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/services/file_system.py +5 -1
  77. {kolega_code-0.5.1 → kolega_code-0.7.0}/pyproject.toml +6 -1
  78. {kolega_code-0.5.1 → kolega_code-0.7.0}/uv.lock +829 -2
  79. kolega_code-0.5.1/PKG-INFO +0 -164
  80. kolega_code-0.5.1/README.md +0 -96
  81. kolega_code-0.5.1/kolega_code/agent/tool_backend/apply_patch_tool.py +0 -514
  82. kolega_code-0.5.1/kolega_code/agent/tool_backend/replace_entire_file_tool.py +0 -40
  83. {kolega_code-0.5.1 → kolega_code-0.7.0}/.env.example +0 -0
  84. {kolega_code-0.5.1 → kolega_code-0.7.0}/.github/workflows/ci.yml +0 -0
  85. {kolega_code-0.5.1 → kolega_code-0.7.0}/.github/workflows/docs.yml +0 -0
  86. {kolega_code-0.5.1 → kolega_code-0.7.0}/.github/workflows/release.yml +0 -0
  87. {kolega_code-0.5.1 → kolega_code-0.7.0}/.gitignore +0 -0
  88. {kolega_code-0.5.1 → kolega_code-0.7.0}/CONTRIBUTING.md +0 -0
  89. {kolega_code-0.5.1 → kolega_code-0.7.0}/LICENSE +0 -0
  90. {kolega_code-0.5.1 → kolega_code-0.7.0}/RELEASING.md +0 -0
  91. {kolega_code-0.5.1 → kolega_code-0.7.0}/SECURITY.md +0 -0
  92. {kolega_code-0.5.1 → kolega_code-0.7.0}/conftest.py +0 -0
  93. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/.gitignore +0 -0
  94. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/README.md +0 -0
  95. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/astro.config.mjs +0 -0
  96. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/package-lock.json +0 -0
  97. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/package.json +0 -0
  98. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/public/favicon.svg +0 -0
  99. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/assets/kolega-dark.svg +0 -0
  100. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/assets/kolega-light.svg +0 -0
  101. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/cli/ask.md +0 -0
  102. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/cli/doctor.md +0 -0
  103. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/cli/overview.md +0 -0
  104. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/cli/sessions.md +0 -0
  105. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/concepts/agents.md +0 -0
  106. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/concepts/how-it-works.md +0 -0
  107. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/getting-started/installation.mdx +0 -0
  108. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/getting-started/quick-start.mdx +0 -0
  109. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/gigacode.mdx +0 -0
  110. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/hooks.md +0 -0
  111. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/skills.mdx +0 -0
  112. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/tui/composer.md +0 -0
  113. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/tui/interface.md +0 -0
  114. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/tui/modes.md +0 -0
  115. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/tui/sessions-and-resume.md +0 -0
  116. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content/docs/tui/slash-commands.md +0 -0
  117. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/content.config.ts +0 -0
  118. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/src/styles/brand.css +0 -0
  119. {kolega_code-0.5.1 → kolega_code-0.7.0}/docs/tsconfig.json +0 -0
  120. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/browseragent.py +0 -0
  121. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/common.py +0 -0
  122. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/compression.py +0 -0
  123. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/conversation.py +0 -0
  124. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/investigationagent.py +0 -0
  125. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/orchestration/__init__.py +0 -0
  126. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/orchestration/budget.py +0 -0
  127. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/orchestration/errors.py +0 -0
  128. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/orchestration/executor.py +0 -0
  129. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/orchestration/guide.py +0 -0
  130. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/orchestration/journal.py +0 -0
  131. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/orchestration/tests/__init__.py +0 -0
  132. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/orchestration/tests/test_orchestration.py +0 -0
  133. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/orchestration/types.py +0 -0
  134. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/planningagent.py +0 -0
  135. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_provider.py +0 -0
  136. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
  137. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
  138. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
  139. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
  140. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/auxiliary/tools/think_hard.system.md +0 -0
  141. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
  142. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
  143. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -0
  144. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +0 -0
  145. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
  146. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +0 -0
  147. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +0 -0
  148. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +0 -0
  149. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
  150. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
  151. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -0
  152. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +0 -0
  153. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -0
  154. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -0
  155. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +0 -0
  156. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +0 -0
  157. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
  158. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/prompts.py +0 -0
  159. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/__init__.py +0 -0
  160. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/llm/__init__.py +0 -0
  161. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/llm/test_billing_openai_cache.py +0 -0
  162. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/llm/test_dashscope_mapping.py +0 -0
  163. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/llm/test_error_boundary.py +0 -0
  164. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/llm/test_exceptions.py +0 -0
  165. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/llm/test_google_thought_signature.py +0 -0
  166. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/llm/test_google_tool_signature_live.py +0 -0
  167. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/llm/test_instrumented_client.py +0 -0
  168. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/llm/test_instrumented_client_integration.py +0 -0
  169. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/llm/test_langfuse_normalization.py +0 -0
  170. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/llm/test_live_providers.py +0 -0
  171. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/llm/test_model_specs.py +0 -0
  172. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/llm/test_openai_cached_tokens.py +0 -0
  173. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/llm/test_openai_cached_tokens_stream.py +0 -0
  174. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/llm/test_openai_message_conversion.py +0 -0
  175. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/llm/test_thinking_effort.py +0 -0
  176. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/llm/test_tool_execution_ids.py +0 -0
  177. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/services/__init__.py +0 -0
  178. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/services/test_browser.py +0 -0
  179. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/services/test_browser_parity.py +0 -0
  180. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/services/test_terminal.py +0 -0
  181. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/services/test_terminal_buffer.py +0 -0
  182. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/services/test_terminal_state_serializer.py +0 -0
  183. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/test_coder_prompt_extensions.py +0 -0
  184. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/test_commands.py +0 -0
  185. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/test_duplicate_tool_results.py +0 -0
  186. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/test_empty_message_handling.py +0 -0
  187. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/test_hooks_integration.py +0 -0
  188. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/test_html.py +0 -0
  189. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/test_parallel_tool_calls.py +0 -0
  190. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/test_prompt_provider.py +0 -0
  191. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/test_prompts.py +0 -0
  192. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/test_tool_registry.py +0 -0
  193. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/tool_backend/__init__.py +0 -0
  194. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/tool_backend/test_agent_tool.py +0 -0
  195. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/tool_backend/test_base_tool.py +0 -0
  196. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/tool_backend/test_browser_tool.py +0 -0
  197. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/tool_backend/test_build_tool.py +0 -0
  198. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/tool_backend/test_glob_tool.py +0 -0
  199. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/tool_backend/test_glob_tool_sandbox_parity.py +0 -0
  200. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/tool_backend/test_read_file_tool.py +0 -0
  201. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/tool_backend/test_search_codebase_tool.py +0 -0
  202. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/tool_backend/test_terminal_tool.py +0 -0
  203. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/tool_backend/test_think_hard_integration.py +0 -0
  204. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/tool_backend/test_think_hard_streaming.py +0 -0
  205. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tests/tool_backend/test_web_fetch_tool.py +0 -0
  206. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tool_backend/browser_tool.py +0 -0
  207. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tool_backend/build_tool.py +0 -0
  208. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tool_backend/glob_tool.py +0 -0
  209. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
  210. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tool_backend/search_codebase_tool.py +0 -0
  211. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
  212. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tool_backend/terminal_tool.py +0 -0
  213. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tool_backend/think_hard_tool.py +0 -0
  214. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/tool_backend/web_fetch_tool.py +0 -0
  215. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/agent/utils/commands.py +0 -0
  216. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/__init__.py +0 -0
  217. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/connection.py +0 -0
  218. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/file_index.py +0 -0
  219. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/main.py +0 -0
  220. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/mentions.py +0 -0
  221. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/messages.py +0 -0
  222. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/skills.py +0 -0
  223. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/slash_commands.py +0 -0
  224. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/tests/__init__.py +0 -0
  225. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/tests/test_connection.py +0 -0
  226. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/tests/test_file_index.py +0 -0
  227. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/tests/test_main.py +0 -0
  228. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/tests/test_mentions.py +0 -0
  229. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/tests/test_skills.py +0 -0
  230. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/tests/test_slash_commands.py +0 -0
  231. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/tests/test_themes.py +0 -0
  232. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/tests/test_updater.py +0 -0
  233. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/cli/updater.py +0 -0
  234. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/hooks/__init__.py +0 -0
  235. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/hooks/backends.py +0 -0
  236. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/hooks/config.py +0 -0
  237. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/hooks/dispatcher.py +0 -0
  238. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/hooks/events.py +0 -0
  239. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/hooks/matcher.py +0 -0
  240. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/hooks/outcome.py +0 -0
  241. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/hooks/tests/__init__.py +0 -0
  242. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/hooks/tests/test_hooks.py +0 -0
  243. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/llm/client.py +0 -0
  244. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/llm/exceptions.py +0 -0
  245. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/llm/instrumented_client.py +0 -0
  246. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/llm/models.py +0 -0
  247. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/llm/providers/__init__.py +0 -0
  248. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/llm/providers/base.py +0 -0
  249. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/llm/providers/models.py +0 -0
  250. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/llm/ratelimit.py +0 -0
  251. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/llm/tool_execution_ids.py +0 -0
  252. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/models/__init__.py +0 -0
  253. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/models/sandbox_terminal_state.py +0 -0
  254. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/runtime.py +0 -0
  255. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/sandbox/README.md +0 -0
  256. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/sandbox/__init__.py +0 -0
  257. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/sandbox/async_filesystem.py +0 -0
  258. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/sandbox/base.py +0 -0
  259. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/sandbox/browser.py +0 -0
  260. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/sandbox/event_loop.py +0 -0
  261. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/sandbox/filesystem.py +0 -0
  262. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/sandbox/local.py +0 -0
  263. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/sandbox/serializer.py +0 -0
  264. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/sandbox/utils.py +0 -0
  265. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/services/base.py +0 -0
  266. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/services/browser.py +0 -0
  267. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/services/html.py +0 -0
  268. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/services/terminal.py +0 -0
  269. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/services/terminal_buffer.py +0 -0
  270. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/tools/__init__.py +0 -0
  271. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/tools/core.py +0 -0
  272. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/tools/definitions.py +0 -0
  273. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/tools/registry.py +0 -0
  274. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/tools/tests/__init__.py +0 -0
  275. {kolega_code-0.5.1 → kolega_code-0.7.0}/kolega_code/tools/tests/test_definitions.py +0 -0
  276. {kolega_code-0.5.1 → kolega_code-0.7.0}/run_tests.sh +0 -0
  277. {kolega_code-0.5.1 → kolega_code-0.7.0}/scripts/install-kolega-code.sh +0 -0
@@ -0,0 +1,223 @@
1
+ Metadata-Version: 2.4
2
+ Name: kolega-code
3
+ Version: 0.7.0
4
+ Summary: Local-first AI coding agent for the terminal
5
+ Project-URL: Homepage, https://kolega-ai.github.io/kolega-code/
6
+ Project-URL: Documentation, https://kolega-ai.github.io/kolega-code/
7
+ Project-URL: Repository, https://github.com/kolega-ai/kolega-code
8
+ Project-URL: Issues, https://github.com/kolega-ai/kolega-code/issues
9
+ Author: Kolega Team
10
+ License: MIT License
11
+
12
+ Copyright (c) 2026 Kolega Team
13
+
14
+ Permission is hereby granted, free of charge, to any person obtaining a copy
15
+ of this software and associated documentation files (the "Software"), to deal
16
+ in the Software without restriction, including without limitation the rights
17
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
18
+ copies of the Software, and to permit persons to whom the Software is
19
+ furnished to do so, subject to the following conditions:
20
+
21
+ The above copyright notice and this permission notice shall be included in all
22
+ copies or substantial portions of the Software.
23
+
24
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
25
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
26
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
27
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
28
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
29
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30
+ SOFTWARE.
31
+ License-File: LICENSE
32
+ Keywords: agent,ai,cli,coding-agent,developer-tools
33
+ Classifier: Development Status :: 3 - Alpha
34
+ Classifier: Environment :: Console
35
+ Classifier: License :: OSI Approved :: MIT License
36
+ Classifier: Operating System :: MacOS
37
+ Classifier: Operating System :: POSIX :: Linux
38
+ Classifier: Programming Language :: Python :: 3
39
+ Classifier: Programming Language :: Python :: 3.11
40
+ Classifier: Programming Language :: Python :: 3.12
41
+ Classifier: Topic :: Software Development
42
+ Classifier: Topic :: Utilities
43
+ Requires-Python: >=3.11
44
+ Requires-Dist: anthropic==0.101.0
45
+ Requires-Dist: beautifulsoup4==4.14.3
46
+ Requires-Dist: ddgs==9.14.4
47
+ Requires-Dist: firecrawl-py==4.28.2
48
+ Requires-Dist: google-genai==2.0.1
49
+ Requires-Dist: httpx==0.28.1
50
+ Requires-Dist: jinja2==3.1.6
51
+ Requires-Dist: langfuse==3.14.5
52
+ Requires-Dist: lxml-html-clean==0.4.4
53
+ Requires-Dist: nest-asyncio==1.6.0
54
+ Requires-Dist: openai==1.109.1
55
+ Requires-Dist: packaging==25.0
56
+ Requires-Dist: pathspec==1.1.1
57
+ Requires-Dist: playwright==1.59.0
58
+ Requires-Dist: psutil==7.2.2
59
+ Requires-Dist: pydantic==2.13.4
60
+ Requires-Dist: python-dotenv==1.2.2
61
+ Requires-Dist: pyyaml==6.0.3
62
+ Requires-Dist: tavily-python==0.7.26
63
+ Requires-Dist: tenacity==9.1.4
64
+ Requires-Dist: textual==8.2.5
65
+ Requires-Dist: tiktoken==0.12.0
66
+ Requires-Dist: trafilatura==2.0.0
67
+ Provides-Extra: cli
68
+ Provides-Extra: dev
69
+ Requires-Dist: pytest-asyncio==1.3.0; extra == 'dev'
70
+ Requires-Dist: pytest==9.0.3; extra == 'dev'
71
+ Requires-Dist: ruff==0.15.12; extra == 'dev'
72
+ Description-Content-Type: text/markdown
73
+
74
+ # Kolega Code
75
+
76
+ **An AI coding agent that runs in your terminal — local-first, model-agnostic, plan-then-build.**
77
+
78
+ [![PyPI version](https://img.shields.io/pypi/v/kolega-code)](https://pypi.org/project/kolega-code/)
79
+ [![Python versions](https://img.shields.io/pypi/pyversions/kolega-code)](https://pypi.org/project/kolega-code/)
80
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
81
+ [![CI](https://github.com/kolega-ai/kolega-code/actions/workflows/ci.yml/badge.svg)](https://github.com/kolega-ai/kolega-code/actions/workflows/ci.yml)
82
+ [![Docs](https://img.shields.io/badge/docs-kolega--ai.github.io-blue)](https://kolega-ai.github.io/kolega-code/)
83
+
84
+ Point Kolega Code at a project directory and it opens an interactive UI where you talk to an
85
+ agent that can read and edit your code, run shell commands, search the codebase, browse the
86
+ web, and dispatch specialized sub-agents to get work done.
87
+
88
+ It's **local-first**: the agent operates on your actual filesystem and terminal, and your
89
+ sessions, settings, and API keys stay on your own machine.
90
+
91
+ ![Kolega Code in action](docs/src/assets/demo.gif)
92
+
93
+ ## Why Kolega Code
94
+
95
+ - **Plans before it builds.** A read-only **Plan mode** produces a reviewable plan and a
96
+ shared task list before anything changes; **Build mode** implements it. Toggle with `Shift+Tab`.
97
+ - **Orchestrates many agents.** For larger jobs, the main agent dispatches specialized
98
+ sub-agents (investigation, browser, coding, general) and can fan them out in parallel for
99
+ broad audits, large migrations, or implementing a plan's independent parts at once.
100
+ - **Local-first by design.** It works on your real files and terminal; sessions, settings,
101
+ and credentials live on your machine, not in someone else's cloud.
102
+ - **Bring your own model.** Talks to a range of providers and lets you assign different models
103
+ to different roles.
104
+
105
+ ## What it does
106
+
107
+ - **Reads and edits your code.** Opens files, searches across the codebase, creates new files,
108
+ and applies precise edits.
109
+ - **Runs commands.** Executes shell commands and watches their output in a dedicated terminal view.
110
+ - **Plans before it builds.** Plan mode investigates and proposes; Build mode executes.
111
+ - **Searches and browses the web.** The agent can search for relevant pages, fetch URLs
112
+ directly, or use the built-in browser agent (powered by Playwright) when a task needs
113
+ site interaction.
114
+ - **Dispatches sub-agents.** Hands work off to specialized agents and tracks their activity live.
115
+ - **Orchestrates workflows.** With [gigacode](https://kolega-ai.github.io/kolega-code/gigacode/),
116
+ it fans out many sub-agents in parallel.
117
+ - **Works non-interactively too.** Run a single prompt with `kolega-code ask`, get JSON output,
118
+ and save or resume sessions.
119
+
120
+ ## Quick start
121
+
122
+ **1. Install** with the script:
123
+
124
+ ```bash
125
+ curl -fsSL https://kolega.dev/install-kolega-code.sh | sh
126
+ ```
127
+
128
+ Or with [uv](https://docs.astral.sh/uv/) (or `pip`):
129
+
130
+ ```bash
131
+ uv tool install kolega-code
132
+ # or: pip install kolega-code
133
+ ```
134
+
135
+ Verify the install:
136
+
137
+ ```bash
138
+ kolega-code --version
139
+ ```
140
+
141
+ **2. Start a session** in your project:
142
+
143
+ ```bash
144
+ kolega-code .
145
+ ```
146
+
147
+ **3. Add a provider key.** Open the **Settings** tab to pick a provider and model and save your
148
+ API key. Then press `Shift+Tab` anytime to switch between **Plan** and **Build** mode.
149
+
150
+ Resume a previous conversation:
151
+
152
+ ```bash
153
+ kolega-code . --resume # latest session
154
+ kolega-code . --resume <id> # a specific thread or session
155
+ ```
156
+
157
+ ## Two ways to use it
158
+
159
+ | Mode | Command | Best for |
160
+ | --- | --- | --- |
161
+ | **Interactive TUI** | `kolega-code .` | Day-to-day development, exploration, pair-programming |
162
+ | **One-shot** | `kolega-code ask "…"` | Scripting, automation, quick questions, CI |
163
+
164
+ There are also helper commands for managing sessions and checking your setup:
165
+
166
+ ```bash
167
+ kolega-code ask "summarize this repository" --project .
168
+ kolega-code sessions list --project .
169
+ kolega-code doctor --project .
170
+ ```
171
+
172
+ ## Bring your own model
173
+
174
+ Kolega Code talks to a range of LLM providers — including Anthropic, OpenAI, Google, Moonshot,
175
+ and DeepSeek — and lets you assign **different models to different roles**: a strong
176
+ long-context model for coding, a fast cheap model for small utility calls, and one for extended
177
+ "thinking". See [Providers & Models](https://kolega-ai.github.io/kolega-code/configuration/providers-and-models/).
178
+
179
+ ## Configuration
180
+
181
+ Set your provider, model, and API keys from the **Settings** tab in the UI, or via environment
182
+ variables and flags for non-interactive use:
183
+
184
+ ```bash
185
+ export KOLEGA_CODE_PROVIDER=deepseek
186
+ export DEEPSEEK_API_KEY=...
187
+ kolega-code ask "summarize this repository" --project . --provider deepseek --model deepseek-v4-pro
188
+ ```
189
+
190
+ API key variables only provide credentials — pick a provider/model explicitly or save one in
191
+ Settings. Local session state lives under your platform's state directory unless
192
+ `KOLEGA_CODE_STATE_DIR` is set. See the
193
+ [Configuration docs](https://kolega-ai.github.io/kolega-code/configuration/settings-and-api-keys/)
194
+ for the full story.
195
+
196
+ The `web_search` tool uses DuckDuckGo by default without a key. To choose another backend,
197
+ set it in **Settings** or export `KOLEGA_CODE_WEB_SEARCH_BACKEND` as `firecrawl`, `tavily`,
198
+ or `searxng`; use `FIRECRAWL_API_KEY`, `TAVILY_API_KEY`, or `SEARXNG_BASE_URL` as needed.
199
+
200
+ ## Requirements
201
+
202
+ - **Python 3.11+**
203
+ - An **API key** for at least one supported provider
204
+ - A terminal that supports a modern TUI (most do)
205
+
206
+ ## Documentation
207
+
208
+ Full documentation lives at **[kolega-ai.github.io/kolega-code](https://kolega-ai.github.io/kolega-code/)**:
209
+
210
+ - [Quick Start](https://kolega-ai.github.io/kolega-code/getting-started/quick-start/)
211
+ - [CLI overview](https://kolega-ai.github.io/kolega-code/cli/overview/)
212
+ - [How it works & concepts](https://kolega-ai.github.io/kolega-code/concepts/how-it-works/)
213
+ - [Configuration](https://kolega-ai.github.io/kolega-code/configuration/settings-and-api-keys/)
214
+
215
+ ## Contributing
216
+
217
+ Contributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for local setup, running the
218
+ test suite, and building the docs site. Please report security issues privately per
219
+ [SECURITY.md](SECURITY.md).
220
+
221
+ ## License
222
+
223
+ Released under the [MIT License](LICENSE).
@@ -0,0 +1,150 @@
1
+ # Kolega Code
2
+
3
+ **An AI coding agent that runs in your terminal — local-first, model-agnostic, plan-then-build.**
4
+
5
+ [![PyPI version](https://img.shields.io/pypi/v/kolega-code)](https://pypi.org/project/kolega-code/)
6
+ [![Python versions](https://img.shields.io/pypi/pyversions/kolega-code)](https://pypi.org/project/kolega-code/)
7
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
8
+ [![CI](https://github.com/kolega-ai/kolega-code/actions/workflows/ci.yml/badge.svg)](https://github.com/kolega-ai/kolega-code/actions/workflows/ci.yml)
9
+ [![Docs](https://img.shields.io/badge/docs-kolega--ai.github.io-blue)](https://kolega-ai.github.io/kolega-code/)
10
+
11
+ Point Kolega Code at a project directory and it opens an interactive UI where you talk to an
12
+ agent that can read and edit your code, run shell commands, search the codebase, browse the
13
+ web, and dispatch specialized sub-agents to get work done.
14
+
15
+ It's **local-first**: the agent operates on your actual filesystem and terminal, and your
16
+ sessions, settings, and API keys stay on your own machine.
17
+
18
+ ![Kolega Code in action](docs/src/assets/demo.gif)
19
+
20
+ ## Why Kolega Code
21
+
22
+ - **Plans before it builds.** A read-only **Plan mode** produces a reviewable plan and a
23
+ shared task list before anything changes; **Build mode** implements it. Toggle with `Shift+Tab`.
24
+ - **Orchestrates many agents.** For larger jobs, the main agent dispatches specialized
25
+ sub-agents (investigation, browser, coding, general) and can fan them out in parallel for
26
+ broad audits, large migrations, or implementing a plan's independent parts at once.
27
+ - **Local-first by design.** It works on your real files and terminal; sessions, settings,
28
+ and credentials live on your machine, not in someone else's cloud.
29
+ - **Bring your own model.** Talks to a range of providers and lets you assign different models
30
+ to different roles.
31
+
32
+ ## What it does
33
+
34
+ - **Reads and edits your code.** Opens files, searches across the codebase, creates new files,
35
+ and applies precise edits.
36
+ - **Runs commands.** Executes shell commands and watches their output in a dedicated terminal view.
37
+ - **Plans before it builds.** Plan mode investigates and proposes; Build mode executes.
38
+ - **Searches and browses the web.** The agent can search for relevant pages, fetch URLs
39
+ directly, or use the built-in browser agent (powered by Playwright) when a task needs
40
+ site interaction.
41
+ - **Dispatches sub-agents.** Hands work off to specialized agents and tracks their activity live.
42
+ - **Orchestrates workflows.** With [gigacode](https://kolega-ai.github.io/kolega-code/gigacode/),
43
+ it fans out many sub-agents in parallel.
44
+ - **Works non-interactively too.** Run a single prompt with `kolega-code ask`, get JSON output,
45
+ and save or resume sessions.
46
+
47
+ ## Quick start
48
+
49
+ **1. Install** with the script:
50
+
51
+ ```bash
52
+ curl -fsSL https://kolega.dev/install-kolega-code.sh | sh
53
+ ```
54
+
55
+ Or with [uv](https://docs.astral.sh/uv/) (or `pip`):
56
+
57
+ ```bash
58
+ uv tool install kolega-code
59
+ # or: pip install kolega-code
60
+ ```
61
+
62
+ Verify the install:
63
+
64
+ ```bash
65
+ kolega-code --version
66
+ ```
67
+
68
+ **2. Start a session** in your project:
69
+
70
+ ```bash
71
+ kolega-code .
72
+ ```
73
+
74
+ **3. Add a provider key.** Open the **Settings** tab to pick a provider and model and save your
75
+ API key. Then press `Shift+Tab` anytime to switch between **Plan** and **Build** mode.
76
+
77
+ Resume a previous conversation:
78
+
79
+ ```bash
80
+ kolega-code . --resume # latest session
81
+ kolega-code . --resume <id> # a specific thread or session
82
+ ```
83
+
84
+ ## Two ways to use it
85
+
86
+ | Mode | Command | Best for |
87
+ | --- | --- | --- |
88
+ | **Interactive TUI** | `kolega-code .` | Day-to-day development, exploration, pair-programming |
89
+ | **One-shot** | `kolega-code ask "…"` | Scripting, automation, quick questions, CI |
90
+
91
+ There are also helper commands for managing sessions and checking your setup:
92
+
93
+ ```bash
94
+ kolega-code ask "summarize this repository" --project .
95
+ kolega-code sessions list --project .
96
+ kolega-code doctor --project .
97
+ ```
98
+
99
+ ## Bring your own model
100
+
101
+ Kolega Code talks to a range of LLM providers — including Anthropic, OpenAI, Google, Moonshot,
102
+ and DeepSeek — and lets you assign **different models to different roles**: a strong
103
+ long-context model for coding, a fast cheap model for small utility calls, and one for extended
104
+ "thinking". See [Providers & Models](https://kolega-ai.github.io/kolega-code/configuration/providers-and-models/).
105
+
106
+ ## Configuration
107
+
108
+ Set your provider, model, and API keys from the **Settings** tab in the UI, or via environment
109
+ variables and flags for non-interactive use:
110
+
111
+ ```bash
112
+ export KOLEGA_CODE_PROVIDER=deepseek
113
+ export DEEPSEEK_API_KEY=...
114
+ kolega-code ask "summarize this repository" --project . --provider deepseek --model deepseek-v4-pro
115
+ ```
116
+
117
+ API key variables only provide credentials — pick a provider/model explicitly or save one in
118
+ Settings. Local session state lives under your platform's state directory unless
119
+ `KOLEGA_CODE_STATE_DIR` is set. See the
120
+ [Configuration docs](https://kolega-ai.github.io/kolega-code/configuration/settings-and-api-keys/)
121
+ for the full story.
122
+
123
+ The `web_search` tool uses DuckDuckGo by default without a key. To choose another backend,
124
+ set it in **Settings** or export `KOLEGA_CODE_WEB_SEARCH_BACKEND` as `firecrawl`, `tavily`,
125
+ or `searxng`; use `FIRECRAWL_API_KEY`, `TAVILY_API_KEY`, or `SEARXNG_BASE_URL` as needed.
126
+
127
+ ## Requirements
128
+
129
+ - **Python 3.11+**
130
+ - An **API key** for at least one supported provider
131
+ - A terminal that supports a modern TUI (most do)
132
+
133
+ ## Documentation
134
+
135
+ Full documentation lives at **[kolega-ai.github.io/kolega-code](https://kolega-ai.github.io/kolega-code/)**:
136
+
137
+ - [Quick Start](https://kolega-ai.github.io/kolega-code/getting-started/quick-start/)
138
+ - [CLI overview](https://kolega-ai.github.io/kolega-code/cli/overview/)
139
+ - [How it works & concepts](https://kolega-ai.github.io/kolega-code/concepts/how-it-works/)
140
+ - [Configuration](https://kolega-ai.github.io/kolega-code/configuration/settings-and-api-keys/)
141
+
142
+ ## Contributing
143
+
144
+ Contributions are welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for local setup, running the
145
+ test suite, and building the docs site. Please report security issues privately per
146
+ [SECURITY.md](SECURITY.md).
147
+
148
+ ## License
149
+
150
+ Released under the [MIT License](LICENSE).
@@ -38,8 +38,14 @@ the [TUI](../../cli/overview/) or [`ask`](../../cli/ask/).
38
38
 
39
39
  ### Web
40
40
 
41
+ - `web_search` — search the web for relevant pages and return ranked results.
41
42
  - `web_fetch` — fetch and parse a web page without a full browser.
42
43
 
44
+ Use `web_search` when you do not already know the right URL, then follow up with
45
+ `web_fetch` to read a result in depth. The default backend is keyless DuckDuckGo;
46
+ Firecrawl, Tavily, and self-hosted SearXNG can be selected in Settings or with
47
+ environment variables.
48
+
43
49
  ### Reasoning & memory
44
50
 
45
51
  - `think_hard` — an extended-reasoning step that uses the
@@ -57,8 +63,8 @@ and `dispatch_general_agent`.
57
63
  Tools are gated by mode. In a read-only context — like [Plan mode](../../tui/modes/)
58
64
  or an investigation sub-agent — only non-mutating tools are available
59
65
  (`list_directory`, `read_entire_file`, `read_file_section`, `search_codebase`,
60
- `find_files_by_pattern`, `web_fetch`, `think_hard`, and reading memory). Editing
61
- files and running commands require Build mode's full toolset.
66
+ `find_files_by_pattern`, `web_search`, `web_fetch`, `think_hard`, and reading
67
+ memory). Editing files and running commands require Build mode's full toolset.
62
68
 
63
69
  This separation is what makes Plan mode safe to run against any codebase: the
64
70
  planning agent can look but not touch.
@@ -67,6 +67,19 @@ provider's default model, or set both provider and model.
67
67
 
68
68
  See [Providers & Models](../providers-and-models/) for what each role does.
69
69
 
70
+ ## Per-agent models
71
+
72
+ Give an individual agent its own model. `<ROLE>` is one of `PLANNING`, `BUILDING`,
73
+ `INVESTIGATION`, `GENERAL`, or `BROWSER`. A role with no override inherits the main
74
+ model. These also override anything saved in the Settings tab's **Agent Models**
75
+ section.
76
+
77
+ | Variable | Purpose |
78
+ | --- | --- |
79
+ | `KOLEGA_CODE_<ROLE>_PROVIDER` | Provider for that agent (e.g. `KOLEGA_CODE_INVESTIGATION_PROVIDER`) |
80
+ | `KOLEGA_CODE_<ROLE>_MODEL` | Model for that agent |
81
+ | `KOLEGA_CODE_<ROLE>_EFFORT` | Thinking effort for that agent |
82
+
70
83
  ## State & environment
71
84
 
72
85
  | Variable | Purpose |
@@ -74,6 +87,18 @@ See [Providers & Models](../providers-and-models/) for what each role does.
74
87
  | `KOLEGA_CODE_STATE_DIR` | Override where settings and sessions are stored |
75
88
  | `KOLEGA_CODE_ENVIRONMENT` | Environment label attached to tracing/metadata (default `development`) |
76
89
 
90
+ ## Web search
91
+
92
+ The `web_search` tool defaults to the keyless DuckDuckGo backend. Set a backend
93
+ explicitly when you want a cloud provider or a self-hosted SearXNG instance.
94
+
95
+ | Variable | Purpose |
96
+ | --- | --- |
97
+ | `KOLEGA_CODE_WEB_SEARCH_BACKEND` | Backend for `web_search`: `duckduckgo`, `firecrawl`, `tavily`, or `searxng` |
98
+ | `FIRECRAWL_API_KEY` | Optional Firecrawl key for higher rate limits |
99
+ | `TAVILY_API_KEY` | Tavily API key |
100
+ | `SEARXNG_BASE_URL` | Base URL for a self-hosted SearXNG instance |
101
+
77
102
  ## Telemetry (Langfuse)
78
103
 
79
104
  Optional [Langfuse](https://langfuse.com/) tracing of LLM usage.
@@ -100,6 +125,9 @@ KOLEGA_CODE_PROVIDER=moonshot
100
125
  KOLEGA_CODE_MODEL=kimi-k2.7-code
101
126
  KOLEGA_CODE_THINKING_EFFORT=auto
102
127
 
128
+ # Optional: web search
129
+ KOLEGA_CODE_WEB_SEARCH_BACKEND=duckduckgo
130
+
103
131
  # Optional: Langfuse tracing
104
132
  LANGFUSE_HOST=https://us.cloud.langfuse.com
105
133
  LANGFUSE_PUBLIC_KEY=
@@ -102,6 +102,42 @@ kolega-code . \
102
102
  Or with environment variables — see
103
103
  [Environment Variables](../environment-variables/) for the complete list.
104
104
 
105
+ ## Per-agent models
106
+
107
+ The three slots above describe *operational* roles (main, fast, thinking). Separately,
108
+ you can give each **agent** its own model, so a cheap, fast model handles
109
+ investigation while a stronger model does the building. This applies to top-level
110
+ agents and to the sub-agents they dispatch.
111
+
112
+ | Agent role | Key | Runs |
113
+ | --- | --- | --- |
114
+ | **Planning** | `planning` | The plan-mode agent |
115
+ | **Building** | `building` | The main coder agent |
116
+ | **Investigation** | `investigation` | Read-only research/exploration sub-agents |
117
+ | **General** | `general` | General-purpose sub-agents |
118
+ | **Browser** | `browser` | Browser/web sub-agents |
119
+
120
+ Each role **inherits the active (long-context) model** unless you give it an override —
121
+ so with nothing configured, behavior is unchanged.
122
+
123
+ In the **Settings tab**, the **Agent Models** section (below the main Model section)
124
+ has a provider/model/effort group per role. Leave a role on **Default** to inherit;
125
+ pick a provider, model, and thinking effort to override it.
126
+
127
+ Or use environment variables, named `KOLEGA_CODE_<ROLE>_PROVIDER` / `_MODEL` / `_EFFORT`:
128
+
129
+ ```bash
130
+ # Use a fast model for investigation; everything else uses the active model.
131
+ export KOLEGA_CODE_INVESTIGATION_PROVIDER=deepseek
132
+ export KOLEGA_CODE_INVESTIGATION_MODEL=deepseek-v4-flash
133
+ export KOLEGA_CODE_INVESTIGATION_EFFORT=high
134
+ ```
135
+
136
+ Resolution order for a role (first match wins): **env var → saved Settings → the
137
+ active model**. Each override's provider must have an API key, exactly like the main
138
+ roles. (Inside a `run_workflow` script, an explicit `model=`/`effort=` on an `agent()`
139
+ call still takes precedence over these per-role defaults.)
140
+
105
141
  ## Thinking effort
106
142
 
107
143
  Thinking effort is model-specific. Kolega Code validates the selected value
@@ -21,12 +21,24 @@ the TUI:
21
21
 
22
22
  When you switch models, the thinking effort resets to the new model's default.
23
23
 
24
- A saved selection is used for **all** agent model roles. Existing environment
24
+ A saved selection is the default for **all** agent model roles. Existing environment
25
25
  variables and `--provider` / `--model` flags continue to override it — see
26
26
  [Providers & Models](../providers-and-models/) for resolution order.
27
27
  API key environment variables are credentials only; they do not choose the active
28
28
  provider or model.
29
29
 
30
+ The **Agent Models** section beneath the main Model section lets you give individual
31
+ agents (planning, building, investigation, general, browser) their own provider,
32
+ model, and effort. Leave a role on **Default** to inherit the active model. See
33
+ [Per-agent models](../providers-and-models/#per-agent-models).
34
+
35
+ The **Web Search** section configures the `web_search` tool. DuckDuckGo is the
36
+ default and needs no key. Firecrawl can also run without a key, with an optional
37
+ key for higher rate limits. Tavily requires a key, and SearXNG requires the base
38
+ URL of your self-hosted instance. The same settings can be supplied with
39
+ [`KOLEGA_CODE_WEB_SEARCH_BACKEND`, `FIRECRAWL_API_KEY`, `TAVILY_API_KEY`, and
40
+ `SEARXNG_BASE_URL`](../environment-variables/#web-search).
41
+
30
42
  ## Where settings live
31
43
 
32
44
  Settings are stored as JSON in your platform's state directory, in a file named
@@ -45,16 +57,33 @@ The file looks like this:
45
57
 
46
58
  ```json
47
59
  {
48
- "schema_version": 2,
60
+ "schema_version": 3,
49
61
  "active_provider": "moonshot",
50
62
  "active_model": "kimi-k2.7-code",
51
63
  "active_thinking_effort": "auto",
52
64
  "api_keys": {
53
- "moonshot": "sk-..."
54
- }
65
+ "moonshot": "sk-...",
66
+ "deepseek": "sk-...",
67
+ "tavily": "tvly-..."
68
+ },
69
+ "agent_models": {
70
+ "investigation": {
71
+ "provider": "deepseek",
72
+ "model": "deepseek-v4-flash",
73
+ "thinking_effort": "high"
74
+ }
75
+ },
76
+ "web_search_backend": "tavily",
77
+ "web_search_base_url": null
55
78
  }
56
79
  ```
57
80
 
81
+ `agent_models` holds per-agent overrides keyed by role (`planning`, `building`,
82
+ `investigation`, `general`, `browser`); a role that is absent inherits the active
83
+ model. The field is optional and older `schema_version` files load unchanged.
84
+ Cloud web-search keys are stored in `api_keys` under their backend names
85
+ (`firecrawl` or `tavily`); `web_search_base_url` is used by SearXNG.
86
+
58
87
  <Aside type="caution" title="Keys are stored in plaintext">
59
88
  API keys are written to `settings.json` in plaintext, but the file is created with
60
89
  `0600` permissions (readable and writable only by your user). If you'd rather not
@@ -66,7 +95,7 @@ store keys on disk at all, supply them via
66
95
 
67
96
  <FileTree>
68
97
  - kolega-code/
69
- - settings.json Provider, model, thinking effort, and API keys (0600)
98
+ - settings.json Provider, model, web search, thinking effort, and API keys (0600)
70
99
  - sessions/
71
100
  - &lt;session-id&gt;.json One file per saved session
72
101
  </FileTree>
@@ -19,8 +19,9 @@ and your sessions, settings, and API keys are stored on your own machine.
19
19
  dedicated terminal view in the UI.
20
20
  - **Plans before it builds.** A read-only **Plan mode** produces a reviewable plan
21
21
  and a shared task list; **Build mode** implements it.
22
- - **Browses the web.** A built-in browser agent (powered by Playwright) can fetch
23
- pages and interact with sites when a task needs it.
22
+ - **Searches and browses the web.** The agent can search for relevant pages,
23
+ fetch URLs directly, or use the built-in browser agent (powered by Playwright)
24
+ when a task needs site interaction.
24
25
  - **Dispatches sub-agents.** For larger tasks, the main agent can hand off to
25
26
  specialized agents (investigation, browser, coding, general) and track their
26
27
  activity live.
@@ -148,4 +148,4 @@ __all__ = [
148
148
  "parse_git_status_output",
149
149
  ]
150
150
 
151
- __version__ = "0.5.1"
151
+ __version__ = "0.7.0"
@@ -39,4 +39,4 @@ __all__ = [
39
39
  "ToolExtension",
40
40
  ]
41
41
 
42
- __version__ = "0.5.1"
42
+ __version__ = "0.7.0"