kolega-code 0.41.2__tar.gz → 0.41.3__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 (498) hide show
  1. {kolega_code-0.41.2 → kolega_code-0.41.3}/CHANGELOG.md +21 -0
  2. {kolega_code-0.41.2 → kolega_code-0.41.3}/PKG-INFO +5 -2
  3. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/__init__.py +1 -1
  4. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/__init__.py +1 -1
  5. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/app.py +8 -1
  6. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/agent_runtime.py +11 -1
  7. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/loop_runtime.py +2 -0
  8. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/settings_panel.py +94 -48
  9. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/settings_screen.py +182 -13
  10. kolega_code-0.41.3/kolega_code/cli/tui/settings_widgets.py +24 -0
  11. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/styles.tcss +8 -2
  12. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/widgets.py +9 -3
  13. {kolega_code-0.41.2 → kolega_code-0.41.3}/pyproject.toml +8 -2
  14. {kolega_code-0.41.2 → kolega_code-0.41.3}/.gitignore +0 -0
  15. {kolega_code-0.41.2 → kolega_code-0.41.3}/CONTRIBUTING.md +0 -0
  16. {kolega_code-0.41.2 → kolega_code-0.41.3}/LICENSE +0 -0
  17. {kolega_code-0.41.2 → kolega_code-0.41.3}/MIGRATION.md +0 -0
  18. {kolega_code-0.41.2 → kolega_code-0.41.3}/README.md +0 -0
  19. {kolega_code-0.41.2 → kolega_code-0.41.3}/RELEASING.md +0 -0
  20. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/LICENSE +0 -0
  21. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/manifest.json +0 -0
  22. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/deep-research/SKILL.md +0 -0
  23. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/deep-research/references/evidence-and-reporting.md +0 -0
  24. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/deep-research/references/gigacode-workflow.md +0 -0
  25. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/deep-research/scripts/deep-research.workflow +0 -0
  26. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/deep-research/scripts/materialize_report.py +0 -0
  27. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/docx/LICENSE +0 -0
  28. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/docx/SKILL.md +0 -0
  29. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/docx/references/examples.md +0 -0
  30. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/docx/references/limitations.md +0 -0
  31. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/docx/references/operations.md +0 -0
  32. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/docx/references/quality.md +0 -0
  33. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/docx/requirements.txt +0 -0
  34. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/docx/scripts/docx_tool.py +0 -0
  35. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/docx/scripts/smoke_test.py +0 -0
  36. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/humanizer/LICENSE +0 -0
  37. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/humanizer/SKILL.md +0 -0
  38. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pdf/LICENSE +0 -0
  39. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pdf/SKILL.md +0 -0
  40. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pdf/references/examples.md +0 -0
  41. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pdf/references/limitations.md +0 -0
  42. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pdf/references/ocr.md +0 -0
  43. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pdf/references/operations.md +0 -0
  44. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pdf/references/quality.md +0 -0
  45. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pdf/references/redaction.md +0 -0
  46. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-paddle.txt +0 -0
  47. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-surya.txt +0 -0
  48. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pdf/requirements.txt +0 -0
  49. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pdf/scripts/pdf_tool.py +0 -0
  50. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pdf/scripts/smoke_test.py +0 -0
  51. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pptx/LICENSE +0 -0
  52. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pptx/SKILL.md +0 -0
  53. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pptx/references/examples.md +0 -0
  54. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pptx/references/limitations.md +0 -0
  55. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pptx/references/operations.md +0 -0
  56. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pptx/requirements.txt +0 -0
  57. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pptx/scripts/pptx_tool.py +0 -0
  58. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/pptx/scripts/smoke_test.py +0 -0
  59. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/review/SKILL.md +0 -0
  60. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/review/references/github-publishing.md +0 -0
  61. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/skill-authoring/SKILL.md +0 -0
  62. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/skill-authoring/references/review-checklist.md +0 -0
  63. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/xlsx/LICENSE +0 -0
  64. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/xlsx/SKILL.md +0 -0
  65. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/xlsx/references/examples.md +0 -0
  66. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/xlsx/references/limitations.md +0 -0
  67. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/xlsx/references/operations.md +0 -0
  68. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/xlsx/references/quality.md +0 -0
  69. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/xlsx/requirements.txt +0 -0
  70. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/xlsx/scripts/smoke_test.py +0 -0
  71. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/_bundled_skills/skills/xlsx/scripts/xlsx_tool.py +0 -0
  72. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/acp/__init__.py +0 -0
  73. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/acp/agent_factory.py +0 -0
  74. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/acp/bridge.py +0 -0
  75. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/acp/diffs.py +0 -0
  76. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/acp/permissions.py +0 -0
  77. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/acp/plans.py +0 -0
  78. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/acp/questions.py +0 -0
  79. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/acp/server.py +0 -0
  80. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/acp/session.py +0 -0
  81. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/acp/usage.py +0 -0
  82. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/baseagent.py +0 -0
  83. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/browseragent.py +0 -0
  84. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/coder.py +0 -0
  85. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/common.py +0 -0
  86. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/compression.py +0 -0
  87. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/context.py +0 -0
  88. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/conversation.py +0 -0
  89. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/custom_agents.py +0 -0
  90. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/edit_protocols.py +0 -0
  91. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/errors.py +0 -0
  92. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/eval/__init__.py +0 -0
  93. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/eval/bridge.py +0 -0
  94. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/eval/bundle-requirements.in +0 -0
  95. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/eval/bundle-requirements.txt +0 -0
  96. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/eval/env.py +0 -0
  97. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/eval/js_kernel.py +0 -0
  98. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/eval/kernel.py +0 -0
  99. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/eval/prelude.js +0 -0
  100. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/eval/prelude.py +0 -0
  101. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/eval/protocol.py +0 -0
  102. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/eval/py_kernel.py +0 -0
  103. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/eval/runner.js +0 -0
  104. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/eval/runner.py +0 -0
  105. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/generalagent.py +0 -0
  106. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/goal.py +0 -0
  107. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/handoff.py +0 -0
  108. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/investigationagent.py +0 -0
  109. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/model_routing.py +0 -0
  110. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/orchestration/__init__.py +0 -0
  111. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/orchestration/accounting.py +0 -0
  112. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/orchestration/budget.py +0 -0
  113. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/orchestration/context.py +0 -0
  114. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/orchestration/errors.py +0 -0
  115. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/orchestration/executor.py +0 -0
  116. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/orchestration/guide.py +0 -0
  117. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/orchestration/journal.py +0 -0
  118. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/orchestration/runtime.py +0 -0
  119. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/orchestration/types.py +0 -0
  120. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/planningagent.py +0 -0
  121. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_dump.py +0 -0
  122. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_overrides.py +0 -0
  123. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_provider.py +0 -0
  124. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_exhausted.user.md +0 -0
  125. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_nudge.user.md.j2 +0 -0
  126. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/truncated_turn_nudge.user.md.j2 +0 -0
  127. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
  128. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
  129. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/auxiliary/handoff/document.system.md +0 -0
  130. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/auxiliary/handoff/document.user.md.j2 +0 -0
  131. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
  132. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
  133. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/extensions/cli/build_questions.md +0 -0
  134. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/extensions/cli/current_plan_artifact.md.j2 +0 -0
  135. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/extensions/cli/mode_switch_notice.md.j2 +0 -0
  136. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
  137. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/extensions/cli/scratchpad.md.j2 +0 -0
  138. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
  139. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list_readonly.md +0 -0
  140. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/extensions/cli/worktree_control.md.j2 +0 -0
  141. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -0
  142. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +0 -0
  143. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/system/agents/coder_ask.md.j2 +0 -0
  144. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/system/agents/coder_base.md.j2 +0 -0
  145. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
  146. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +0 -0
  147. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +0 -0
  148. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +0 -0
  149. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
  150. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/system/includes/context_updates.md +0 -0
  151. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
  152. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -0
  153. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +0 -0
  154. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -0
  155. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -0
  156. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +0 -0
  157. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/system/includes/terminal_tools.md +0 -0
  158. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/apply_patch.md +0 -0
  159. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/ask_user_choice.md +0 -0
  160. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_click.md +0 -0
  161. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_close.md +0 -0
  162. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_console_messages.md +0 -0
  163. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_drag.md +0 -0
  164. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_drop.md +0 -0
  165. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_evaluate.md +0 -0
  166. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_file_upload.md +0 -0
  167. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_fill_form.md +0 -0
  168. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_find.md +0 -0
  169. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_handle_dialog.md +0 -0
  170. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_hover.md +0 -0
  171. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_navigate.md +0 -0
  172. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_navigate_back.md +0 -0
  173. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_network_request.md +0 -0
  174. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_network_requests.md +0 -0
  175. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_press_key.md +0 -0
  176. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_resize.md +0 -0
  177. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_scroll.md +0 -0
  178. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_select_option.md +0 -0
  179. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_snapshot.md +0 -0
  180. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_tabs.md +0 -0
  181. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_take_screenshot.md +0 -0
  182. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_type.md +0 -0
  183. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/browser_wait_for.md +0 -0
  184. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/build_backend.md +0 -0
  185. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/build_frontend.md +0 -0
  186. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/claude_edit.md +0 -0
  187. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/claude_write.md +0 -0
  188. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/dispatch_agent.md +0 -0
  189. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/edit.md +0 -0
  190. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/eval.md +0 -0
  191. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/exec_command.md +0 -0
  192. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/get_host.md +0 -0
  193. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/get_task_list.md +0 -0
  194. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/get_task_list_readonly.md +0 -0
  195. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/hashline_edit.md +0 -0
  196. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/hashline_write.md +0 -0
  197. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/kill_command.md +0 -0
  198. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/list_agents.md +0 -0
  199. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/list_sessions.md +0 -0
  200. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/list_subagent_models.md +0 -0
  201. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/list_workflow_runs.md +0 -0
  202. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/lsp.md +0 -0
  203. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/lsp_edit.md +0 -0
  204. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/multi_edit.md +0 -0
  205. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/read.md +0 -0
  206. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/read_image.md +0 -0
  207. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/resolve.md +0 -0
  208. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/run_workflow.md +0 -0
  209. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/send_message.md +0 -0
  210. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/set_goal.md +0 -0
  211. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/skill.md +0 -0
  212. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/snapshot.md +0 -0
  213. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/switch_worktree.md +0 -0
  214. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/update_task_list.md +0 -0
  215. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/web_fetch.md +0 -0
  216. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/web_search.md +0 -0
  217. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/write.md +0 -0
  218. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/write_plan.md +0 -0
  219. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/tools/write_stdin.md +0 -0
  220. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +0 -0
  221. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
  222. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/prompts.py +0 -0
  223. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/session_metadata.py +0 -0
  224. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/agent_tool.py +0 -0
  225. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/base_tool.py +0 -0
  226. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/browser_tool.py +0 -0
  227. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/build_tool.py +0 -0
  228. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/codex_patch.py +0 -0
  229. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
  230. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/edit_tool.py +0 -0
  231. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/eval_tool.py +0 -0
  232. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/hashline_v2.py +0 -0
  233. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/lsp_tool.py +0 -0
  234. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
  235. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/network_status.py +0 -0
  236. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/read_file_tool.py +0 -0
  237. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/read_image_tool.py +0 -0
  238. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/search_backends/__init__.py +0 -0
  239. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
  240. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +0 -0
  241. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
  242. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +0 -0
  243. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
  244. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
  245. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/search_backends/tavily.py +0 -0
  246. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/snapshot_tool.py +0 -0
  247. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
  248. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/terminal_tool.py +0 -0
  249. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/web_fetch/__init__.py +0 -0
  250. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/web_fetch/answering.py +0 -0
  251. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/web_fetch/documents.py +0 -0
  252. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/web_fetch/extractors.py +0 -0
  253. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/web_fetch/pipeline.py +0 -0
  254. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/web_fetch/retrieval.py +0 -0
  255. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/web_fetch_tool.py +0 -0
  256. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/web_search_tool.py +0 -0
  257. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
  258. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tool_definitions.py +0 -0
  259. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/tools.py +0 -0
  260. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/utils/commands.py +0 -0
  261. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/agent/volatile_context.py +0 -0
  262. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/auth/__init__.py +0 -0
  263. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/auth/_jwt.py +0 -0
  264. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/auth/chatgpt_oauth.py +0 -0
  265. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/auth/constants.py +0 -0
  266. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/auth/tokens.py +0 -0
  267. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/browser_extension/__init__.py +0 -0
  268. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/browser_extension/framing.py +0 -0
  269. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/browser_extension/installer.py +0 -0
  270. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/browser_extension/manager.py +0 -0
  271. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/browser_extension/multiplex.py +0 -0
  272. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/browser_extension/native_host.py +0 -0
  273. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/browser_extension/protocol.py +0 -0
  274. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/browser_extension/registry.py +0 -0
  275. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/browser_extension/runtime.py +0 -0
  276. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/__init__.py +0 -0
  277. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/acp.py +0 -0
  278. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/ask_output.py +0 -0
  279. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/atif_export.py +0 -0
  280. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/browser_backend.py +0 -0
  281. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/clipboard_image.py +0 -0
  282. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/config.py +0 -0
  283. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/connection.py +0 -0
  284. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/cron.py +0 -0
  285. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/diagnostics.py +0 -0
  286. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/file_index.py +0 -0
  287. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/gateway.py +0 -0
  288. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/goal.py +0 -0
  289. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/loop.py +0 -0
  290. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/main.py +0 -0
  291. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/mentions.py +0 -0
  292. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/messages.py +0 -0
  293. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/model_catalog.py +0 -0
  294. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/model_connection.py +0 -0
  295. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/peer_messaging.py +0 -0
  296. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/plan_artifacts.py +0 -0
  297. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/prompt_history.py +0 -0
  298. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/provider_registry.py +0 -0
  299. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/session_event_protocol.py +0 -0
  300. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/session_event_store.py +0 -0
  301. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/session_journal.py +0 -0
  302. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/session_store.py +0 -0
  303. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/session_usage.py +0 -0
  304. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/settings.py +0 -0
  305. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/skills.py +0 -0
  306. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/slash_commands.py +0 -0
  307. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/theme.py +0 -0
  308. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/__init__.py +0 -0
  309. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/app_base.py +0 -0
  310. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/boot_splash.py +0 -0
  311. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/changes_screen.py +0 -0
  312. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/command_handlers.py +0 -0
  313. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/constants.py +0 -0
  314. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/custom_model.py +0 -0
  315. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/discovery.py +0 -0
  316. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/memory_screen.py +0 -0
  317. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/metadata.py +0 -0
  318. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/onboarding_screen.py +0 -0
  319. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/pacing.py +0 -0
  320. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/prompt_flows.py +0 -0
  321. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/session_diff.py +0 -0
  322. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/shortcut_bar.py +0 -0
  323. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/startup.py +0 -0
  324. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/state.py +0 -0
  325. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/status_dashboard.py +0 -0
  326. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/sub_agent_screen.py +0 -0
  327. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/task_list.py +0 -0
  328. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/terminal_display.py +0 -0
  329. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/tool_presentation.py +0 -0
  330. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/transcript.py +0 -0
  331. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/tui/turn_status.py +0 -0
  332. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/cli/updater.py +0 -0
  333. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/config.py +0 -0
  334. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/events.py +0 -0
  335. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/extensions.py +0 -0
  336. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/__init__.py +0 -0
  337. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/access.py +0 -0
  338. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/access_settings.py +0 -0
  339. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/adapters/__init__.py +0 -0
  340. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/adapters/base.py +0 -0
  341. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/adapters/echo.py +0 -0
  342. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/adapters/telegram/__init__.py +0 -0
  343. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/adapters/telegram/adapter.py +0 -0
  344. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/adapters/telegram/formatting.py +0 -0
  345. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/bridge.py +0 -0
  346. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/commands.py +0 -0
  347. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/config.py +0 -0
  348. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/control_relay.py +0 -0
  349. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/daemon.py +0 -0
  350. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/event_router.py +0 -0
  351. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/questions.py +0 -0
  352. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/redaction.py +0 -0
  353. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/router.py +0 -0
  354. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/service.py +0 -0
  355. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/sessions.py +0 -0
  356. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/gateway/stt.py +0 -0
  357. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/git_env.py +0 -0
  358. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/hooks/__init__.py +0 -0
  359. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/hooks/backends.py +0 -0
  360. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/hooks/config.py +0 -0
  361. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/hooks/dispatcher.py +0 -0
  362. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/hooks/events.py +0 -0
  363. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/hooks/matcher.py +0 -0
  364. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/hooks/outcome.py +0 -0
  365. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/client.py +0 -0
  366. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/exceptions.py +0 -0
  367. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/instrumented_client.py +0 -0
  368. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/ledger.py +0 -0
  369. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/models.py +0 -0
  370. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/providers/__init__.py +0 -0
  371. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/providers/_token_encoding.py +0 -0
  372. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/providers/anthropic.py +0 -0
  373. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/providers/base.py +0 -0
  374. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
  375. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/providers/deepseek_responses.py +0 -0
  376. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/providers/google.py +0 -0
  377. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/providers/models.py +0 -0
  378. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/providers/openai.py +0 -0
  379. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/providers/openai_responses.py +0 -0
  380. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/providers/perplexity_responses.py +0 -0
  381. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/providers/responses_common.py +0 -0
  382. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/providers/tinker.py +0 -0
  383. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/providers/tinker_trace.py +0 -0
  384. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/ratelimit.py +0 -0
  385. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/__init__.py +0 -0
  386. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/accessors.py +0 -0
  387. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/catalog/__init__.py +0 -0
  388. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/catalog/anthropic.py +0 -0
  389. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/catalog/dashscope.py +0 -0
  390. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/catalog/deepseek.py +0 -0
  391. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/catalog/fireworks.py +0 -0
  392. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/catalog/google.py +0 -0
  393. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/catalog/groq.py +0 -0
  394. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/catalog/kimi_coding.py +0 -0
  395. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/catalog/moonshot.py +0 -0
  396. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/catalog/ollama_cloud.py +0 -0
  397. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/catalog/openai.py +0 -0
  398. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/catalog/openai_chatgpt.py +0 -0
  399. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/catalog/openrouter.py +0 -0
  400. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/catalog/perplexity_agent.py +0 -0
  401. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/catalog/thinking_machines.py +0 -0
  402. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/catalog/tinker.py +0 -0
  403. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/catalog/together.py +0 -0
  404. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/catalog/xai.py +0 -0
  405. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/catalog/zai.py +0 -0
  406. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/custom_endpoints.py +0 -0
  407. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/ollama_cloud_catalog.py +0 -0
  408. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/openrouter_catalog.py +0 -0
  409. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/perplexity_catalog.py +0 -0
  410. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/thinking.py +0 -0
  411. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/tinker_catalog.py +0 -0
  412. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/types.py +0 -0
  413. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/specs/validation.py +0 -0
  414. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/timeouts.py +0 -0
  415. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/tool_execution_ids.py +0 -0
  416. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/llm/usage.py +0 -0
  417. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/local_state.py +0 -0
  418. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/mcp/__init__.py +0 -0
  419. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/mcp/config.py +0 -0
  420. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/mcp/oauth.py +0 -0
  421. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/mcp/service.py +0 -0
  422. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/mcp/state.py +0 -0
  423. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/mcp/tools.py +0 -0
  424. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/mcp/transport.py +0 -0
  425. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/memory/__init__.py +0 -0
  426. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/memory/identity.py +0 -0
  427. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/memory/manager.py +0 -0
  428. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/memory/manifest.py +0 -0
  429. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/memory/markdown.py +0 -0
  430. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/memory/models.py +0 -0
  431. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/memory/protocol.py +0 -0
  432. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/memory/registry.py +0 -0
  433. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/models/__init__.py +0 -0
  434. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/models/sandbox_terminal_state.py +0 -0
  435. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/permissions.py +0 -0
  436. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/runtime.py +0 -0
  437. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/sandbox/README.md +0 -0
  438. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/sandbox/__init__.py +0 -0
  439. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/sandbox/async_filesystem.py +0 -0
  440. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/sandbox/base.py +0 -0
  441. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/sandbox/browser.py +0 -0
  442. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/sandbox/event_loop.py +0 -0
  443. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/sandbox/filesystem.py +0 -0
  444. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/sandbox/local.py +0 -0
  445. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/sandbox/serializer.py +0 -0
  446. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/sandbox/terminal.py +0 -0
  447. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/sandbox/utils.py +0 -0
  448. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/scratchpad.py +0 -0
  449. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/security/__init__.py +0 -0
  450. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/security/secrets.py +0 -0
  451. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/services/base.py +0 -0
  452. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/services/browser.py +0 -0
  453. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/services/file_system.py +0 -0
  454. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/services/html.py +0 -0
  455. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/services/lsp/__init__.py +0 -0
  456. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/services/lsp/client.py +0 -0
  457. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/services/lsp/config.py +0 -0
  458. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/services/lsp/detector.py +0 -0
  459. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/services/lsp/diagnostics.py +0 -0
  460. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/services/lsp/edits.py +0 -0
  461. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/services/lsp/manager.py +0 -0
  462. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/services/lsp/registry.py +0 -0
  463. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/services/lsp/registry.yaml +0 -0
  464. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/services/snapshots.py +0 -0
  465. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/services/terminal.py +0 -0
  466. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/services/terminal_buffer.py +0 -0
  467. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/services/workspace_scan.py +0 -0
  468. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/session/__init__.py +0 -0
  469. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/session/control.py +0 -0
  470. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/session/inbox.py +0 -0
  471. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/session/inmemory.py +0 -0
  472. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/session/projection.py +0 -0
  473. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/session/recording.py +0 -0
  474. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/session/runtime.py +0 -0
  475. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/session/store.py +0 -0
  476. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/testing/__init__.py +0 -0
  477. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/testing/store_conformance.py +0 -0
  478. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/tool_subjects.py +0 -0
  479. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/tools/__init__.py +0 -0
  480. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/tools/ask_user.py +0 -0
  481. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/tools/core.py +0 -0
  482. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/tools/definitions.py +0 -0
  483. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/tools/param_aliases.py +0 -0
  484. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/tools/registry.py +0 -0
  485. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/utils/__init__.py +0 -0
  486. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/utils/images.py +0 -0
  487. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/web/__init__.py +0 -0
  488. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/web/assets/fold.js +0 -0
  489. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/web/assets/player.css +0 -0
  490. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/web/assets/player.html +0 -0
  491. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/web/assets/player.js +0 -0
  492. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/web/bundle.py +0 -0
  493. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/web/hosting.py +0 -0
  494. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/web/redaction.py +0 -0
  495. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/web/server.py +0 -0
  496. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/web/singlefile.py +0 -0
  497. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/web/theme_css.py +0 -0
  498. {kolega_code-0.41.2 → kolega_code-0.41.3}/kolega_code/worktrees.py +0 -0
