kolega-code 0.36.0__tar.gz → 0.38.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 (488) hide show
  1. {kolega_code-0.36.0 → kolega_code-0.38.0}/CHANGELOG.md +65 -0
  2. {kolega_code-0.36.0 → kolega_code-0.38.0}/PKG-INFO +3 -1
  3. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/__init__.py +1 -1
  4. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/__init__.py +1 -1
  5. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/compression.py +1 -1
  6. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/gateway.py +13 -0
  7. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/provider_registry.py +3 -4
  8. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/settings.py +81 -4
  9. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/gateway/service.py +36 -0
  10. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/providers/deepseek_responses.py +2 -2
  11. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/accessors.py +4 -2
  12. kolega_code-0.38.0/kolega_code/llm/specs/catalog/deepseek.py +99 -0
  13. {kolega_code-0.36.0 → kolega_code-0.38.0}/pyproject.toml +7 -1
  14. kolega_code-0.36.0/kolega_code/llm/specs/catalog/deepseek.py +0 -82
  15. {kolega_code-0.36.0 → kolega_code-0.38.0}/.gitignore +0 -0
  16. {kolega_code-0.36.0 → kolega_code-0.38.0}/CONTRIBUTING.md +0 -0
  17. {kolega_code-0.36.0 → kolega_code-0.38.0}/LICENSE +0 -0
  18. {kolega_code-0.36.0 → kolega_code-0.38.0}/MIGRATION.md +0 -0
  19. {kolega_code-0.36.0 → kolega_code-0.38.0}/README.md +0 -0
  20. {kolega_code-0.36.0 → kolega_code-0.38.0}/RELEASING.md +0 -0
  21. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/LICENSE +0 -0
  22. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/manifest.json +0 -0
  23. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/deep-research/SKILL.md +0 -0
  24. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/deep-research/references/evidence-and-reporting.md +0 -0
  25. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/deep-research/references/gigacode-workflow.md +0 -0
  26. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/deep-research/scripts/deep-research.workflow +0 -0
  27. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/deep-research/scripts/materialize_report.py +0 -0
  28. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/docx/LICENSE +0 -0
  29. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/docx/SKILL.md +0 -0
  30. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/docx/references/examples.md +0 -0
  31. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/docx/references/limitations.md +0 -0
  32. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/docx/references/operations.md +0 -0
  33. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/docx/references/quality.md +0 -0
  34. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/docx/requirements.txt +0 -0
  35. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/docx/scripts/docx_tool.py +0 -0
  36. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/docx/scripts/smoke_test.py +0 -0
  37. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/humanizer/LICENSE +0 -0
  38. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/humanizer/SKILL.md +0 -0
  39. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pdf/LICENSE +0 -0
  40. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pdf/SKILL.md +0 -0
  41. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pdf/references/examples.md +0 -0
  42. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pdf/references/limitations.md +0 -0
  43. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pdf/references/ocr.md +0 -0
  44. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pdf/references/operations.md +0 -0
  45. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pdf/references/quality.md +0 -0
  46. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pdf/references/redaction.md +0 -0
  47. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-paddle.txt +0 -0
  48. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-surya.txt +0 -0
  49. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pdf/requirements.txt +0 -0
  50. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pdf/scripts/pdf_tool.py +0 -0
  51. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pdf/scripts/smoke_test.py +0 -0
  52. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pptx/LICENSE +0 -0
  53. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pptx/SKILL.md +0 -0
  54. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pptx/references/examples.md +0 -0
  55. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pptx/references/limitations.md +0 -0
  56. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pptx/references/operations.md +0 -0
  57. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pptx/requirements.txt +0 -0
  58. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pptx/scripts/pptx_tool.py +0 -0
  59. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/pptx/scripts/smoke_test.py +0 -0
  60. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/review/SKILL.md +0 -0
  61. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/review/references/github-publishing.md +0 -0
  62. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/skill-authoring/SKILL.md +0 -0
  63. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/skill-authoring/references/review-checklist.md +0 -0
  64. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/xlsx/LICENSE +0 -0
  65. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/xlsx/SKILL.md +0 -0
  66. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/xlsx/references/examples.md +0 -0
  67. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/xlsx/references/limitations.md +0 -0
  68. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/xlsx/references/operations.md +0 -0
  69. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/xlsx/references/quality.md +0 -0
  70. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/xlsx/requirements.txt +0 -0
  71. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/xlsx/scripts/smoke_test.py +0 -0
  72. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/_bundled_skills/skills/xlsx/scripts/xlsx_tool.py +0 -0
  73. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/acp/__init__.py +0 -0
  74. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/acp/agent_factory.py +0 -0
  75. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/acp/bridge.py +0 -0
  76. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/acp/diffs.py +0 -0
  77. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/acp/permissions.py +0 -0
  78. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/acp/plans.py +0 -0
  79. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/acp/questions.py +0 -0
  80. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/acp/server.py +0 -0
  81. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/acp/session.py +0 -0
  82. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/acp/usage.py +0 -0
  83. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/baseagent.py +0 -0
  84. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/browseragent.py +0 -0
  85. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/coder.py +0 -0
  86. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/common.py +0 -0
  87. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/context.py +0 -0
  88. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/conversation.py +0 -0
  89. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/custom_agents.py +0 -0
  90. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/edit_protocols.py +0 -0
  91. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/errors.py +0 -0
  92. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/eval/__init__.py +0 -0
  93. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/eval/bridge.py +0 -0
  94. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/eval/bundle-requirements.in +0 -0
  95. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/eval/bundle-requirements.txt +0 -0
  96. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/eval/env.py +0 -0
  97. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/eval/js_kernel.py +0 -0
  98. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/eval/kernel.py +0 -0
  99. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/eval/prelude.js +0 -0
  100. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/eval/prelude.py +0 -0
  101. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/eval/protocol.py +0 -0
  102. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/eval/py_kernel.py +0 -0
  103. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/eval/runner.js +0 -0
  104. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/eval/runner.py +0 -0
  105. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/generalagent.py +0 -0
  106. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/goal.py +0 -0
  107. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/handoff.py +0 -0
  108. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/investigationagent.py +0 -0
  109. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/model_routing.py +0 -0
  110. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/orchestration/__init__.py +0 -0
  111. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/orchestration/accounting.py +0 -0
  112. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/orchestration/budget.py +0 -0
  113. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/orchestration/context.py +0 -0
  114. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/orchestration/errors.py +0 -0
  115. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/orchestration/executor.py +0 -0
  116. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/orchestration/guide.py +0 -0
  117. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/orchestration/journal.py +0 -0
  118. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/orchestration/runtime.py +0 -0
  119. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/orchestration/types.py +0 -0
  120. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/planningagent.py +0 -0
  121. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_dump.py +0 -0
  122. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_overrides.py +0 -0
  123. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_provider.py +0 -0
  124. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_exhausted.user.md +0 -0
  125. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_nudge.user.md.j2 +0 -0
  126. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/truncated_turn_nudge.user.md.j2 +0 -0
  127. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
  128. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
  129. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/auxiliary/handoff/document.system.md +0 -0
  130. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/auxiliary/handoff/document.user.md.j2 +0 -0
  131. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
  132. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
  133. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/extensions/cli/build_questions.md +0 -0
  134. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/extensions/cli/current_plan_artifact.md.j2 +0 -0
  135. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/extensions/cli/mode_switch_notice.md.j2 +0 -0
  136. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
  137. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/extensions/cli/scratchpad.md.j2 +0 -0
  138. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
  139. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list_readonly.md +0 -0
  140. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/extensions/cli/worktree_control.md.j2 +0 -0
  141. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -0
  142. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +0 -0
  143. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/system/agents/coder_ask.md.j2 +0 -0
  144. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/system/agents/coder_base.md.j2 +0 -0
  145. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
  146. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +0 -0
  147. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +0 -0
  148. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +0 -0
  149. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
  150. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/system/includes/context_updates.md +0 -0
  151. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
  152. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -0
  153. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +0 -0
  154. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -0
  155. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -0
  156. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +0 -0
  157. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/system/includes/terminal_tools.md +0 -0
  158. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/apply_patch.md +0 -0
  159. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/ask_user_choice.md +0 -0
  160. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_click.md +0 -0
  161. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_close.md +0 -0
  162. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_console_messages.md +0 -0
  163. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_drag.md +0 -0
  164. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_drop.md +0 -0
  165. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_evaluate.md +0 -0
  166. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_file_upload.md +0 -0
  167. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_fill_form.md +0 -0
  168. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_find.md +0 -0
  169. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_handle_dialog.md +0 -0
  170. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_hover.md +0 -0
  171. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_navigate.md +0 -0
  172. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_navigate_back.md +0 -0
  173. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_network_request.md +0 -0
  174. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_network_requests.md +0 -0
  175. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_press_key.md +0 -0
  176. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_resize.md +0 -0
  177. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_scroll.md +0 -0
  178. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_select_option.md +0 -0
  179. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_snapshot.md +0 -0
  180. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_tabs.md +0 -0
  181. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_take_screenshot.md +0 -0
  182. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_type.md +0 -0
  183. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/browser_wait_for.md +0 -0
  184. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/build_backend.md +0 -0
  185. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/build_frontend.md +0 -0
  186. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/claude_edit.md +0 -0
  187. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/claude_write.md +0 -0
  188. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/dispatch_agent.md +0 -0
  189. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/edit.md +0 -0
  190. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/eval.md +0 -0
  191. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/exec_command.md +0 -0
  192. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/get_host.md +0 -0
  193. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/get_task_list.md +0 -0
  194. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/get_task_list_readonly.md +0 -0
  195. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/hashline_edit.md +0 -0
  196. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/hashline_write.md +0 -0
  197. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/kill_command.md +0 -0
  198. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/list_agents.md +0 -0
  199. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/list_sessions.md +0 -0
  200. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/list_subagent_models.md +0 -0
  201. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/list_workflow_runs.md +0 -0
  202. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/lsp.md +0 -0
  203. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/lsp_edit.md +0 -0
  204. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/multi_edit.md +0 -0
  205. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/read.md +0 -0
  206. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/read_image.md +0 -0
  207. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/resolve.md +0 -0
  208. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/run_workflow.md +0 -0
  209. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/send_message.md +0 -0
  210. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/set_goal.md +0 -0
  211. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/skill.md +0 -0
  212. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/snapshot.md +0 -0
  213. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/switch_worktree.md +0 -0
  214. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/update_task_list.md +0 -0
  215. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/web_fetch.md +0 -0
  216. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/web_search.md +0 -0
  217. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/write.md +0 -0
  218. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/write_plan.md +0 -0
  219. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/tools/write_stdin.md +0 -0
  220. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +0 -0
  221. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
  222. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/prompts.py +0 -0
  223. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/session_metadata.py +0 -0
  224. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/agent_tool.py +0 -0
  225. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/base_tool.py +0 -0
  226. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/browser_tool.py +0 -0
  227. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/build_tool.py +0 -0
  228. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/codex_patch.py +0 -0
  229. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
  230. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/edit_tool.py +0 -0
  231. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/eval_tool.py +0 -0
  232. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/hashline_v2.py +0 -0
  233. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/lsp_tool.py +0 -0
  234. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
  235. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/network_status.py +0 -0
  236. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/read_file_tool.py +0 -0
  237. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/read_image_tool.py +0 -0
  238. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/search_backends/__init__.py +0 -0
  239. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
  240. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +0 -0
  241. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
  242. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +0 -0
  243. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
  244. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
  245. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/search_backends/tavily.py +0 -0
  246. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/snapshot_tool.py +0 -0
  247. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
  248. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/terminal_tool.py +0 -0
  249. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/web_fetch/__init__.py +0 -0
  250. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/web_fetch/answering.py +0 -0
  251. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/web_fetch/documents.py +0 -0
  252. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/web_fetch/extractors.py +0 -0
  253. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/web_fetch/pipeline.py +0 -0
  254. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/web_fetch/retrieval.py +0 -0
  255. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/web_fetch_tool.py +0 -0
  256. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/web_search_tool.py +0 -0
  257. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
  258. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tool_definitions.py +0 -0
  259. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/tools.py +0 -0
  260. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/utils/commands.py +0 -0
  261. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/agent/volatile_context.py +0 -0
  262. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/auth/__init__.py +0 -0
  263. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/auth/_jwt.py +0 -0
  264. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/auth/chatgpt_oauth.py +0 -0
  265. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/auth/constants.py +0 -0
  266. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/auth/tokens.py +0 -0
  267. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/browser_extension/__init__.py +0 -0
  268. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/browser_extension/framing.py +0 -0
  269. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/browser_extension/installer.py +0 -0
  270. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/browser_extension/manager.py +0 -0
  271. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/browser_extension/multiplex.py +0 -0
  272. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/browser_extension/native_host.py +0 -0
  273. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/browser_extension/protocol.py +0 -0
  274. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/browser_extension/registry.py +0 -0
  275. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/browser_extension/runtime.py +0 -0
  276. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/__init__.py +0 -0
  277. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/acp.py +0 -0
  278. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/app.py +0 -0
  279. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/ask_output.py +0 -0
  280. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/atif_export.py +0 -0
  281. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/browser_backend.py +0 -0
  282. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/clipboard_image.py +0 -0
  283. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/config.py +0 -0
  284. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/connection.py +0 -0
  285. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/cron.py +0 -0
  286. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/diagnostics.py +0 -0
  287. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/file_index.py +0 -0
  288. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/goal.py +0 -0
  289. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/loop.py +0 -0
  290. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/main.py +0 -0
  291. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/mentions.py +0 -0
  292. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/messages.py +0 -0
  293. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/model_catalog.py +0 -0
  294. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/model_connection.py +0 -0
  295. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/peer_messaging.py +0 -0
  296. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/plan_artifacts.py +0 -0
  297. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/prompt_history.py +0 -0
  298. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/session_event_protocol.py +0 -0
  299. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/session_event_store.py +0 -0
  300. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/session_journal.py +0 -0
  301. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/session_store.py +0 -0
  302. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/session_usage.py +0 -0
  303. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/skills.py +0 -0
  304. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/slash_commands.py +0 -0
  305. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/theme.py +0 -0
  306. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/__init__.py +0 -0
  307. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/agent_runtime.py +0 -0
  308. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/app_base.py +0 -0
  309. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/changes_screen.py +0 -0
  310. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/command_handlers.py +0 -0
  311. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/constants.py +0 -0
  312. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/custom_model.py +0 -0
  313. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/loop_runtime.py +0 -0
  314. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/memory_screen.py +0 -0
  315. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/onboarding_screen.py +0 -0
  316. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/pacing.py +0 -0
  317. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/prompt_flows.py +0 -0
  318. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/session_diff.py +0 -0
  319. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/settings_panel.py +0 -0
  320. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/settings_screen.py +0 -0
  321. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/state.py +0 -0
  322. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/status_dashboard.py +0 -0
  323. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/styles.tcss +0 -0
  324. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/sub_agent_screen.py +0 -0
  325. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/terminal_display.py +0 -0
  326. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/transcript.py +0 -0
  327. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/tui/widgets.py +0 -0
  328. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/cli/updater.py +0 -0
  329. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/config.py +0 -0
  330. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/events.py +0 -0
  331. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/extensions.py +0 -0
  332. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/gateway/__init__.py +0 -0
  333. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/gateway/access.py +0 -0
  334. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/gateway/adapters/__init__.py +0 -0
  335. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/gateway/adapters/base.py +0 -0
  336. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/gateway/adapters/echo.py +0 -0
  337. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/gateway/adapters/telegram/__init__.py +0 -0
  338. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/gateway/adapters/telegram/adapter.py +0 -0
  339. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/gateway/adapters/telegram/formatting.py +0 -0
  340. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/gateway/bridge.py +0 -0
  341. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/gateway/commands.py +0 -0
  342. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/gateway/config.py +0 -0
  343. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/gateway/control_relay.py +0 -0
  344. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/gateway/daemon.py +0 -0
  345. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/gateway/event_router.py +0 -0
  346. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/gateway/questions.py +0 -0
  347. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/gateway/redaction.py +0 -0
  348. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/gateway/router.py +0 -0
  349. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/gateway/sessions.py +0 -0
  350. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/gateway/stt.py +0 -0
  351. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/git_env.py +0 -0
  352. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/hooks/__init__.py +0 -0
  353. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/hooks/backends.py +0 -0
  354. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/hooks/config.py +0 -0
  355. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/hooks/dispatcher.py +0 -0
  356. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/hooks/events.py +0 -0
  357. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/hooks/matcher.py +0 -0
  358. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/hooks/outcome.py +0 -0
  359. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/client.py +0 -0
  360. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/exceptions.py +0 -0
  361. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/instrumented_client.py +0 -0
  362. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/ledger.py +0 -0
  363. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/models.py +0 -0
  364. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/providers/__init__.py +0 -0
  365. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/providers/_token_encoding.py +0 -0
  366. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/providers/anthropic.py +0 -0
  367. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/providers/base.py +0 -0
  368. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
  369. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/providers/google.py +0 -0
  370. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/providers/models.py +0 -0
  371. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/providers/openai.py +0 -0
  372. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/providers/openai_responses.py +0 -0
  373. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/providers/perplexity_responses.py +0 -0
  374. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/providers/responses_common.py +0 -0
  375. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/providers/tinker.py +0 -0
  376. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/providers/tinker_trace.py +0 -0
  377. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/ratelimit.py +0 -0
  378. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/__init__.py +0 -0
  379. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/catalog/__init__.py +0 -0
  380. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/catalog/anthropic.py +0 -0
  381. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/catalog/dashscope.py +0 -0
  382. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/catalog/fireworks.py +0 -0
  383. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/catalog/google.py +0 -0
  384. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/catalog/groq.py +0 -0
  385. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/catalog/kimi_coding.py +0 -0
  386. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/catalog/moonshot.py +0 -0
  387. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/catalog/ollama_cloud.py +0 -0
  388. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/catalog/openai.py +0 -0
  389. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/catalog/openai_chatgpt.py +0 -0
  390. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/catalog/openrouter.py +0 -0
  391. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/catalog/perplexity_agent.py +0 -0
  392. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/catalog/thinking_machines.py +0 -0
  393. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/catalog/tinker.py +0 -0
  394. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/catalog/together.py +0 -0
  395. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/catalog/xai.py +0 -0
  396. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/catalog/zai.py +0 -0
  397. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/custom_endpoints.py +0 -0
  398. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/ollama_cloud_catalog.py +0 -0
  399. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/openrouter_catalog.py +0 -0
  400. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/perplexity_catalog.py +0 -0
  401. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/thinking.py +0 -0
  402. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/tinker_catalog.py +0 -0
  403. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/types.py +0 -0
  404. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/specs/validation.py +0 -0
  405. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/timeouts.py +0 -0
  406. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/tool_execution_ids.py +0 -0
  407. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/llm/usage.py +0 -0
  408. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/local_state.py +0 -0
  409. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/mcp/__init__.py +0 -0
  410. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/mcp/config.py +0 -0
  411. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/mcp/oauth.py +0 -0
  412. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/mcp/service.py +0 -0
  413. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/mcp/state.py +0 -0
  414. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/mcp/tools.py +0 -0
  415. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/mcp/transport.py +0 -0
  416. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/memory/__init__.py +0 -0
  417. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/memory/identity.py +0 -0
  418. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/memory/manager.py +0 -0
  419. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/memory/manifest.py +0 -0
  420. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/memory/markdown.py +0 -0
  421. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/memory/models.py +0 -0
  422. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/memory/protocol.py +0 -0
  423. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/memory/registry.py +0 -0
  424. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/models/__init__.py +0 -0
  425. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/models/sandbox_terminal_state.py +0 -0
  426. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/permissions.py +0 -0
  427. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/runtime.py +0 -0
  428. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/sandbox/README.md +0 -0
  429. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/sandbox/__init__.py +0 -0
  430. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/sandbox/async_filesystem.py +0 -0
  431. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/sandbox/base.py +0 -0
  432. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/sandbox/browser.py +0 -0
  433. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/sandbox/event_loop.py +0 -0
  434. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/sandbox/filesystem.py +0 -0
  435. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/sandbox/local.py +0 -0
  436. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/sandbox/serializer.py +0 -0
  437. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/sandbox/terminal.py +0 -0
  438. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/sandbox/utils.py +0 -0
  439. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/scratchpad.py +0 -0
  440. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/security/__init__.py +0 -0
  441. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/security/secrets.py +0 -0
  442. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/services/base.py +0 -0
  443. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/services/browser.py +0 -0
  444. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/services/file_system.py +0 -0
  445. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/services/html.py +0 -0
  446. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/services/lsp/__init__.py +0 -0
  447. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/services/lsp/client.py +0 -0
  448. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/services/lsp/config.py +0 -0
  449. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/services/lsp/detector.py +0 -0
  450. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/services/lsp/diagnostics.py +0 -0
  451. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/services/lsp/edits.py +0 -0
  452. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/services/lsp/manager.py +0 -0
  453. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/services/lsp/registry.py +0 -0
  454. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/services/lsp/registry.yaml +0 -0
  455. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/services/snapshots.py +0 -0
  456. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/services/terminal.py +0 -0
  457. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/services/terminal_buffer.py +0 -0
  458. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/services/workspace_scan.py +0 -0
  459. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/session/__init__.py +0 -0
  460. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/session/control.py +0 -0
  461. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/session/inbox.py +0 -0
  462. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/session/inmemory.py +0 -0
  463. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/session/projection.py +0 -0
  464. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/session/recording.py +0 -0
  465. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/session/runtime.py +0 -0
  466. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/session/store.py +0 -0
  467. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/testing/__init__.py +0 -0
  468. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/testing/store_conformance.py +0 -0
  469. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/tools/__init__.py +0 -0
  470. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/tools/ask_user.py +0 -0
  471. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/tools/core.py +0 -0
  472. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/tools/definitions.py +0 -0
  473. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/tools/param_aliases.py +0 -0
  474. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/tools/registry.py +0 -0
  475. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/utils/__init__.py +0 -0
  476. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/utils/images.py +0 -0
  477. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/web/__init__.py +0 -0
  478. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/web/assets/fold.js +0 -0
  479. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/web/assets/player.css +0 -0
  480. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/web/assets/player.html +0 -0
  481. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/web/assets/player.js +0 -0
  482. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/web/bundle.py +0 -0
  483. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/web/hosting.py +0 -0
  484. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/web/redaction.py +0 -0
  485. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/web/server.py +0 -0
  486. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/web/singlefile.py +0 -0
  487. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/web/theme_css.py +0 -0
  488. {kolega_code-0.36.0 → kolega_code-0.38.0}/kolega_code/worktrees.py +0 -0
@@ -6,6 +6,71 @@ This project uses GitHub Releases for detailed generated release notes. This fil
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 0.38.0 - 2026-09-11
10
+
11
+ ### Added
12
+
13
+ - **DeepSeek V4.1 Flash (released).** The finished model is served under
14
+ DeepSeek's canonical `deepseek-flash` id and is available as **DeepSeek V4.1
15
+ Flash** in the model picker, with vision and `none`/`low`/`high`/`max`
16
+ reasoning effort (default `high`). Verified live: 1,048,576-token context and a
17
+ 393,216-token API output ceiling. DeepSeek's Responses API ignores the built-in
18
+ `web_search` tool, so this model does not advertise hosted web search.
19
+
20
+ ### Changed
21
+
22
+ - **DeepSeek now defaults to V4.1 Flash.** `deepseek-flash` is the default model
23
+ (and first entry in the picker) for the DeepSeek provider, matching DeepSeek's
24
+ own guidance that V4.1 Flash supersedes V4 Pro on performance, cost, speed, and
25
+ total time. `deepseek-v4-pro` remains selectable; DeepSeek routes it to V4.1
26
+ Flash from September 14, 2026.
27
+
28
+ ### Removed
29
+
30
+ - **Retired DeepSeek flash ids.** DeepSeek only serves two models now — V4.1 Flash
31
+ and V4 Pro — so Kolega's DeepSeek catalog lists exactly those two. The retired
32
+ `deepseek-v4-flash` and `deepseek-v4-flash-vision-exp` entries are gone (they
33
+ named nothing distinct: DeepSeek routes both to V4.1 Flash). Settings, sessions,
34
+ and per-role overrides that still name one of them fall back to the DeepSeek
35
+ default (`deepseek-flash`); naming one explicitly (`--model`,
36
+ `KOLEGA_CODE_MODEL`) fails with a "not available for" error.
37
+ - **DeepSeek V4.1 Flash preview id.** The expired temporary
38
+ `deepseek-v4.1-flash-expires-on-0910` id is no longer selectable. Settings and
39
+ per-role overrides that still name it fall back to the DeepSeek default
40
+ (`deepseek-flash`); naming it explicitly (`--model`, `KOLEGA_CODE_MODEL`) fails
41
+ with a "not available for" error. Switch to `deepseek-flash`, which DeepSeek
42
+ serves the same model under.
43
+
44
+ ### Fixed
45
+
46
+ - **Hosted web search no longer offered where DeepSeek stopped serving it.**
47
+ DeepSeek silently removed server-side `web_search` with the V4.1 release, so the
48
+ flash models' `/web` toggle was advertising a capability that no longer exists.
49
+ `deepseek-v4-pro` still executes hosted search and keeps it.
50
+
51
+ ## 0.37.0 - 2026-09-09
52
+
53
+ ### Added
54
+
55
+ - **DeepSeek V4.1 Flash (preview).** DeepSeek's temporary
56
+ `deepseek-v4.1-flash-expires-on-0910` model is available under **DeepSeek V4.1
57
+ Flash (Preview, expires Sep 10)** in the model picker, with vision, hosted web
58
+ search, and `none`/`low`/`high`/`max` reasoning effort (default `high`). It is
59
+ not the default and is not aliased to a stable model; the ID expires on
60
+ September 10, 2026, after which an available stable model must be selected.
61
+
62
+ ### Fixed
63
+
64
+ - Pin PDFium and the Intel Python 3.11/3.12 ONNX Runtime dependency to restore
65
+ compatible wheel selection on macOS Monterey for both the installer and direct
66
+ package installs. Intel Monterey requires Python 3.11 or 3.12.
67
+ - Settings saves are merged with concurrent writers instead of replacing the whole
68
+ file, so a long-running instance can no longer drop a gateway token or API key
69
+ another process saved after it started.
70
+ - `kolega-code gateway status` now reports an installed background service that
71
+ is failing to start (service state, start count, last exit code, log path)
72
+ instead of only printing "not running".
73
+
9
74
  ## 0.36.0 - 2026-09-07
10
75
 
11
76
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kolega-code
3
- Version: 0.36.0
3
+ Version: 0.38.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/
@@ -47,6 +47,7 @@ Requires-Dist: markdownify==1.2.3
47
47
  Requires-Dist: markitdown[docx,pdf,pptx,xls,xlsx]==0.1.6
48
48
  Requires-Dist: mcp==1.28.1
49
49
  Requires-Dist: nest-asyncio==1.6.0
50
+ Requires-Dist: onnxruntime==1.19.2; sys_platform == 'darwin' and platform_machine == 'x86_64' and python_version < '3.13'
50
51
  Requires-Dist: onnxruntime==1.27.0; python_version >= '3.14' and sys_platform != 'win32'
51
52
  Requires-Dist: openai==2.46.0
52
53
  Requires-Dist: packaging==25.0
@@ -56,6 +57,7 @@ Requires-Dist: playwright==1.59.0
56
57
  Requires-Dist: psutil==7.2.2
57
58
  Requires-Dist: pydantic==2.13.4
58
59
  Requires-Dist: pygments==2.20.0
60
+ Requires-Dist: pypdfium2==5.11.0
59
61
  Requires-Dist: python-dotenv==1.2.2
60
62
  Requires-Dist: pyyaml==6.0.3
61
63
  Requires-Dist: readability-lxml==0.8.4.1
@@ -174,4 +174,4 @@ __all__ = [
174
174
  "parse_git_status_output",
175
175
  ]
176
176
 
177
- __version__ = "0.36.0"
177
+ __version__ = "0.38.0"
@@ -51,4 +51,4 @@ __all__ = [
51
51
  "ToolExtension",
52
52
  ]
53
53
 
54
- __version__ = "0.36.0"
54
+ __version__ = "0.38.0"
@@ -157,7 +157,7 @@ class HistoryCompressor:
157
157
  # Don't bother summarizing a trivially short prefix.
158
158
  MIN_PREFIX_TO_SUMMARIZE = 3
159
159
  # Cap the summary length. The prompt targets ~600 words, but reasoning
160
- # models (deepseek-v4-flash Responses, etc.) can consume the entire budget
160
+ # models (DeepSeek Responses models, etc.) can consume the entire budget
161
161
  # on chain-of-thought and leave no room for text output, producing an empty
162
162
  # summary. A generous ceiling gives reasoning headroom while still staying
163
163
  # well under the model's full completion budget.
@@ -33,6 +33,7 @@ from kolega_code.gateway.service import (
33
33
  install_service,
34
34
  is_service_installed,
35
35
  restart_service,
36
+ service_state_summary,
36
37
  uninstall_service,
37
38
  )
