kolega-code 0.28.4__tar.gz → 0.30.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 (444) hide show
  1. {kolega_code-0.28.4 → kolega_code-0.30.0}/CHANGELOG.md +62 -0
  2. {kolega_code-0.28.4 → kolega_code-0.30.0}/PKG-INFO +1 -1
  3. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/__init__.py +3 -2
  4. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/__init__.py +1 -1
  5. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/baseagent.py +39 -12
  6. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/context.py +5 -0
  7. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/agent_tool.py +1 -1
  8. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/terminal_tool.py +3 -0
  9. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/web_fetch_tool.py +3 -0
  10. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tools.py +0 -6
  11. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/config.py +287 -19
  12. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/main.py +126 -14
  13. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/messages.py +9 -0
  14. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/model_catalog.py +5 -2
  15. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/model_connection.py +6 -0
  16. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/provider_registry.py +44 -4
  17. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/settings.py +62 -1
  18. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/slash_commands.py +1 -1
  19. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/theme.py +18 -18
  20. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/agent_runtime.py +21 -0
  21. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/command_handlers.py +15 -1
  22. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/onboarding_screen.py +7 -1
  23. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/settings_panel.py +350 -12
  24. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/settings_screen.py +92 -0
  25. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/config.py +107 -2
  26. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/client.py +48 -24
  27. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/exceptions.py +59 -28
  28. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/instrumented_client.py +6 -2
  29. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/models.py +93 -25
  30. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/providers/anthropic.py +6 -5
  31. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/providers/deepseek_responses.py +5 -6
  32. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/providers/models.py +3 -0
  33. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/providers/openai.py +16 -5
  34. kolega_code-0.30.0/kolega_code/llm/providers/perplexity_responses.py +107 -0
  35. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/providers/responses_common.py +107 -9
  36. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/__init__.py +16 -0
  37. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/catalog/__init__.py +3 -0
  38. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/catalog/deepseek.py +5 -4
  39. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/catalog/google.py +13 -0
  40. kolega_code-0.30.0/kolega_code/llm/specs/catalog/perplexity_agent.py +616 -0
  41. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/catalog/xai.py +12 -0
  42. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/catalog/zai.py +12 -0
  43. kolega_code-0.30.0/kolega_code/llm/specs/custom_endpoints.py +156 -0
  44. kolega_code-0.30.0/kolega_code/llm/specs/perplexity_catalog.py +267 -0
  45. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/thinking.py +28 -12
  46. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/usage.py +21 -4
  47. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/mcp/config.py +49 -7
  48. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/mcp/service.py +103 -3
  49. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/mcp/tools.py +29 -12
  50. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/sandbox/async_filesystem.py +0 -3
  51. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/sandbox/filesystem.py +0 -3
  52. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/sandbox/serializer.py +4 -13
  53. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/sandbox/terminal.py +10 -72
  54. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/sandbox/utils.py +0 -4
  55. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/services/file_system.py +1 -4
  56. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/services/html.py +0 -19
  57. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/services/lsp/manager.py +5 -5
  58. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/services/lsp/registry.py +0 -1
  59. {kolega_code-0.28.4 → kolega_code-0.30.0}/pyproject.toml +1 -1
  60. {kolega_code-0.28.4 → kolega_code-0.30.0}/.gitignore +0 -0
  61. {kolega_code-0.28.4 → kolega_code-0.30.0}/CONTRIBUTING.md +0 -0
  62. {kolega_code-0.28.4 → kolega_code-0.30.0}/LICENSE +0 -0
  63. {kolega_code-0.28.4 → kolega_code-0.30.0}/MIGRATION.md +0 -0
  64. {kolega_code-0.28.4 → kolega_code-0.30.0}/README.md +0 -0
  65. {kolega_code-0.28.4 → kolega_code-0.30.0}/RELEASING.md +0 -0
  66. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/LICENSE +0 -0
  67. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/manifest.json +0 -0
  68. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/deep-research/SKILL.md +0 -0
  69. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/deep-research/references/evidence-and-reporting.md +0 -0
  70. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/deep-research/references/gigacode-workflow.md +0 -0
  71. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/deep-research/scripts/deep-research.workflow +0 -0
  72. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/deep-research/scripts/materialize_report.py +0 -0
  73. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/docx/LICENSE +0 -0
  74. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/docx/SKILL.md +0 -0
  75. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/docx/references/examples.md +0 -0
  76. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/docx/references/limitations.md +0 -0
  77. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/docx/references/operations.md +0 -0
  78. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/docx/references/quality.md +0 -0
  79. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/docx/requirements.txt +0 -0
  80. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/docx/scripts/docx_tool.py +0 -0
  81. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/docx/scripts/smoke_test.py +0 -0
  82. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/humanizer/LICENSE +0 -0
  83. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/humanizer/SKILL.md +0 -0
  84. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pdf/LICENSE +0 -0
  85. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pdf/SKILL.md +0 -0
  86. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pdf/references/examples.md +0 -0
  87. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pdf/references/limitations.md +0 -0
  88. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pdf/references/ocr.md +0 -0
  89. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pdf/references/operations.md +0 -0
  90. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pdf/references/quality.md +0 -0
  91. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pdf/references/redaction.md +0 -0
  92. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-paddle.txt +0 -0
  93. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-surya.txt +0 -0
  94. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pdf/requirements.txt +0 -0
  95. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pdf/scripts/pdf_tool.py +0 -0
  96. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pdf/scripts/smoke_test.py +0 -0
  97. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pptx/LICENSE +0 -0
  98. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pptx/SKILL.md +0 -0
  99. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pptx/references/examples.md +0 -0
  100. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pptx/references/limitations.md +0 -0
  101. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pptx/references/operations.md +0 -0
  102. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pptx/requirements.txt +0 -0
  103. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pptx/scripts/pptx_tool.py +0 -0
  104. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/pptx/scripts/smoke_test.py +0 -0
  105. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/review/SKILL.md +0 -0
  106. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/review/references/github-publishing.md +0 -0
  107. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/skill-authoring/SKILL.md +0 -0
  108. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/skill-authoring/references/review-checklist.md +0 -0
  109. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/xlsx/LICENSE +0 -0
  110. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/xlsx/SKILL.md +0 -0
  111. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/xlsx/references/examples.md +0 -0
  112. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/xlsx/references/limitations.md +0 -0
  113. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/xlsx/references/operations.md +0 -0
  114. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/xlsx/references/quality.md +0 -0
  115. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/xlsx/requirements.txt +0 -0
  116. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/xlsx/scripts/smoke_test.py +0 -0
  117. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/_bundled_skills/skills/xlsx/scripts/xlsx_tool.py +0 -0
  118. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/browseragent.py +0 -0
  119. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/coder.py +0 -0
  120. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/common.py +0 -0
  121. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/compression.py +0 -0
  122. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/conversation.py +0 -0
  123. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/custom_agents.py +0 -0
  124. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/edit_protocols.py +0 -0
  125. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/errors.py +0 -0
  126. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/eval/__init__.py +0 -0
  127. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/eval/bridge.py +0 -0
  128. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/eval/bundle-requirements.in +0 -0
  129. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/eval/bundle-requirements.txt +0 -0
  130. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/eval/env.py +0 -0
  131. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/eval/js_kernel.py +0 -0
  132. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/eval/kernel.py +0 -0
  133. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/eval/prelude.js +0 -0
  134. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/eval/prelude.py +0 -0
  135. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/eval/protocol.py +0 -0
  136. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/eval/py_kernel.py +0 -0
  137. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/eval/runner.js +0 -0
  138. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/eval/runner.py +0 -0
  139. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/generalagent.py +0 -0
  140. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/goal.py +0 -0
  141. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/investigationagent.py +0 -0
  142. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/model_routing.py +0 -0
  143. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/orchestration/__init__.py +0 -0
  144. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/orchestration/accounting.py +0 -0
  145. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/orchestration/budget.py +0 -0
  146. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/orchestration/context.py +0 -0
  147. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/orchestration/errors.py +0 -0
  148. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/orchestration/executor.py +0 -0
  149. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/orchestration/guide.py +0 -0
  150. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/orchestration/journal.py +0 -0
  151. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/orchestration/runtime.py +0 -0
  152. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/orchestration/types.py +0 -0
  153. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/planningagent.py +0 -0
  154. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_dump.py +0 -0
  155. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_overrides.py +0 -0
  156. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_provider.py +0 -0
  157. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_exhausted.user.md +0 -0
  158. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_nudge.user.md.j2 +0 -0
  159. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/truncated_turn_nudge.user.md.j2 +0 -0
  160. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
  161. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
  162. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
  163. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
  164. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/extensions/cli/build_questions.md +0 -0
  165. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/extensions/cli/current_plan_artifact.md.j2 +0 -0
  166. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/extensions/cli/mode_switch_notice.md.j2 +0 -0
  167. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
  168. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/extensions/cli/scratchpad.md.j2 +0 -0
  169. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
  170. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list_readonly.md +0 -0
  171. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/extensions/cli/worktree_control.md.j2 +0 -0
  172. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -0
  173. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +0 -0
  174. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/system/agents/coder_ask.md.j2 +0 -0
  175. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/system/agents/coder_base.md.j2 +0 -0
  176. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
  177. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +0 -0
  178. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +0 -0
  179. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +0 -0
  180. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
  181. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/system/includes/context_updates.md +0 -0
  182. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
  183. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -0
  184. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +0 -0
  185. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -0
  186. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -0
  187. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +0 -0
  188. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/system/includes/terminal_tools.md +0 -0
  189. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/apply_patch.md +0 -0
  190. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/ask_user_choice.md +0 -0
  191. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_click.md +0 -0
  192. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_close.md +0 -0
  193. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_console_messages.md +0 -0
  194. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_drag.md +0 -0
  195. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_drop.md +0 -0
  196. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_evaluate.md +0 -0
  197. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_file_upload.md +0 -0
  198. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_fill_form.md +0 -0
  199. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_find.md +0 -0
  200. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_handle_dialog.md +0 -0
  201. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_hover.md +0 -0
  202. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_navigate.md +0 -0
  203. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_navigate_back.md +0 -0
  204. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_network_request.md +0 -0
  205. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_network_requests.md +0 -0
  206. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_press_key.md +0 -0
  207. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_resize.md +0 -0
  208. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_scroll.md +0 -0
  209. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_select_option.md +0 -0
  210. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_snapshot.md +0 -0
  211. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_tabs.md +0 -0
  212. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_take_screenshot.md +0 -0
  213. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_type.md +0 -0
  214. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/browser_wait_for.md +0 -0
  215. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/build_backend.md +0 -0
  216. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/build_frontend.md +0 -0
  217. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/claude_edit.md +0 -0
  218. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/claude_write.md +0 -0
  219. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/dispatch_agent.md +0 -0
  220. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/edit.md +0 -0
  221. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/eval.md +0 -0
  222. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/exec_command.md +0 -0
  223. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/get_host.md +0 -0
  224. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/get_task_list.md +0 -0
  225. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/get_task_list_readonly.md +0 -0
  226. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/hashline_edit.md +0 -0
  227. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/hashline_write.md +0 -0
  228. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/kill_command.md +0 -0
  229. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/list_sessions.md +0 -0
  230. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/list_subagent_models.md +0 -0
  231. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/list_workflow_runs.md +0 -0
  232. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/lsp.md +0 -0
  233. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/lsp_edit.md +0 -0
  234. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/multi_edit.md +0 -0
  235. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/read.md +0 -0
  236. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/read_image.md +0 -0
  237. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/resolve.md +0 -0
  238. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/run_workflow.md +0 -0
  239. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/set_goal.md +0 -0
  240. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/skill.md +0 -0
  241. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/snapshot.md +0 -0
  242. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/switch_worktree.md +0 -0
  243. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/update_task_list.md +0 -0
  244. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/web_fetch.md +0 -0
  245. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/web_search.md +0 -0
  246. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/write.md +0 -0
  247. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/write_plan.md +0 -0
  248. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/tools/write_stdin.md +0 -0
  249. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +0 -0
  250. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
  251. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/prompts.py +0 -0
  252. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/base_tool.py +0 -0
  253. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/browser_tool.py +0 -0
  254. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/build_tool.py +0 -0
  255. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/codex_patch.py +0 -0
  256. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
  257. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/edit_tool.py +0 -0
  258. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/eval_tool.py +0 -0
  259. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/hashline_v2.py +0 -0
  260. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/lsp_tool.py +0 -0
  261. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
  262. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/network_status.py +0 -0
  263. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/read_file_tool.py +0 -0
  264. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/read_image_tool.py +0 -0
  265. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/search_backends/__init__.py +0 -0
  266. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
  267. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +0 -0
  268. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
  269. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +0 -0
  270. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
  271. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
  272. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/search_backends/tavily.py +0 -0
  273. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/snapshot_tool.py +0 -0
  274. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
  275. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/web_fetch/__init__.py +0 -0
  276. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/web_fetch/answering.py +0 -0
  277. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/web_fetch/documents.py +0 -0
  278. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/web_fetch/extractors.py +0 -0
  279. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/web_fetch/pipeline.py +0 -0
  280. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/web_fetch/retrieval.py +0 -0
  281. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/web_search_tool.py +0 -0
  282. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
  283. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/tool_definitions.py +0 -0
  284. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/utils/commands.py +0 -0
  285. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/agent/volatile_context.py +0 -0
  286. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/auth/__init__.py +0 -0
  287. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/auth/_jwt.py +0 -0
  288. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/auth/chatgpt_oauth.py +0 -0
  289. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/auth/constants.py +0 -0
  290. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/auth/tokens.py +0 -0
  291. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/browser_extension/__init__.py +0 -0
  292. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/browser_extension/framing.py +0 -0
  293. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/browser_extension/installer.py +0 -0
  294. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/browser_extension/manager.py +0 -0
  295. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/browser_extension/multiplex.py +0 -0
  296. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/browser_extension/native_host.py +0 -0
  297. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/browser_extension/protocol.py +0 -0
  298. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/browser_extension/registry.py +0 -0
  299. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/browser_extension/runtime.py +0 -0
  300. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/__init__.py +0 -0
  301. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/app.py +0 -0
  302. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/ask_output.py +0 -0
  303. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/atif_export.py +0 -0
  304. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/browser_backend.py +0 -0
  305. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/clipboard_image.py +0 -0
  306. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/connection.py +0 -0
  307. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/cron.py +0 -0
  308. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/diagnostics.py +0 -0
  309. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/file_index.py +0 -0
  310. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/goal.py +0 -0
  311. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/loop.py +0 -0
  312. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/mentions.py +0 -0
  313. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/plan_artifacts.py +0 -0
  314. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/session_event_protocol.py +0 -0
  315. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/session_event_store.py +0 -0
  316. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/session_journal.py +0 -0
  317. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/session_store.py +0 -0
  318. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/session_usage.py +0 -0
  319. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/skills.py +0 -0
  320. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/__init__.py +0 -0
  321. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/app_base.py +0 -0
  322. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/changes_screen.py +0 -0
  323. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/constants.py +0 -0
  324. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/custom_model.py +0 -0
  325. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/loop_runtime.py +0 -0
  326. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/memory_screen.py +0 -0
  327. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/pacing.py +0 -0
  328. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/prompt_flows.py +0 -0
  329. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/session_diff.py +0 -0
  330. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/state.py +0 -0
  331. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/status_dashboard.py +0 -0
  332. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/styles.tcss +0 -0
  333. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/sub_agent_screen.py +0 -0
  334. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/terminal_display.py +0 -0
  335. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/transcript.py +0 -0
  336. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/tui/widgets.py +0 -0
  337. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/cli/updater.py +0 -0
  338. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/events.py +0 -0
  339. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/extensions.py +0 -0
  340. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/git_env.py +0 -0
  341. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/hooks/__init__.py +0 -0
  342. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/hooks/backends.py +0 -0
  343. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/hooks/config.py +0 -0
  344. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/hooks/dispatcher.py +0 -0
  345. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/hooks/events.py +0 -0
  346. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/hooks/matcher.py +0 -0
  347. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/hooks/outcome.py +0 -0
  348. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/ledger.py +0 -0
  349. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/providers/__init__.py +0 -0
  350. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/providers/_token_encoding.py +0 -0
  351. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/providers/base.py +0 -0
  352. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
  353. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/providers/google.py +0 -0
  354. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/providers/openai_responses.py +0 -0
  355. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/providers/tinker.py +0 -0
  356. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/providers/tinker_trace.py +0 -0
  357. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/ratelimit.py +0 -0
  358. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/accessors.py +0 -0
  359. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/catalog/anthropic.py +0 -0
  360. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/catalog/dashscope.py +0 -0
  361. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/catalog/fireworks.py +0 -0
  362. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/catalog/kimi_coding.py +0 -0
  363. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/catalog/moonshot.py +0 -0
  364. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/catalog/ollama_cloud.py +0 -0
  365. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/catalog/openai.py +0 -0
  366. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/catalog/openai_chatgpt.py +0 -0
  367. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/catalog/openrouter.py +0 -0
  368. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/catalog/thinking_machines.py +0 -0
  369. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/catalog/tinker.py +0 -0
  370. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/catalog/together.py +0 -0
  371. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/ollama_cloud_catalog.py +0 -0
  372. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/openrouter_catalog.py +0 -0
  373. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/tinker_catalog.py +0 -0
  374. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/types.py +0 -0
  375. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/specs/validation.py +0 -0
  376. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/timeouts.py +0 -0
  377. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/llm/tool_execution_ids.py +0 -0
  378. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/local_state.py +0 -0
  379. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/mcp/__init__.py +0 -0
  380. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/mcp/oauth.py +0 -0
  381. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/mcp/state.py +0 -0
  382. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/mcp/transport.py +0 -0
  383. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/memory/__init__.py +0 -0
  384. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/memory/identity.py +0 -0
  385. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/memory/manager.py +0 -0
  386. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/memory/manifest.py +0 -0
  387. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/memory/markdown.py +0 -0
  388. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/memory/models.py +0 -0
  389. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/memory/protocol.py +0 -0
  390. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/memory/registry.py +0 -0
  391. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/models/__init__.py +0 -0
  392. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/models/sandbox_terminal_state.py +0 -0
  393. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/permissions.py +0 -0
  394. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/runtime.py +0 -0
  395. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/sandbox/README.md +0 -0
  396. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/sandbox/__init__.py +0 -0
  397. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/sandbox/base.py +0 -0
  398. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/sandbox/browser.py +0 -0
  399. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/sandbox/event_loop.py +0 -0
  400. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/sandbox/local.py +0 -0
  401. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/scratchpad.py +0 -0
  402. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/security/__init__.py +0 -0
  403. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/security/secrets.py +0 -0
  404. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/services/base.py +0 -0
  405. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/services/browser.py +0 -0
  406. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/services/lsp/__init__.py +0 -0
  407. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/services/lsp/client.py +0 -0
  408. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/services/lsp/config.py +0 -0
  409. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/services/lsp/detector.py +0 -0
  410. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/services/lsp/diagnostics.py +0 -0
  411. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/services/lsp/edits.py +0 -0
  412. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/services/lsp/registry.yaml +0 -0
  413. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/services/snapshots.py +0 -0
  414. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/services/terminal.py +0 -0
  415. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/services/terminal_buffer.py +0 -0
  416. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/services/workspace_scan.py +0 -0
  417. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/session/__init__.py +0 -0
  418. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/session/control.py +0 -0
  419. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/session/inmemory.py +0 -0
  420. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/session/projection.py +0 -0
  421. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/session/recording.py +0 -0
  422. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/session/runtime.py +0 -0
  423. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/session/store.py +0 -0
  424. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/testing/__init__.py +0 -0
  425. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/testing/store_conformance.py +0 -0
  426. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/tools/__init__.py +0 -0
  427. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/tools/core.py +0 -0
  428. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/tools/definitions.py +0 -0
  429. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/tools/param_aliases.py +0 -0
  430. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/tools/registry.py +0 -0
  431. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/utils/__init__.py +0 -0
  432. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/utils/images.py +0 -0
  433. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/web/__init__.py +0 -0
  434. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/web/assets/fold.js +0 -0
  435. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/web/assets/player.css +0 -0
  436. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/web/assets/player.html +0 -0
  437. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/web/assets/player.js +0 -0
  438. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/web/bundle.py +0 -0
  439. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/web/hosting.py +0 -0
  440. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/web/redaction.py +0 -0
  441. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/web/server.py +0 -0
  442. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/web/singlefile.py +0 -0
  443. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/web/theme_css.py +0 -0
  444. {kolega_code-0.28.4 → kolega_code-0.30.0}/kolega_code/worktrees.py +0 -0
@@ -6,6 +6,68 @@ This project uses GitHub Releases for detailed generated release notes. This fil
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 0.30.0 - 2026-08-14
10
+
11
+ ### Added
12
+
13
+ - Added Google Gemini 3.7 Flash (`gemini-3.7-flash`): 1M-token context, 64K
14
+ output, vision and function calling, and `low`/`medium`/`high` thinking
15
+ levels. It omits Google's deprecated temperature parameter and is now the
16
+ default Google model.
17
+ - DeepSeek V4-Pro now routes to the Responses API by default (joining V4-Flash),
18
+ removing the model-name carve-out. Both DeepSeek models support `none`, `low`,
19
+ `high`, and `max` reasoning effort (`low` is new; `none` disables reasoning).
20
+ Hosted web search is now available on V4-Pro as well as V4-Flash.
21
+ - Added support for xAI Grok 4.6 (`grok-4.6`): 500K-token context, vision input,
22
+ and `low`/`medium`/`high`/`xhigh` reasoning effort. Selectable in the Settings
23
+ UI, `/model` picker, CLI flags, and env vars.
24
+ - Added support for Z.AI GLM-5.3 (`glm-5.3`) on the GLM Coding Plan provider:
25
+ 1M-token context, 128K max output, and `high`/`max` thinking effort. GLM-5.3
26
+ is now the Z.AI default model.
27
+ - Added the Perplexity Agent API provider (`perplexity_agent`): one
28
+ `PERPLEXITY_API_KEY` reaches OpenAI, Anthropic, Google, xAI, and Perplexity
29
+ models through Perplexity's Responses-compatible Agent API, with optional
30
+ hosted search tools.
31
+ - `/plan` accepts an optional prompt: `/plan <task>` switches to plan mode and
32
+ starts that planning turn. Bare `/plan` still only switches mode.
33
+
34
+ ### Fixed
35
+
36
+ - Google Gemini models no longer reject builtin tool calls with a 400 about
37
+ `additionalProperties` in function-declaration schemas.
38
+ - Quitting the TUI no longer waits up to 30s for an unresponsive language
39
+ server to acknowledge shutdown.
40
+ - The Z.AI context-window gauge now counts tokens locally (Z.AI's count
41
+ endpoint reports 0 for GLM-5.3) and residual usage calibrates from
42
+ multi-provider response billing.
43
+ - MCP tools whose names contain invalid characters or exceed provider length
44
+ limits are sanitized at collection time, and provider 400 details are shown
45
+ in the turn error instead of a generic failure.
46
+
47
+ ## 0.29.0 - 2026-08-13
48
+
49
+ ### Added
50
+
51
+ - Custom endpoints: use models from any OpenAI Chat Completions, OpenAI
52
+ Responses, or Anthropic Messages-compatible server (LM Studio, Ollama, vLLM,
53
+ ...). Define endpoints under `custom_endpoints` in settings.json or via the
54
+ `--custom-endpoints` / `--endpoint-url` flags and `KOLEGA_CODE_CUSTOM_ENDPOINTS`
55
+ / `KOLEGA_CODE_ENDPOINT_*` environment variables (never persisted), then select
56
+ them as `custom:<id>` anywhere a provider is chosen. Supports thinking-effort
57
+ modes per wire dialect and native reasoning replay.
58
+
59
+ - Custom endpoints accept a `temperature` field (per endpoint, or per model in
60
+ its `models` map; default 1.0), exposed in the TUI endpoint editor, via
61
+ `--endpoint-temperature`, and via `KOLEGA_CODE_ENDPOINT_TEMPERATURE`. Sent on
62
+ Chat Completions and Anthropic requests; ignored by Responses-style endpoints.
63
+
64
+ ### Fixed
65
+
66
+ - Together models (e.g. Kimi K2.7-Code) now replay prior reasoning through the
67
+ native `reasoning` field instead of visible `*Thinking:*` text, avoiding a full
68
+ re-derivation of the chain-of-thought on every turn. Reasoning models without a
69
+ declared thinking-effort spec now resolve their provider's replay field.
70
+
9
71
  ## 0.28.4 - 2026-08-12