@@ -6,6 +6,27 @@ This project uses GitHub Releases for detailed generated release notes. This fil
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 0.41.3 - 2026-10-05
10
+
11
+ ### Fixed
12
+
13
+ - The Settings screen no longer loses unsaved work. Leaving a section or
14
+ closing Settings with pending MCP server edits now offers Save, Discard, or
15
+ Keep Editing, and a failed save or verification keeps the form exactly as
16
+ entered, including values the form does not expose (connection timeouts,
17
+ OAuth fields).
18
+ - Scrolling inside a Settings dropdown no longer scrolls the page beneath it,
19
+ and choosing an option keeps the page position and focus stable.
20
+ - Saving Settings or switching modes while an agent turn is running no longer
21
+ disrupts the active turn; queued turns are deferred and preserved.
22
+ - Tool titles containing a trailing backslash or an unmatched square bracket no
23
+ longer crash the transcript renderer.
24
+
25
+ ### Security
26
+
27
+ - Updated PyJWT to 2.15.0, urllib3 to 2.8.0, and virtualenv to 21.7.13 to
28
+ close known CVEs in those dependencies.
29
+
9
30
  ## 0.41.2 - 2026-09-30
10
31
 
11
32
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kolega-code
3
- Version: 0.41.2
3
+ Version: 0.41.3
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/
@@ -35,7 +35,7 @@ Requires-Dist: cryptography==48.0.1; sys_platform == 'darwin' and platform_machi
35
35
  Requires-Dist: cryptography==50.0.0; sys_platform != 'darwin' or platform_machine != 'x86_64'