38
39
 
@@ -290,6 +291,7 @@ def _gateway_status(config: GatewayConfig) -> int:
290
291
  if payload is not None:
291
292
  # A heartbeat from a process that no longer exists (e.g. SIGKILLed).
292
293
  print(f"gateway: not running (stale heartbeat from pid {payload.get('pid')})")
294
+ _print_service_state(config)
293
295
  return 0
294
296
  lock = FileLock(str(config.state_dir / LOCK_FILE_NAME))
295
297
  try:
@@ -303,9 +305,20 @@ def _gateway_status(config: GatewayConfig) -> int:
303
305
  return 0
304
306
  lock.release()
305
307
  print(f"gateway: not running (state: {config.state_dir})")
308
+ _print_service_state(config)
306
309
  return 0
307
310
 
308
311
 
312
+ def _print_service_state(config: GatewayConfig) -> None:
313
+ summary = service_state_summary()
314
+ if summary is None:
315
+ return
316
+ print(f" service: {summary}")
317
+ log_path = config.state_dir / "gateway.log"
318
+ if log_path.exists():
319
+ print(f" log: {log_path}")
320
+
321
+
309
322
  def _pid_alive(pid: Any) -> bool:
310
323
  if not isinstance(pid, int) or pid <= 0:
311
324
  return False
@@ -70,9 +70,8 @@ MODEL_LABELS: dict[str, str] = {
70
70
  "kimi-for-coding": "Kimi for Coding",
71
71
  "kimi-for-coding-highspeed": "Kimi for Coding (HighSpeed)",
72
72
  # DeepSeek
73
+ "deepseek-flash": "DeepSeek V4.1 Flash",
73
74
  "deepseek-v4-pro": "DeepSeek V4 Pro",
74
- "deepseek-v4-flash": "DeepSeek V4 Flash",
75
- "deepseek-v4-flash-vision-exp": "DeepSeek V4 Flash Vision (Exp)",
76
75
  # Z.AI (GLM Coding Plan)
77
76
  "glm-5.3": "GLM-5.3",
78
77
  "glm-5.3-flash": "GLM-5.3 Flash",
@@ -163,7 +162,7 @@ MODEL_LABELS: dict[str, str] = {
163
162
  # "available set is everything, default pick is curated" split.
164
163
  PROVIDER_DEFAULT_MODEL: dict[ModelProvider, str] = {
165
164
  ModelProvider.MOONSHOT: "kimi-k3",
166
- ModelProvider.DEEPSEEK: "deepseek-v4-pro",
165
+ ModelProvider.DEEPSEEK: "deepseek-flash",
167
166
  ModelProvider.ZAI: "glm-5.3",
168
167
  ModelProvider.KIMI_CODING: "kimi-for-coding",
169
168
  ModelProvider.ANTHROPIC: "claude-opus-5",
@@ -188,7 +187,7 @@ PROVIDER_DEFAULT_MODEL: dict[ModelProvider, str] = {
188
187
  UI_DEFAULT_PROVIDER = ModelProvider.MOONSHOT.value
189
188
  UI_DEFAULT_MODEL = "kimi-k3"
190
189
  MOONSHOT_K26_MODEL = "kimi-k2.6"
191
- DEEPSEEK_DEFAULT_MODEL = "deepseek-v4-pro"
190
+ DEEPSEEK_DEFAULT_MODEL = "deepseek-flash"
192
191
 
193
192
 
194
193
  @dataclass(frozen=True)
@@ -2,11 +2,15 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import copy
5
6
  import json
6
7
  from dataclasses import dataclass, field
7
8
  from pathlib import Path
8
9
  from typing import Any, Optional
9
10
 
11
+ from filelock import FileLock
12
+ from filelock import Timeout as FileLockTimeout
13
+
10
14
  from kolega_code.local_state import write_private_text
11
15
  from kolega_code.llm.specs.custom_endpoints import (
12
16
  API_STYLES,
@@ -33,6 +37,41 @@ class SettingsStoreError(RuntimeError):
33
37
  """Raised when CLI settings cannot be loaded or saved."""
34
38
 
35
39
 
40
+ SETTINGS_LOCK_TIMEOUT_SECONDS = 10.0
41
+
42
+
43
+ def _merge_settings_documents(
44
+ base: dict[str, Any],
45
+ current: dict[str, Any],
46
+ on_disk: dict[str, Any],
47
+ ) -> dict[str, Any]:
48
+ """Apply one writer's changes on top of the current document.
49
+
50
+ ``base`` is the state the writer loaded, so keys it did not touch keep the
51
+ on-disk value and a stale writer cannot revert another process's change.
52
+ Nested dicts merge key by key, and keys the writer never saw survive.
53
+ """
54
+ merged: dict[str, Any] = {}
55
+ for key in set(base) | set(current) | set(on_disk):
56
+ if key not in current:
57
+ if key in base:
58
+ continue
59
+ if key in on_disk:
60
+ merged[key] = on_disk[key]
61
+ continue
62
+ if key in base and base[key] == current[key]:
63
+ merged[key] = on_disk[key] if key in on_disk else current[key]
64
+ continue
65
+ if key not in base and current[key] is None and key in on_disk:
66
+ merged[key] = on_disk[key]
67
+ continue
68
+ if isinstance(base.get(key), dict) and isinstance(current[key], dict) and isinstance(on_disk.get(key), dict):
69
+ merged[key] = _merge_settings_documents(base[key], current[key], on_disk[key])
70
+ continue
71
+ merged[key] = current[key]
72
+ return merged
73
+
74
+
36
75
  def _coerce_model_entries(raw: object) -> dict[str, dict]:
37
76
  """Normalize a stored key -> {provider, model, ...} mapping.
38
77
 
@@ -272,6 +311,9 @@ class CliSettings:
272
311
  # Additive optional field — absent in older files -> empty mapping.
273
312
  custom_endpoints: dict[str, dict] = field(default_factory=dict)
274
313
  schema_version: int = SETTINGS_SCHEMA_VERSION
314
+ # The document this instance was loaded from, used as the merge base by
315
+ # SettingsStore.save(). Never serialized.
316
+ _merge_base: Optional[dict[str, Any]] = field(default=None, repr=False, compare=False)
275
317
 
276
318
  @classmethod
277
319
  def from_dict(cls, data: dict) -> "CliSettings":
@@ -452,12 +494,47 @@ class SettingsStore:
452
494
 
453
495
  def load(self) -> CliSettings:
454
496
  if not self.path.exists():
455
- return CliSettings()
497
+ settings = CliSettings()
498
+ settings._merge_base = copy.deepcopy(settings.to_dict())
499
+ return settings
456
500
  try:
457
- return CliSettings.from_dict(json.loads(self.path.read_text(encoding="utf-8")))
501
+ data = json.loads(self.path.read_text(encoding="utf-8"))
502
+ settings = CliSettings.from_dict(data)
458
503
  except json.JSONDecodeError as exc:
459
504
  raise SettingsStoreError(f"Settings file is not valid JSON: {self.path}") from exc
505
+ # The merge base is what this process understood, not the raw file:
506
+ # a key it never saw (newer schema, hand-edit) must survive its save.
507
+ settings._merge_base = copy.deepcopy(settings.to_dict())
508
+ if isinstance(data, dict) and "schema_version" in data:
509
+ settings._merge_base["schema_version"] = data["schema_version"]
510
+ return settings
460
511
 
461
512
  def save(self, settings: CliSettings) -> None:
462
- payload = json.dumps(settings.to_dict(), indent=2, sort_keys=True)
463
- write_private_text(self.path, payload + "\n")
513
+ """Write this instance's changes, keeping concurrent writers' fields."""
514
+ lock = FileLock(f"{self.path}.lock")
515
+ try:
516
+ lock.acquire(timeout=SETTINGS_LOCK_TIMEOUT_SECONDS)
517
+ except FileLockTimeout as exc:
518
+ raise SettingsStoreError(f"Timed out locking the settings file: {self.path}") from exc
519
+ try:
520
+ merged = self._merged_document(settings)
521
+ payload = json.dumps(merged, indent=2, sort_keys=True)
522
+ write_private_text(self.path, payload + "\n")
523
+ finally:
524
+ lock.release()
525
+ settings._merge_base = copy.deepcopy(merged)
526
+
527
+ def _merged_document(self, settings: CliSettings) -> dict[str, Any]:
528
+ current = settings.to_dict()
529
+ if settings._merge_base is None:
530
+ return current
531
+ return _merge_settings_documents(settings._merge_base, current, self._read_document())
532
+
533
+ def _read_document(self) -> dict[str, Any]:
534
+ try:
535
+ raw = json.loads(self.path.read_text(encoding="utf-8"))
536
+ except FileNotFoundError:
537
+ return {}
538
+ except (json.JSONDecodeError, OSError) as exc:
539
+ raise SettingsStoreError(f"Settings file is not valid JSON: {self.path}") from exc
540
+ return raw if isinstance(raw, dict) else {}
@@ -12,6 +12,7 @@ from __future__ import annotations
12
12
 
13
13
  import os
14
14
  import plistlib
15
+ import re
15
16
  import shlex
16
17
  import shutil
17
18
  import subprocess
@@ -214,6 +215,41 @@ def run_service_command(argv: list[str]) -> subprocess.CompletedProcess[str] | N
214
215
  return None
215
216
 
216
217
 
218
+ def service_state_summary(
219
+ *,
220
+ systemd_dir: Optional[Path] = None,
221
+ launchd_dir: Optional[Path] = None,
222
+ platform: Optional[str] = None,
223
+ ) -> Optional[str]:
224
+ """One line of service-manager state for an installed gateway, else None.
225
+
226
+ ``gateway status`` uses this to explain a service that is installed but not
227
+ running, which the daemon's own status file cannot show.
228
+ """
229
+ platform = platform if platform is not None else sys.platform
230
+ if not is_service_installed(systemd_dir=systemd_dir, launchd_dir=launchd_dir, platform=platform):
231
+ return None
232
+ if platform == "darwin":
233
+ proc = run_service_command(["launchctl", "print", f"gui/{os.getuid()}/{LAUNCHD_LABEL}"])
234
+ if proc is None or proc.returncode != 0:
235
+ return "launchd agent installed but not loaded"
236
+ output = proc.stdout or ""
237
+ parts: list[str] = []
238
+ state = re.search(r"^\s*state = (.+)$", output, re.MULTILINE)
239
+ if state:
240
+ parts.append(f"state {state.group(1).strip()}")
241
+ runs = re.search(r"^\s*runs = (\d+)$", output, re.MULTILINE)
242
+ if runs:
243
+ parts.append(f"{runs.group(1)} starts")
244
+ last_exit = re.search(r"^\s*last exit code = (\d+)$", output, re.MULTILINE)
245
+ if last_exit:
246
+ parts.append(f"last exit code {last_exit.group(1)}")
247
+ return "launchd agent " + (", ".join(parts) if parts else "loaded")
248
+ proc = run_service_command(["systemctl", "--user", "is-active", SERVICE_NAME])
249
+ state_text = (proc.stdout or "").strip() if proc is not None else ""
250
+ return f"systemd unit {state_text or 'unknown'}"
251
+
252
+
217
253
  def restart_service(
218
254
  *,
219
255
  unit_path: Optional[Path] = None,
@@ -1,6 +1,6 @@
1
1
  """DeepSeek provider that speaks the **Responses API** (``/responses``).
2
2
 
3
- The whole DeepSeek catalog (``deepseek-v4-pro`` and ``deepseek-v4-flash``) speaks
3
+ The whole DeepSeek catalog (``deepseek-flash`` and ``deepseek-v4-pro``) speaks
4
4
  the Responses API, so the ``deepseek`` provider routes here wholesale from
5
5
  ``LLMClient._provider_class`` (no model-name branching). DeepSeek models hosted on
6
6
  other providers (Fireworks/OpenRouter/Ollama-Cloud) still use Chat Completions via
@@ -49,7 +49,7 @@ from .models import GenerationParams
49
49
  from .responses_common import ResponsesProviderBase
50
50
 
51
51
  DEFAULT_BASE_URL = "https://api.deepseek.com"
52
- DEFAULT_MODEL = "deepseek-v4-flash"
52
+ DEFAULT_MODEL = "deepseek-flash"
53
53
 
54
54
 
55
55
  class DeepSeekResponsesProvider(ResponsesProviderBase):
@@ -201,8 +201,10 @@ def preferred_edit_protocol(provider: str, model_name: str) -> Optional[str]:
201
201
  # takes its catalog value instead.
202
202
  DEEPSEEK_WIRE_OUTPUT_CAP = 64000
203
203
 
204
- # Routes whose catalog max_completion_tokens is itself the real ceiling.
205
- _UNCLAMPED_DEEPSEEK_ROUTES = {("deepseek", "deepseek-v4-flash"), ("deepseek", "deepseek-v4-flash-vision-exp")}
204
+ # Routes that use the catalog output budget without the legacy Pro/chat clamp.
205
+ _UNCLAMPED_DEEPSEEK_ROUTES = {
206
+ ("deepseek", "deepseek-flash"),
207
+ }
206
208
 
207
209
 
208
210
  def is_deepseek_model(model_name: str) -> bool:
@@ -0,0 +1,99 @@
1
+ from kolega_code.llm.specs.types import ThinkingEffortSpec
2
+
3
+ # max_completion_tokens is the MEASURED per-response output ceiling, not
4
+ # DeepSeek's published 384000. Probed 2026-08-03 by
5
+ # tests/agent/llm/test_deepseek_output_cap_live.py:
6
+ # - deepseek-v4-pro (chat), uncapped: the server cuts the stream at exactly
7
+ # 65536 output tokens, reported honestly as finish_reason="length".
8
+ # - deepseek-v4-flash (Responses), uncapped: no hard cut observed — the model
9
+ # SELF-CENSORS ~7.4k tokens in ("response would exceed the maximum output
10
+ # length allowed for this chat interface") with a clean status="completed".
11
+ # With an explicit max_output_tokens=64000 it streams the full 64000 and
12
+ # reports the cap hit honestly (status="incomplete"/max_output_tokens).
13
+ # - Over-ceiling caps (384000) are accepted silently on both paths.
14
+ # flash is 384000 (corrected from 65536, which was pro's measured chat ceiling
15
+ # assumed to apply here): those probes only measured visible output, while a
16
+ # reasoning-heavy call was later measured running to 112990 tokens in a single
17
+ # Responses call.
18
+ # pro never sends this value raw: the Responses path clamps to
19
+ # DEEPSEEK_WIRE_OUTPUT_CAP=64000 (specs/accessors.py) so the client cap fires
20
+ # before the server ceiling and truncation is reported honestly. flash passes
21
+ # through.
22
+ #
23
+ # INSERTION ORDER IS LOAD-BEARING: the first entry is what the Settings model
24
+ # picker shows first and what a provider switch falls back to
25
+ # (ui_model_options(provider)[0]); it must stay in sync with
26
+ # PROVIDER_DEFAULT_MODEL[DEEPSEEK] in cli/provider_registry.py.
27
+ DEEPSEEK_SPECS = {
28
+ # Released DeepSeek Flash (V4.1), served under the canonical `deepseek-flash`, and
29
+ # the provider default. Verified live on /responses 2026-09-10: the retired preview
30
+ # ID (`deepseek-v4.1-flash-expires-on-0910`) as well as the older `deepseek-v4-flash`
31
+ # and `deepseek-v4-flash-vision-exp` aliases all now answer as
32
+ # `model="deepseek-flash"`, and `/models` lists exactly `deepseek-flash` and
33
+ # `deepseek-v4-pro`; a versioned `deepseek-v4.1-flash` is rejected ("The supported
34
+ # API model names are ..."). Vision (image input), function calls, and
35
+ # none/low/high/max reasoning effort all work on this route.
36
+ # NO hosted web search: DeepSeek removed it silently with the V4.1 release. Their
37
+ # Responses guide said "web_search / web_search_2025_08_26: Supported, executed on
38
+ # the server side" and listed {"type": "web_search"} under tool_choice on
39
+ # 2026-09-09; by 2026-09-10 the same rows read "web_search / file_search /
40
+ # code_interpreter / computer_use / mcp / other built-in tools: Ignored", with
41
+ # web_search dropped from tool_choice and its streaming events deleted. Nothing on
42
+ # /updates, /news, the docs home, or the FAQ mentions the removal. Live probes on
43
+ # 2026-09-10 returned zero web_search_call items while the model answered that it
44
+ # has no such tool (at effort=high it emitted bogus tool-call XML as text instead).
45
+ # Requests with the tool declared are accepted and silently do nothing, so Kolega
46
+ # must not advertise the /web toggle here. Replayed web_search_call items from
47
+ # older requests are still restored into context, per the same guide.
48
+ # Context measured at 1048576 tokens (oversized request -> "This model's maximum
49
+ # context length is 1048576 tokens"); keep the Flash-family 1000000 budget so the
50
+ # window_minus_output input budget retains margin under the hard ceiling.
51
+ # max_output_tokens above 393216 is rejected ("the valid range of max_tokens is
52
+ # [1, 393216]"), so the conservative 384000 output budget stands.
53
+ # Reasoning mechanics (inherited from the retired V4 Flash entries this id replaces,
54
+ # and still the shape this backend serves): effort must ride the Responses
55
+ # `reasoning` block, not the Chat-Completions `reasoning_effort` field the shared
56
+ # builder ignores, and this mode excludes flash from the flat reasoning_content
57
+ # replay path — reasoning comes back as Responses reasoning ITEMS instead. The
58
+ # endpoint returns no reasoning.encrypted_content (the include param is silently
59
+ # ignored) but exposes raw chain-of-thought as plain reasoning_text content, which
60
+ # the stream wrapper retains and resends next turn (mirroring Codex) so the context
61
+ # gauge counts it like any other content. The backend ALSO re-attaches prior CoT
62
+ # server-side keyed on its own function_call call_ids, billing it as input and
63
+ # deduping explicit copies (verified live 2026-08-04 on V4 Flash); reasoning-bearing
64
+ # replays with a foreign call_id 400 with "reasoning_text must be passed back",
65
+ # while minimal single-round histories with foreign ids are tolerated.
66
+ ("deepseek", "deepseek-flash"): {
67
+ "context_length": 1000000,
68
+ "max_completion_tokens": 384000,
69
+ "input_budget": "window_minus_output",
70
+ "default_temperature": 1.0,
71
+ "supports_vision": True,
72
+ "supports_hosted_web_search": False,
73
+ "preferred_edit_protocol": "claude_code",
74
+ "thinking_effort": ThinkingEffortSpec(
75
+ options=("none", "low", "high", "max"),
76
+ default="high",
77
+ mode="openai_responses_reasoning",
78
+ ),
79
+ },
80
+ ("deepseek", "deepseek-v4-pro"): {
81
+ "context_length": 1000000,
82
+ "max_completion_tokens": 65536,
83
+ "input_budget": "window_minus_output",
84
+ "default_temperature": 1.0,
85
+ "supports_vision": False,
86
+ # Hosted search still works on the V4 Pro model — re-verified live 2026-09-10
87
+ # (probe A body -> ws_calls=1, real answer), and it is the last first-party
88
+ # route that executes it. NOTE: from 12:00 Beijing Time 2026-09-14 DeepSeek
89
+ # routes deepseek-v4-pro requests to V4.1 Flash, whose architecture has no
90
+ # server-side web search; re-check this flag and the /web toggle after that.
91
+ "supports_hosted_web_search": True,
92
+ "preferred_edit_protocol": "claude_code",
93
+ "thinking_effort": ThinkingEffortSpec(
94
+ options=("none", "low", "high", "max"),
95
+ default="high",
96
+ mode="openai_responses_reasoning",
97
+ ),
98
+ },
99
+ }
@@ -8,7 +8,7 @@ build-backend = "hatchling.build"
8
8
 
9
9
  [project]
10
10
  name = "kolega-code"
11
- version = "0.36.0"
11
+ version = "0.38.0"
12
12
  description = "Multi-agent coding in the terminal"
13
13
  readme = "README.md"
14
14
  license = "BUSL-1.1"
@@ -69,6 +69,9 @@ dependencies = [
69
69
  "markitdown[docx,pdf,pptx,xls,xlsx]==0.1.6",
70
70
  "mcp==1.28.1",
71
71
  "nest-asyncio==1.6.0",
72
+ # Magika: 1.19.2 has Monterey-compatible Intel wheels for Python 3.11/3.12.
73
+ # It has no Python 3.13 wheels; that interpreter requires newer macOS.
74
+ "onnxruntime==1.19.2; sys_platform == 'darwin' and platform_machine == 'x86_64' and python_version < '3.13'",
72
75
  # Magika's cross-platform resolution selects onnxruntime 1.20.1, which has no CPython 3.14 wheels.
73
76
  "onnxruntime==1.27.0; python_version >= '3.14' and sys_platform != 'win32'",
74
77
  "openai==2.46.0",
@@ -78,6 +81,9 @@ dependencies = [
78
81
  "playwright==1.59.0",
79
82
  "psutil==7.2.2",
80
83
  "pydantic==2.13.4",
84
+ # MarkItDown/pdfplumber: newer PDFium wheels require macOS 13.
85
+ # Preserve Intel macOS 12 installs; bumps must pass the Monterey wheel guard.
86
+ "pypdfium2==5.11.0",
81
87
  "python-dotenv==1.2.2",
82
88
  # Load-bearing for the web UI: code highlighting is generated with the same
83
89
  # Pygments styles the TUI renders with, so both stay identical.
@@ -1,82 +0,0 @@
1
- from kolega_code.llm.specs.types import ThinkingEffortSpec
2
-
3
- # max_completion_tokens is the MEASURED per-response output ceiling, not
4
- # DeepSeek's published 384000. Probed 2026-08-03 by
5
- # tests/agent/llm/test_deepseek_output_cap_live.py:
6
- # - deepseek-v4-pro (chat), uncapped: the server cuts the stream at exactly
7
- # 65536 output tokens, reported honestly as finish_reason="length".
8
- # - deepseek-v4-flash (Responses), uncapped: no hard cut observed — the model
9
- # SELF-CENSORS ~7.4k tokens in ("response would exceed the maximum output
10
- # length allowed for this chat interface") with a clean status="completed".
11
- # With an explicit max_output_tokens=64000 it streams the full 64000 and
12
- # reports the cap hit honestly (status="incomplete"/max_output_tokens).
13
- # - Over-ceiling caps (384000) are accepted silently on both paths.
14
- # flash is 384000 (corrected from 65536, which was pro's measured chat ceiling
15
- # assumed to apply here): those probes only measured visible output, while a
16
- # reasoning-heavy call was later measured running to 112990 tokens in a single
17
- # Responses call.
18
- # pro never sends this value raw: the Responses path clamps to
19
- # DEEPSEEK_WIRE_OUTPUT_CAP=64000 (specs/accessors.py) so the client cap fires
20
- # before the server ceiling and truncation is reported honestly. flash passes
21
- # through.
22
- DEEPSEEK_SPECS = {
23
- ("deepseek", "deepseek-v4-pro"): {
24
- "context_length": 1000000,
25
- "max_completion_tokens": 65536,
26
- "input_budget": "window_minus_output",
27
- "default_temperature": 1.0,
28
- "supports_vision": False,
29
- "supports_hosted_web_search": True,
30
- "preferred_edit_protocol": "claude_code",
31
- "thinking_effort": ThinkingEffortSpec(
32
- options=("none", "low", "high", "max"),
33
- default="high",
34
- mode="openai_responses_reasoning",
35
- ),
36
- },
37
- # deepseek-v4-flash speaks the Responses API (see DeepSeekResponsesProvider), so its
38
- # reasoning effort must be emitted as the Responses `reasoning` block rather than the
39
- # Chat-Completions `reasoning_effort` field the shared Responses request builder ignores.
40
- # This mode also correctly excludes flash from the flat reasoning_content replay path:
41
- # flash's reasoning rides in Responses reasoning ITEMS instead. The endpoint returns no
42
- # reasoning.encrypted_content (the include param is silently ignored) but exposes the
43
- # raw chain-of-thought as plain reasoning_text content, which the stream wrapper
44
- # retains and resends next turn (mirroring Codex, the client this endpoint was adapted
45
- # for) — so the context gauge counts it from the history like any other content. The
46
- # backend ALSO restores prior CoT server-side keyed on its own function_call call_ids,
47
- # billing it as input and deduping explicit copies (verified live 2026-08-04); deep
48
- # reasoning-bearing replays with a foreign call_id 400 with "reasoning_text must be
49
- # passed back", minimal single-round histories with foreign ids are tolerated.
50
- ("deepseek", "deepseek-v4-flash"): {
51
- "context_length": 1000000,
52
- "max_completion_tokens": 384000,
53
- "input_budget": "window_minus_output",
54
- "default_temperature": 1.0,
55
- "supports_vision": False,
56
- # /responses executes {"type": "web_search"} server-side (search +
57
- # open_page) and restores the searched content on replay of the
58
- # web_search_call items, billed as input (verified live 2026-08-04,
59
- # findings/probes/hosted_web_search_probe.py).
60
- "supports_hosted_web_search": True,
61
- "preferred_edit_protocol": "claude_code",
62
- "thinking_effort": ThinkingEffortSpec(
63
- options=("none", "low", "high", "max"),
64
- default="high",
65
- mode="openai_responses_reasoning",
66
- ),
67
- },
68
- ("deepseek", "deepseek-v4-flash-vision-exp"): {
69
- "context_length": 1000000,
70
- "max_completion_tokens": 384000,
71
- "input_budget": "window_minus_output",
72
- "default_temperature": 1.0,
73
- "supports_vision": True,
74
- "supports_hosted_web_search": True,
75
- "preferred_edit_protocol": "claude_code",
76
- "thinking_effort": ThinkingEffortSpec(
77
- options=("none", "low", "high", "max"),
78
- default="high",
79
- mode="openai_responses_reasoning",
80
- ),
81
- },
82
- }
File without changes
File without changes
File without changes
File without changes
File without changes