kolega-code 0.14.0__tar.gz → 0.15.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.14.0 → kolega_code-0.15.0}/CHANGELOG.md +16 -0
  2. {kolega_code-0.14.0 → kolega_code-0.15.0}/PKG-INFO +1 -1
  3. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/astro.config.mjs +4 -0
  4. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/assets/coverage.svg +1 -1
  5. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/concepts/tools.md +3 -0
  6. kolega_code-0.15.0/docs/src/content/docs/configuration/lsp.md +121 -0
  7. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/gigacode.mdx +10 -0
  8. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/__init__.py +1 -1
  9. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/__init__.py +1 -1
  10. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/orchestration/guide.py +19 -0
  11. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/edit_tool.py +57 -4
  12. kolega_code-0.15.0/kolega_code/agent/tool_backend/lsp_tool.py +1069 -0
  13. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tools.py +278 -5
  14. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/app.py +43 -1
  15. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/config.py +4 -0
  16. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/main.py +25 -1
  17. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/settings.py +19 -0
  18. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/skills.py +289 -11
  19. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/slash_commands.py +1 -0
  20. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/tui/agent_runtime.py +93 -3
  21. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/tui/app_base.py +2 -0
  22. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/tui/command_handlers.py +14 -0
  23. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/tui/settings_panel.py +60 -0
  24. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/tui/transcript.py +18 -1
  25. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/config.py +11 -0
  26. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/permissions.py +5 -1
  27. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/sandbox/async_filesystem.py +26 -0
  28. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/sandbox/filesystem.py +20 -0
  29. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/services/file_system.py +24 -0
  30. kolega_code-0.15.0/kolega_code/services/lsp/__init__.py +55 -0
  31. kolega_code-0.15.0/kolega_code/services/lsp/client.py +397 -0
  32. kolega_code-0.15.0/kolega_code/services/lsp/config.py +134 -0
  33. kolega_code-0.15.0/kolega_code/services/lsp/detector.py +276 -0
  34. kolega_code-0.15.0/kolega_code/services/lsp/diagnostics.py +250 -0
  35. kolega_code-0.15.0/kolega_code/services/lsp/edits.py +489 -0
  36. kolega_code-0.15.0/kolega_code/services/lsp/manager.py +1553 -0
  37. kolega_code-0.15.0/kolega_code/services/lsp/registry.py +371 -0
  38. kolega_code-0.15.0/kolega_code/services/lsp/registry.yaml +482 -0
  39. {kolega_code-0.14.0 → kolega_code-0.15.0}/pyproject.toml +1 -1
  40. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_agent_tools_inventory.py +3 -0
  41. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_permissions.py +22 -0
  42. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_prompts.py +9 -0
  43. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_tool_collection_config.py +1 -1
  44. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_tool_registry.py +1 -0
  45. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/test_edit_tool.py +64 -0
  46. kolega_code-0.15.0/tests/agent/tool_backend/test_lsp_tool.py +595 -0
  47. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/_app_test_utils.py +46 -65
  48. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_agent_wiring.py +8 -58
  49. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_bootstrap_settings.py +33 -262
  50. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_compaction_restore.py +3 -25
  51. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_composer_input.py +11 -133
  52. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_focus_behavior.py +2 -2
  53. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_goal_command.py +11 -27
  54. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_image_vision_warning.py +2 -23
  55. kolega_code-0.15.0/tests/cli/test_app_lsp_settings_status.py +132 -0
  56. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_misc_commands.py +6 -57
  57. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_model_effort_commands.py +17 -150
  58. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_model_switch_vision.py +1 -58
  59. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_navigation_commands.py +6 -58
  60. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_permission_prompts.py +2 -59
  61. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_persistence_history.py +34 -145
  62. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_plan_lifecycle.py +7 -142
  63. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_planning_questions.py +17 -132
  64. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_planning_restore.py +4 -64
  65. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_rendering_entries.py +5 -62
  66. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_rendering_errors.py +8 -62
  67. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_rendering_selection.py +6 -82
  68. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_rendering_status.py +5 -40
  69. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_rendering_streaming.py +10 -82
  70. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_rendering_tools.py +71 -120
  71. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_skill_commands.py +5 -56
  72. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_status_modes.py +24 -218
  73. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_ask_goal.py +4 -18
  74. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_main.py +18 -86
  75. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_settings.py +34 -0
  76. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_skills.py +134 -1
  77. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_themes.py +1 -16
  78. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_tui_stylesheet.py +3 -42
  79. kolega_code-0.15.0/tests/services/lsp/_fake_server.py +637 -0
  80. kolega_code-0.15.0/tests/services/lsp/conftest.py +168 -0
  81. kolega_code-0.15.0/tests/services/lsp/test_client.py +351 -0
  82. kolega_code-0.15.0/tests/services/lsp/test_detector.py +76 -0
  83. kolega_code-0.15.0/tests/services/lsp/test_diagnostics.py +166 -0
  84. kolega_code-0.15.0/tests/services/lsp/test_edits.py +161 -0
  85. kolega_code-0.15.0/tests/services/lsp/test_integration.py +387 -0
  86. kolega_code-0.15.0/tests/services/lsp/test_lsp_edit_tool_integration.py +79 -0
  87. kolega_code-0.15.0/tests/services/lsp/test_manager.py +375 -0
  88. kolega_code-0.15.0/tests/services/lsp/test_project_config.py +153 -0
  89. kolega_code-0.15.0/tests/services/lsp/test_registry.py +133 -0
  90. kolega_code-0.15.0/tests/services/lsp/test_trust.py +113 -0
  91. kolega_code-0.15.0/tests/test_agent_config_serialization.py +74 -0
  92. {kolega_code-0.14.0 → kolega_code-0.15.0}/uv.lock +2 -2
  93. {kolega_code-0.14.0 → kolega_code-0.15.0}/.env.example +0 -0
  94. {kolega_code-0.14.0 → kolega_code-0.15.0}/.githooks/pre-commit +0 -0
  95. {kolega_code-0.14.0 → kolega_code-0.15.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  96. {kolega_code-0.14.0 → kolega_code-0.15.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  97. {kolega_code-0.14.0 → kolega_code-0.15.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  98. {kolega_code-0.14.0 → kolega_code-0.15.0}/.github/workflows/ci.yml +0 -0
  99. {kolega_code-0.14.0 → kolega_code-0.15.0}/.github/workflows/docs.yml +0 -0
  100. {kolega_code-0.14.0 → kolega_code-0.15.0}/.github/workflows/release.yml +0 -0
  101. {kolega_code-0.14.0 → kolega_code-0.15.0}/.gitignore +0 -0
  102. {kolega_code-0.14.0 → kolega_code-0.15.0}/.pre-commit-config.yaml +0 -0
  103. {kolega_code-0.14.0 → kolega_code-0.15.0}/CONTRIBUTING.md +0 -0
  104. {kolega_code-0.14.0 → kolega_code-0.15.0}/LICENSE +0 -0
  105. {kolega_code-0.14.0 → kolega_code-0.15.0}/README.md +0 -0
  106. {kolega_code-0.14.0 → kolega_code-0.15.0}/RELEASING.md +0 -0
  107. {kolega_code-0.14.0 → kolega_code-0.15.0}/SECURITY.md +0 -0
  108. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/.gitignore +0 -0
  109. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/README.md +0 -0
  110. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/package-lock.json +0 -0
  111. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/package.json +0 -0
  112. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/public/favicon.svg +0 -0
  113. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/assets/demo.gif +0 -0
  114. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/assets/kolega-dark.svg +0 -0
  115. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/assets/kolega-light.svg +0 -0
  116. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/cli/ask.md +0 -0
  117. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/cli/doctor.md +0 -0
  118. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/cli/overview.md +0 -0
  119. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/cli/sessions.md +0 -0
  120. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/concepts/agents.md +0 -0
  121. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/concepts/how-it-works.md +0 -0
  122. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/configuration/environment-variables.md +0 -0
  123. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/configuration/mcp.md +0 -0
  124. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/configuration/prompt-overrides.md +0 -0
  125. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/configuration/providers-and-models.mdx +0 -0
  126. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/configuration/settings-and-api-keys.mdx +0 -0
  127. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/configuration/sign-in-with-chatgpt.mdx +0 -0
  128. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/getting-started/installation.mdx +0 -0
  129. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/getting-started/quick-start.mdx +0 -0
  130. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/goal.md +0 -0
  131. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/hooks.md +0 -0
  132. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/index.mdx +0 -0
  133. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/skills.mdx +0 -0
  134. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/troubleshooting/diagnostics.md +0 -0
  135. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/tui/composer.md +0 -0
  136. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/tui/interface.md +0 -0
  137. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/tui/modes.md +0 -0
  138. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/tui/sessions-and-resume.md +0 -0
  139. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content/docs/tui/slash-commands.md +0 -0
  140. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/content.config.ts +0 -0
  141. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/src/styles/brand.css +0 -0
  142. {kolega_code-0.14.0 → kolega_code-0.15.0}/docs/tsconfig.json +0 -0
  143. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/baseagent.py +0 -0
  144. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/browseragent.py +0 -0
  145. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/coder.py +0 -0
  146. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/common.py +0 -0
  147. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/compression.py +0 -0
  148. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/context.py +0 -0
  149. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/conversation.py +0 -0
  150. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/errors.py +0 -0
  151. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/generalagent.py +0 -0
  152. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/goal.py +0 -0
  153. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/investigationagent.py +0 -0
  154. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/orchestration/__init__.py +0 -0
  155. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/orchestration/budget.py +0 -0
  156. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/orchestration/errors.py +0 -0
  157. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/orchestration/executor.py +0 -0
  158. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/orchestration/journal.py +0 -0
  159. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/orchestration/runtime.py +0 -0
  160. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/orchestration/types.py +0 -0
  161. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/planningagent.py +0 -0
  162. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_dump.py +0 -0
  163. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_overrides.py +0 -0
  164. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_provider.py +0 -0
  165. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
  166. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
  167. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
  168. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
  169. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/auxiliary/tools/think_hard.system.md +0 -0
  170. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/extensions/cli/current_plan_artifact.md.j2 +0 -0
  171. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
  172. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
  173. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -0
  174. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +0 -0
  175. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
  176. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +0 -0
  177. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +0 -0
  178. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +0 -0
  179. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
  180. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
  181. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -0
  182. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +0 -0
  183. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -0
  184. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -0
  185. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +0 -0
  186. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +0 -0
  187. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
  188. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/prompts.py +0 -0
  189. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/agent_tool.py +0 -0
  190. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/base_tool.py +0 -0
  191. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/browser_tool.py +0 -0
  192. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/build_tool.py +0 -0
  193. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
  194. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/glob_tool.py +0 -0
  195. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/list_directory_tool.py +0 -0
  196. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
  197. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/read_file_tool.py +0 -0
  198. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/read_image_tool.py +0 -0
  199. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/search_backends/__init__.py +0 -0
  200. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
  201. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +0 -0
  202. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
  203. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +0 -0
  204. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
  205. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
  206. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/search_backends/tavily.py +0 -0
  207. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/search_codebase_tool.py +0 -0
  208. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
  209. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/terminal_tool.py +0 -0
  210. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/think_hard_tool.py +0 -0
  211. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/web_fetch_tool.py +0 -0
  212. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/web_search_tool.py +0 -0
  213. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
  214. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/agent/utils/commands.py +0 -0
  215. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/auth/__init__.py +0 -0
  216. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/auth/_jwt.py +0 -0
  217. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/auth/chatgpt_oauth.py +0 -0
  218. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/auth/constants.py +0 -0
  219. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/auth/tokens.py +0 -0
  220. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/__init__.py +0 -0
  221. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/clipboard_image.py +0 -0
  222. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/connection.py +0 -0
  223. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/diagnostics.py +0 -0
  224. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/file_index.py +0 -0
  225. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/goal.py +0 -0
  226. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/mentions.py +0 -0
  227. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/messages.py +0 -0
  228. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/plan_artifacts.py +0 -0
  229. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/provider_registry.py +0 -0
  230. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/session_store.py +0 -0
  231. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/theme.py +0 -0
  232. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/tui/__init__.py +0 -0
  233. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/tui/changes_screen.py +0 -0
  234. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/tui/constants.py +0 -0
  235. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/tui/prompt_flows.py +0 -0
  236. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/tui/session_diff.py +0 -0
  237. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/tui/state.py +0 -0
  238. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/tui/status_dashboard.py +0 -0
  239. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/tui/styles.tcss +0 -0
  240. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/tui/sub_agent_screen.py +0 -0
  241. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/tui/terminal_display.py +0 -0
  242. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/tui/widgets.py +0 -0
  243. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/cli/updater.py +0 -0
  244. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/events.py +0 -0
  245. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/hooks/__init__.py +0 -0
  246. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/hooks/backends.py +0 -0
  247. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/hooks/config.py +0 -0
  248. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/hooks/dispatcher.py +0 -0
  249. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/hooks/events.py +0 -0
  250. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/hooks/matcher.py +0 -0
  251. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/hooks/outcome.py +0 -0
  252. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/client.py +0 -0
  253. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/exceptions.py +0 -0
  254. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/instrumented_client.py +0 -0
  255. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/models.py +0 -0
  256. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/providers/__init__.py +0 -0
  257. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/providers/anthropic.py +0 -0
  258. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/providers/base.py +0 -0
  259. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
  260. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/providers/google.py +0 -0
  261. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/providers/models.py +0 -0
  262. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/providers/openai.py +0 -0
  263. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/providers/openai_responses.py +0 -0
  264. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/providers/responses_common.py +0 -0
  265. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/ratelimit.py +0 -0
  266. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/specs/__init__.py +0 -0
  267. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/specs/accessors.py +0 -0
  268. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/specs/catalog/__init__.py +0 -0
  269. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/specs/catalog/anthropic.py +0 -0
  270. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/specs/catalog/dashscope.py +0 -0
  271. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/specs/catalog/deepseek.py +0 -0
  272. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/specs/catalog/fireworks.py +0 -0
  273. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/specs/catalog/google.py +0 -0
  274. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/specs/catalog/kimi_coding.py +0 -0
  275. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/specs/catalog/moonshot.py +0 -0
  276. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/specs/catalog/ollama_cloud.py +0 -0
  277. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/specs/catalog/openai.py +0 -0
  278. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/specs/catalog/openai_chatgpt.py +0 -0
  279. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/specs/catalog/together.py +0 -0
  280. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/specs/catalog/xai.py +0 -0
  281. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/specs/catalog/zai.py +0 -0
  282. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/specs/thinking.py +0 -0
  283. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/specs/types.py +0 -0
  284. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/timeouts.py +0 -0
  285. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/llm/tool_execution_ids.py +0 -0
  286. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/local_state.py +0 -0
  287. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/mcp/__init__.py +0 -0
  288. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/mcp/config.py +0 -0
  289. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/mcp/oauth.py +0 -0
  290. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/mcp/service.py +0 -0
  291. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/mcp/state.py +0 -0
  292. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/mcp/tools.py +0 -0
  293. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/mcp/transport.py +0 -0
  294. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/models/__init__.py +0 -0
  295. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/models/sandbox_terminal_state.py +0 -0
  296. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/runtime.py +0 -0
  297. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/sandbox/README.md +0 -0
  298. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/sandbox/__init__.py +0 -0
  299. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/sandbox/base.py +0 -0
  300. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/sandbox/browser.py +0 -0
  301. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/sandbox/event_loop.py +0 -0
  302. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/sandbox/local.py +0 -0
  303. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/sandbox/serializer.py +0 -0
  304. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/sandbox/terminal.py +0 -0
  305. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/sandbox/utils.py +0 -0
  306. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/services/base.py +0 -0
  307. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/services/browser.py +0 -0
  308. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/services/html.py +0 -0
  309. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/services/terminal.py +0 -0
  310. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/services/terminal_buffer.py +0 -0
  311. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/tools/__init__.py +0 -0
  312. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/tools/core.py +0 -0
  313. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/tools/definitions.py +0 -0
  314. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/tools/registry.py +0 -0
  315. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/utils/__init__.py +0 -0
  316. {kolega_code-0.14.0 → kolega_code-0.15.0}/kolega_code/utils/images.py +0 -0
  317. {kolega_code-0.14.0 → kolega_code-0.15.0}/run_tests.sh +0 -0
  318. {kolega_code-0.14.0 → kolega_code-0.15.0}/scripts/bench_hotpaths.py +0 -0
  319. {kolega_code-0.14.0 → kolega_code-0.15.0}/scripts/check-dev-hooks.sh +0 -0
  320. {kolega_code-0.14.0 → kolega_code-0.15.0}/scripts/install-kolega-code.sh +0 -0
  321. {kolega_code-0.14.0 → kolega_code-0.15.0}/scripts/setup-dev.sh +0 -0
  322. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/__init__.py +0 -0
  323. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/__init__.py +0 -0
  324. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/compaction_helpers.py +0 -0
  325. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/conftest.py +0 -0
  326. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/__init__.py +0 -0
  327. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/_token_counting_utils.py +0 -0
  328. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_anthropic_local_token_counting_incremental.py +0 -0
  329. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_anthropic_token_counting.py +0 -0
  330. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_billing_openai_cache.py +0 -0
  331. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_chatgpt_live.py +0 -0
  332. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_chatgpt_oauth_auth_config.py +0 -0
  333. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_chatgpt_oauth_conversion.py +0 -0
  334. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_chatgpt_oauth_provider.py +0 -0
  335. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_chatgpt_oauth_provider_generate.py +0 -0
  336. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_chatgpt_oauth_streaming.py +0 -0
  337. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_client.py +0 -0
  338. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_client_live.py +0 -0
  339. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_client_runtime.py +0 -0
  340. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_dashscope_mapping.py +0 -0
  341. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_error_boundary.py +0 -0
  342. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_exceptions.py +0 -0
  343. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_google_thought_signature.py +0 -0
  344. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_google_tool_signature_live.py +0 -0
  345. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_instrumented_client.py +0 -0
  346. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_instrumented_client_integration.py +0 -0
  347. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_instrumented_client_stream.py +0 -0
  348. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_langfuse_normalization.py +0 -0
  349. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_live_providers.py +0 -0
  350. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_message_conversion.py +0 -0
  351. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_model_specs.py +0 -0
  352. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_openai_cached_tokens.py +0 -0
  353. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_openai_cached_tokens_stream.py +0 -0
  354. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_openai_message_conversion.py +0 -0
  355. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_openai_reasoning_replay.py +0 -0
  356. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_openai_responses_provider.py +0 -0
  357. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_openai_stream_accumulation.py +0 -0
  358. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_openai_token_counting.py +0 -0
  359. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_openai_token_counting_incremental.py +0 -0
  360. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_provider_usage_mapping.py +0 -0
  361. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_streaming_timeouts.py +0 -0
  362. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_supports_vision.py +0 -0
  363. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_thinking_effort.py +0 -0
  364. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/llm/test_tool_execution_ids.py +0 -0
  365. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/orchestration/__init__.py +0 -0
  366. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/orchestration/test_orchestration.py +0 -0
  367. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/services/__init__.py +0 -0
  368. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/services/test_browser.py +0 -0
  369. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/services/test_browser_console_logs.py +0 -0
  370. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/services/test_browser_content.py +0 -0
  371. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/services/test_browser_integration.py +0 -0
  372. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/services/test_browser_parity.py +0 -0
  373. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/services/test_file_system.py +0 -0
  374. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/services/test_file_system_integration.py +0 -0
  375. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/services/test_file_system_path.py +0 -0
  376. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/services/test_local_file_system.py +0 -0
  377. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/services/test_sandbox_terminal_input.py +0 -0
  378. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/services/test_terminal.py +0 -0
  379. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/services/test_terminal_buffer.py +0 -0
  380. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/services/test_terminal_state_serializer.py +0 -0
  381. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_base_agent.py +0 -0
  382. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_base_agent_anthropic_history_validation.py +0 -0
  383. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_base_agent_compaction.py +0 -0
  384. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_base_agent_effective_history.py +0 -0
  385. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_base_agent_history_serialization.py +0 -0
  386. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_base_agent_prompt_context.py +0 -0
  387. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_base_agent_role_overrides.py +0 -0
  388. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_base_agent_runtime.py +0 -0
  389. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_base_agent_tool_call_repair.py +0 -0
  390. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_base_agent_tool_call_repair_integration.py +0 -0
  391. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_base_agent_tool_execution.py +0 -0
  392. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_coder_attachments.py +0 -0
  393. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_coder_prompt_extensions.py +0 -0
  394. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_commands.py +0 -0
  395. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_compaction_integration.py +0 -0
  396. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_compaction_persistence.py +0 -0
  397. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_compaction_subagent.py +0 -0
  398. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_compaction_tui_events.py +0 -0
  399. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_compress_command.py +0 -0
  400. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_compression.py +0 -0
  401. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_conversation_compaction.py +0 -0
  402. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_duplicate_tool_results.py +0 -0
  403. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_empty_message_handling.py +0 -0
  404. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_event_emitter.py +0 -0
  405. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_general_agent.py +0 -0
  406. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_gigacode_gating.py +0 -0
  407. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_goal.py +0 -0
  408. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_goal_evaluate.py +0 -0
  409. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_history_adapter_thinking.py +0 -0
  410. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_history_image_blocks.py +0 -0
  411. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_hooks_integration.py +0 -0
  412. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_html.py +0 -0
  413. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_image_compat.py +0 -0
  414. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_parallel_tool_calls.py +0 -0
  415. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_planning_agent.py +0 -0
  416. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_prompt_dump.py +0 -0
  417. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_prompt_overrides.py +0 -0
  418. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_prompt_provider.py +0 -0
  419. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_read_image_tool.py +0 -0
  420. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_tool_collection_builtin_dispatch.py +0 -0
  421. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_tool_collection_extensions.py +0 -0
  422. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_tool_collection_initialization.py +0 -0
  423. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_tool_collection_memory.py +0 -0
  424. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/test_tools.py +0 -0
  425. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/__init__.py +0 -0
  426. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/test_agent_tool.py +0 -0
  427. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/test_base_tool.py +0 -0
  428. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/test_browser_tool.py +0 -0
  429. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/test_build_tool.py +0 -0
  430. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/test_edit_preview.py +0 -0
  431. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/test_glob_tool.py +0 -0
  432. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/test_glob_tool_sandbox_parity.py +0 -0
  433. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/test_list_directory_tool.py +0 -0
  434. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/test_read_file_tool.py +0 -0
  435. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/test_search_codebase_tool.py +0 -0
  436. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/test_terminal_tool.py +0 -0
  437. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/test_think_hard_integration.py +0 -0
  438. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/test_think_hard_streaming.py +0 -0
  439. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/test_think_hard_streaming_content.py +0 -0
  440. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/test_think_hard_streaming_errors.py +0 -0
  441. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/test_think_hard_streaming_updates.py +0 -0
  442. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/test_web_fetch_tool.py +0 -0
  443. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/test_web_search_tool.py +0 -0
  444. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/agent/tool_backend/test_workflow_tool.py +0 -0
  445. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/auth/__init__.py +0 -0
  446. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/auth/test_chatgpt_oauth.py +0 -0
  447. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/auth/test_tokens.py +0 -0
  448. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/__init__.py +0 -0
  449. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app.py +0 -0
  450. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_changes_inspector.py +0 -0
  451. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_composer_commands.py +0 -0
  452. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_conversation_rendering.py +0 -0
  453. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_diagnostics.py +0 -0
  454. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_mention_dropdown.py +0 -0
  455. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_modes_planning.py +0 -0
  456. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_rendering_scroll.py +0 -0
  457. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_rendering_terminal_logs.py +0 -0
  458. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_session_diff_async.py +0 -0
  459. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_slash_dropdown.py +0 -0
  460. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_app_sub_agents_workflows.py +0 -0
  461. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_cli_config.py +0 -0
  462. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_clipboard_image.py +0 -0
  463. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_connection.py +0 -0
  464. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_diagnostics.py +0 -0
  465. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_file_index.py +0 -0
  466. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_mcp_cli.py +0 -0
  467. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_mcp_settings_formatting.py +0 -0
  468. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_mentions.py +0 -0
  469. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_plan_artifacts.py +0 -0
  470. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_provider_registry.py +0 -0
  471. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_session_diff.py +0 -0
  472. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_session_store.py +0 -0
  473. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_slash_commands.py +0 -0
  474. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_sub_agent_stream_accumulation.py +0 -0
  475. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_terminal_display.py +0 -0
  476. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_transcript_streaming_render.py +0 -0
  477. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/cli/test_updater.py +0 -0
  478. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/conftest.py +0 -0
  479. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/hooks/__init__.py +0 -0
  480. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/hooks/test_hooks.py +0 -0
  481. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/mcp/test_config_state_tools.py +0 -0
  482. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/test_mcp_permissions.py +0 -0
  483. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/test_mcp_transport.py +0 -0
  484. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/tools/__init__.py +0 -0
  485. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/tools/test_definitions.py +0 -0
  486. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/utils/__init__.py +0 -0
  487. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/utils/test_images.py +0 -0
  488. {kolega_code-0.14.0 → kolega_code-0.15.0}/tests/utils/test_images_ascii.py +0 -0
@@ -6,6 +6,22 @@ This project uses GitHub Releases for detailed generated release notes. This fil
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 0.15.0 - 2026-07-07
10
+
11
+ ### Added
12
+
13
+ - Added Language Server Protocol (LSP) integration with an agent-callable
14
+ read-only `lsp` tool (diagnostics, go-to-definition, references, hover,
15
+ document/workspace symbols, and status) and a trusted `lsp_edit` tool for
16
+ rename, formatting, and code actions. The `edit`, `multi_edit`, and `write`
17
+ tools now append LSP diagnostics to their results, with a `/lsp` status
18
+ command, detected-language status in the TUI wordmark, and a Settings toggle.
19
+ - Added bounded skill metadata rendering with a context-aware token budget.
20
+ The prompt catalog now uses skill name and description only, descriptions are
21
+ truncated before skills are omitted, and `list_skills` is queryable with
22
+ `max_results`.
23
+ - Documented composable workflow shapes in the Gigacode orchestration guide.
24
+
9
25
  ## 0.14.0 - 2026-07-03
10
26
 
11
27
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kolega-code
3
- Version: 0.14.0
3
+ Version: 0.15.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/
@@ -68,6 +68,10 @@ export default defineConfig({
68
68
  label: "MCP Servers",
69
69
  slug: "configuration/mcp",
70
70
  },
71
+ {
72
+ label: "Language Servers",
73
+ slug: "configuration/lsp",
74
+ },
71
75
  {
72
76
  label: "Environment Variables",
73
77
  slug: "configuration/environment-variables",
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="114" height="20" role="img" aria-label="coverage: 80.35%"><title>coverage: 80.35%</title><filter id="blur"><feGaussianBlur stdDeviation="16"/></filter><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="114" height="20" rx="3"/></clipPath><g clip-path="url(#r)"><rect width="61" height="20" fill="#555"/><rect x="61" width="53" height="20" fill="#67ac09"/><rect width="114" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><g transform="scale(.1)"><g aria-hidden="true" fill="#010101"><text x="315" y="150" fill-opacity=".8" filter="url(#blur)" textLength="510">coverage</text><text x="315" y="150" fill-opacity=".3" textLength="510">coverage</text></g><text x="315" y="140" textLength="510">coverage</text></g><g transform="scale(.1)"><g aria-hidden="true" fill="#010101"><text x="865" y="150" fill-opacity=".8" filter="url(#blur)" textLength="430">80.35%</text><text x="865" y="150" fill-opacity=".3" textLength="430">80.35%</text></g><text x="865" y="140" textLength="430">80.35%</text></g></g></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="114" height="20" role="img" aria-label="coverage: 79.72%"><title>coverage: 79.72%</title><filter id="blur"><feGaussianBlur stdDeviation="16"/></filter><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="114" height="20" rx="3"/></clipPath><g clip-path="url(#r)"><rect width="61" height="20" fill="#555"/><rect x="61" width="53" height="20" fill="#67ac09"/><rect width="114" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><g transform="scale(.1)"><g aria-hidden="true" fill="#010101"><text x="315" y="150" fill-opacity=".8" filter="url(#blur)" textLength="510">coverage</text><text x="315" y="150" fill-opacity=".3" textLength="510">coverage</text></g><text x="315" y="140" textLength="510">coverage</text></g><g transform="scale(.1)"><g aria-hidden="true" fill="#010101"><text x="865" y="150" fill-opacity=".8" filter="url(#blur)" textLength="430">79.72%</text><text x="865" y="150" fill-opacity=".3" textLength="430">79.72%</text></g><text x="865" y="140" textLength="430">79.72%</text></g></g></svg>
@@ -18,6 +18,9 @@ Read, search, and edit your project:
18
18
  - `read_entire_file`, `read_file_section` — read file contents.
19
19
  - `find_files_by_pattern` — glob-based file search.
20
20
  - `search_codebase` — search the codebase by regular expression (ripgrep/grep), e.g. `foo|bar`.
21
+ - `lsp` — read diagnostics, symbols, definitions,
22
+ references, hover text, call hierarchy, and code action metadata from
23
+ [configured language servers](../../configuration/lsp/).
21
24
  - Create and edit files — create new files and apply precise edits.
22
25
 
23
26
  ### Terminal
@@ -0,0 +1,121 @@
1
+ ---
2
+ title: Language servers
3
+ description: Configure LSP diagnostics, code intelligence, and trusted LSP edits.
4
+ ---
5
+
6
+ Kolega Code can start local Language Server Protocol (LSP) servers for detected
7
+ project languages. LSP is enabled by default and is used for:
8
+
9
+ - diagnostics after `edit`, `multi_edit`, and `write`;
10
+ - the generic read-only `lsp` tool;
11
+ - the permission-gated `lsp_edit` tool;
12
+ - `/lsp` and the Settings tab status display.
13
+
14
+ The `lsp` tool remains read-only. Mutating LSP operations are exposed through
15
+ `lsp_edit`, which is treated like `edit`, `multi_edit`, and `write` for
16
+ permission prompts. Kolega Code does not expose raw arbitrary LSP requests.
17
+
18
+ ## Tool operations
19
+
20
+ The generic `lsp` tool supports:
21
+
22
+ - `diagnostics` for file errors, warnings, and hints;
23
+ - `definition`, `type_definition`, `implementation`, `references`, and `hover`;
24
+ - `document_symbols` and `workspace_symbols`;
25
+ - `call_hierarchy` for incoming and outgoing calls;
26
+ - `code_actions` to list available quick fixes and refactors without applying them;
27
+ - `status`, `capabilities`, and `reload`.
28
+
29
+ Position operations use `path`, a 1-based `line`, and a `symbol` on that line.
30
+ Use `symbol#2` to select the second occurrence of a symbol on the same line.
31
+ `code_actions` includes an `action_id` for each action so a later `lsp_edit`
32
+ call can apply the exact server-provided action.
33
+
34
+ The mutating `lsp_edit` tool supports:
35
+
36
+ - `rename` for symbol rename;
37
+ - `rename_file` for file moves with `workspace/willRenameFiles` and
38
+ `workspace/didRenameFiles` notifications;
39
+ - `format_document` and `format_range`;
40
+ - `apply_code_action` by `action_id`, title/query, or index.
41
+
42
+ `lsp_edit` applies server-provided `WorkspaceEdit` payloads only. If the server
43
+ does not advertise or return an edit for an operation, Kolega Code reports that
44
+ the operation is unsupported instead of constructing a manual fallback edit.
45
+ Pass `apply: false` to preview the LSP edit without writing files.
46
+
47
+ ## Project configuration
48
+
49
+ Create `<project>/.kolega/lsp.json` to override LSP behavior for a repository.
50
+ Project LSP config is trusted input because custom servers can execute local
51
+ binaries. Kolega Code ignores this file unless the session is started with
52
+ `--trust-lsp` or the project is listed in trusted LSP projects in user settings.
53
+
54
+ ```json
55
+ {
56
+ "enabled": true,
57
+ "auto_diagnostics_on_edit": true,
58
+ "max_diagnostics": 20,
59
+ "auto_fallback": true,
60
+ "prompt_on_missing": true,
61
+ "disabled_languages": [],
62
+ "preferences": {
63
+ "python": "pyright"
64
+ },
65
+ "diagnostic_servers": ["ruff-lsp"],
66
+ "initialization_options": {
67
+ "pyright": {
68
+ "python": {
69
+ "analysis": {
70
+ "typeCheckingMode": "basic"
71
+ }
72
+ }
73
+ }
74
+ },
75
+ "workspace_configuration": {
76
+ "pyright": {
77
+ "python": {
78
+ "analysis": {
79
+ "typeCheckingMode": "basic"
80
+ }
81
+ }
82
+ }
83
+ },
84
+ "servers": {
85
+ "custom-python-lsp": {
86
+ "bin": "custom-lsp",
87
+ "args": ["--stdio"],
88
+ "languages": ["python"],
89
+ "env": {
90
+ "CUSTOM_LSP_MODE": "project"
91
+ }
92
+ }
93
+ }
94
+ }
95
+ ```
96
+
97
+ The project file cannot change the user's global LSP kill switch: `enabled` is
98
+ accepted in user settings, but ignored from `.kolega/lsp.json`.
99
+
100
+ `preferences` chooses the preferred server for a language. If
101
+ `auto_fallback` is `false`, Kolega Code checks only the preferred server before
102
+ reporting the language as missing. If it is `true`, installed alternatives can be
103
+ used automatically.
104
+
105
+ `diagnostic_servers` starts additional servers for diagnostics alongside the
106
+ primary server. This is useful for setups such as Pyright plus Ruff.
107
+
108
+ `initialization_options` is sent in the LSP `initialize` request. Some servers
109
+ also ask for `workspace/configuration`; use `workspace_configuration` for those
110
+ responses, keyed first by server name and then by requested section.
111
+
112
+ ## Status and troubleshooting
113
+
114
+ Run `/lsp` in the TUI to see detected languages, missing servers, active
115
+ sessions, and recent diagnostic counts. The Settings tab has a global LSP toggle;
116
+ changing it requires restarting the agent session.
117
+
118
+ If a server is missing, `/lsp` shows the server name and install guidance from
119
+ Kolega Code's bundled registry. You can suppress a language with
120
+ `disabled_languages` or point it at a custom server with `servers` and
121
+ `preferences`.
@@ -34,6 +34,9 @@ can:
34
34
  modules, services, issues, or review targets.
35
35
  - **Run judge panels** — ask several agents to evaluate a change or plan from
36
36
  different angles, then reconcile disagreements.
37
+ - **Compose workflow shapes** — use sweeps, matrices, funnels, pipelines, triage
38
+ loops, and adversarial reviews when the task needs more structure than simple
39
+ parallelism.
37
40
  - **Preserve artifacts** — save the workflow script, result files, transcripts, raw
38
41
  JSONL, and resume journal so the run is inspectable after the fact.
39
42
 
@@ -99,6 +102,13 @@ findings = await parallel([
99
102
  return findings
100
103
  ```
101
104
 
105
+ The stage names in a workflow are not fixed runtime types. The agent composes
106
+ shapes from the task: a broad audit might map surfaces, sweep reviewers across
107
+ them, verify findings adversarially, and synthesize; a planning task might funnel
108
+ unknowns through research and option comparison; a debugging task might cluster
109
+ failures, investigate root causes, test targeted fixes, and run a regression
110
+ review. All of those shapes are built from the same primitives above.
111
+
102
112
  <Aside type="note">
103
113
  Workflows are deterministic and **resumable**. Each run is saved under Kolega
104
114
  Code's state directory (`workflows/<run-id>/`) with its script, full result files,
@@ -151,4 +151,4 @@ __all__ = [
151
151
  "parse_git_status_output",
152
152
  ]
153
153
 
154
- __version__ = "0.14.0"
154
+ __version__ = "0.15.0"
@@ -44,4 +44,4 @@ __all__ = [
44
44
  "ToolExtension",
45
45
  ]
46
46
 
47
- __version__ = "0.14.0"
47
+ __version__ = "0.15.0"
@@ -88,6 +88,23 @@ without running the script. Required keys: `name`, `description`. Optional `phas
88
88
 
89
89
  ### Quality patterns to compose
90
90
 
91
+ - Surface map: before a broad run, map the real work surface — files, modules,
92
+ services, risks, unknowns, owner boundaries, or test targets — then fan out over
93
+ that map instead of guessing stages from the user's wording.
94
+ - Shard-and-sweep: split a large surface by package/module/service/concern, send
95
+ focused agents across the shards, then deduplicate and synthesize.
96
+ - Cross-cut matrix: review the same target set across dimensions such as correctness,
97
+ security, performance, UX, compatibility, test coverage, and migration risk.
98
+ - Research funnel: map unknowns → research in parallel → compare options → produce
99
+ a decision-ready plan. In plan mode this is the main workflow shape.
100
+ - Hypothesis tournament: generate several plausible explanations or approaches,
101
+ gather evidence for each, score them with parallel judges, then choose.
102
+ - Implementation pipeline: map disjoint workstreams → implement with coder agents →
103
+ verify each stream → integrate and run final checks yourself.
104
+ - Migration factory: inventory affected areas → classify risk → batch independent
105
+ edits → run targeted checks → compatibility review.
106
+ - Failure triage loop: collect failures → cluster by likely root cause → investigate
107
+ clusters → fix isolated causes → rerun targeted tests.
91
108
  - Adversarial verify: for each finding, spawn N skeptics prompted to REFUTE it; keep it
92
109
  only if a majority fail to refute. Prevents plausible-but-wrong findings surviving.
93
110
  - Loop-until-dry: for unknown-size discovery, keep spawning finders until K consecutive
@@ -96,6 +113,8 @@ without running the script. Required keys: `name`, `description`. Optional `phas
96
113
  judges, synthesize from the winner.
97
114
  - Loop-until-budget: `while budget.total and budget.remaining() > 50_000: ...` to scale
98
115
  depth to the token ceiling.
116
+ - Synthesis gate: after any broad fan-out, merge duplicates, rank confidence, identify
117
+ unresolved gaps, and decide whether another loop is worth the remaining budget.
99
118
 
100
119
  ### Implementing a plan (build mode)
101
120
 
@@ -1,10 +1,15 @@
1
+ from __future__ import annotations
2
+
1
3
  import re
2
4
  from dataclasses import dataclass
3
- from typing import Callable
5
+ from typing import TYPE_CHECKING, Callable, Optional
4
6
 
5
7
  from .base_tool import BaseTool
6
8
  from .edit_preview import build_diff_preview, build_head_preview
7
9
 
10
+ if TYPE_CHECKING:
11
+ from kolega_code.services.lsp import LspManager
12
+
8
13
 
9
14
  _BLOCK_PATTERN = re.compile(r"<<<<<<< SEARCH\r?\n(.*?)\r?\n=======\r?\n(.*?)\r?\n>>>>>>> REPLACE", re.DOTALL)
10
15
  _SMART_PUNCTUATION_TRANSLATION = str.maketrans(
@@ -38,6 +43,10 @@ class ResolvedReplacement:
38
43
 
39
44
 
40
45
  class EditTool(BaseTool):
46
+ def __init__(self, *args, lsp_manager: Optional["LspManager"] = None, **kwargs) -> None:
47
+ super().__init__(*args, **kwargs)
48
+ self._lsp_manager = lsp_manager
49
+
41
50
  async def edit(self, path: str, block: str) -> str:
42
51
  """
43
52
  Edit a file using a single search and replace block.
@@ -54,7 +63,11 @@ class EditTool(BaseTool):
54
63
  error_msg = "Multiple search and replace blocks provided. Use multi_edit for multiple blocks."
55
64
  await self.log_error(error_msg, sender=self.caller.agent_name)
56
65
  raise ValueError(error_msg)
57
- return await self._edit_blocks(path, parsed_blocks, tool_name="edit")
66
+ result = await self._edit_blocks(path, parsed_blocks, tool_name="edit")
67
+ lsp_diags = await self._maybe_append_lsp_diagnostics(path)
68
+ if lsp_diags:
69
+ result += lsp_diags
70
+ return result
58
71
 
59
72
  async def multi_edit(self, path: str, blocks: str) -> str:
60
73
  """
@@ -71,7 +84,11 @@ class EditTool(BaseTool):
71
84
  A short summary of the update
72
85
  """
73
86
  parsed_blocks = self._parse_blocks(blocks)
74
- return await self._edit_blocks(path, parsed_blocks, tool_name="multi_edit")
87
+ result = await self._edit_blocks(path, parsed_blocks, tool_name="multi_edit")
88
+ lsp_diags = await self._maybe_append_lsp_diagnostics(path)
89
+ if lsp_diags:
90
+ result += lsp_diags
91
+ return result
75
92
 
76
93
  async def write(self, path: str, content: str) -> str:
77
94
  """
@@ -119,7 +136,11 @@ class EditTool(BaseTool):
119
136
  tool_call_id=getattr(self.caller, "current_tool_execution_id", None),
120
137
  tool_name="write",
121
138
  )
122
- return f"Wrote {path}"
139
+ result = f"Wrote {path}"
140
+ lsp_diags = await self._maybe_append_lsp_diagnostics(path)
141
+ if lsp_diags:
142
+ result += lsp_diags
143
+ return result
123
144
  except PermissionError:
124
145
  error_msg = f"Permission denied when writing to file: {path}"
125
146
  await self.log_error(error_msg, sender=self.caller.agent_name)
@@ -379,3 +400,35 @@ class EditTool(BaseTool):
379
400
  if target == "\n":
380
401
  return text
381
402
  return text.replace("\n", target)
403
+
404
+ async def _maybe_append_lsp_diagnostics(self, path: str) -> str:
405
+ """Query LSP diagnostics for *path* and format them for appending to the tool result.
406
+
407
+ Returns an empty string if LSP is unavailable, disabled, or produces no diagnostics.
408
+ """
409
+ if self._lsp_manager is None or not self._lsp_manager.enabled:
410
+ return ""
411
+
412
+ if not self._lsp_manager._config.auto_diagnostics_on_edit:
413
+ return ""
414
+
415
+ if not self._lsp_manager._initialized:
416
+ await self._lsp_manager.initialize()
417
+
418
+ server_name = self._lsp_manager.server_for_path(path)
419
+ if server_name is None:
420
+ return ""
421
+
422
+ try:
423
+ diagnostics = await self._lsp_manager.get_fresh_diagnostics(path)
424
+ except Exception:
425
+ return ""
426
+
427
+ if not diagnostics:
428
+ return ""
429
+
430
+ from kolega_code.services.lsp import format_diagnostics
431
+
432
+ # Blank-line separator so the diagnostics block reads as a distinct section
433
+ # after the result line (e.g. "Edited foo.py\n\nLSP diagnostics (...)").
434
+ return "\n\n" + format_diagnostics(diagnostics, path, source=server_name)