36
36
  Requires-Dist: ddgs==9.14.4
37
37
  Requires-Dist: fastapi==0.139.2
38
- Requires-Dist: filelock==3.20.3
38
+ Requires-Dist: filelock==3.24.2
39
39
  Requires-Dist: firecrawl-py==4.28.2
40
40
  Requires-Dist: google-genai==2.12.1
41
41
  Requires-Dist: httpx==0.28.1
@@ -57,6 +57,7 @@ Requires-Dist: playwright==1.59.0
57
57
  Requires-Dist: psutil==7.2.2
58
58
  Requires-Dist: pydantic==2.13.4
59
59
  Requires-Dist: pygments==2.20.0
60
+ Requires-Dist: pyjwt==2.15.0
60
61
  Requires-Dist: pypdfium2==5.11.0
61
62
  Requires-Dist: python-dotenv==1.2.2
62
63
  Requires-Dist: pyyaml==6.0.3
@@ -67,6 +68,7 @@ Requires-Dist: tenacity==9.1.4
67
68
  Requires-Dist: textual==8.2.5
68
69
  Requires-Dist: tiktoken==0.12.0
69
70
  Requires-Dist: trafilatura==2.0.0
71
+ Requires-Dist: urllib3==2.8.0
70
72
  Requires-Dist: uvicorn==0.49.0
