kolega-code 0.26.3__tar.gz → 0.26.5__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 (359) hide show
  1. {kolega_code-0.26.3 → kolega_code-0.26.5}/CHANGELOG.md +21 -0
  2. {kolega_code-0.26.3 → kolega_code-0.26.5}/PKG-INFO +1 -1
  3. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/__init__.py +1 -1
  4. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/__init__.py +1 -1
  5. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/baseagent.py +1 -0
  6. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/context.py +2 -0
  7. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/terminal_tool.py +1 -0
  8. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/think_hard_tool.py +2 -0
  9. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/web_fetch_tool.py +1 -0
  10. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/client.py +24 -0
  11. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/instrumented_client.py +4 -1
  12. kolega_code-0.26.5/kolega_code/llm/providers/deepseek_responses.py +66 -0
  13. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/providers/responses_common.py +40 -2
  14. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/specs/catalog/deepseek.py +6 -1
  15. {kolega_code-0.26.3 → kolega_code-0.26.5}/pyproject.toml +1 -1
  16. {kolega_code-0.26.3 → kolega_code-0.26.5}/.gitignore +0 -0
  17. {kolega_code-0.26.3 → kolega_code-0.26.5}/CONTRIBUTING.md +0 -0
  18. {kolega_code-0.26.3 → kolega_code-0.26.5}/LICENSE +0 -0
  19. {kolega_code-0.26.3 → kolega_code-0.26.5}/MIGRATION.md +0 -0
  20. {kolega_code-0.26.3 → kolega_code-0.26.5}/README.md +0 -0
  21. {kolega_code-0.26.3 → kolega_code-0.26.5}/RELEASING.md +0 -0
  22. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/LICENSE +0 -0
  23. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/manifest.json +0 -0
  24. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/deep-research/SKILL.md +0 -0
  25. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/deep-research/references/evidence-and-reporting.md +0 -0
  26. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/deep-research/references/gigacode-workflow.md +0 -0
  27. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/deep-research/scripts/deep-research.workflow +0 -0
  28. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/deep-research/scripts/materialize_report.py +0 -0
  29. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/docx/LICENSE +0 -0
  30. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/docx/SKILL.md +0 -0
  31. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/docx/references/examples.md +0 -0
  32. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/docx/references/limitations.md +0 -0
  33. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/docx/references/operations.md +0 -0
  34. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/docx/references/quality.md +0 -0
  35. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/docx/requirements.txt +0 -0
  36. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/docx/scripts/docx_tool.py +0 -0
  37. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/docx/scripts/smoke_test.py +0 -0
  38. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/humanizer/LICENSE +0 -0
  39. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/humanizer/SKILL.md +0 -0
  40. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pdf/LICENSE +0 -0
  41. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pdf/SKILL.md +0 -0
  42. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pdf/references/examples.md +0 -0
  43. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pdf/references/limitations.md +0 -0
  44. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pdf/references/ocr.md +0 -0
  45. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pdf/references/operations.md +0 -0
  46. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pdf/references/quality.md +0 -0
  47. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pdf/references/redaction.md +0 -0
  48. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-paddle.txt +0 -0
  49. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-surya.txt +0 -0
  50. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pdf/requirements.txt +0 -0
  51. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pdf/scripts/pdf_tool.py +0 -0
  52. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pdf/scripts/smoke_test.py +0 -0
  53. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pptx/LICENSE +0 -0
  54. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pptx/SKILL.md +0 -0
  55. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pptx/references/examples.md +0 -0
  56. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pptx/references/limitations.md +0 -0
  57. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pptx/references/operations.md +0 -0
  58. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pptx/requirements.txt +0 -0
  59. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pptx/scripts/pptx_tool.py +0 -0
  60. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/pptx/scripts/smoke_test.py +0 -0
  61. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/review/SKILL.md +0 -0
  62. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/review/references/github-publishing.md +0 -0
  63. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/skill-authoring/SKILL.md +0 -0
  64. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/skill-authoring/references/review-checklist.md +0 -0
  65. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/xlsx/LICENSE +0 -0
  66. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/xlsx/SKILL.md +0 -0
  67. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/xlsx/references/examples.md +0 -0
  68. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/xlsx/references/limitations.md +0 -0
  69. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/xlsx/references/operations.md +0 -0
  70. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/xlsx/references/quality.md +0 -0
  71. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/xlsx/requirements.txt +0 -0
  72. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/xlsx/scripts/smoke_test.py +0 -0
  73. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/_bundled_skills/skills/xlsx/scripts/xlsx_tool.py +0 -0
  74. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/browseragent.py +0 -0
  75. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/coder.py +0 -0
  76. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/common.py +0 -0
  77. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/compression.py +0 -0
  78. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/conversation.py +0 -0
  79. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/custom_agents.py +0 -0
  80. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/edit_protocols.py +0 -0
  81. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/errors.py +0 -0
  82. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/eval/__init__.py +0 -0
  83. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/eval/bridge.py +0 -0
  84. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/eval/bundle-requirements.in +0 -0
  85. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/eval/bundle-requirements.txt +0 -0
  86. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/eval/env.py +0 -0
  87. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/eval/js_kernel.py +0 -0
  88. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/eval/kernel.py +0 -0
  89. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/eval/prelude.js +0 -0
  90. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/eval/prelude.py +0 -0
  91. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/eval/protocol.py +0 -0
  92. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/eval/py_kernel.py +0 -0
  93. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/eval/runner.js +0 -0
  94. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/eval/runner.py +0 -0
  95. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/generalagent.py +0 -0
  96. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/goal.py +0 -0
  97. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/investigationagent.py +0 -0
  98. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/model_routing.py +0 -0
  99. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/orchestration/__init__.py +0 -0
  100. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/orchestration/accounting.py +0 -0
  101. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/orchestration/budget.py +0 -0
  102. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/orchestration/context.py +0 -0
  103. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/orchestration/errors.py +0 -0
  104. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/orchestration/executor.py +0 -0
  105. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/orchestration/guide.py +0 -0
  106. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/orchestration/journal.py +0 -0
  107. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/orchestration/runtime.py +0 -0
  108. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/orchestration/types.py +0 -0
  109. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/planningagent.py +0 -0
  110. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_dump.py +0 -0
  111. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_overrides.py +0 -0
  112. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_provider.py +0 -0
  113. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
  114. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
  115. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
  116. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
  117. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/auxiliary/tools/think_hard.system.md +0 -0
  118. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/extensions/cli/build_questions.md +0 -0
  119. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/extensions/cli/current_plan_artifact.md.j2 +0 -0
  120. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
  121. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/extensions/cli/scratchpad.md.j2 +0 -0
  122. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
  123. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list_readonly.md +0 -0
  124. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/extensions/cli/worktree_control.md.j2 +0 -0
  125. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -0
  126. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +0 -0
  127. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
  128. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +0 -0
  129. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +0 -0
  130. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +0 -0
  131. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
  132. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/system/includes/context_updates.md +0 -0
  133. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
  134. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -0
  135. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +0 -0
  136. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -0
  137. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -0
  138. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +0 -0
  139. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +0 -0
  140. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
  141. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/prompts.py +0 -0
  142. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/agent_tool.py +0 -0
  143. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/base_tool.py +0 -0
  144. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/browser_tool.py +0 -0
  145. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/build_tool.py +0 -0
  146. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/codex_patch.py +0 -0
  147. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
  148. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/edit_tool.py +0 -0
  149. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/eval_tool.py +0 -0
  150. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/glob_tool.py +0 -0
  151. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/hashline_v2.py +0 -0
  152. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/list_directory_tool.py +0 -0
  153. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/lsp_tool.py +0 -0
  154. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
  155. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/read_file_tool.py +0 -0
  156. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/read_image_tool.py +0 -0
  157. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/search_backends/__init__.py +0 -0
  158. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
  159. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +0 -0
  160. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
  161. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +0 -0
  162. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
  163. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
  164. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/search_backends/tavily.py +0 -0
  165. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/search_codebase_tool.py +0 -0
  166. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/snapshot_tool.py +0 -0
  167. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
  168. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/web_fetch/__init__.py +0 -0
  169. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/web_fetch/answering.py +0 -0
  170. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/web_fetch/documents.py +0 -0
  171. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/web_fetch/extractors.py +0 -0
  172. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/web_fetch/pipeline.py +0 -0
  173. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/web_fetch/retrieval.py +0 -0
  174. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/web_search_tool.py +0 -0
  175. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
  176. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/tools.py +0 -0
  177. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/utils/commands.py +0 -0
  178. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/agent/volatile_context.py +0 -0
  179. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/auth/__init__.py +0 -0
  180. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/auth/_jwt.py +0 -0
  181. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/auth/chatgpt_oauth.py +0 -0
  182. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/auth/constants.py +0 -0
  183. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/auth/tokens.py +0 -0
  184. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/browser_extension/__init__.py +0 -0
  185. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/browser_extension/framing.py +0 -0
  186. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/browser_extension/installer.py +0 -0
  187. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/browser_extension/manager.py +0 -0
  188. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/browser_extension/multiplex.py +0 -0
  189. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/browser_extension/native_host.py +0 -0
  190. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/browser_extension/protocol.py +0 -0
  191. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/browser_extension/registry.py +0 -0
  192. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/browser_extension/runtime.py +0 -0
  193. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/__init__.py +0 -0
  194. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/app.py +0 -0
  195. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/browser_backend.py +0 -0
  196. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/clipboard_image.py +0 -0
  197. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/config.py +0 -0
  198. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/connection.py +0 -0
  199. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/cron.py +0 -0
  200. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/diagnostics.py +0 -0
  201. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/file_index.py +0 -0
  202. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/goal.py +0 -0
  203. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/loop.py +0 -0
  204. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/main.py +0 -0
  205. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/mentions.py +0 -0
  206. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/messages.py +0 -0
  207. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/model_catalog.py +0 -0
  208. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/model_connection.py +0 -0
  209. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/plan_artifacts.py +0 -0
  210. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/provider_registry.py +0 -0
  211. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/session_event_store.py +0 -0
  212. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/session_journal.py +0 -0
  213. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/session_store.py +0 -0
  214. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/settings.py +0 -0
  215. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/skills.py +0 -0
  216. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/slash_commands.py +0 -0
  217. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/theme.py +0 -0
  218. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/__init__.py +0 -0
  219. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/agent_runtime.py +0 -0
  220. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/app_base.py +0 -0
  221. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/changes_screen.py +0 -0
  222. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/command_handlers.py +0 -0
  223. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/constants.py +0 -0
  224. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/custom_model.py +0 -0
  225. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/loop_runtime.py +0 -0
  226. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/memory_screen.py +0 -0
  227. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/onboarding_screen.py +0 -0
  228. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/prompt_flows.py +0 -0
  229. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/session_diff.py +0 -0
  230. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/settings_panel.py +0 -0
  231. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/settings_screen.py +0 -0
  232. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/state.py +0 -0
  233. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/status_dashboard.py +0 -0
  234. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/styles.tcss +0 -0
  235. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/sub_agent_screen.py +0 -0
  236. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/terminal_display.py +0 -0
  237. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/transcript.py +0 -0
  238. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/tui/widgets.py +0 -0
  239. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/cli/updater.py +0 -0
  240. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/config.py +0 -0
  241. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/events.py +0 -0
  242. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/git_env.py +0 -0
  243. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/hooks/__init__.py +0 -0
  244. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/hooks/backends.py +0 -0
  245. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/hooks/config.py +0 -0
  246. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/hooks/dispatcher.py +0 -0
  247. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/hooks/events.py +0 -0
  248. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/hooks/matcher.py +0 -0
  249. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/hooks/outcome.py +0 -0
  250. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/exceptions.py +0 -0
  251. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/models.py +0 -0
  252. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/providers/__init__.py +0 -0
  253. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/providers/anthropic.py +0 -0
  254. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/providers/base.py +0 -0
  255. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
  256. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/providers/google.py +0 -0
  257. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/providers/models.py +0 -0
  258. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/providers/openai.py +0 -0
  259. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/providers/openai_responses.py +0 -0
  260. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/ratelimit.py +0 -0
  261. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/specs/__init__.py +0 -0
  262. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/specs/accessors.py +0 -0
  263. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/specs/catalog/__init__.py +0 -0
  264. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/specs/catalog/anthropic.py +0 -0
  265. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/specs/catalog/dashscope.py +0 -0
  266. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/specs/catalog/fireworks.py +0 -0
  267. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/specs/catalog/google.py +0 -0
  268. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/specs/catalog/kimi_coding.py +0 -0
  269. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/specs/catalog/moonshot.py +0 -0
  270. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/specs/catalog/ollama_cloud.py +0 -0
  271. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/specs/catalog/openai.py +0 -0
  272. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/specs/catalog/openai_chatgpt.py +0 -0
  273. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/specs/catalog/openrouter.py +0 -0
  274. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/specs/catalog/together.py +0 -0
  275. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/specs/catalog/xai.py +0 -0
  276. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/specs/catalog/zai.py +0 -0
  277. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/specs/openrouter_catalog.py +0 -0
  278. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/specs/thinking.py +0 -0
  279. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/specs/types.py +0 -0
  280. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/timeouts.py +0 -0
  281. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/llm/tool_execution_ids.py +0 -0
  282. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/local_state.py +0 -0
  283. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/mcp/__init__.py +0 -0
  284. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/mcp/config.py +0 -0
  285. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/mcp/oauth.py +0 -0
  286. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/mcp/service.py +0 -0
  287. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/mcp/state.py +0 -0
  288. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/mcp/tools.py +0 -0
  289. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/mcp/transport.py +0 -0
  290. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/memory/__init__.py +0 -0
  291. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/memory/identity.py +0 -0
  292. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/memory/manager.py +0 -0
  293. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/memory/manifest.py +0 -0
  294. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/memory/markdown.py +0 -0
  295. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/memory/models.py +0 -0
  296. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/memory/protocol.py +0 -0
  297. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/memory/registry.py +0 -0
  298. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/models/__init__.py +0 -0
  299. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/models/sandbox_terminal_state.py +0 -0
  300. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/permissions.py +0 -0
  301. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/runtime.py +0 -0
  302. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/sandbox/README.md +0 -0
  303. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/sandbox/__init__.py +0 -0
  304. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/sandbox/async_filesystem.py +0 -0
  305. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/sandbox/base.py +0 -0
  306. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/sandbox/browser.py +0 -0
  307. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/sandbox/event_loop.py +0 -0
  308. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/sandbox/filesystem.py +0 -0
  309. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/sandbox/local.py +0 -0
  310. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/sandbox/serializer.py +0 -0
  311. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/sandbox/terminal.py +0 -0
  312. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/sandbox/utils.py +0 -0
  313. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/scratchpad.py +0 -0
  314. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/security/__init__.py +0 -0
  315. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/security/secrets.py +0 -0
  316. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/services/base.py +0 -0
  317. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/services/browser.py +0 -0
  318. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/services/file_system.py +0 -0
  319. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/services/html.py +0 -0
  320. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/services/lsp/__init__.py +0 -0
  321. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/services/lsp/client.py +0 -0
  322. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/services/lsp/config.py +0 -0
  323. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/services/lsp/detector.py +0 -0
  324. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/services/lsp/diagnostics.py +0 -0
  325. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/services/lsp/edits.py +0 -0
  326. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/services/lsp/manager.py +0 -0
  327. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/services/lsp/registry.py +0 -0
  328. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/services/lsp/registry.yaml +0 -0
  329. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/services/snapshots.py +0 -0
  330. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/services/terminal.py +0 -0
  331. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/services/terminal_buffer.py +0 -0
  332. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/services/workspace_scan.py +0 -0
  333. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/session/__init__.py +0 -0
  334. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/session/control.py +0 -0
  335. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/session/inmemory.py +0 -0
  336. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/session/projection.py +0 -0
  337. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/session/recording.py +0 -0
  338. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/session/runtime.py +0 -0
  339. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/session/store.py +0 -0
  340. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/testing/__init__.py +0 -0
  341. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/testing/store_conformance.py +0 -0
  342. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/tools/__init__.py +0 -0
  343. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/tools/core.py +0 -0
  344. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/tools/definitions.py +0 -0
  345. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/tools/registry.py +0 -0
  346. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/utils/__init__.py +0 -0
  347. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/utils/images.py +0 -0
  348. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/web/__init__.py +0 -0
  349. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/web/assets/fold.js +0 -0
  350. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/web/assets/player.css +0 -0
  351. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/web/assets/player.html +0 -0
  352. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/web/assets/player.js +0 -0
  353. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/web/bundle.py +0 -0
  354. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/web/hosting.py +0 -0
  355. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/web/redaction.py +0 -0
  356. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/web/server.py +0 -0
  357. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/web/singlefile.py +0 -0
  358. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/web/theme_css.py +0 -0
  359. {kolega_code-0.26.3 → kolega_code-0.26.5}/kolega_code/worktrees.py +0 -0
@@ -6,6 +6,27 @@ This project uses GitHub Releases for detailed generated release notes. This fil
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 0.26.5 - 2026-08-02
10
+
11
+ ### Fixed
12
+
13
+ - DeepSeek `deepseek-v4-flash` on the Responses API no longer crashes mid-task
14
+ with a 400 "No tool output found for tool call ..." when the model returns tool
15
+ calls together with assistant text. The text was serialized between the tool
16
+ calls and their outputs, which DeepSeek rejects; it is now emitted before the
17
+ calls so each call's output stays adjacent. Tool calls are also defensively
18
+ guaranteed a matching output on replay.
19
+
20
+ ## 0.26.4 - 2026-08-02
21
+
22
+ ### Changed
23
+
24
+ - `deepseek-v4-flash` now connects over DeepSeek's **Responses API**
25
+ (`https://api.deepseek.com`) for its native tool-calling format and graded
26
+ reasoning effort. Every other DeepSeek model (including `deepseek-v4-pro`)
27
+ continues to use the OpenAI-compatible Chat Completions endpoint. This is a
28
+ per-model routing decision; no configuration change is required.
29
+
9
30
  ## 0.26.3 - 2026-08-02
10
31
 
11
32
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kolega-code
3
- Version: 0.26.3
3
+ Version: 0.26.5
4
4
  Summary: Multi-agent coding in 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/
@@ -151,4 +151,4 @@ __all__ = [
151
151
  "parse_git_status_output",
152
152
  ]
153
153
 
154
- __version__ = "0.26.3"
154
+ __version__ = "0.26.5"
@@ -51,4 +51,4 @@ __all__ = [
51
51
  "ToolExtension",
52
52
  ]
53
53
 
54
- __version__ = "0.26.3"
54
+ __version__ = "0.26.5"
@@ -1399,6 +1399,7 @@ class BaseAgent(LogMixin):
1399
1399
  client = LLMClient(
1400
1400
  provider=model_config.provider.value,
1401
1401
  api_key=self.config.get_api_key(model_config.provider) or "",
1402
+ model=model_config.model,
1402
1403
  max_retries=model_config.rate_limits.max_retries,
1403
1404
  requests_per_minute=model_config.rate_limits.requests_per_minute,
1404
1405
  tokens_per_minute=model_config.rate_limits.tokens_per_minute,
@@ -109,6 +109,7 @@ class AgentContext:
109
109
  return InstrumentedLLMClient(
110
110
  provider=model_config.provider,
111
111
  api_key=self.config.get_api_key(model_config.provider) or "",
112
+ model=model_config.model,
112
113
  max_retries=model_config.rate_limits.max_retries,
113
114
  requests_per_minute=model_config.rate_limits.requests_per_minute,
114
115
  tokens_per_minute=model_config.rate_limits.tokens_per_minute,
@@ -126,6 +127,7 @@ class AgentContext:
126
127
  return LLMClient(
127
128
  provider=model_config.provider,
128
129
  api_key=self.config.get_api_key(model_config.provider) or "",
130
+ model=model_config.model,
129
131
  max_retries=model_config.rate_limits.max_retries,
130
132
  requests_per_minute=model_config.rate_limits.requests_per_minute,
131
133
  tokens_per_minute=model_config.rate_limits.tokens_per_minute,
@@ -76,6 +76,7 @@ class TerminalTool(BaseTool):
76
76
  client = LLMClient(
77
77
  provider=provider.value,
78
78
  api_key=api_key or "",
79
+ model=self.config.fast_config.model,
79
80
  max_retries=rate_limits.max_retries,
80
81
  requests_per_minute=rate_limits.requests_per_minute,
81
82
  tokens_per_minute=rate_limits.tokens_per_minute,
@@ -37,6 +37,7 @@ class ThinkHardTool(StreamingTool):
37
37
  client = InstrumentedLLMClient(
38
38
  provider=provider.value,
39
39
  api_key=api_key or "",
40
+ model=self.config.thinking_config.model,
40
41
  max_retries=rate_limits.max_retries,
41
42
  requests_per_minute=rate_limits.requests_per_minute,
42
43
  tokens_per_minute=rate_limits.tokens_per_minute,
@@ -54,6 +55,7 @@ class ThinkHardTool(StreamingTool):
54
55
  client = LLMClient(
55
56
  provider=provider.value,
56
57
  api_key=api_key or "",
58
+ model=self.config.thinking_config.model,
57
59
  max_retries=rate_limits.max_retries,
58
60
  requests_per_minute=rate_limits.requests_per_minute,
59
61
  tokens_per_minute=rate_limits.tokens_per_minute,
@@ -142,6 +142,7 @@ class WebFetchTool(StreamingTool):
142
142
  client_kwargs = {
143
143
  "provider": provider.value,
144
144
  "api_key": self.config.get_api_key(provider),
145
+ "model": self.config.fast_config.model,
145
146
  "max_retries": rate_limits.max_retries,
146
147
  "requests_per_minute": rate_limits.requests_per_minute,
147
148
  "tokens_per_minute": rate_limits.tokens_per_minute,
@@ -73,11 +73,18 @@ class LLMClient:
73
73
  requests_per_minute: Optional[int] = None,
74
74
  tokens_per_minute: Optional[int] = None,
75
75
  token_manager: Optional[Any] = None,
76
+ model: Optional[str] = None,
76
77
  ):
77
78
  self.provider_name = provider.lower()
78
79
  self._api_key = api_key # Store API key privately
79
80
  # Refreshing OAuth token manager, used only by the ChatGPT-subscription provider.
80
81
  self._token_manager = token_manager
82
+ # Routing hint only: nearly every model shares its provider's API surface, so
83
+ # the client is provider-scoped and the model id is passed per call. The one
84
+ # exception is deepseek-v4-flash (Responses API vs the deepseek Chat default),
85
+ # which must be known at construction to pick the right provider class. The
86
+ # per-call `model=` kwarg still governs the request body.
87
+ self._model = model
81
88
  self.provider = self._initialize_provider(
82
89
  provider,
83
90
  max_retries=max_retries,
@@ -163,6 +170,23 @@ class LLMClient:
163
170
  provider_name=chatgpt_constants.PROVIDER_KEY,
164
171
  )
165
172
 
173
+ # TEMPORARY single exception: deepseek-v4-flash speaks the Responses API
174
+ # (bare host, no /v1) while the rest of the deepseek catalog stays on Chat
175
+ # Completions. Special-cased here — like the ChatGPT provider above —
176
+ # because it needs a distinct base URL. Delete this branch once DeepSeek
177
+ # moves its catalog to Responses (then route "deepseek" wholesale).
178
+ if provider.lower() == "deepseek" and self._model == "deepseek-v4-flash":
179
+ from .providers.deepseek_responses import DeepSeekResponsesProvider
180
+
181
+ return DeepSeekResponsesProvider(
182
+ api_key=self._api_key,
183
+ max_retries=max_retries,
184
+ requests_per_minute=requests_per_minute,
185
+ tokens_per_minute=tokens_per_minute,
186
+ base_url="https://api.deepseek.com",
187
+ provider_name="deepseek",
188
+ )
189
+
166
190
  base_urls: Dict[str, str] = {
167
191
  "openai": "https://api.openai.com/v1/",
168
192
  "together": "https://api.together.xyz/v1",
@@ -80,8 +80,11 @@ class InstrumentedLLMClient(LLMClient):
80
80
  user_email: Optional[str] = None,
81
81
  usage_recorder: Optional[Any] = None,
82
82
  token_manager: Optional[Any] = None,
83
+ model: Optional[str] = None,
83
84
  ):
84
- super().__init__(provider, api_key, max_retries, requests_per_minute, tokens_per_minute, token_manager)
85
+ super().__init__(
86
+ provider, api_key, max_retries, requests_per_minute, tokens_per_minute, token_manager, model=model
87
+ )
85
88
  self.langfuse = langfuse_client
86
89
  self.workspace_id = workspace_id
87
90
  self.thread_id = thread_id
@@ -0,0 +1,66 @@
1
+ """DeepSeek provider that speaks the **Responses API** (``/responses``).
2
+
3
+ TEMPORARY: ``deepseek-v4-flash`` is the one DeepSeek model on the Responses API
4
+ today; the rest of the deepseek catalog stays on Chat Completions
5
+ (:class:`~kolega_code.llm.providers.openai.OpenAIProvider`). DeepSeek plans to move
6
+ its catalog over (``deepseek-v4-pro`` in early Aug 2026), at which point this class
7
+ and its routing branch in ``client.py`` can be deleted and the whole ``deepseek``
8
+ provider routed to Responses wholesale.
9
+
10
+ Request building, streaming, and token counting are shared with the OpenAI
11
+ Responses providers via
12
+ :class:`~kolega_code.llm.providers.responses_common.ResponsesProviderBase`; only the
13
+ transport differs — a plain api key against ``api.deepseek.com``. DeepSeek's Responses
14
+ API is stateless (no ``previous_response_id`` / ``reasoning.encrypted_content``), so
15
+ there is no cross-turn reasoning continuity, but unsupported params (including the
16
+ ``include=["reasoning.encrypted_content"]`` the shared builder sends) are silently
17
+ ignored, so the shared request builder works unmodified. The base URL is the bare
18
+ host — DeepSeek's Responses guide uses ``https://api.deepseek.com`` (no ``/v1``).
19
+ """
20
+
21
+ from __future__ import annotations
22
+
23
+ import uuid
24
+ from typing import Optional
25
+
26
+ from openai import AsyncOpenAI
27
+
28
+ from .base import BaseLLMProvider
29
+ from .responses_common import ResponsesProviderBase
30
+
31
+ DEFAULT_BASE_URL = "https://api.deepseek.com"
32
+ DEFAULT_MODEL = "deepseek-v4-flash"
33
+
34
+
35
+ class DeepSeekResponsesProvider(ResponsesProviderBase):
36
+ """DeepSeek Responses-API provider authenticated with a standard api key."""
37
+
38
+ def __init__(
39
+ self,
40
+ api_key: str,
41
+ max_retries: int = 3,
42
+ requests_per_minute: Optional[int] = None,
43
+ tokens_per_minute: Optional[int] = None,
44
+ base_url: Optional[str] = None,
45
+ provider_name: str = "deepseek",
46
+ ) -> None:
47
+ # Skip OpenAIProvider.__init__ (it builds Chat Completions sync+async
48
+ # clients); wire a Responses-only async client instead.
49
+ BaseLLMProvider.__init__(
50
+ self,
51
+ api_key=api_key,
52
+ max_retries=max_retries,
53
+ requests_per_minute=requests_per_minute,
54
+ tokens_per_minute=tokens_per_minute,
55
+ base_url=base_url or DEFAULT_BASE_URL,
56
+ )
57
+ self.provider_name = provider_name
58
+ # A stable per-session prompt_cache_key lets the backend cache the prompt
59
+ # prefix across turns (DeepSeek ignores it if unsupported, which is harmless).
60
+ self._session_id = str(uuid.uuid4())
61
+ self.async_client = AsyncOpenAI(api_key=api_key, base_url=self.base_url, max_retries=max_retries)
62
+ # The Responses path is async-only; the sync client is unused.
63
+ self.sync_client = None
64
+
65
+ def _default_model(self) -> str:
66
+ return DEFAULT_MODEL
@@ -129,6 +129,7 @@ def to_responses_input(messages: MessageHistory) -> List[Dict[str, Any]]:
129
129
  continue
130
130
 
131
131
  text_parts: List[tuple] = []
132
+ tool_call_items: List[Dict[str, Any]] = []
132
133
  tool_image_messages: List[Dict[str, Any]] = []
133
134
  for block in message.content or []:
134
135
  if isinstance(block, ResponsesReasoningBlock):
@@ -140,8 +141,14 @@ def to_responses_input(messages: MessageHistory) -> List[Dict[str, Any]]:
140
141
  # reasoning block first in the assistant message.
141
142
  items.append(block.to_responses_item())
142
143
  elif isinstance(block, ToolCall):
144
+ # Collected, not emitted inline: the function_call items must be the
145
+ # LAST items of the assistant turn so the next message's
146
+ # function_call_output items follow them immediately. An assistant
147
+ # text item interposed between the calls and their outputs makes
148
+ # DeepSeek's Responses API 400 ("No tool output found for tool call
149
+ # ..."). See the assistant-text ordering below.
143
150
  if block.input_kind == "freeform":
144
- items.append(
151
+ tool_call_items.append(
145
152
  {
146
153
  "type": "custom_tool_call",
147
154
  "call_id": block.id,
@@ -150,7 +157,7 @@ def to_responses_input(messages: MessageHistory) -> List[Dict[str, Any]]:
150
157
  }
151
158
  )
152
159
  else:
153
- items.append(
160
+ tool_call_items.append(
154
161
  {
155
162
  "type": "function_call",
156
163
  "call_id": block.id,
@@ -178,11 +185,42 @@ def to_responses_input(messages: MessageHistory) -> List[Dict[str, Any]]:
178
185
  # Foreign Anthropic thinking/redacted-thinking blocks (from a prior
179
186
  # provider) are skipped here; adapt_history_for_provider has already
180
187
  # dropped them before this conversion runs.
188
+ # Assistant text goes BEFORE the tool calls; the calls stay last so their
189
+ # outputs (next message) are adjacent — required by DeepSeek's Responses API.
181
190
  if text_parts:
182
191
  item = _role_message_item(message.role, text_parts)
183
192
  if item:
184
193
  items.append(item)
194
+ items.extend(tool_call_items)
185
195
  items.extend(tool_image_messages)
196
+
197
+ # Every function_call must be answered by a function_call_output or the
198
+ # Responses API 400s ("No tool output found for tool call ..."). A tool call
199
+ # can be left unanswered when a turn made several parallel calls and one
200
+ # result went missing (e.g. a yielded/long-running command). Mirror the Chat
201
+ # path (Message.to_openai) and pad any orphan with a placeholder output so the
202
+ # request stays valid. Keyed by call_id, preserving the freeform vs json shape.
203
+ # Defense-in-depth: every function_call must still be answered by a
204
+ # function_call_output, or the Responses API 400s. Pad any orphan (mirrors the
205
+ # Chat path, Message.to_openai). With the ordering above this should not fire,
206
+ # but a genuinely dropped result must not become a hard request failure.
207
+ answered = {
208
+ it.get("call_id") for it in items if it.get("type") in ("function_call_output", "custom_tool_call_output")
209
+ }
210
+ for it in items:
211
+ if it.get("type") not in ("function_call", "custom_tool_call"):
212
+ continue
213
+ call_id = it.get("call_id")
214
+ if call_id in answered:
215
+ continue
216
+ answered.add(call_id)
217
+ items.append(
218
+ {
219
+ "type": "custom_tool_call_output" if it["type"] == "custom_tool_call" else "function_call_output",
220
+ "call_id": call_id,
221
+ "output": "[no tool output recorded]",
222
+ }
223
+ )
186
224
  return items
187
225
 
188
226
 
@@ -14,6 +14,11 @@ DEEPSEEK_SPECS = {
14
14
  mode="deepseek_effort",
15
15
  ),
16
16
  },
17
+ # deepseek-v4-flash speaks the Responses API (see DeepSeekResponsesProvider), so its
18
+ # reasoning effort must be emitted as the Responses `reasoning` block rather than the
19
+ # Chat-Completions `reasoning_effort` field the shared Responses request builder ignores.
20
+ # DeepSeek's Responses API is stateless (no reasoning.encrypted_content), so this mode
21
+ # also correctly excludes flash from the flat reasoning_content replay path.
17
22
  ("deepseek", "deepseek-v4-flash"): {
18
23
  "context_length": 1000000,
19
24
  "max_completion_tokens": 384000,
@@ -23,7 +28,7 @@ DEEPSEEK_SPECS = {
23
28
  "thinking_effort": ThinkingEffortSpec(
24
29
  options=("none", "high", "max"),
25
30
  default="high",
26
- mode="deepseek_effort",
31
+ mode="openai_responses_reasoning",
27
32
  ),
28
33
  },
29
34
  }
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "kolega-code"
7
- version = "0.26.3"
7
+ version = "0.26.5"
8
8
  description = "Multi-agent coding in the terminal"
9
9
  readme = "README.md"
10
10
  license = {file = "LICENSE"}
File without changes
File without changes
File without changes
File without changes
File without changes