10
72
 
11
73
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kolega-code
3
- Version: 0.28.4
3
+ Version: 0.30.0
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/
@@ -22,7 +22,7 @@ from .agent.errors import AgentError, MaxAgentIterationsExceeded
22
22
  from .events import AgentEventEmitter
23
23
 
24
24
  # Configuration
25
- from .config import AgentConfig, ModelConfig, ModelProvider, RateLimitConfig
25
+ from .config import AgentConfig, CustomEndpointConfig, ModelConfig, ModelProvider, RateLimitConfig
26
26
 
27
27
  # Events and connection management
28
28
  from .events import AgentConnectionManager
@@ -108,6 +108,7 @@ __all__ = [
108
108
  "AgentEventEmitter",
109
109
  # Configuration
110
110
  "AgentConfig",
111
+ "CustomEndpointConfig",
111
112
  "ModelConfig",
112
113
  "ModelProvider",
113
114
  "RateLimitConfig",
@@ -173,4 +174,4 @@ __all__ = [
173
174
  "parse_git_status_output",
174
175
  ]
175
176
 
176
- __version__ = "0.28.4"
177
+ __version__ = "0.30.0"
@@ -51,4 +51,4 @@ __all__ = [
51
51
  "ToolExtension",
52
52
  ]
53
53
 
54
- __version__ = "0.28.4"
54
+ __version__ = "0.30.0"
@@ -521,6 +521,8 @@ class BaseAgent(LogMixin):
521
521
  # gate reads client_web_tools_enabled, the stream call reads
522
522
  # hosted_web_search_active.
523
523
  self.supports_hosted_web_search = bool(model_specs.get("supports_hosted_web_search", False))
524
+ # Spec-declared server-side tools; _apply_web_search_state derives the live list.
525
+ self._model_server_tools: List[str] = [str(tool) for tool in model_specs.get("server_tools") or []]
524
526
  self.web_search_mode = getattr(self.config, "web_search_mode", "auto") or "auto"
525
527
  self._apply_web_search_state()
526
528
 
@@ -731,22 +733,27 @@ class BaseAgent(LogMixin):
731
733
  initialize()
732
734
 
733
735
  def _apply_web_search_state(self) -> None:
734
- """Resolve web_search_mode + model capability into the two live gates.
736
+ """Resolve web_search_mode + model capability into the live gates.
735
737
 
736
738
  ``hosted_web_search_active`` — request the provider's server-side
737
739
  web_search tool on main-loop stream calls. ``client_web_tools_enabled``
738
740
  — register the client-side web_search/web_fetch tools (read by the
739
- ToolCollection gate). Hosted active always excludes the client tools:
740
- two search paths confuse the model and waste schema tokens.
741
+ ToolCollection gate). ``server_tools`` — the spec-declared server-side
742
+ tools (e.g. the Perplexity Agent API's). One setting gates all of it:
743
+ auto/hosted request the server-side tooling, client defers to the
744
+ client-side web tools, off disables web tooling entirely. Active
745
+ server-side web tooling always excludes the client tools: two search
746
+ paths confuse the model and waste schema tokens.
741
747
  """
742
748
  mode = (self.web_search_mode or "auto").lower()
743
749
  supported = self.supports_hosted_web_search
750
+ server_web_tooling = supported or "web_search" in self._model_server_tools
744
751
  if mode == "off":
745
752
  hosted, client = False, False
746
753
  elif mode == "client":
747
754
  hosted, client = False, True
748
755
  elif mode == "hosted":
749
- if not supported:
756
+ if not server_web_tooling:
750
757
  provider = self.primary_model_config.provider
751
758
  logger.warning(
752
759
  "web_search_mode=hosted, but %s/%s has no hosted web search; falling back to the client tools",
@@ -758,6 +765,9 @@ class BaseAgent(LogMixin):
758
765
  hosted, client = supported, not supported
759
766
  self.hosted_web_search_active = hosted
760
767
  self.client_web_tools_enabled = client
768
+ self.server_tools = list(self._model_server_tools) if mode in ("auto", "hosted") else []
769
+ if "web_search" in self.server_tools:
770
+ self.client_web_tools_enabled = False
761
771
 
762
772
  def apply_web_search_mode(self, mode: str) -> None:
763
773
  """Change the web tool mode mid-session (TUI ``/web-search``).
@@ -770,31 +780,36 @@ class BaseAgent(LogMixin):
770
780
  self._apply_web_search_state()
771
781
 
772
782
  async def _emit_hosted_tool_call(self, delta: Dict[str, Any]) -> None:
773
- """Render a completed hosted web_search call as a tool_call/tool_result pair.
783
+ """Render a completed hosted/server-side tool call as a tool_call/tool_result pair.
774
784
 
775
785
  The call executed on the provider's servers; there is no local tool
776
- invocation and the searched content never reaches the client (it is
777
- injected into the model's context server-side). The shared item id
778
- correlates the pair in every transcript consumer.
786
+ invocation. For OpenAI/DeepSeek web_search the searched content never
787
+ reaches the client (it is injected into the model's context
788
+ server-side); Perplexity Agent API result items (search_results /
789
+ fetch_url_results) carry their results client-side via the delta's
790
+ item_type/payload. The shared item id correlates the pair in every
791
+ transcript consumer.
779
792
  """
780
793
  block = WebSearchCallBlock(
781
794
  item_id=delta.get("id") or None,
782
795
  status=delta.get("status"),
783
796
  action=delta.get("action") or {},
797
+ item_type=str(delta.get("item_type") or "web_search_call"),
798
+ payload=delta.get("payload"),
784
799
  )
785
800
  tool_call_id = block.item_id or str(uuid.uuid4())
786
801
  await self.send_chat_message(
787
802
  message_type="tool_call",
788
- content=f"Calling {WebSearchCallBlock.TOOL_LABEL}: {block.label()}",
803
+ content=f"Calling {block.tool_label}: {block.label()}",
789
804
  is_streaming=False,
790
- tool_description=WebSearchCallBlock.TOOL_LABEL,
805
+ tool_description=block.tool_label,
791
806
  tool_call_id=tool_call_id,
792
807
  )
793
808
  await self.send_chat_message(
794
809
  message_type="tool_result",
795
810
  content=block.result_summary(),
796
811
  is_streaming=False,
797
- tool_description=WebSearchCallBlock.TOOL_LABEL,
812
+ tool_description=block.tool_label,
798
813
  tool_call_id=tool_call_id,
799
814
  )
800
815
 
@@ -1130,7 +1145,15 @@ class BaseAgent(LogMixin):
1130
1145
  if new_calls:
1131
1146
  self._context_residual_tokens += self.HOSTED_SEARCH_PROVISIONAL_TOKENS * new_calls
1132
1147
  return
1133
- billed = (assistant_message.usage_metadata or {}).get("prompt_tokens")
1148
+ billed = (
1149
+ assistant_message.usage.input_tokens
1150
+ if assistant_message.usage and assistant_message.usage.reported
1151
+ else (
1152
+ (assistant_message.usage_metadata or {}).get("prompt_tokens")
1153
+ or (assistant_message.usage_metadata or {}).get("input_tokens")
1154
+ or (assistant_message.usage_metadata or {}).get("prompt_token_count")
1155
+ )
1156
+ )
1134
1157
  counted = self._last_raw_context_count
1135
1158
  if not isinstance(billed, int) or counted is None:
1136
1159
  return
@@ -1741,6 +1764,7 @@ class BaseAgent(LogMixin):
1741
1764
 
1742
1765
  from kolega_code.llm.client import LLMClient
1743
1766
 
1767
+ endpoint = self.config.custom_endpoint_for(model_config)
1744
1768
  client = LLMClient(
1745
1769
  provider=model_config.provider.value,
1746
1770
  api_key=self.config.get_api_key(model_config.provider) or "",
@@ -1751,6 +1775,8 @@ class BaseAgent(LogMixin):
1751
1775
  token_manager=self.config.get_chatgpt_token_manager(),
1752
1776
  usage_ledger=self.usage_ledger,
1753
1777
  trace_sink=self.llm_trace_sink,
1778
+ base_url=endpoint.base_url if endpoint else None,
1779
+ api_style=endpoint.api_style if endpoint else None,
1754
1780
  )
1755
1781
  with llm_call_origin(helper_origin("hook_prompt")):
1756
1782
  response = await client.generate(
@@ -2485,6 +2511,7 @@ class BaseAgent(LogMixin):
2485
2511
  tools=self.tool_collection.get_tool_list(),
2486
2512
  thinking=self.primary_model_config.thinking_effort,
2487
2513
  hosted_web_search=self.hosted_web_search_active,
2514
+ server_tools=self.server_tools or None,
2488
2515
  # The strict per-run budget rechecks this request inside
2489
2516
  # the client; hand it the count already taken for the
2490
2517
  # gauge (same history) so it is not counted twice.
@@ -113,6 +113,7 @@ class AgentContext:
113
113
  itself is still passed per call.
114
114
  """
115
115
  model_config = self.config.model_config_for_agent(agent_name)
116
+ endpoint = self.config.custom_endpoint_for(model_config)
116
117
 
117
118
  if self.telemetry.langfuse_client:
118
119
  return InstrumentedLLMClient(
@@ -135,6 +136,8 @@ class AgentContext:
135
136
  trace_sink=self.telemetry.llm_trace_sink,
136
137
  context_window_tokens=self.config.context_window_tokens,
137
138
  max_output_tokens=self.config.max_output_tokens,
139
+ base_url=endpoint.base_url if endpoint else None,
140
+ api_style=endpoint.api_style if endpoint else None,
138
141
  )
139
142
 
140
143
  return LLMClient(
@@ -149,4 +152,6 @@ class AgentContext:
149
152
  trace_sink=self.telemetry.llm_trace_sink,
150
153
  context_window_tokens=self.config.context_window_tokens,
151
154
  max_output_tokens=self.config.max_output_tokens,
155
+ base_url=endpoint.base_url if endpoint else None,
156
+ api_style=endpoint.api_style if endpoint else None,
152
157
  )
@@ -399,7 +399,7 @@ class AgentTool(BaseTool):
399
399
  agent.session_recorder = scoped_recorder
400
400
 
401
401
  # Track messages and their sequence
402
- last_saved_index = -1 # Track what we've already saved
402
+ last_saved_index = -1
403
403
  streamed_messages = {} # Track messages by UUID for assembly
404
404
 
405
405
  # Process the task and stream messages
@@ -97,6 +97,7 @@ class TerminalTool(BaseTool):
97
97
  provider = self.config.fast_config.provider
98
98
  api_key = self.config.get_api_key(provider)
99
99
  rate_limits = self.config.fast_config.rate_limits
100
+ endpoint = self.config.custom_endpoint_for(self.config.fast_config)
100
101
 
101
102
  client = LLMClient(
102
103
  provider=provider.value,
@@ -108,6 +109,8 @@ class TerminalTool(BaseTool):
108
109
  token_manager=self.config.get_chatgpt_token_manager(),
109
110
  usage_ledger=getattr(self.caller, "usage_ledger", None),
110
111
  trace_sink=getattr(self.caller, "llm_trace_sink", None),
112
+ base_url=endpoint.base_url if endpoint else None,
113
+ api_style=endpoint.api_style if endpoint else None,
111
114
  )
112
115
 
113
116
  try:
@@ -146,6 +146,7 @@ class WebFetchTool(StreamingTool):
146
146
  def _build_client(self) -> LLMClient:
147
147
  provider = self.config.fast_config.provider
148
148
  rate_limits = self.config.fast_config.rate_limits
149
+ endpoint = self.config.custom_endpoint_for(self.config.fast_config)
149
150
  client_kwargs = {
150
151
  "provider": provider.value,
151
152
  "api_key": self.config.get_api_key(provider),
@@ -156,6 +157,8 @@ class WebFetchTool(StreamingTool):
156
157
  "token_manager": self.config.get_chatgpt_token_manager(),
157
158
  "usage_ledger": getattr(self.caller, "usage_ledger", None),
158
159
  "trace_sink": getattr(self.caller, "llm_trace_sink", None),
160
+ "base_url": endpoint.base_url if endpoint else None,
161
+ "api_style": endpoint.api_style if endpoint else None,
159
162
  }
160
163
  caller_llm = getattr(self.caller, "llm", None)
161
164
  if isinstance(caller_llm, InstrumentedLLMClient):
@@ -302,16 +302,13 @@ class ToolCollection(LogMixin):
302
302
  self.workspace_id = workspace_id
303
303
  self.thread_id = thread_id
304
304
 
305
- # Convert string path to Path object if needed
306
305
  self.project_path = Path(project_path) if isinstance(project_path, str) else project_path
307
306
 
308
- # Create filesystem instance if not provided
309
307
  if filesystem is None:
310
308
  self.filesystem = LocalFileSystem(root_path=self.project_path)
311
309
  else:
312
310
  self.filesystem = filesystem
313
311
 
314
- # Create terminal manager instance if not provided
315
312
  if terminal_manager is None:
316
313
  self.terminal_manager = LocalTerminalManager(
317
314
  workspace_id, thread_id, connection_manager, default_workdir=self.project_path
@@ -319,7 +316,6 @@ class ToolCollection(LogMixin):
319
316
  else:
320
317
  self.terminal_manager = terminal_manager
321
318
 
322
- # Create browser manager instance if not provided
323
319
  if browser_manager is None:
324
320
  self.browser_manager = PlaywrightBrowserManager()
325
321
  else:
@@ -388,7 +384,6 @@ class ToolCollection(LogMixin):
388
384
  }
389
385
  self.tool_exclusions.extend(tool_config.tool_exclusions)
390
386
 
391
- # Initialize tool backends
392
387
  self._initialize_tools()
393
388
  self._register_tool_extensions()
394
389
 
@@ -619,7 +614,6 @@ class ToolCollection(LogMixin):
619
614
  browser_manager=self.browser_manager,
620
615
  )
621
616
 
622
- # Build tool
623
617
  self.build_tool = BuildTool(
624
618
  self.project_path,
625
619
  self.workspace_id,