71
73
  Requires-Dist: websockets==16.0
72
74
  Provides-Extra: cli
@@ -80,6 +82,7 @@ Requires-Dist: pytest-xdist==3.8.0; extra == 'dev'
80
82
  Requires-Dist: pytest==9.0.3; extra == 'dev'
81
83
  Requires-Dist: ruff==0.15.12; extra == 'dev'
82
84
  Requires-Dist: twine==6.2.0; extra == 'dev'
85
+ Requires-Dist: virtualenv==21.7.13; extra == 'dev'
83
86
  Provides-Extra: tinker
84
87
  Requires-Dist: tinker-cookbook==0.5.4; extra == 'tinker'
85
88
  Requires-Dist: tinker==0.25.0; extra == 'tinker'
@@ -174,4 +174,4 @@ __all__ = [
174
174
  "parse_git_status_output",
175
175
  ]
176
176
 
177
- __version__ = "0.41.2"
177
+ __version__ = "0.41.3"
@@ -51,4 +51,4 @@ __all__ = [
51
51
  "ToolExtension",
52
52
  ]
53
53
 
54
- __version__ = "0.41.2"
54
+ __version__ = "0.41.3"
@@ -1373,7 +1373,11 @@ class KolegaCodeApp(
1373
1373
  event.composer.load_text("")
1374
1374
  self._pending_image_attachments.clear()
1375
1375
  self._clear_composer_hint()
1376
- if self._turn_active or self.agent_worker is not None:
1376
+ if (
1377
+ self._turn_active
1378
+ or self.agent_worker is not None
1379
+ or (self._settings_screen is not None and self._settings_screen.mcp_busy)
1380
+ ):
1377
1381
  self._queue_user_message(text, attachments)
1378
1382
  return
1379
1383
  self._add_conversation_entry(tui_state.ConversationEntry(kind="user", content=text))
@@ -1559,6 +1563,9 @@ class KolegaCodeApp(
1559
1563
  pass
1560
1564
 
1561
1565
  def _mode_switch_blocked(self) -> bool:
1566
+ if self._settings_screen is not None and self._settings_screen.mcp_busy:
1567
+ self._notify_user("Wait for the MCP operation to finish before switching modes.", severity="warning")
1568
+ return True
1562
1569
  if self._pending_approval is not None:
1563
1570
  self._set_composer_status(messages.APPROVAL_PLACEHOLDER)
1564
1571
  self._notify_user(messages.BLOCK_PENDING_APPROVAL, severity="warning")
@@ -926,6 +926,9 @@ class AgentRuntimeMixin(tui_app_base.KolegaAppBase):
926
926
  self._maybe_start_queued_message()
927
927
 
928
928
  def _maybe_start_queued_message(self) -> bool:
929
+ settings_screen = getattr(self, "_settings_screen", None)
930
+ if settings_screen is not None and settings_screen.mcp_busy:
931
+ return False
929
932
  if self._startup_pending or not self._queued_messages or self.agent is None:
930
933
  return False
931
934
  if self._turn_active or self.agent_worker is not None:
@@ -1238,7 +1241,14 @@ class AgentRuntimeMixin(tui_app_base.KolegaAppBase):
1238
1241
  self.session.config = config_summary(config)
1239
1242
  await self._save_session_async()
1240
1243
  try:
1241
- await self._build_agent(config, rebuild=rebuild)
1244
+ settings_screen = getattr(self, "_settings_screen", None)
1245
+ await self._build_agent(
1246
+ config,
1247
+ rebuild=rebuild,
1248
+ # Peer messages may arrive while an MCP operation awaits OAuth
1249
+ # or a remote server. Resume them against the rebuilt agent.
1250
+ preserve_queued=settings_screen is not None and settings_screen.mcp_busy,
1251
+ )
1242
1252
  except KolegaExtensionLoadError as exc:
1243
1253
  # The failed generation was already reclaimed by _build_agent; there
1244
1254
  # is no live agent, so surface the error instead of crashing the
@@ -216,8 +216,10 @@ class LoopRuntimeMixin(tui_app_base.KolegaAppBase):
216
216
 
217
217
  def _loop_ready_to_fire(self) -> bool:
218
218
  """Whether the app is idle enough to start a scheduled iteration."""
219
+ settings_screen = getattr(self, "_settings_screen", None)
219
220
  return (
220
221
  self.agent is not None
222
+ and not (settings_screen is not None and settings_screen.mcp_busy)
221
223
  and not self._loop_iteration_active
222
224
  and not self._turn_active
223
225
  and self.agent_worker is None
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import asyncio
5
6
  import json
6
7
  import os
7
8
  import re
@@ -49,7 +50,7 @@ from kolega_code.mcp.config import (
49
50
  remove_server_config,
50
51
  upsert_server_config,
51
52
  )
52
- from kolega_code.mcp.service import MCPService, mcp_tool_name_adjustment_note
53
+ from kolega_code.mcp.service import MCPService, MCPVerificationResult, mcp_tool_name_adjustment_note
53
54
  from kolega_code.mcp.state import MCPStatusStore, MCPOAuthTokenStore
54
55
 
55
56
  from .. import messages, theme
@@ -416,8 +417,15 @@ class SettingsPanelMixin(tui_app_base.KolegaAppBase):
416
417
  self._update_endpoint_field_visibility()
417
418
  return
418
419
 
420
+ if select_id and select_id.startswith("mcp_") and event.select.value != event.value:
421
+ return # Ignore queued values superseded by form loading or picker restoration.
422
+
419
423
  if select_id == "mcp_server_select":
420
- self._populate_mcp_server_form(str(event.value))
424
+ screen = getattr(self, "_settings_screen", None)
425
+ if screen is not None:
426
+ screen.request_mcp_selection(str(event.value))
427
+ else:
428
+ self._populate_mcp_server_form(str(event.value))
421
429
  return
422
430
 
423
431
  if select_id == "mcp_transport_select":
@@ -1444,7 +1452,7 @@ class SettingsPanelMixin(tui_app_base.KolegaAppBase):
1444
1452
  self.config.mcp_config = config
1445
1453
  return config
1446
1454
 
1447
- def _populate_mcp_controls(self) -> None:
1455
+ def _populate_mcp_controls(self, *, preserve_form: bool = False) -> None:
1448
1456
  """Seed the MCP settings controls from global/trusted project config and status."""
1449
1457
  try:
1450
1458
  config = self._load_mcp_config_for_ui()
@@ -1462,7 +1470,8 @@ class SettingsPanelMixin(tui_app_base.KolegaAppBase):
1462
1470
  selected = MCP_NEW_SERVER_VALUE
1463
1471
  server_select.set_options(options)
1464
1472
  server_select.value = selected
1465
- self._populate_mcp_server_form(selected)
1473
+ if not preserve_form:
1474
+ self._populate_mcp_server_form(selected)
1466
1475
  self._update_mcp_status_text(config)
1467
1476
 
1468
1477
  def _mcp_server_option_label(self, server: MCPServerConfig) -> str:
@@ -1509,6 +1518,9 @@ class SettingsPanelMixin(tui_app_base.KolegaAppBase):
1509
1518
  set_input("mcp_cwd_input", "")
1510
1519
  self._set_mcp_source_hint("Create or update a user MCP server in the global state config.")
1511
1520
  self._update_mcp_transport_fields("streamable_http")
1521
+ screen = getattr(self, "_settings_screen", None)
1522
+ if screen is not None:
1523
+ screen.mark_mcp_clean(server_id)
1512
1524
  return
1513
1525
 
1514
1526
  set_input("mcp_name_input", server.name or "")
@@ -1534,6 +1546,9 @@ class SettingsPanelMixin(tui_app_base.KolegaAppBase):
1534
1546
  else:
1535
1547
  self._set_mcp_source_hint("This server is stored in your global MCP config.")
1536
1548
  self._update_mcp_transport_fields(server.transport)
1549
+ screen = getattr(self, "_settings_screen", None)
1550
+ if screen is not None:
1551
+ screen.mark_mcp_clean(server_id, read_only=server.source == "project")
1537
1552
 
1538
1553
  def _update_mcp_oauth_fields(self, visible: bool) -> None:
1539
1554
  for widget_id in (
@@ -1626,6 +1641,11 @@ class SettingsPanelMixin(tui_app_base.KolegaAppBase):
1626
1641
  except NoMatches:
1627
1642
  pass
1628
1643
 
1644
+ def _set_mcp_feedback(self, message: str) -> None:
1645
+ screen = getattr(self, "_settings_screen", None)
1646
+ if screen is not None:
1647
+ screen.set_mcp_feedback(message)
1648
+
1629
1649
  def _slug_mcp_server_id(self, value: str) -> str:
1630
1650
  slug = re.sub(r"[^A-Za-z0-9_-]+", "-", value.strip().lower())
1631
1651
  slug = re.sub(r"-+", "-", slug).strip("-_")
@@ -1740,50 +1760,41 @@ class SettingsPanelMixin(tui_app_base.KolegaAppBase):
1740
1760
  except NoMatches:
1741
1761
  pass
1742
1762
 
1743
- client_name = "Kolega Code"
1744
- client_uri = None
1745
- client_metadata_url = None
1746
- timeout_seconds = 300.0
1763
+ # Overlay only the editor's fields on the saved model. Connection timeouts
1764
+ # and OAuth client metadata have no controls and must survive every save.
1765
+ payload: dict[str, Any] = {}
1766
+ oauth_payload: dict[str, Any] = {}
1747
1767
  if selected != MCP_NEW_SERVER_VALUE:
1748
- try:
1749
- config = self._load_mcp_config_for_ui()
1750
- existing = config.servers.get(selected)
1751
- if existing:
1752
- client_name = existing.oauth.client_name
1753
- client_uri = existing.oauth.client_uri
1754
- client_metadata_url = existing.oauth.client_metadata_url
1755
- timeout_seconds = existing.oauth.timeout_seconds
1756
- except Exception:
1757
- pass
1758
-
1759
- oauth = MCPOAuthConfig(
1760
- enabled=oauth_enabled,
1761
- client_id=oauth_client_id,
1762
- client_secret=oauth_client_secret,
1763
- client_secret_env=oauth_client_secret_env,
1764
- redirect_uri=oauth_redirect_uri,
1765
- scope=oauth_scope,
1766
- token_endpoint_auth_method=oauth_auth_method,
1767
- client_name=client_name,
1768
- client_uri=client_uri,
1769
- client_metadata_url=client_metadata_url,
1770
- timeout_seconds=timeout_seconds,
1771
- )
1772
-
1773
- return MCPServerConfig(
1768
+ existing = self._load_mcp_config_for_ui().servers.get(selected)
1769
+ if existing is None:
1770
+ raise ValueError("This MCP server no longer exists. Reload before saving.")
1771
+ payload = existing.model_dump()
1772
+ oauth_payload = existing.oauth.model_dump()
1773
+ if http:
1774
+ oauth_payload.update(
1775
+ client_id=oauth_client_id,
1776
+ client_secret=oauth_client_secret,
1777
+ client_secret_env=oauth_client_secret_env,
1778
+ redirect_uri=oauth_redirect_uri,
1779
+ scope=oauth_scope,
1780
+ token_endpoint_auth_method=oauth_auth_method,
1781
+ )
1782
+ oauth_payload["enabled"] = oauth_enabled
1783
+ payload.update(
1774
1784
  id=server_id,
1775
1785
  name=name,
1776
1786
  transport=transport,
1777
1787
  enabled=enabled,
1778
1788
  url=url,
1779
1789
  headers=headers,
1780
- oauth=oauth,
1790
+ oauth=MCPOAuthConfig.model_validate(oauth_payload),
1781
1791
  command=command,
1782
1792
  args=args,
1783
1793
  env=env,
1784
1794
  cwd=cwd,
1785
1795
  source="global",
1786
1796
  )
1797
+ return MCPServerConfig.model_validate(payload)
1787
1798
 
1788
1799
  def _parse_mcp_json_object(self, value: str, label: str) -> dict[str, str]:
1789
1800
  if not value:
@@ -1813,6 +1824,10 @@ class SettingsPanelMixin(tui_app_base.KolegaAppBase):
1813
1824
  if button_id == "mcp_save_server":
1814
1825
  await self._save_mcp_server_from_ui()
1815
1826
  return True
1827
+ if button_id == "mcp_save_verify_server":
1828
+ if await self._save_mcp_server_from_ui(rebuild=False):
1829
+ await self._verify_mcp_server_from_ui(just_saved=True)
1830
+ return True
1816
1831
  if button_id == "mcp_delete_server":
1817
1832
  await self._delete_mcp_server_from_ui()
1818
1833
  return True
@@ -1825,13 +1840,19 @@ class SettingsPanelMixin(tui_app_base.KolegaAppBase):
1825
1840
  return False
1826
1841
 
1827
1842
  def _selected_mcp_server_id(self) -> str:
1843
+ screen = getattr(self, "_settings_screen", None)
1844
+ if screen is not None:
1845
+ return screen.mcp_server_id
1828
1846
  try:
1829
1847
  value = self._settings_query_one("#mcp_server_select", Select).value
1830
1848
  except NoMatches:
1831
1849
  return MCP_NEW_SERVER_VALUE
1832
1850
  return MCP_NEW_SERVER_VALUE if value is Select.NULL else str(value)
1833
1851
 
1834
- async def _save_mcp_server_from_ui(self) -> None:
1852
+ async def _save_mcp_server_from_ui(self, *, rebuild: bool = True) -> bool:
1853
+ if self._turn_active or self.agent_worker is not None:
1854
+ self._set_mcp_status("Stop the active turn before changing MCP servers.", "warning")
1855
+ return False
1835
1856
  selected = self._selected_mcp_server_id()
1836
1857
  try:
1837
1858
  server = self._collect_mcp_server_from_ui()
@@ -1844,18 +1865,27 @@ class SettingsPanelMixin(tui_app_base.KolegaAppBase):
1844
1865
  self._set_mcp_status(
1845
1866
  "Project MCP servers are read-only in the TUI; edit .kolega/mcp_servers.json.", "warning"
1846
1867
  )
1847
- return
1868
+ return False
1848
1869
  path = global_mcp_config_path(self.settings_store.root)
1849
1870
  if selected != MCP_NEW_SERVER_VALUE and selected != server.id:
1850
1871
  remove_server_config(path, selected, source="global")
1851
1872
  upsert_server_config(path, server, source="global")
1852
1873
  except (MCPConfigError, ValueError) as exc:
1853
1874
  self._set_mcp_status(str(exc), "error")
1854
- return
1875
+ return False
1876
+ except OSError:
1877
+ self._set_mcp_status("Could not save MCP configuration. Check file permissions and try again.", "error")
1878
+ return False
1855
1879
  self._mcp_selected_server_id = server.id
1856
- self._populate_mcp_controls()
1857
- await self._ensure_agent_from_settings(rebuild=True)
1880
+ screen = getattr(self, "_settings_screen", None)
1881
+ if screen is not None:
1882
+ screen.mark_mcp_clean(server.id, message="Saved. Verification has not been run by this action.")
1883
+ self._populate_mcp_controls(preserve_form=True)
1884
+ self._set_mcp_source_hint("This server is stored in your global MCP config.")
1885
+ if rebuild:
1886
+ await self._ensure_agent_from_settings(rebuild=True)
1858
1887
  self._notify_user(f"Saved MCP server '{server.id}'.")
1888
+ return True
1859
1889
 
1860
1890
  async def _delete_mcp_server_from_ui(self) -> None:
1861
1891
  selected = self._selected_mcp_server_id()
@@ -1884,7 +1914,13 @@ class SettingsPanelMixin(tui_app_base.KolegaAppBase):
1884
1914
  await self._ensure_agent_from_settings(rebuild=True)
1885
1915
  self._notify_user(f"Deleted MCP server '{selected}'.")
1886
1916
 
1887
- async def _verify_mcp_server_from_ui(self) -> None:
1917
+ async def _verify_mcp_server_from_ui(self, *, just_saved: bool = False) -> None:
1918
+ screen = getattr(self, "_settings_screen", None)
1919
+ if screen is not None and screen.mcp_dirty:
1920
+ self._set_mcp_status(
1921
+ "Unsaved server changes. Use Save & Verify to test the displayed configuration.", "warning"
1922
+ )
1923
+ return
1888
1924
  selected = self._selected_mcp_server_id()
1889
1925
  if selected == MCP_NEW_SERVER_VALUE:
1890
1926
  self._set_mcp_status("Select a configured MCP server to verify.", "warning")
@@ -1892,16 +1928,25 @@ class SettingsPanelMixin(tui_app_base.KolegaAppBase):
1892
1928
  self._set_mcp_status(
1893
1929
  f"Verifying MCP server '{selected}'... stdio servers execute their configured command.", "warning"
1894
1930
  )
1931
+ self._set_mcp_feedback("Saved. Verifying…" if just_saved else "Verifying saved configuration…")
1895
1932
  config = self._load_mcp_config_for_ui()
1896
- result = await MCPService(config, self.settings_store.root, self.project_path).verify_server(
1897
- selected,
1898
- interactive_oauth=True,
1899
- open_browser=True,
1900
- output=self.console,
1901
- )
1902
- self._populate_mcp_controls()
1933
+ try:
1934
+ result = await MCPService(config, self.settings_store.root, self.project_path).verify_server(
1935
+ selected,
1936
+ interactive_oauth=True,
1937
+ open_browser=True,
1938
+ output=self.console,
1939
+ )
1940
+ except asyncio.CancelledError:
1941
+ self._set_mcp_feedback("Configuration remains saved. Verification was cancelled.")
1942
+ raise
1943
+ except Exception:
1944
+ # Do not echo arbitrary transport exceptions: they may contain credentials.
1945
+ result = MCPVerificationResult(selected, False, "Verification could not complete. Try again.")
1946
+ self._update_mcp_status_text()
1903
1947
  await self._ensure_agent_from_settings(rebuild=True)
1904
1948
  if result.ok:
1949
+ self._set_mcp_feedback("Saved and verified." if just_saved else "Saved configuration verified.")
1905
1950
  message = f"Verified MCP server '{selected}' ({result.tool_count} tool(s))."
1906
1951
  if result.status is not None:
1907
1952
  note = mcp_tool_name_adjustment_note(selected, result.status.tools)
@@ -1909,6 +1954,7 @@ class SettingsPanelMixin(tui_app_base.KolegaAppBase):
1909
1954
  message = f"{message} {note}"
1910
1955
  self._notify_user(message)
1911
1956
  else:
1957
+ self._set_mcp_feedback(f"Saved, but verification failed. {result.message}")
1912
1958
  self._notify_user(f"MCP verification failed for '{selected}': {result.message}", severity="warning")
1913
1959
 
1914
1960
  def _clear_mcp_tokens_from_ui(self) -> None: