kolega-code 0.26.10__tar.gz → 0.27.1__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 (379) hide show
  1. {kolega_code-0.26.10 → kolega_code-0.27.1}/CHANGELOG.md +192 -0
  2. {kolega_code-0.26.10 → kolega_code-0.27.1}/PKG-INFO +4 -1
  3. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/__init__.py +1 -1
  4. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/__init__.py +1 -1
  5. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/baseagent.py +8 -4
  6. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/coder.py +5 -6
  7. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/compression.py +6 -3
  8. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/conversation.py +2 -2
  9. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/extensions/cli/current_plan_artifact.md.j2 +1 -1
  10. kolega_code-0.27.1/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +6 -0
  11. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +1 -1
  12. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/system/agents/coder_base.md.j2 +1 -9
  13. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +1 -1
  14. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +3 -3
  15. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +3 -1
  16. kolega_code-0.27.1/kolega_code/agent/prompt_templates/system/includes/terminal_tools.md +11 -0
  17. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +1 -1
  18. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompts.py +0 -1
  19. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/edit_tool.py +22 -24
  20. kolega_code-0.27.1/kolega_code/agent/tool_backend/read_file_tool.py +155 -0
  21. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/terminal_tool.py +5 -4
  22. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tools.py +277 -619
  23. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/config.py +101 -26
  24. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/file_index.py +67 -3
  25. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/main.py +29 -10
  26. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/model_catalog.py +76 -35
  27. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/model_connection.py +4 -0
  28. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/provider_registry.py +24 -2
  29. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/settings.py +41 -4
  30. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/skills.py +58 -171
  31. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/agent_runtime.py +1 -1
  32. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/custom_model.py +9 -6
  33. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/settings_panel.py +103 -0
  34. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/settings_screen.py +29 -0
  35. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/config.py +21 -9
  36. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/client.py +16 -2
  37. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/exceptions.py +31 -1
  38. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/instrumented_client.py +1 -1
  39. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/ledger.py +1 -1
  40. kolega_code-0.27.1/kolega_code/llm/providers/tinker.py +609 -0
  41. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/specs/__init__.py +5 -0
  42. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/specs/accessors.py +42 -6
  43. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/specs/catalog/__init__.py +12 -0
  44. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/specs/catalog/openrouter.py +914 -886
  45. kolega_code-0.27.1/kolega_code/llm/specs/catalog/thinking_machines.py +34 -0
  46. kolega_code-0.27.1/kolega_code/llm/specs/catalog/tinker.py +221 -0
  47. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/specs/thinking.py +18 -0
  48. kolega_code-0.27.1/kolega_code/llm/specs/tinker_catalog.py +229 -0
  49. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/usage.py +15 -1
  50. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/permissions.py +1 -0
  51. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/tools/__init__.py +2 -0
  52. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/tools/core.py +15 -1
  53. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/tools/definitions.py +54 -1
  54. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/tools/param_aliases.py +52 -12
  55. {kolega_code-0.26.10 → kolega_code-0.27.1}/pyproject.toml +13 -2
  56. kolega_code-0.26.10/kolega_code/agent/prompt_templates/auxiliary/tools/think_hard.system.md +0 -13
  57. kolega_code-0.26.10/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -7
  58. kolega_code-0.26.10/kolega_code/agent/tool_backend/glob_tool.py +0 -533
  59. kolega_code-0.26.10/kolega_code/agent/tool_backend/list_directory_tool.py +0 -304
  60. kolega_code-0.26.10/kolega_code/agent/tool_backend/read_file_tool.py +0 -160
  61. kolega_code-0.26.10/kolega_code/agent/tool_backend/search_codebase_tool.py +0 -870
  62. kolega_code-0.26.10/kolega_code/agent/tool_backend/think_hard_tool.py +0 -220
  63. {kolega_code-0.26.10 → kolega_code-0.27.1}/.gitignore +0 -0
  64. {kolega_code-0.26.10 → kolega_code-0.27.1}/CONTRIBUTING.md +0 -0
  65. {kolega_code-0.26.10 → kolega_code-0.27.1}/LICENSE +0 -0
  66. {kolega_code-0.26.10 → kolega_code-0.27.1}/MIGRATION.md +0 -0
  67. {kolega_code-0.26.10 → kolega_code-0.27.1}/README.md +0 -0
  68. {kolega_code-0.26.10 → kolega_code-0.27.1}/RELEASING.md +0 -0
  69. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/LICENSE +0 -0
  70. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/manifest.json +0 -0
  71. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/deep-research/SKILL.md +0 -0
  72. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/deep-research/references/evidence-and-reporting.md +0 -0
  73. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/deep-research/references/gigacode-workflow.md +0 -0
  74. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/deep-research/scripts/deep-research.workflow +0 -0
  75. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/deep-research/scripts/materialize_report.py +0 -0
  76. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/docx/LICENSE +0 -0
  77. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/docx/SKILL.md +0 -0
  78. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/docx/references/examples.md +0 -0
  79. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/docx/references/limitations.md +0 -0
  80. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/docx/references/operations.md +0 -0
  81. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/docx/references/quality.md +0 -0
  82. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/docx/requirements.txt +0 -0
  83. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/docx/scripts/docx_tool.py +0 -0
  84. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/docx/scripts/smoke_test.py +0 -0
  85. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/humanizer/LICENSE +0 -0
  86. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/humanizer/SKILL.md +0 -0
  87. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pdf/LICENSE +0 -0
  88. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pdf/SKILL.md +0 -0
  89. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pdf/references/examples.md +0 -0
  90. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pdf/references/limitations.md +0 -0
  91. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pdf/references/ocr.md +0 -0
  92. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pdf/references/operations.md +0 -0
  93. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pdf/references/quality.md +0 -0
  94. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pdf/references/redaction.md +0 -0
  95. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-paddle.txt +0 -0
  96. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-surya.txt +0 -0
  97. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pdf/requirements.txt +0 -0
  98. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pdf/scripts/pdf_tool.py +0 -0
  99. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pdf/scripts/smoke_test.py +0 -0
  100. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pptx/LICENSE +0 -0
  101. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pptx/SKILL.md +0 -0
  102. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pptx/references/examples.md +0 -0
  103. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pptx/references/limitations.md +0 -0
  104. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pptx/references/operations.md +0 -0
  105. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pptx/requirements.txt +0 -0
  106. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pptx/scripts/pptx_tool.py +0 -0
  107. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/pptx/scripts/smoke_test.py +0 -0
  108. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/review/SKILL.md +0 -0
  109. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/review/references/github-publishing.md +0 -0
  110. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/skill-authoring/SKILL.md +0 -0
  111. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/skill-authoring/references/review-checklist.md +0 -0
  112. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/xlsx/LICENSE +0 -0
  113. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/xlsx/SKILL.md +0 -0
  114. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/xlsx/references/examples.md +0 -0
  115. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/xlsx/references/limitations.md +0 -0
  116. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/xlsx/references/operations.md +0 -0
  117. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/xlsx/references/quality.md +0 -0
  118. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/xlsx/requirements.txt +0 -0
  119. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/xlsx/scripts/smoke_test.py +0 -0
  120. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/_bundled_skills/skills/xlsx/scripts/xlsx_tool.py +0 -0
  121. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/browseragent.py +0 -0
  122. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/common.py +0 -0
  123. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/context.py +0 -0
  124. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/custom_agents.py +0 -0
  125. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/edit_protocols.py +0 -0
  126. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/errors.py +0 -0
  127. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/eval/__init__.py +0 -0
  128. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/eval/bridge.py +0 -0
  129. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/eval/bundle-requirements.in +0 -0
  130. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/eval/bundle-requirements.txt +0 -0
  131. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/eval/env.py +0 -0
  132. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/eval/js_kernel.py +0 -0
  133. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/eval/kernel.py +0 -0
  134. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/eval/prelude.js +0 -0
  135. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/eval/prelude.py +0 -0
  136. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/eval/protocol.py +0 -0
  137. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/eval/py_kernel.py +0 -0
  138. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/eval/runner.js +0 -0
  139. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/eval/runner.py +0 -0
  140. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/generalagent.py +0 -0
  141. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/goal.py +0 -0
  142. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/investigationagent.py +0 -0
  143. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/model_routing.py +0 -0
  144. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/orchestration/__init__.py +0 -0
  145. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/orchestration/accounting.py +0 -0
  146. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/orchestration/budget.py +0 -0
  147. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/orchestration/context.py +0 -0
  148. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/orchestration/errors.py +0 -0
  149. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/orchestration/executor.py +0 -0
  150. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/orchestration/guide.py +0 -0
  151. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/orchestration/journal.py +0 -0
  152. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/orchestration/runtime.py +0 -0
  153. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/orchestration/types.py +0 -0
  154. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/planningagent.py +0 -0
  155. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_dump.py +0 -0
  156. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_overrides.py +0 -0
  157. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_provider.py +0 -0
  158. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_exhausted.user.md +0 -0
  159. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_nudge.user.md.j2 +0 -0
  160. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/truncated_turn_nudge.user.md.j2 +0 -0
  161. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
  162. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
  163. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
  164. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
  165. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/extensions/cli/build_questions.md +0 -0
  166. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/extensions/cli/mode_switch_notice.md.j2 +0 -0
  167. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
  168. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/extensions/cli/scratchpad.md.j2 +0 -0
  169. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
  170. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list_readonly.md +0 -0
  171. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/extensions/cli/worktree_control.md.j2 +0 -0
  172. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/system/agents/coder_ask.md.j2 +0 -0
  173. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
  174. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
  175. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/system/includes/context_updates.md +0 -0
  176. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
  177. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -0
  178. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +0 -0
  179. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -0
  180. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -0
  181. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +0 -0
  182. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
  183. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/agent_tool.py +0 -0
  184. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/base_tool.py +0 -0
  185. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/browser_tool.py +0 -0
  186. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/build_tool.py +0 -0
  187. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/codex_patch.py +0 -0
  188. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
  189. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/eval_tool.py +0 -0
  190. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/hashline_v2.py +0 -0
  191. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/lsp_tool.py +0 -0
  192. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
  193. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/network_status.py +0 -0
  194. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/read_image_tool.py +0 -0
  195. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/search_backends/__init__.py +0 -0
  196. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
  197. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +0 -0
  198. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
  199. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +0 -0
  200. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
  201. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
  202. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/search_backends/tavily.py +0 -0
  203. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/snapshot_tool.py +0 -0
  204. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
  205. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/web_fetch/__init__.py +0 -0
  206. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/web_fetch/answering.py +0 -0
  207. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/web_fetch/documents.py +0 -0
  208. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/web_fetch/extractors.py +0 -0
  209. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/web_fetch/pipeline.py +0 -0
  210. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/web_fetch/retrieval.py +0 -0
  211. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/web_fetch_tool.py +0 -0
  212. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/web_search_tool.py +0 -0
  213. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
  214. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/utils/commands.py +0 -0
  215. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/agent/volatile_context.py +0 -0
  216. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/auth/__init__.py +0 -0
  217. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/auth/_jwt.py +0 -0
  218. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/auth/chatgpt_oauth.py +0 -0
  219. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/auth/constants.py +0 -0
  220. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/auth/tokens.py +0 -0
  221. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/browser_extension/__init__.py +0 -0
  222. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/browser_extension/framing.py +0 -0
  223. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/browser_extension/installer.py +0 -0
  224. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/browser_extension/manager.py +0 -0
  225. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/browser_extension/multiplex.py +0 -0
  226. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/browser_extension/native_host.py +0 -0
  227. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/browser_extension/protocol.py +0 -0
  228. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/browser_extension/registry.py +0 -0
  229. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/browser_extension/runtime.py +0 -0
  230. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/__init__.py +0 -0
  231. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/app.py +0 -0
  232. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/ask_output.py +0 -0
  233. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/browser_backend.py +0 -0
  234. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/clipboard_image.py +0 -0
  235. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/connection.py +0 -0
  236. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/cron.py +0 -0
  237. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/diagnostics.py +0 -0
  238. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/goal.py +0 -0
  239. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/loop.py +0 -0
  240. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/mentions.py +0 -0
  241. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/messages.py +0 -0
  242. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/plan_artifacts.py +0 -0
  243. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/session_event_store.py +0 -0
  244. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/session_journal.py +0 -0
  245. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/session_store.py +0 -0
  246. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/session_usage.py +0 -0
  247. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/slash_commands.py +0 -0
  248. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/theme.py +0 -0
  249. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/__init__.py +0 -0
  250. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/app_base.py +0 -0
  251. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/changes_screen.py +0 -0
  252. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/command_handlers.py +0 -0
  253. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/constants.py +0 -0
  254. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/loop_runtime.py +0 -0
  255. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/memory_screen.py +0 -0
  256. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/onboarding_screen.py +0 -0
  257. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/prompt_flows.py +0 -0
  258. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/session_diff.py +0 -0
  259. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/state.py +0 -0
  260. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/status_dashboard.py +0 -0
  261. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/styles.tcss +0 -0
  262. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/sub_agent_screen.py +0 -0
  263. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/terminal_display.py +0 -0
  264. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/transcript.py +0 -0
  265. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/tui/widgets.py +0 -0
  266. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/cli/updater.py +0 -0
  267. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/events.py +0 -0
  268. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/git_env.py +0 -0
  269. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/hooks/__init__.py +0 -0
  270. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/hooks/backends.py +0 -0
  271. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/hooks/config.py +0 -0
  272. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/hooks/dispatcher.py +0 -0
  273. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/hooks/events.py +0 -0
  274. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/hooks/matcher.py +0 -0
  275. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/hooks/outcome.py +0 -0
  276. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/models.py +0 -0
  277. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/providers/__init__.py +0 -0
  278. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/providers/_token_encoding.py +0 -0
  279. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/providers/anthropic.py +0 -0
  280. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/providers/base.py +0 -0
  281. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
  282. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/providers/deepseek_responses.py +0 -0
  283. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/providers/google.py +0 -0
  284. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/providers/models.py +0 -0
  285. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/providers/openai.py +0 -0
  286. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/providers/openai_responses.py +0 -0
  287. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/providers/responses_common.py +0 -0
  288. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/ratelimit.py +0 -0
  289. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/specs/catalog/anthropic.py +0 -0
  290. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/specs/catalog/dashscope.py +0 -0
  291. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/specs/catalog/deepseek.py +0 -0
  292. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/specs/catalog/fireworks.py +0 -0
  293. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/specs/catalog/google.py +0 -0
  294. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/specs/catalog/kimi_coding.py +0 -0
  295. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/specs/catalog/moonshot.py +0 -0
  296. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/specs/catalog/ollama_cloud.py +0 -0
  297. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/specs/catalog/openai.py +0 -0
  298. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/specs/catalog/openai_chatgpt.py +0 -0
  299. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/specs/catalog/together.py +0 -0
  300. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/specs/catalog/xai.py +0 -0
  301. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/specs/catalog/zai.py +0 -0
  302. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/specs/openrouter_catalog.py +0 -0
  303. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/specs/types.py +0 -0
  304. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/timeouts.py +0 -0
  305. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/llm/tool_execution_ids.py +0 -0
  306. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/local_state.py +0 -0
  307. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/mcp/__init__.py +0 -0
  308. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/mcp/config.py +0 -0
  309. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/mcp/oauth.py +0 -0
  310. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/mcp/service.py +0 -0
  311. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/mcp/state.py +0 -0
  312. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/mcp/tools.py +0 -0
  313. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/mcp/transport.py +0 -0
  314. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/memory/__init__.py +0 -0
  315. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/memory/identity.py +0 -0
  316. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/memory/manager.py +0 -0
  317. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/memory/manifest.py +0 -0
  318. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/memory/markdown.py +0 -0
  319. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/memory/models.py +0 -0
  320. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/memory/protocol.py +0 -0
  321. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/memory/registry.py +0 -0
  322. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/models/__init__.py +0 -0
  323. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/models/sandbox_terminal_state.py +0 -0
  324. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/runtime.py +0 -0
  325. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/sandbox/README.md +0 -0
  326. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/sandbox/__init__.py +0 -0
  327. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/sandbox/async_filesystem.py +0 -0
  328. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/sandbox/base.py +0 -0
  329. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/sandbox/browser.py +0 -0
  330. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/sandbox/event_loop.py +0 -0
  331. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/sandbox/filesystem.py +0 -0
  332. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/sandbox/local.py +0 -0
  333. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/sandbox/serializer.py +0 -0
  334. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/sandbox/terminal.py +0 -0
  335. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/sandbox/utils.py +0 -0
  336. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/scratchpad.py +0 -0
  337. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/security/__init__.py +0 -0
  338. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/security/secrets.py +0 -0
  339. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/services/base.py +0 -0
  340. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/services/browser.py +0 -0
  341. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/services/file_system.py +0 -0
  342. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/services/html.py +0 -0
  343. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/services/lsp/__init__.py +0 -0
  344. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/services/lsp/client.py +0 -0
  345. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/services/lsp/config.py +0 -0
  346. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/services/lsp/detector.py +0 -0
  347. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/services/lsp/diagnostics.py +0 -0
  348. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/services/lsp/edits.py +0 -0
  349. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/services/lsp/manager.py +0 -0
  350. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/services/lsp/registry.py +0 -0
  351. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/services/lsp/registry.yaml +0 -0
  352. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/services/snapshots.py +0 -0
  353. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/services/terminal.py +0 -0
  354. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/services/terminal_buffer.py +0 -0
  355. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/services/workspace_scan.py +0 -0
  356. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/session/__init__.py +0 -0
  357. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/session/control.py +0 -0
  358. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/session/inmemory.py +0 -0
  359. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/session/projection.py +0 -0
  360. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/session/recording.py +0 -0
  361. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/session/runtime.py +0 -0
  362. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/session/store.py +0 -0
  363. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/testing/__init__.py +0 -0
  364. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/testing/store_conformance.py +0 -0
  365. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/tools/registry.py +0 -0
  366. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/utils/__init__.py +0 -0
  367. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/utils/images.py +0 -0
  368. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/web/__init__.py +0 -0
  369. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/web/assets/fold.js +0 -0
  370. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/web/assets/player.css +0 -0
  371. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/web/assets/player.html +0 -0
  372. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/web/assets/player.js +0 -0
  373. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/web/bundle.py +0 -0
  374. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/web/hosting.py +0 -0
  375. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/web/redaction.py +0 -0
  376. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/web/server.py +0 -0
  377. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/web/singlefile.py +0 -0
  378. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/web/theme_css.py +0 -0
  379. {kolega_code-0.26.10 → kolega_code-0.27.1}/kolega_code/worktrees.py +0 -0
@@ -6,6 +6,198 @@ This project uses GitHub Releases for detailed generated release notes. This fil
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 0.27.1 - 2026-08-10
10
+
11
+ ### Added
12
+
13
+ - Thinking Machines models can now be used through either the hosted API or
14
+ the native Tinker `SamplingClient`, with model discovery, settings, usage
15
+ tracking, and connection testing integrated across the CLI and TUI.
16
+ - History compression thresholds can now be configured from Settings,
17
+ `settings.json`, `KOLEGA_CODE_COMPRESSION_THRESHOLD`, or
18
+ `--compression-threshold`.
19
+ - Sub-agent dispatch can now be enabled or disabled for a session from
20
+ Settings, `settings.json`, `KOLEGA_CODE_SUBAGENTS`, or `--subagents on|off`.
21
+
22
+ ### Changed
23
+
24
+ - Compression summaries can use up to 8,192 tokens, reducing the risk that
25
+ important context is lost in longer sessions.
26
+ - The bundled OpenRouter catalogue was refreshed from the 2026-08-10 model
27
+ list and weekly rankings. It now includes 260 tool-capable models, including
28
+ featured `deepseek/deepseek-v4-flash-0731`.
29
+
30
+ ### Fixed
31
+
32
+ - Provider connection tests now send a system message, improving compatibility
33
+ with models that reject probes containing only a user message.
34
+
35
+ ### Security
36
+
37
+ - Updated `h2` to `4.4.1` to address `GHSA-6hr6-w5qg-qmwg`.
38
+
39
+ ## 0.27.0 - 2026-08-06
40
+
41
+ ### Changed
42
+
43
+ - The `eval`, `exec_command`, and `lsp` tool descriptions shipped to model
44
+ providers are slimmer (about 450 cl100k tokens less across the three,
45
+ roughly 8% of the whole tool payload): prose now states decision rules and
46
+ contracts instead of restating parameter schema text, `eval`'s JavaScript
47
+ prelude folds to "same helpers as Python, camelCase" with only the
48
+ JS-specific pitfalls spelled out, `lsp`'s operation list groups the seven
49
+ operations that share the `(path, line, symbol)` arguments onto one line,
50
+ and `exec_command`'s `timeout`-alias note is gone (the alias layer absorbs
51
+ it silently). No parameter names, types, or presence change, and no
52
+ behavior changes ride along.
53
+
54
+ - Tool definitions sent to model providers no longer duplicate parameter
55
+ documentation. Every tool docstring's `Args:` section is still parsed into
56
+ per-parameter schema descriptions, but the wire description no longer also
57
+ carries the whole section verbatim (and the schema descriptions no longer
58
+ include the raw docstring continuation-line indentation). Tools whose
59
+ parameters are not fully documented in their schema — freeform tools and
60
+ tools with enum-only schema properties such as the browser tools' `button`,
61
+ `action`, `level`, `part`, `image_type`, and `scale` — keep their `Args:`
62
+ block, since it is the only place those parameters are documented.
63
+
64
+ - The per-type agent dispatch tools (`dispatch_general_agent`,
65
+ `dispatch_investigation_agent`, `dispatch_browser_agent`,
66
+ `dispatch_coding_agent`, and `dispatch_custom_agent`) are consolidated into a
67
+ single `dispatch_agent(agent_type, task, model_override?, browser_target?)`
68
+ tool. `agent_type` is an enum computed per session from the same conditions
69
+ that previously gated the individual tools: `general` and `investigation`
70
+ whenever dispatch is available, `browser` only when the browser-agent model
71
+ supports vision, `coding` where the coding dispatch was previously offered
72
+ (never for the coder itself), and custom agent names when definitions are
73
+ discovered. The description documents the shared dispatch mechanics once plus
74
+ one line per available agent type, and an unavailable `agent_type` returns an
75
+ error listing the valid values. Old sessions that used the removed tool names
76
+ still restore and display normally.
77
+
78
+ - All terminal-capable agents (coder, planning, investigation, general) now
79
+ share a terminal-tools prompt section with codex-style guidance: prefer
80
+ `rg` / `rg --files` over `grep`/`find` when searching for text or files (it is
81
+ much faster; use alternatives if `rg` is not found), and do not use Python
82
+ scripts (or `eval`) to print chunks of a file — use the file-reading tools
83
+ instead.
84
+ - The `resolve` tool — which applies or discards a pending `lsp_edit(apply: false)`
85
+ preview — is now gated like the other LSP tools. With LSP disabled (via
86
+ settings, `KOLEGA_CODE_LSP`, or `--lsp off`) it is removed from the model's
87
+ toolset entirely, since pending actions can only be created while LSP is on.
88
+ Applying a pending action with `resolve` now also goes through the same
89
+ edit-permission prompt as `edit`, `lsp_edit`, and `write`.
90
+ - The two file-read tools are merged into one `read(file_path, offset?, limit?)`
91
+ tool. `offset` is the 1-indexed first line (default 1) and `limit` bounds the
92
+ number of lines; omitted parameters read from the top. Output is truncated to
93
+ 2000 lines or 50KB — whichever binds first — snapped to line boundaries, with
94
+ actionable notices such as "[Showing lines a-b of N (50KB limit). Use
95
+ offset=b+1 to continue.]" instead of the old line-only warning and
96
+ 100,000-character backstop. A single line larger than the 50KB budget gets an
97
+ explicit message suggesting `rg` / `exec_command` for targeted extraction.
98
+ `path` is accepted at the dispatch boundary as an alias for the canonical
99
+ `file_path`.
100
+
101
+ - `write(path=…)` now also succeeds under the claude_code edit protocol, where
102
+ `write` binds to `claude_write(file_path, content)`: `path` is accepted at
103
+ the dispatch boundary as an alias for `file_path`, matching every other file
104
+ tool. Under the search/replace protocol `path` stays the canonical
105
+ parameter and passes through untouched — alias resolution is signature-aware
106
+ and never rewrites an argument name the bound tool itself accepts.
107
+
108
+ - A successful whole-file `write` (including `hashline_write` and `apply_patch`'s
109
+ Add File) now records the just-written contents as read, so the read-before-edit
110
+ guard accepts a subsequent edit without a fresh read — exactly as it would
111
+ right after a read. Staleness tracking is unchanged: a file modified after the
112
+ write still requires a fresh read before editing.
113
+ - The three skill host tools (`list_skills`, `activate_skill`, and
114
+ `read_skill_resource`) are consolidated into a single `skill` tool with the
115
+ same contract as the old `activate_skill`: it takes the skill name (without a
116
+ leading slash) and returns the activation envelope with the skill's
117
+ instructions, its absolute directory, and the resource file list. Activating
118
+ an already-active skill short-circuits as before, and an unknown name now
119
+ lists close matches (prefix first, then fuzzy) from the catalog so a
120
+ mistyped activation self-corrects in one turn. The in-prompt skill roster
121
+ always lists every skill by name: description text is shed first when the
122
+ metadata budget binds, and skills are never omitted wholesale.
123
+
124
+ ### Removed
125
+
126
+ - The `read_entire_file` and `read_file_section` tools are gone, replaced by the
127
+ merged `read` tool above. Deleted: the `ReadFileTool.read_entire_file` /
128
+ `read_file_section` methods and their `read_only_tools` registrations, the
129
+ truncation notices that named `read_file_section`, and the stale
130
+ `dispatch_investigation_agent` docstring tool list. Existing session
131
+ histories keep the old tool names as recorded data and render as-is (restore
132
+ is name-agnostic).
133
+
134
+ - The file-discovery tools are gone from the agent toolset: `glob` (which had
135
+ replaced `list_directory` and `find_files_by_pattern`), and `search_codebase`.
136
+ File and text discovery is now done through the terminal with `rg` /
137
+ `rg --files` (falling back to `find`/`grep`). Deleted: the `GlobTool` and
138
+ `SearchCodebaseTool` backends (the underlying `workspace_scan` service stays),
139
+ the `ToolCollection.glob` / `ToolCollection.search_codebase` methods and their
140
+ `read_only_tools` registrations, the stale `dispatch_investigation_agent`
141
+ docstring tool list (now naming the real surface, including terminal access),
142
+ and the `search_codebase` name from hashline history adaptation.
143
+ `@`-mention autocomplete (`cli/file_index.py`) keeps its exclusions by
144
+ inlining the constants it borrowed. Permission rules and custom-agent
145
+ allowlists naming the removed tools must be updated to the terminal tools
146
+ (`exec_command`, `write_stdin`, `kill_command`, `list_sessions`). Existing
147
+ session histories keep the old tool names as recorded data and render as-is.
148
+
149
+ - The `sleep` tool is gone from the agent toolset: its blind wall-clock wait is
150
+ strictly dominated by `write_stdin`'s empty-input poll, which waits for more
151
+ output or process exit and returns early when the process finishes. The
152
+ `yield_time_ms` clamp semantics (250–30000 ms when writing, 5000–300000 ms
153
+ when polling) moved from the `write_stdin` docstring body into its parameter
154
+ description so the poll path stays discoverable. Existing session histories
155
+ keep the old tool name as recorded data and render as-is.
156
+
157
+ - The `think_hard` tool is gone from the agent toolset, along with the thinking
158
+ model slot that powered it. Deleted: the `ThinkHardTool` backend and its
159
+ `auxiliary/tools/think_hard.system.md` prompt template, the
160
+ `ToolCollection.think_hard` method and its `read_only_tools` registration, the
161
+ `THINK_HARD_PROMPT` constant, and the `thinking_config` model slot itself.
162
+ `prompt` hooks now select only `"fast"` or `"long"`; the
163
+ `--thinking-provider`/`--thinking-model` flags, the
164
+ `KOLEGA_CODE_THINKING_PROVIDER`/`KOLEGA_CODE_THINKING_MODEL` env vars, and the
165
+ Settings Thinking slot row were removed, and a saved `thinking` slot entry in
166
+ `settings.json` is ignored on load. The active model's own thinking effort
167
+ (`--thinking-effort`, `KOLEGA_CODE_THINKING_EFFORT`) is unaffected.
168
+
169
+ - The `get_host` tool is gone from the local toolset. It needs a sandbox host
170
+ provider, so it is now offered only when a terminal manager carrying a
171
+ `sandbox` attribute is injected (cloud sandbox deployments), and the
172
+ localhost fallback branch in the handler is deleted — a registered
173
+ `get_host` always has a sandbox. The gate duck-types on the attribute rather
174
+ than `isinstance`, so kolega-code-e2b's injected `SandboxTerminalManager`
175
+ (possibly subclassed from a pinned older version) keeps qualifying. Existing
176
+ session histories that recorded `get_host` calls keep them as data and
177
+ render as-is (restore is name-agnostic).
178
+
179
+ - The `list_skills`, `activate_skill`, and `read_skill_resource` host tools are
180
+ gone, replaced by the single `skill` tool above. Deleted:
181
+ `SkillCatalog.read_resource` and its truncation cap and traversal guard
182
+ (skill resources are read with the ordinary `read` tool, whose `file_path`
183
+ is relative to the absolute skill directory in the activation output), the
184
+ model-facing list query surface (`format_model_catalog`), and the
185
+ omitted-skills budget pathway in the prompt roster. Existing session
186
+ histories keep the old tool names as recorded data and render as-is
187
+ (restore is name-agnostic).
188
+
189
+ ### Fixed
190
+
191
+ - Kimi-family usage is no longer dropped when a request is served entirely from
192
+ the provider's prompt cache. `kimi-for-coding` / `moonshot` report
193
+ `input_tokens: -1` as a sentinel for "no uncached input tokens" on a full
194
+ cache hit; the strict usage validator previously classified that as malformed
195
+ and nulled the whole record, silently removing both input and output tokens
196
+ from session accounting for those turns. The sentinel is now interpreted as
197
+ zero, and the inclusive input total is reconstructed from the cache fields
198
+ (verified live: `-1` + 33 cached = 33 total, matching the same prompt's
199
+ partial-cache report of 27 uncached + 6 cached).
200
+
9
201
  ## 0.26.10 - 2026-08-05
10
202
 
11
203
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kolega-code
3
- Version: 0.26.10
3
+ Version: 0.27.1
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/
@@ -276,6 +276,9 @@ Requires-Dist: pytest-xdist==3.8.0; extra == 'dev'
276
276
  Requires-Dist: pytest==9.0.3; extra == 'dev'
277
277
  Requires-Dist: ruff==0.15.12; extra == 'dev'
278
278
  Requires-Dist: twine==6.2.0; extra == 'dev'
279
+ Provides-Extra: tinker
280
+ Requires-Dist: tinker-cookbook==0.5.3; extra == 'tinker'
281
+ Requires-Dist: tml-renderers==0.1.0; extra == 'tinker'
279
282
  Description-Content-Type: text/markdown
280
283
 
281
284
  # Kolega Code
@@ -151,4 +151,4 @@ __all__ = [
151
151
  "parse_git_status_output",
152
152
  ]
153
153
 
154
- __version__ = "0.26.10"
154
+ __version__ = "0.27.1"
@@ -51,4 +51,4 @@ __all__ = [
51
51
  "ToolExtension",
52
52
  ]
53
53
 
54
- __version__ = "0.26.10"
54
+ __version__ = "0.27.1"
@@ -439,6 +439,12 @@ class BaseAgent(LogMixin):
439
439
  # Counts consecutive transient LLM failures (rate-limit / overload) so the turn loop
440
440
  # backs off and eventually gives up instead of retrying forever; reset on any good turn.
441
441
  self._consecutive_llm_retries = 0
442
+ # Host-configured compression threshold (fraction of the context window) shadows
443
+ # the class default when the config carries one; every read below and in
444
+ # _send_context_update goes through the instance attribute.
445
+ config_threshold = getattr(self.config, "history_compression_threshold", None)
446
+ if config_threshold is not None:
447
+ self.history_compression_threshold = config_threshold
442
448
  self.compressor = HistoryCompressor(threshold=self.history_compression_threshold)
443
449
  self.emitter = AgentEventEmitter(
444
450
  connection_manager=self.connection_manager,
@@ -1603,15 +1609,13 @@ class BaseAgent(LogMixin):
1603
1609
  async def _run_hook_prompt(self, prompt_text: str, model_hint: Optional[str]) -> str:
1604
1610
  """Run a `prompt` hook: a single completion on a chosen model slot.
1605
1611
 
1606
- ``model_hint`` selects a configured slot ("fast" (default), "long", or
1607
- "thinking"); arbitrary model ids are not used here to keep provider/API-key
1612
+ ``model_hint`` selects a configured slot ("fast" (default) or "long");
1613
+ arbitrary model ids are not used here to keep provider/API-key
1608
1614
  pairing correct across kolega's multi-provider setup.
1609
1615
  """
1610
1616
  slot = (model_hint or "fast").lower()
1611
1617
  if slot in ("long", "main", "long_context"):
1612
1618
  model_config = self.config.long_context_config
1613
- elif slot == "thinking":
1614
- model_config = self.config.thinking_config
1615
1619
  else:
1616
1620
  model_config = self.config.fast_config
1617
1621
 
@@ -123,27 +123,26 @@ class CoderAgent(BaseAgent, LogMixin):
123
123
  memory_enabled=memory_enabled,
124
124
  )
125
125
 
126
- # Configure tool collection with custom coder agent tools
126
+ # Configure tool collection with custom coder agent tools. The
127
+ # coder_agent_tools dispatch group already omits the "coding"
128
+ # agent_type, so the coder never dispatches itself.
127
129
  tool_exclusions = [
128
130
  "execute_terminal_command",
129
131
  "get_tool_list",
130
132
  "log_error",
131
133
  "log_info",
132
- # Exclude task-specific dispatch tools since coder shouldn't call itself or other agents
133
- "dispatch_coding_agent",
134
134
  ]
135
135
  mode_value = self.agent_mode.value if isinstance(self.agent_mode, AgentMode) else self.agent_mode
136
136
  if mode_value in (AgentMode.CLI.value, AgentMode.ASK.value):
137
137
  tool_exclusions.extend(["build_backend", "build_frontend"])
138
- if sub_agent:
139
- # A dispatched coder must not fan out into further sub-agents
140
- tool_exclusions.append("dispatch_general_agent")
141
138
 
142
139
  tool_config = ToolCollectionConfig(
143
140
  custom_tool_groups=["coder_agent_tools"],
144
141
  tool_exclusions=tool_exclusions,
145
142
  include_memory_tools=True,
146
143
  memory_write_access=True,
144
+ # A dispatched coder must not fan out into further general sub-agents
145
+ excluded_agent_types=["general"] if sub_agent else None,
147
146
  )
148
147
 
149
148
  self.tool_collection = ToolCollection(
@@ -39,9 +39,12 @@ class HistoryCompressor:
39
39
  KEEP_RECENT_MESSAGES = 6
40
40
  # Don't bother summarizing a trivially short prefix.
41
41
  MIN_PREFIX_TO_SUMMARIZE = 3
42
- # Cap the summary length: the prompt targets ~600 words (~900 tokens), so a
43
- # small ceiling keeps it tight and avoids the model's full completion budget.
44
- SUMMARY_MAX_TOKENS = 2048
42
+ # Cap the summary length. The prompt targets ~600 words, but reasoning
43
+ # models (deepseek-v4-flash Responses, etc.) can consume the entire budget
44
+ # on chain-of-thought and leave no room for text output, producing an empty
45
+ # summary. A generous ceiling gives reasoning headroom while still staying
46
+ # well under the model's full completion budget.
47
+ SUMMARY_MAX_TOKENS = 8192
45
48
 
46
49
  def __init__(self, threshold: float = 0.8) -> None:
47
50
  # Fraction of the model context window above which compression kicks in
@@ -397,7 +397,7 @@ def _adapt_content_blocks_for_provider(
397
397
  call_protocol = (tool_call_protocols or {}).get(
398
398
  block.tool_use_id, _source_edit_protocol(block, source_usage_metadata)
399
399
  )
400
- is_hashline_read = block.name in {"read_entire_file", "read_file_section", "search_codebase"}
400
+ is_hashline_read = block.name == "read"
401
401
  if (
402
402
  is_hashline_read
403
403
  and call_protocol == "hashline_v2"
@@ -407,7 +407,7 @@ def _adapt_content_blocks_for_provider(
407
407
  adapted.append(
408
408
  _tool_result_with_content(
409
409
  block,
410
- strip_hashline_read_output(block.content, search=block.name == "search_codebase"),
410
+ strip_hashline_read_output(block.content, search=False),
411
411
  )
412
412
  )
413
413
  changed = True
@@ -2,6 +2,6 @@ The current approved implementation plan is persisted as a private Markdown arti
2
2
 
3
3
  `{{ plan_artifact_path }}`
4
4
 
5
- If the conversation has been compacted, context seems incomplete, or you need exact acceptance criteria, read the artifact with `read_entire_file` (or `read_file_section` if the file is large) before continuing.
5
+ If the conversation has been compacted, context seems incomplete, or you need exact acceptance criteria, read the artifact with `read` (using offset/limit if the file is large) before continuing.
6
6
 
7
7
  Treat this artifact as read-only. Do not edit or overwrite it.
@@ -0,0 +1,6 @@
1
+ The CLI provides Agent Skills discovered from the project and user skill directories.
2
+ Activate with the `skill` tool before applying a skill's workflow; users can also invoke skills with `/skill-name`.
3
+
4
+ Available skills:
5
+
6
+ {{ catalog }}
@@ -104,7 +104,7 @@ URLs refer to services running on your own machine:
104
104
 
105
105
  1. ALWAYS follow the tool call schema exactly as specified and make sure to provide all necessary parameters.
106
106
  2. If the USER asks you to disclose your tools, ALWAYS respond with the helpful description provided.
107
- 3. **NEVER refer to tool names when speaking to the USER.** For example, instead of saying 'I need to use the read_file_section tool to inspect your file', just say 'I will inspect your file'.
107
+ 3. **NEVER refer to tool names when speaking to the USER.** For example, instead of saying 'I need to use the read tool to inspect your file', just say 'I will inspect your file'.
108
108
  4. Before calling tools, first explain to the USER why you are calling them.
109
109
  5. WHENEVER YOU OPEN A BROWSER OR TERMINAL, ALWAYS CLOSE IT WHEN DONE.
110
110
 
@@ -65,15 +65,7 @@ Treat completion as unproven until you have checked it against every requirement
65
65
 
66
66
  Deliver the complete, working result. NEVER ship stubs, placeholders, mocks, no-ops, `TODO: implement`, or partial scaffolding as if finished. NEVER relabel unfinished work as "MVP", "v1", or "foundation" to imply completion — if it is not done, say so, do not pretend. NEVER silently shrink scope or substitute a narrower, easier, or merely-compatible task than the one you were given. If the task specifies a file at a particular path, produce exactly that file at exactly that path.
67
67
 
68
- ## Running Commands
69
-
70
- Prefer one-shot commands that terminate; run long-lived processes like dev servers and watchers in the background. When starting a development server, use a free port.
71
-
72
- {% if interactive %}
73
- Do not run destructive commands automatically. Treat commands that delete files, rewrite history, reset worktrees, install system dependencies, or make external state changes as requiring explicit user approval.
74
- {% else %}
75
- There is no user present to approve actions, so exercise judgment: do not run destructive commands — deleting files you did not create, rewriting git history, resetting the worktree, or making external state changes — unless the task explicitly requires them.
76
- {% endif %}
68
+ {% include 'system/includes/terminal_tools.md' %}
77
69
 
78
70
  ## Reuse Results
79
71
 
@@ -52,7 +52,7 @@ main agent - it will not see your intermediate steps. End with a complete, self-
52
52
  3. Any commands or checks you ran and their outcomes.
53
53
  4. Anything that failed, was skipped, or needs follow-up.
54
54
 
55
- ## **Running Commands**
55
+ {% include 'system/includes/terminal_tools.md' %}
56
56
 
57
57
  When requesting a command to be run, you will be asked to judge if it is appropriate to run without the USER's permission. A command is unsafe if it may have some destructive side-effects. Example unsafe side-effects include: deleting files, mutating state, installing system dependencies, making external requests, etc. You must NEVER NEVER run a command automatically if it could be unsafe. You cannot allow the USER to override your judgement on this. If a command is unsafe, do not run it automatically, even if the USER wants you to.
58
58
 
@@ -44,9 +44,9 @@ Do your best to complete the task you are given. If you need more information, u
44
44
  You must complete the task independently. Once your turn ends your last message will be returned to Kolega Code
45
45
  to take further action, so your last message should contain the task result.
46
46
 
47
- ## **Running Commands**
47
+ {% include 'system/includes/terminal_tools.md' %}
48
48
 
49
- You may run shell commands (e.g. `git log`, `grep`, build/lint/test commands) to investigate the codebase. Never use commands to modify the project — no editing files, installing dependencies, committing, pushing, or other side effects. Prefer read-only tools when they suffice. Commands are subject to the active permission mode and may require approval.
49
+ You may run shell commands (e.g. `git log`, `rg`, build/lint/test commands) to investigate the codebase, but never use them to modify the project — no editing files, installing dependencies, committing, pushing, or other side effects. Prefer read-only tools when they suffice. Commands are subject to the active permission mode and may require approval.
50
50
 
51
51
  ## **Communication Guidelines**
52
52
 
@@ -62,7 +62,7 @@ You may run shell commands (e.g. `git log`, `grep`, build/lint/test commands) to
62
62
 
63
63
  1. ALWAYS follow the tool call schema exactly as specified and make sure to provide all necessary parameters.
64
64
  2. If the USER asks you to disclose your tools, ALWAYS respond with the helpful description provided.
65
- 3. **NEVER refer to tool names when speaking to the USER.** For example, instead of saying 'I need to use the read_file_section tool to inspect your file', just say 'I will inspect your file'.
65
+ 3. **NEVER refer to tool names when speaking to the USER.** For example, instead of saying 'I need to use the read tool to inspect your file', just say 'I will inspect your file'.
66
66
  4. Before calling tools, first explain to the USER why you are calling them.
67
67
  5. You must ONLY use the tools in the scope of the "Working directory". NEVER expose Kolega Code's implementation.
68
68
 
@@ -14,9 +14,11 @@ Here is useful information about the environment:
14
14
  ## Operating Mode
15
15
 
16
16
  You are in planning mode. Do not implement code changes, create files, edit files, start servers, or perform other mutating actions.
17
- You may run shell commands (e.g. `git log`, `grep`, build/lint/test commands) to investigate the codebase and reduce ambiguity, but never use them to modify the project — no editing files, installing dependencies, committing, pushing, or other side effects. Prefer read-only tools when they suffice, and use `exec_command` only to inspect or validate.
17
+ You may run shell commands (e.g. `git log`, `rg`, build/lint/test commands) to investigate the codebase and reduce ambiguity, but never use them to modify the project — no editing files, installing dependencies, committing, pushing, or other side effects. Prefer read-only tools when they suffice, and use `exec_command` only to inspect or validate.
18
18
  Use read-only tools and investigative commands to inspect the repository and reduce ambiguity.
19
19
 
20
+ {% include 'system/includes/terminal_tools.md' %}
21
+
20
22
  When the plan is decision complete, call `write_plan` with the final markdown plan. Do not call `write_plan` while major product or implementation choices are still unresolved.
21
23
  If a planning turn ends with a complete new or revised implementation plan, submit it through `write_plan`; do not only print the plan in a normal assistant response.
22
24
  When user answers, constraints, or follow-up discussion change the plan, the next `write_plan` payload must be a complete replacement plan that incorporates those decisions and can be implemented without reading earlier discussion.
@@ -0,0 +1,11 @@
1
+ ## Running Commands
2
+
3
+ Prefer one-shot commands that terminate; run long-lived processes like dev servers and watchers in the background. When starting a development server, use a free port.
4
+
5
+ Do not run destructive commands automatically — deleting files, rewriting history, resetting worktrees, installing system dependencies, or making external state changes — unless a user has explicitly approved them or the task explicitly requires them.
6
+
7
+ ## Searching and Reading Files
8
+
9
+ When searching for text or files, prefer `rg` / `rg --files` over grep/find — it is much faster. If `rg` is not found, use alternatives.
10
+
11
+ Do not use python scripts (or `eval`) to print chunks of a file — use the file-reading tools instead.
@@ -1,7 +1,7 @@
1
1
  Implement the approved plan below. Follow it as the source of truth, but still inspect the code before editing and run appropriate checks.
2
2
  {% if plan_artifact_path %}
3
3
 
4
- The approved plan is also persisted at `{{ plan_artifact_path }}`. If the conversation is compacted or you need the exact plan again later, read that file with `read_entire_file` (or `read_file_section` if needed). Treat it as read-only.
4
+ The approved plan is also persisted at `{{ plan_artifact_path }}`. If the conversation is compacted or you need the exact plan again later, read that file with `read` (using offset/limit if needed). Treat it as read-only.
5
5
  {% endif %}
6
6
  {% if gigacode_enabled %}
7
7
 
@@ -37,7 +37,6 @@ def render_prompt_template(template_name: str, **variables: Any) -> str:
37
37
  return _prompt_template(template_name).render(**variables).strip()
38
38
 
39
39
 
40
- THINK_HARD_PROMPT = render_prompt_template("auxiliary/tools/think_hard.system.md")
41
40
  COMPRESSION_SUMMARY_SYSTEM_PROMPT = render_prompt_template("auxiliary/compression/summary.system.md")
42
41
  SHELL_SAFETY_SYSTEM_PROMPT = render_prompt_template("auxiliary/terminal/safety.system.md")
43
42
  SHELL_COMPRESSION_SYSTEM_PROMPT = render_prompt_template("auxiliary/terminal/output_summary.system.md")
@@ -67,6 +67,22 @@ class EditTool(BaseTool):
67
67
  if self.filesystem.exists(normalized) and self.filesystem.is_file(normalized):
68
68
  self._read_versions[normalized] = self._content_digest(self.filesystem.read_text(normalized))
69
69
 
70
+ def _write_file(self, path: str, content: str) -> None:
71
+ """Write ``content`` to ``path`` (creating parents) and record it as read-equivalent.
72
+
73
+ A successful whole-file write leaves the file's current contents known,
74
+ so the result is recorded through the same mechanism a model-facing
75
+ read uses (``observe_read``): the edit guard then accepts the file
76
+ exactly as it would accept a freshly read one, and still rejects it
77
+ once the file changes on disk. This is the single write path for every
78
+ edit protocol's write handler.
79
+ """
80
+ parent = self.filesystem.get_parent(path)
81
+ if parent and parent != "." and not self.filesystem.exists(parent):
82
+ self.filesystem.create_directory(parent)
83
+ self.filesystem.write_text(path, content)
84
+ self.observe_read(path)
85
+
70
86
  async def claude_edit(
71
87
  self,
72
88
  file_path: str,
@@ -119,10 +135,7 @@ class EditTool(BaseTool):
119
135
  return blocked_msg
120
136
 
121
137
  def _write() -> None:
122
- parent = self.filesystem.get_parent(path)
123
- if parent and parent != "." and not self.filesystem.exists(parent):
124
- self.filesystem.create_directory(parent)
125
- self.filesystem.write_text(path, updated_content)
138
+ self._write_file(path, updated_content)
126
139
 
127
140
  self._mutate_with_optional_snapshot(
128
141
  tool_name="edit",
@@ -140,7 +153,6 @@ class EditTool(BaseTool):
140
153
  tool_call_id=getattr(self.caller, "current_tool_execution_id", None),
141
154
  tool_name="edit",
142
155
  )
143
- self._read_versions[path] = self._content_digest(self.filesystem.read_text(path))
144
156
  result = f"Edited {path}" if exists else f"Created {path}"
145
157
  diagnostics = await self._maybe_append_lsp_diagnostics(path)
146
158
  return result + diagnostics
@@ -169,10 +181,7 @@ class EditTool(BaseTool):
169
181
  return blocked_msg
170
182
 
171
183
  def _write() -> None:
172
- parent = self.filesystem.get_parent(path)
173
- if parent and parent != "." and not self.filesystem.exists(parent):
174
- self.filesystem.create_directory(parent)
175
- self.filesystem.write_text(path, content)
184
+ self._write_file(path, content)
176
185
 
177
186
  self._mutate_with_optional_snapshot(
178
187
  tool_name="write",
@@ -190,7 +199,6 @@ class EditTool(BaseTool):
190
199
  tool_call_id=getattr(self.caller, "current_tool_execution_id", None),
191
200
  tool_name="write",
192
201
  )
193
- self._read_versions[path] = self._content_digest(self.filesystem.read_text(path))
194
202
  result = f"Wrote {path}"
195
203
  diagnostics = await self._maybe_append_lsp_diagnostics(path)
196
204
  return result + diagnostics
@@ -262,8 +270,6 @@ class EditTool(BaseTool):
262
270
  except Exception:
263
271
  old_content = None
264
272
 
265
- parent_dir = self.filesystem.get_parent(path)
266
-
267
273
  # Preserve the file's dominant line ending on overwrite; new files
268
274
  # keep the line endings the caller provided (typically LF).
269
275
  if exists and old_content is not None:
@@ -271,9 +277,7 @@ class EditTool(BaseTool):
271
277
  content = self._normalize_line_endings(content, line_ending)
272
278
 
273
279
  def _write() -> None:
274
- if parent_dir and parent_dir != "." and not self.filesystem.exists(parent_dir):
275
- self.filesystem.create_directory(parent_dir)
276
- self.filesystem.write_text(path, content)
280
+ self._write_file(path, content)
277
281
 
278
282
  self._mutate_with_optional_snapshot(
279
283
  tool_name="write",
@@ -404,10 +408,7 @@ class EditTool(BaseTool):
404
408
  snapshot_paths = list(dict.fromkeys(snapshot_paths))
405
409
 
406
410
  def _write() -> None:
407
- parent = self.filesystem.get_parent(target)
408
- if parent and parent != "." and not self.filesystem.exists(parent):
409
- self.filesystem.create_directory(parent)
410
- self.filesystem.write_text(target, updated)
411
+ self._write_file(target, updated)
411
412
  if destination is not None and self.filesystem.exists(source):
412
413
  self.filesystem.remove(source, missing_ok=True)
413
414
 
@@ -540,10 +541,7 @@ class EditTool(BaseTool):
540
541
  for path in sorted(
541
542
  (item for item in changed if working[item] is not None), key=lambda item: len(Path(item).parts)
542
543
  ):
543
- parent = self.filesystem.get_parent(path)
544
- if parent and parent != "." and not self.filesystem.exists(parent):
545
- self.filesystem.create_directory(parent)
546
- self.filesystem.write_text(path, working[path] or "")
544
+ self._write_file(path, working[path] or "")
547
545
 
548
546
  self._mutate_with_optional_snapshot(
549
547
  tool_name="apply_patch",
@@ -661,7 +659,7 @@ class EditTool(BaseTool):
661
659
  tool_name=tool_name,
662
660
  reason=f"{tool_name} {path}",
663
661
  paths=[path],
664
- mutate=lambda: self.filesystem.write_text(path, normalized_updated),
662
+ mutate=lambda: self._write_file(path, normalized_updated),
665
663
  )
666
664
 
667
665
  await self.send_edit_preview(