kolega-code 0.34.0__tar.gz → 0.35.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 (487) hide show
  1. {kolega_code-0.34.0 → kolega_code-0.35.0}/CHANGELOG.md +28 -0
  2. {kolega_code-0.34.0 → kolega_code-0.35.0}/PKG-INFO +1 -1
  3. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/__init__.py +1 -1
  4. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/__init__.py +1 -1
  5. kolega_code-0.35.0/kolega_code/agent/session_metadata.py +165 -0
  6. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/app.py +22 -3
  7. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/gateway.py +20 -1
  8. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/main.py +19 -11
  9. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/peer_messaging.py +1 -1
  10. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/provider_registry.py +2 -1
  11. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/session_store.py +33 -4
  12. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/slash_commands.py +3 -0
  13. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/agent_runtime.py +70 -1
  14. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/app_base.py +2 -0
  15. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/command_handlers.py +54 -6
  16. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/status_dashboard.py +15 -0
  17. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/updater.py +14 -1
  18. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/service.py +86 -0
  19. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/google.py +13 -0
  20. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/openrouter.py +698 -659
  21. {kolega_code-0.34.0 → kolega_code-0.35.0}/pyproject.toml +1 -1
  22. {kolega_code-0.34.0 → kolega_code-0.35.0}/.gitignore +0 -0
  23. {kolega_code-0.34.0 → kolega_code-0.35.0}/CONTRIBUTING.md +0 -0
  24. {kolega_code-0.34.0 → kolega_code-0.35.0}/LICENSE +0 -0
  25. {kolega_code-0.34.0 → kolega_code-0.35.0}/MIGRATION.md +0 -0
  26. {kolega_code-0.34.0 → kolega_code-0.35.0}/README.md +0 -0
  27. {kolega_code-0.34.0 → kolega_code-0.35.0}/RELEASING.md +0 -0
  28. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/LICENSE +0 -0
  29. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/manifest.json +0 -0
  30. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/deep-research/SKILL.md +0 -0
  31. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/deep-research/references/evidence-and-reporting.md +0 -0
  32. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/deep-research/references/gigacode-workflow.md +0 -0
  33. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/deep-research/scripts/deep-research.workflow +0 -0
  34. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/deep-research/scripts/materialize_report.py +0 -0
  35. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/docx/LICENSE +0 -0
  36. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/docx/SKILL.md +0 -0
  37. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/docx/references/examples.md +0 -0
  38. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/docx/references/limitations.md +0 -0
  39. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/docx/references/operations.md +0 -0
  40. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/docx/references/quality.md +0 -0
  41. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/docx/requirements.txt +0 -0
  42. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/docx/scripts/docx_tool.py +0 -0
  43. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/docx/scripts/smoke_test.py +0 -0
  44. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/humanizer/LICENSE +0 -0
  45. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/humanizer/SKILL.md +0 -0
  46. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/LICENSE +0 -0
  47. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/SKILL.md +0 -0
  48. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/references/examples.md +0 -0
  49. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/references/limitations.md +0 -0
  50. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/references/ocr.md +0 -0
  51. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/references/operations.md +0 -0
  52. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/references/quality.md +0 -0
  53. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/references/redaction.md +0 -0
  54. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-paddle.txt +0 -0
  55. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-surya.txt +0 -0
  56. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/requirements.txt +0 -0
  57. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/scripts/pdf_tool.py +0 -0
  58. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/scripts/smoke_test.py +0 -0
  59. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pptx/LICENSE +0 -0
  60. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pptx/SKILL.md +0 -0
  61. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pptx/references/examples.md +0 -0
  62. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pptx/references/limitations.md +0 -0
  63. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pptx/references/operations.md +0 -0
  64. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pptx/requirements.txt +0 -0
  65. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pptx/scripts/pptx_tool.py +0 -0
  66. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pptx/scripts/smoke_test.py +0 -0
  67. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/review/SKILL.md +0 -0
  68. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/review/references/github-publishing.md +0 -0
  69. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/skill-authoring/SKILL.md +0 -0
  70. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/skill-authoring/references/review-checklist.md +0 -0
  71. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/xlsx/LICENSE +0 -0
  72. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/xlsx/SKILL.md +0 -0
  73. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/xlsx/references/examples.md +0 -0
  74. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/xlsx/references/limitations.md +0 -0
  75. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/xlsx/references/operations.md +0 -0
  76. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/xlsx/references/quality.md +0 -0
  77. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/xlsx/requirements.txt +0 -0
  78. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/xlsx/scripts/smoke_test.py +0 -0
  79. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/xlsx/scripts/xlsx_tool.py +0 -0
  80. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/acp/__init__.py +0 -0
  81. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/acp/agent_factory.py +0 -0
  82. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/acp/bridge.py +0 -0
  83. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/acp/diffs.py +0 -0
  84. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/acp/permissions.py +0 -0
  85. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/acp/plans.py +0 -0
  86. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/acp/questions.py +0 -0
  87. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/acp/server.py +0 -0
  88. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/acp/session.py +0 -0
  89. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/acp/usage.py +0 -0
  90. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/baseagent.py +0 -0
  91. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/browseragent.py +0 -0
  92. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/coder.py +0 -0
  93. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/common.py +0 -0
  94. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/compression.py +0 -0
  95. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/context.py +0 -0
  96. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/conversation.py +0 -0
  97. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/custom_agents.py +0 -0
  98. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/edit_protocols.py +0 -0
  99. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/errors.py +0 -0
  100. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/__init__.py +0 -0
  101. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/bridge.py +0 -0
  102. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/bundle-requirements.in +0 -0
  103. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/bundle-requirements.txt +0 -0
  104. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/env.py +0 -0
  105. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/js_kernel.py +0 -0
  106. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/kernel.py +0 -0
  107. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/prelude.js +0 -0
  108. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/prelude.py +0 -0
  109. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/protocol.py +0 -0
  110. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/py_kernel.py +0 -0
  111. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/runner.js +0 -0
  112. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/runner.py +0 -0
  113. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/generalagent.py +0 -0
  114. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/goal.py +0 -0
  115. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/handoff.py +0 -0
  116. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/investigationagent.py +0 -0
  117. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/model_routing.py +0 -0
  118. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/orchestration/__init__.py +0 -0
  119. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/orchestration/accounting.py +0 -0
  120. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/orchestration/budget.py +0 -0
  121. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/orchestration/context.py +0 -0
  122. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/orchestration/errors.py +0 -0
  123. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/orchestration/executor.py +0 -0
  124. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/orchestration/guide.py +0 -0
  125. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/orchestration/journal.py +0 -0
  126. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/orchestration/runtime.py +0 -0
  127. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/orchestration/types.py +0 -0
  128. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/planningagent.py +0 -0
  129. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_dump.py +0 -0
  130. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_overrides.py +0 -0
  131. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_provider.py +0 -0
  132. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_exhausted.user.md +0 -0
  133. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_nudge.user.md.j2 +0 -0
  134. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/truncated_turn_nudge.user.md.j2 +0 -0
  135. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
  136. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
  137. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/auxiliary/handoff/document.system.md +0 -0
  138. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/auxiliary/handoff/document.user.md.j2 +0 -0
  139. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
  140. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
  141. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/extensions/cli/build_questions.md +0 -0
  142. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/extensions/cli/current_plan_artifact.md.j2 +0 -0
  143. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/extensions/cli/mode_switch_notice.md.j2 +0 -0
  144. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
  145. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/extensions/cli/scratchpad.md.j2 +0 -0
  146. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
  147. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list_readonly.md +0 -0
  148. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/extensions/cli/worktree_control.md.j2 +0 -0
  149. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -0
  150. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +0 -0
  151. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/agents/coder_ask.md.j2 +0 -0
  152. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/agents/coder_base.md.j2 +0 -0
  153. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
  154. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +0 -0
  155. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +0 -0
  156. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +0 -0
  157. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
  158. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/includes/context_updates.md +0 -0
  159. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
  160. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -0
  161. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +0 -0
  162. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -0
  163. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -0
  164. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +0 -0
  165. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/includes/terminal_tools.md +0 -0
  166. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/apply_patch.md +0 -0
  167. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/ask_user_choice.md +0 -0
  168. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_click.md +0 -0
  169. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_close.md +0 -0
  170. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_console_messages.md +0 -0
  171. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_drag.md +0 -0
  172. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_drop.md +0 -0
  173. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_evaluate.md +0 -0
  174. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_file_upload.md +0 -0
  175. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_fill_form.md +0 -0
  176. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_find.md +0 -0
  177. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_handle_dialog.md +0 -0
  178. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_hover.md +0 -0
  179. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_navigate.md +0 -0
  180. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_navigate_back.md +0 -0
  181. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_network_request.md +0 -0
  182. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_network_requests.md +0 -0
  183. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_press_key.md +0 -0
  184. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_resize.md +0 -0
  185. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_scroll.md +0 -0
  186. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_select_option.md +0 -0
  187. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_snapshot.md +0 -0
  188. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_tabs.md +0 -0
  189. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_take_screenshot.md +0 -0
  190. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_type.md +0 -0
  191. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_wait_for.md +0 -0
  192. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/build_backend.md +0 -0
  193. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/build_frontend.md +0 -0
  194. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/claude_edit.md +0 -0
  195. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/claude_write.md +0 -0
  196. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/dispatch_agent.md +0 -0
  197. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/edit.md +0 -0
  198. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/eval.md +0 -0
  199. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/exec_command.md +0 -0
  200. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/get_host.md +0 -0
  201. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/get_task_list.md +0 -0
  202. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/get_task_list_readonly.md +0 -0
  203. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/hashline_edit.md +0 -0
  204. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/hashline_write.md +0 -0
  205. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/kill_command.md +0 -0
  206. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/list_agents.md +0 -0
  207. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/list_sessions.md +0 -0
  208. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/list_subagent_models.md +0 -0
  209. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/list_workflow_runs.md +0 -0
  210. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/lsp.md +0 -0
  211. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/lsp_edit.md +0 -0
  212. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/multi_edit.md +0 -0
  213. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/read.md +0 -0
  214. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/read_image.md +0 -0
  215. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/resolve.md +0 -0
  216. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/run_workflow.md +0 -0
  217. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/send_message.md +0 -0
  218. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/set_goal.md +0 -0
  219. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/skill.md +0 -0
  220. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/snapshot.md +0 -0
  221. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/switch_worktree.md +0 -0
  222. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/update_task_list.md +0 -0
  223. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/web_fetch.md +0 -0
  224. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/web_search.md +0 -0
  225. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/write.md +0 -0
  226. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/write_plan.md +0 -0
  227. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/write_stdin.md +0 -0
  228. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +0 -0
  229. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
  230. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompts.py +0 -0
  231. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/agent_tool.py +0 -0
  232. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/base_tool.py +0 -0
  233. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/browser_tool.py +0 -0
  234. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/build_tool.py +0 -0
  235. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/codex_patch.py +0 -0
  236. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
  237. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/edit_tool.py +0 -0
  238. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/eval_tool.py +0 -0
  239. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/hashline_v2.py +0 -0
  240. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/lsp_tool.py +0 -0
  241. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
  242. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/network_status.py +0 -0
  243. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/read_file_tool.py +0 -0
  244. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/read_image_tool.py +0 -0
  245. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/search_backends/__init__.py +0 -0
  246. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
  247. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +0 -0
  248. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
  249. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +0 -0
  250. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
  251. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
  252. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/search_backends/tavily.py +0 -0
  253. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/snapshot_tool.py +0 -0
  254. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
  255. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/terminal_tool.py +0 -0
  256. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/web_fetch/__init__.py +0 -0
  257. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/web_fetch/answering.py +0 -0
  258. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/web_fetch/documents.py +0 -0
  259. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/web_fetch/extractors.py +0 -0
  260. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/web_fetch/pipeline.py +0 -0
  261. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/web_fetch/retrieval.py +0 -0
  262. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/web_fetch_tool.py +0 -0
  263. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/web_search_tool.py +0 -0
  264. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
  265. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_definitions.py +0 -0
  266. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tools.py +0 -0
  267. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/utils/commands.py +0 -0
  268. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/volatile_context.py +0 -0
  269. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/auth/__init__.py +0 -0
  270. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/auth/_jwt.py +0 -0
  271. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/auth/chatgpt_oauth.py +0 -0
  272. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/auth/constants.py +0 -0
  273. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/auth/tokens.py +0 -0
  274. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/browser_extension/__init__.py +0 -0
  275. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/browser_extension/framing.py +0 -0
  276. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/browser_extension/installer.py +0 -0
  277. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/browser_extension/manager.py +0 -0
  278. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/browser_extension/multiplex.py +0 -0
  279. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/browser_extension/native_host.py +0 -0
  280. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/browser_extension/protocol.py +0 -0
  281. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/browser_extension/registry.py +0 -0
  282. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/browser_extension/runtime.py +0 -0
  283. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/__init__.py +0 -0
  284. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/acp.py +0 -0
  285. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/ask_output.py +0 -0
  286. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/atif_export.py +0 -0
  287. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/browser_backend.py +0 -0
  288. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/clipboard_image.py +0 -0
  289. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/config.py +0 -0
  290. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/connection.py +0 -0
  291. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/cron.py +0 -0
  292. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/diagnostics.py +0 -0
  293. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/file_index.py +0 -0
  294. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/goal.py +0 -0
  295. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/loop.py +0 -0
  296. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/mentions.py +0 -0
  297. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/messages.py +0 -0
  298. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/model_catalog.py +0 -0
  299. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/model_connection.py +0 -0
  300. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/plan_artifacts.py +0 -0
  301. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/prompt_history.py +0 -0
  302. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/session_event_protocol.py +0 -0
  303. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/session_event_store.py +0 -0
  304. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/session_journal.py +0 -0
  305. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/session_usage.py +0 -0
  306. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/settings.py +0 -0
  307. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/skills.py +0 -0
  308. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/theme.py +0 -0
  309. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/__init__.py +0 -0
  310. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/changes_screen.py +0 -0
  311. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/constants.py +0 -0
  312. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/custom_model.py +0 -0
  313. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/loop_runtime.py +0 -0
  314. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/memory_screen.py +0 -0
  315. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/onboarding_screen.py +0 -0
  316. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/pacing.py +0 -0
  317. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/prompt_flows.py +0 -0
  318. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/session_diff.py +0 -0
  319. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/settings_panel.py +0 -0
  320. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/settings_screen.py +0 -0
  321. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/state.py +0 -0
  322. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/styles.tcss +0 -0
  323. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/sub_agent_screen.py +0 -0
  324. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/terminal_display.py +0 -0
  325. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/transcript.py +0 -0
  326. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/widgets.py +0 -0
  327. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/config.py +0 -0
  328. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/events.py +0 -0
  329. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/extensions.py +0 -0
  330. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/__init__.py +0 -0
  331. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/access.py +0 -0
  332. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/adapters/__init__.py +0 -0
  333. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/adapters/base.py +0 -0
  334. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/adapters/echo.py +0 -0
  335. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/adapters/telegram/__init__.py +0 -0
  336. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/adapters/telegram/adapter.py +0 -0
  337. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/adapters/telegram/formatting.py +0 -0
  338. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/bridge.py +0 -0
  339. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/commands.py +0 -0
  340. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/config.py +0 -0
  341. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/control_relay.py +0 -0
  342. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/daemon.py +0 -0
  343. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/event_router.py +0 -0
  344. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/questions.py +0 -0
  345. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/redaction.py +0 -0
  346. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/router.py +0 -0
  347. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/sessions.py +0 -0
  348. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/stt.py +0 -0
  349. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/git_env.py +0 -0
  350. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/hooks/__init__.py +0 -0
  351. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/hooks/backends.py +0 -0
  352. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/hooks/config.py +0 -0
  353. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/hooks/dispatcher.py +0 -0
  354. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/hooks/events.py +0 -0
  355. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/hooks/matcher.py +0 -0
  356. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/hooks/outcome.py +0 -0
  357. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/client.py +0 -0
  358. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/exceptions.py +0 -0
  359. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/instrumented_client.py +0 -0
  360. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/ledger.py +0 -0
  361. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/models.py +0 -0
  362. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/__init__.py +0 -0
  363. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/_token_encoding.py +0 -0
  364. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/anthropic.py +0 -0
  365. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/base.py +0 -0
  366. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
  367. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/deepseek_responses.py +0 -0
  368. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/google.py +0 -0
  369. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/models.py +0 -0
  370. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/openai.py +0 -0
  371. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/openai_responses.py +0 -0
  372. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/perplexity_responses.py +0 -0
  373. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/responses_common.py +0 -0
  374. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/tinker.py +0 -0
  375. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/tinker_trace.py +0 -0
  376. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/ratelimit.py +0 -0
  377. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/__init__.py +0 -0
  378. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/accessors.py +0 -0
  379. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/__init__.py +0 -0
  380. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/anthropic.py +0 -0
  381. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/dashscope.py +0 -0
  382. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/deepseek.py +0 -0
  383. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/fireworks.py +0 -0
  384. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/groq.py +0 -0
  385. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/kimi_coding.py +0 -0
  386. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/moonshot.py +0 -0
  387. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/ollama_cloud.py +0 -0
  388. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/openai.py +0 -0
  389. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/openai_chatgpt.py +0 -0
  390. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/perplexity_agent.py +0 -0
  391. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/thinking_machines.py +0 -0
  392. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/tinker.py +0 -0
  393. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/together.py +0 -0
  394. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/xai.py +0 -0
  395. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/zai.py +0 -0
  396. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/custom_endpoints.py +0 -0
  397. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/ollama_cloud_catalog.py +0 -0
  398. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/openrouter_catalog.py +0 -0
  399. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/perplexity_catalog.py +0 -0
  400. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/thinking.py +0 -0
  401. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/tinker_catalog.py +0 -0
  402. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/types.py +0 -0
  403. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/validation.py +0 -0
  404. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/timeouts.py +0 -0
  405. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/tool_execution_ids.py +0 -0
  406. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/usage.py +0 -0
  407. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/local_state.py +0 -0
  408. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/mcp/__init__.py +0 -0
  409. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/mcp/config.py +0 -0
  410. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/mcp/oauth.py +0 -0
  411. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/mcp/service.py +0 -0
  412. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/mcp/state.py +0 -0
  413. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/mcp/tools.py +0 -0
  414. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/mcp/transport.py +0 -0
  415. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/memory/__init__.py +0 -0
  416. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/memory/identity.py +0 -0
  417. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/memory/manager.py +0 -0
  418. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/memory/manifest.py +0 -0
  419. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/memory/markdown.py +0 -0
  420. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/memory/models.py +0 -0
  421. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/memory/protocol.py +0 -0
  422. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/memory/registry.py +0 -0
  423. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/models/__init__.py +0 -0
  424. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/models/sandbox_terminal_state.py +0 -0
  425. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/permissions.py +0 -0
  426. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/runtime.py +0 -0
  427. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/README.md +0 -0
  428. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/__init__.py +0 -0
  429. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/async_filesystem.py +0 -0
  430. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/base.py +0 -0
  431. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/browser.py +0 -0
  432. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/event_loop.py +0 -0
  433. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/filesystem.py +0 -0
  434. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/local.py +0 -0
  435. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/serializer.py +0 -0
  436. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/terminal.py +0 -0
  437. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/utils.py +0 -0
  438. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/scratchpad.py +0 -0
  439. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/security/__init__.py +0 -0
  440. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/security/secrets.py +0 -0
  441. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/base.py +0 -0
  442. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/browser.py +0 -0
  443. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/file_system.py +0 -0
  444. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/html.py +0 -0
  445. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/lsp/__init__.py +0 -0
  446. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/lsp/client.py +0 -0
  447. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/lsp/config.py +0 -0
  448. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/lsp/detector.py +0 -0
  449. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/lsp/diagnostics.py +0 -0
  450. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/lsp/edits.py +0 -0
  451. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/lsp/manager.py +0 -0
  452. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/lsp/registry.py +0 -0
  453. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/lsp/registry.yaml +0 -0
  454. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/snapshots.py +0 -0
  455. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/terminal.py +0 -0
  456. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/terminal_buffer.py +0 -0
  457. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/workspace_scan.py +0 -0
  458. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/session/__init__.py +0 -0
  459. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/session/control.py +0 -0
  460. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/session/inbox.py +0 -0
  461. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/session/inmemory.py +0 -0
  462. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/session/projection.py +0 -0
  463. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/session/recording.py +0 -0
  464. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/session/runtime.py +0 -0
  465. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/session/store.py +0 -0
  466. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/testing/__init__.py +0 -0
  467. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/testing/store_conformance.py +0 -0
  468. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/tools/__init__.py +0 -0
  469. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/tools/ask_user.py +0 -0
  470. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/tools/core.py +0 -0
  471. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/tools/definitions.py +0 -0
  472. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/tools/param_aliases.py +0 -0
  473. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/tools/registry.py +0 -0
  474. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/utils/__init__.py +0 -0
  475. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/utils/images.py +0 -0
  476. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/__init__.py +0 -0
  477. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/assets/fold.js +0 -0
  478. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/assets/player.css +0 -0
  479. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/assets/player.html +0 -0
  480. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/assets/player.js +0 -0
  481. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/bundle.py +0 -0
  482. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/hosting.py +0 -0
  483. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/redaction.py +0 -0
  484. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/server.py +0 -0
  485. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/singlefile.py +0 -0
  486. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/theme_css.py +0 -0
  487. {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/worktrees.py +0 -0
@@ -6,6 +6,34 @@ This project uses GitHub Releases for detailed generated release notes. This fil
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 0.35.0 - 2026-09-03
10
+
11
+ ### Added
12
+
13
+ - Added Google Gemini 3.8 Flash (`gemini-3.8-flash`): 1M-token context, 64K
14
+ output, vision and function calling, and `low`/`medium`/`high` thinking
15
+ levels. It omits Google's deprecated temperature parameter and is now the
16
+ default Google model.
17
+ - **Descriptive session titles.** Sessions now get a natural-language title
18
+ and a short description generated in the background by the active LLM after
19
+ substantive turns, while the stable session name keeps its role as the
20
+ peer-addressing handle. `/retitle` regenerates them on demand, a dedicated
21
+ Session card in the sidebar shows them, and the header, status dashboard,
22
+ startup banner, and `sessions` CLI output all display the title.
23
+ - **`kolega-code gateway restart` and auto-restart on update.** The new
24
+ subcommand restarts an installed gateway service in place (systemd user
25
+ unit on Linux, launchd agent on macOS). `kolega-code update`, the `/update`
26
+ TUI command, and the shell installer now restart the gateway automatically
27
+ when the service is installed, so an update picks up the new build without
28
+ a manual daemon restart.
29
+
30
+ ### Changed
31
+
32
+ - OpenRouter catalog refreshed from the live endpoint (2026-09-03 snapshot):
33
+ 277 tool-capable models (20 featured), adding `google/gemini-3.8-flash` and
34
+ the `meta/muse-spark-1.3` pair, with featured order re-ranked by the latest
35
+ weekly token volume.
36
+
9
37
  ## 0.34.0 - 2026-09-02
10
38
 
11
39
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kolega-code
3
- Version: 0.34.0
3
+ Version: 0.35.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/
@@ -174,4 +174,4 @@ __all__ = [
174
174
  "parse_git_status_output",
175
175
  ]
176
176
 
177
- __version__ = "0.34.0"
177
+ __version__ = "0.35.0"
@@ -51,4 +51,4 @@ __all__ = [
51
51
  "ToolExtension",
52
52
  ]
53
53
 
54
- __version__ = "0.34.0"
54
+ __version__ = "0.35.0"
@@ -0,0 +1,165 @@
1
+ """Generate descriptive session title and description via the active LLM."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+ import json
7
+ import logging
8
+ import re
9
+ from dataclasses import dataclass
10
+ from typing import Any, List, Optional, Sequence
11
+
12
+ from kolega_code.gateway.redaction import scrub
13
+ from kolega_code.llm.ledger import helper_origin, llm_call_origin
14
+ from kolega_code.llm.models import Message, MessageHistory, TextBlock
15
+
16
+ from .compression import render_transcript
17
+ from .conversation import replace_image_blocks_with_placeholders
18
+
19
+ logger = logging.getLogger(__name__)
20
+
21
+ SESSION_METADATA_MIN_MESSAGES = 2
22
+ SESSION_METADATA_MAX_TOKENS = 256
23
+ SESSION_METADATA_HEAD_CHARS = 2000
24
+ SESSION_METADATA_TAIL_CHARS = 6000
25
+
26
+ TITLE_MAX_CHARS = 60
27
+ DESCRIPTION_MAX_CHARS = 200
28
+
29
+ SESSION_METADATA_SYSTEM_PROMPT = """\
30
+ You are an assistant that summarizes developer coding sessions.
31
+ Analyze the provided conversation transcript and generate:
32
+ 1. title: A concise, descriptive title in Natural Title Case (e.g. "Fix Authentication Middleware", "Add PostgreSQL Connection Pool", "Investigate Bug 662"). Maximum 60 characters. No surrounding quotes or Markdown formatting.
33
+ 2. description: A clear 1 to 2 sentence summary of what the session is working on, goals, and key progress or findings so far. Maximum 200 characters.
34
+
35
+ Respond ONLY with valid JSON in this exact structure:
36
+ {
37
+ "title": "Natural Title Case Title",
38
+ "description": "One or two sentences describing the session."
39
+ }
40
+ """
41
+
42
+
43
+ @dataclass(frozen=True)
44
+ class SessionMetadata:
45
+ """The generated descriptive metadata for a session."""
46
+
47
+ title: str
48
+ description: str
49
+
50
+
51
+ class SessionMetadataCancelledError(Exception):
52
+ """Raised when metadata generation is cancelled."""
53
+
54
+
55
+ def _truncate_transcript(transcript: str) -> str:
56
+ """Bound the transcript sent to the metadata generator."""
57
+ total_budget = SESSION_METADATA_HEAD_CHARS + SESSION_METADATA_TAIL_CHARS
58
+ if len(transcript) <= total_budget:
59
+ return transcript
60
+ head = transcript[:SESSION_METADATA_HEAD_CHARS]
61
+ tail = transcript[-SESSION_METADATA_TAIL_CHARS:]
62
+ return f"{head}\n\n[... middle conversation omitted ...]\n\n{tail}"
63
+
64
+
65
+ def parse_session_metadata_json(raw_text: str) -> Optional[SessionMetadata]:
66
+ """Parse and sanitize the JSON returned by the model."""
67
+ text = raw_text.strip()
68
+ if not text:
69
+ return None
70
+
71
+ # Strip code fences if present
72
+ fence_match = re.search(r"```(?:json)?\s*([\s\S]*?)\s*```", text)
73
+ if fence_match:
74
+ text = fence_match.group(1).strip()
75
+
76
+ data: Optional[dict[str, Any]] = None
77
+ try:
78
+ parsed = json.loads(text)
79
+ if isinstance(parsed, dict):
80
+ data = parsed
81
+ except Exception:
82
+ # Fallback regex extraction for title and description
83
+ title_match = re.search(r'"title"\s*:\s*"([^"]+)"', text)
84
+ desc_match = re.search(r'"description"\s*:\s*"([^"]+)"', text)
85
+ if title_match:
86
+ data = {
87
+ "title": title_match.group(1),
88
+ "description": desc_match.group(1) if desc_match else "",
89
+ }
90
+
91
+ if not data or not isinstance(data.get("title"), str):
92
+ return None
93
+
94
+ raw_title = data["title"].strip().strip("\"'")
95
+ # Clean control characters and normalize spaces
96
+ cleaned_title = " ".join(raw_title.split())
97
+ if not cleaned_title:
98
+ return None
99
+
100
+ if len(cleaned_title) > TITLE_MAX_CHARS:
101
+ cleaned_title = cleaned_title[:TITLE_MAX_CHARS].rstrip()
102
+
103
+ raw_description = str(data.get("description") or "").strip()
104
+ cleaned_description = " ".join(raw_description.split())
105
+ if len(cleaned_description) > DESCRIPTION_MAX_CHARS:
106
+ cleaned_description = cleaned_description[:DESCRIPTION_MAX_CHARS].rstrip()
107
+
108
+ return SessionMetadata(title=cleaned_title, description=cleaned_description)
109
+
110
+
111
+ async def generate_session_metadata(
112
+ messages: List[Message],
113
+ *,
114
+ llm: Any,
115
+ model: str,
116
+ temperature: float = 0.2,
117
+ cancel_event: Optional[asyncio.Event] = None,
118
+ secret_values: Sequence[str] = (),
119
+ ) -> Optional[SessionMetadata]:
120
+ """Summarize ``messages`` into a title and description via the active LLM.
121
+
122
+ Returns ``None`` if generation fails or is cancelled. Never raises.
123
+ """
124
+ if len(messages) < SESSION_METADATA_MIN_MESSAGES:
125
+ return None
126
+
127
+ if cancel_event is None:
128
+ cancel_event = asyncio.Event()
129
+
130
+ try:
131
+ stripped = replace_image_blocks_with_placeholders(list(messages), model)
132
+ transcript = render_transcript(stripped)
133
+ bounded_transcript = _truncate_transcript(transcript)
134
+ scrubbed_transcript = scrub(bounded_transcript, secret_values)
135
+
136
+ user_content = f"Conversation transcript:\n\n{scrubbed_transcript}"
137
+ request_messages = MessageHistory([Message(role="user", content=[TextBlock(text=user_content)])])
138
+ system_message = Message(role="system", content=[TextBlock(text=SESSION_METADATA_SYSTEM_PROMPT)])
139
+
140
+ if cancel_event.is_set():
141
+ return None
142
+
143
+ with llm_call_origin(helper_origin("session_metadata")):
144
+ stream_cm = await llm.stream(
145
+ messages=request_messages,
146
+ system=system_message,
147
+ temperature=temperature,
148
+ model=model,
149
+ max_completion_tokens=SESSION_METADATA_MAX_TOKENS,
150
+ thinking=None,
151
+ )
152
+ async with stream_cm as stream:
153
+ async for _event in stream:
154
+ if cancel_event.is_set():
155
+ return None
156
+
157
+ if cancel_event.is_set():
158
+ return None
159
+
160
+ response = await stream.get_final_message()
161
+ raw_output = response.get_text_content()
162
+ return parse_session_metadata_json(raw_output)
163
+ except Exception as exc:
164
+ logger.warning("Failed to generate session metadata: %s", exc)
165
+ return None
@@ -436,6 +436,9 @@ class KolegaCodeApp(
436
436
  with TabbedContent(id="events"):
437
437
  with TabPane("Status", id="status_pane"):
438
438
  with VerticalScroll(id="status_form"):
439
+ with Vertical(classes="status-section", id="status_session_section") as session_section:
440
+ session_section.border_title = "Session"
441
+ yield Static("", id="status_session", markup=True)
439
442
  with Vertical(classes="status-section", id="status_summary_section") as status_section:
440
443
  status_section.border_title = "Status"
441
444
  yield Static("", id="status_dashboard", markup=True)
@@ -527,7 +530,7 @@ class KolegaCodeApp(
527
530
  self.inbox_registry.register(
528
531
  InboxRegistration(
529
532
  session_id=self.session.session_id,
530
- describe_title=lambda: self.session.title,
533
+ describe_title=lambda: self.session.name,
531
534
  describe_project_path=lambda: str(self.active_project_path),
532
535
  describe_status=self._peer_status,
533
536
  deliver_message=self._deliver_peer_message,
@@ -953,7 +956,9 @@ class KolegaCodeApp(
953
956
  workspace_id=record.workspace_id,
954
957
  thread_id=record.thread_id,
955
958
  mode=record.mode,
959
+ name=record.name,
956
960
  title=record.title,
961
+ description=record.description,
957
962
  created_at=record.created_at,
958
963
  updated_at=record.updated_at,
959
964
  config=dict(record.config),
@@ -2645,8 +2650,16 @@ class KolegaCodeApp(
2645
2650
 
2646
2651
  def _meta_content(self) -> str:
2647
2652
  gigacode = "on" if self._gigacode_enabled else "off"
2653
+ short_id = self.session.session_id[:8]
2654
+ if self.session.title and self.session.title != self.session.name:
2655
+ title = self.session.title
2656
+ if len(title) > 36:
2657
+ title = f"{title[:35]}…"
2658
+ session_segment = f"{title} · {self.session.name} ({short_id})"
2659
+ else:
2660
+ session_segment = f"{self.session.name} ({short_id})"
2648
2661
  return (
2649
- f"{self.active_project_path} | session {self.session.session_id} | "
2662
+ f"{self.active_project_path} | {session_segment} | "
2650
2663
  f"agent {self.mode} | {self.interaction_mode} | permissions {self.permission_mode.value} | "
2651
2664
  f"gigacode {gigacode}"
2652
2665
  )
@@ -3044,10 +3057,16 @@ class KolegaCodeApp(
3044
3057
  project_lines = [f"Project: {self.active_project_path}"]
3045
3058
  if self.active_project_path != self.project_path:
3046
3059
  project_lines.append(f"Launch project: {self.project_path}")
3060
+ if self.session.title and self.session.title != self.session.name:
3061
+ session_display = f"{session_id} · {self.session.title} ({self.session.name})"
3062
+ elif self.session.name:
3063
+ session_display = f"{session_id} ({self.session.name})"
3064
+ else:
3065
+ session_display = f"{session_id}"
3047
3066
  startup_lines.extend(
3048
3067
  [
3049
3068
  *project_lines,
3050
- f"Session: {session_id}",
3069
+ f"Session: {session_display}",
3051
3070
  f"Mode: {self.mode}",
3052
3071
  f"Interaction: {self.interaction_mode}",
3053
3072
  f"Permissions: {self.permission_mode.value}",
@@ -31,6 +31,8 @@ from kolega_code.gateway.service import (
31
31
  LAUNCHD_LABEL,
32
32
  SERVICE_NAME,
33
33
  install_service,
34
+ is_service_installed,
35
+ restart_service,
34
36
  uninstall_service,
35
37
  )
36
38
 
@@ -76,6 +78,9 @@ def add_gateway_parser(subparsers: argparse._SubParsersAction[argparse.ArgumentP
76
78
  uninstall = gateway_sub.add_parser("uninstall", help="Remove the gateway background service.")
77
79
  uninstall.add_argument("--state-dir", type=Path, default=None, help="Override the state directory.")
78
80
 
81
+ restart = gateway_sub.add_parser("restart", help="Restart the gateway background service.")
82
+ restart.add_argument("--state-dir", type=Path, default=None, help="Override the state directory.")
83
+
79
84
  telegram = gateway_sub.add_parser("telegram", help="Telegram adapter setup.")
80
85
  telegram_sub = telegram.add_subparsers(dest="telegram_command", required=True)
81
86
  setup = telegram_sub.add_parser("setup", help="Save the @BotFather bot token (stored in settings.json).")
@@ -112,7 +117,7 @@ async def _run_gateway(args: argparse.Namespace) -> int:
112
117
  return _gateway_pairing(args, config)
113
118
  if args.gateway_command == "telegram":
114
119
  return await _gateway_telegram(args, config)
115
- if args.gateway_command in ("install", "uninstall"):
120
+ if args.gateway_command in ("install", "uninstall", "restart"):
116
121
  return _gateway_service(args, config)
117
122
  return await _gateway_run(config, args)
118
123
 
@@ -189,6 +194,20 @@ def _gateway_service(args: argparse.Namespace, config: GatewayConfig) -> int:
189
194
  for note in _activate_service(args.gateway_command, result.unit_path):
190
195
  print(f"gateway: {note}")
191
196
  return 0
197
+ if args.gateway_command == "restart":
198
+ if not is_service_installed():
199
+ print(
200
+ "gateway: background service is not installed (run 'kolega-code gateway install' to set it up)",
201
+ file=sys.stderr,
202
+ )
203
+ return 1
204
+ success, notes = restart_service()
205
+ for note in notes:
206
+ if success:
207
+ print(f"gateway: {note}")
208
+ else:
209
+ print(f"gateway: {note}", file=sys.stderr)
210
+ return 0 if success else 1
192
211
  for note in _activate_service("uninstall", None):
193
212
  print(f"gateway: {note}")
194
213
  for note in uninstall_service(config):
@@ -1015,6 +1015,8 @@ def _run_update() -> int:
1015
1015
  _print_styled(result.error, style="error", stderr=True)
1016
1016
  if result.returncode == 0:
1017
1017
  print("Kolega Code update completed. Run `kolega-code --version` to confirm.")
1018
+ for note in result.gateway_restart_notes:
1019
+ print(f"gateway: {note}")
1018
1020
  elif not result.error:
1019
1021
  _print_styled("Kolega Code update failed.", style="error", stderr=True)
1020
1022
  return result.returncode
@@ -1492,7 +1494,7 @@ def _apply_launch_name(
1492
1494
  *,
1493
1495
  persistable: bool = True,
1494
1496
  ) -> None:
1495
- """Apply --name at launch. The persisted title is a peer's address for the
1497
+ """Apply --name at launch. The persisted name is a peer's address for the
1496
1498
  session, so invalid names fail loudly instead of being silently mangled."""
1497
1499
  from .peer_messaging import PEER_NAME_MAX_CHARS
1498
1500
 
@@ -1501,6 +1503,7 @@ def _apply_launch_name(
1501
1503
  name = str(raw_name).strip()
1502
1504
  if not name or len(name) > PEER_NAME_MAX_CHARS:
1503
1505
  raise SystemExit(f"Error: --name must be 1-{PEER_NAME_MAX_CHARS} characters.")
1506
+ session.name = name
1504
1507
  session.title = name
1505
1508
  if persistable:
1506
1509
  store.save(session)
@@ -2377,17 +2380,22 @@ def _run_sessions(args: argparse.Namespace) -> int:
2377
2380
  return 0
2378
2381
  entries = []
2379
2382
  for record in reversed(records):
2380
- entries.append(
2381
- "\n".join(
2382
- (
2383
- f"Updated: {record.updated_at}",
2384
- f"Title: {record.title}",
2385
- f"Mode: {record.mode}",
2386
- f"Project: {record.project_path}",
2387
- f"Resume ID: {record.session_id}",
2388
- )
2389
- )
2383
+ item_lines = [
2384
+ f"Updated: {record.updated_at}",
2385
+ f"Title: {record.title or record.name}",
2386
+ ]
2387
+ if record.name and record.name != record.title:
2388
+ item_lines.append(f"Name: {record.name}")
2389
+ if record.description:
2390
+ item_lines.append(f"Description: {record.description}")
2391
+ item_lines.extend(
2392
+ [
2393
+ f"Mode: {record.mode}",
2394
+ f"Project: {record.project_path}",
2395
+ f"Resume ID: {record.session_id}",
2396
+ ]
2390
2397
  )
2398
+ entries.append("\n".join(item_lines))
2391
2399
  print("\n\n".join(entries))
2392
2400
  return 0
2393
2401
  if args.sessions_command == "delete":
@@ -184,7 +184,7 @@ async def start_headless_peer_inbox(
184
184
 
185
185
  def store_title_lookup(store: Any) -> Any:
186
186
  """A discovery ``title_lookup`` backed by the shared session store."""
187
- titles_by_id = {record.session_id: record.title for record in store.list()}
187
+ titles_by_id = {record.session_id: record.name for record in store.list()}
188
188
  return titles_by_id.get
189
189
 
190
190
 
@@ -98,6 +98,7 @@ MODEL_LABELS: dict[str, str] = {
98
98
  "gpt-5.4-mini": "GPT-5.4 Mini",
99
99
  "gpt-5.3-codex-spark": "GPT-5.3 Codex Spark",
100
100
  # Google
101
+ "gemini-3.8-flash": "Gemini 3.8 Flash",
101
102
  "gemini-3.7-flash": "Gemini 3.7 Flash",
102
103
  "gemini-3.6-flash": "Gemini 3.6 Flash",
103
104
  "gemini-3.5-flash-lite": "Gemini 3.5 Flash-Lite",
@@ -167,7 +168,7 @@ PROVIDER_DEFAULT_MODEL: dict[ModelProvider, str] = {
167
168
  ModelProvider.ANTHROPIC: "claude-opus-5",
168
169
  ModelProvider.OPENAI: "gpt-5.6-sol",
169
170
  ModelProvider.OPENAI_CHATGPT: "gpt-5.6-sol",
170
- ModelProvider.GOOGLE: "gemini-3.7-flash",
171
+ ModelProvider.GOOGLE: "gemini-3.8-flash",
171
172
  ModelProvider.XAI: "grok-4.5",
172
173
  ModelProvider.FIREWORKS: "accounts/fireworks/models/glm-5p2",
173
174
  ModelProvider.TOGETHER: "moonshotai/Kimi-K2.7-Code",
@@ -139,9 +139,11 @@ class SessionRecord:
139
139
  workspace_id: str
140
140
  thread_id: str
141
141
  mode: str
142
- title: str
143
142
  created_at: str
144
143
  updated_at: str
144
+ title: str = ""
145
+ name: str = ""
146
+ description: str = ""
145
147
  config: dict[str, Any] = field(default_factory=dict)
146
148
  history: list[dict[str, Any]] = field(default_factory=list)
147
149
  compaction: dict[str, Any] = field(default_factory=dict)
@@ -175,12 +177,16 @@ class SessionRecord:
175
177
  mode: str,
176
178
  config: dict[str, Any],
177
179
  session_id: Optional[str] = None,
180
+ name: Optional[str] = None,
178
181
  title: Optional[str] = None,
182
+ description: Optional[str] = None,
179
183
  parent_session_id: Optional[str] = None,
180
184
  ) -> "SessionRecord":
181
185
  now = _now()
182
186
  resolved_project = str(project_path.resolve())
183
187
  session_id = session_id or uuid.uuid4().hex
188
+ assigned_name = name or (title if title else generate_session_name())
189
+ assigned_title = title if title else (name if name else assigned_name)
184
190
  return cls(
185
191
  schema_version=SCHEMA_VERSION,
186
192
  session_id=session_id,
@@ -188,7 +194,9 @@ class SessionRecord:
188
194
  workspace_id=f"cli-{uuid.uuid4().hex}",
189
195
  thread_id=uuid.uuid4().hex,
190
196
  mode=mode,
191
- title=title or generate_session_name(),
197
+ name=assigned_name,
198
+ title=assigned_title,
199
+ description=description or "",
192
200
  created_at=now,
193
201
  updated_at=now,
194
202
  config=config,
@@ -202,6 +210,14 @@ class SessionRecord:
202
210
  raise SessionStoreError(f"Unsupported session schema version: {data.get('schema_version')}")
203
211
  latest_plan_markdown = data.get("latest_plan_markdown") or ""
204
212
  plan_pending = bool(latest_plan_markdown and data.get("plan_pending", False))
213
+ raw_name = data.get("name")
214
+ raw_title = data.get("title") or ""
215
+ if raw_name:
216
+ name = raw_name
217
+ title = raw_title or raw_name
218
+ else:
219
+ name = raw_title or generate_session_name()
220
+ title = raw_title or name
205
221
  return cls(
206
222
  schema_version=data["schema_version"],
207
223
  session_id=data["session_id"],
@@ -209,7 +225,9 @@ class SessionRecord:
209
225
  workspace_id=data["workspace_id"],
210
226
  thread_id=data["thread_id"],
211
227
  mode=data["mode"],
212
- title=data.get("title") or "Kolega Code",
228
+ name=name,
229
+ title=title,
230
+ description=data.get("description") or "",
213
231
  created_at=data["created_at"],
214
232
  updated_at=data["updated_at"],
215
233
  config=data.get("config") or {},
@@ -238,7 +256,9 @@ class SessionRecord:
238
256
  "workspace_id": self.workspace_id,
239
257
  "thread_id": self.thread_id,
240
258
  "mode": self.mode,
259
+ "name": self.name,
241
260
  "title": self.title,
261
+ "description": self.description,
242
262
  "created_at": self.created_at,
243
263
  "updated_at": self.updated_at,
244
264
  "config": self.config,
@@ -334,11 +354,20 @@ class SessionStore:
334
354
  mode: str,
335
355
  config: dict[str, Any],
336
356
  session_id: Optional[str] = None,
357
+ name: Optional[str] = None,
337
358
  title: Optional[str] = None,
359
+ description: Optional[str] = None,
338
360
  parent_session_id: Optional[str] = None,
339
361
  ) -> SessionRecord:
340
362
  record = SessionRecord.create(
341
- project_path, mode, config, session_id=session_id, title=title, parent_session_id=parent_session_id
363
+ project_path,
364
+ mode,
365
+ config,
366
+ session_id=session_id,
367
+ name=name,
368
+ title=title,
369
+ description=description,
370
+ parent_session_id=parent_session_id,
342
371
  )
343
372
  self.ensure_dirs()
344
373
  session_dir = self.session_dir_for(record.session_id)
@@ -68,6 +68,9 @@ TUI_COMMAND_ENTRIES: tuple[SlashCommandEntry, ...] = (
68
68
  SlashCommandEntry("tasks", "Show the shared task list", CommandScope.TUI),
69
69
  SlashCommandEntry("peers", "List reachable agent sessions you can message", CommandScope.TUI),
70
70
  SlashCommandEntry("rename", "Rename this session (/rename <name>)", CommandScope.TUI),
71
+ SlashCommandEntry(
72
+ "retitle", "Set or regenerate session title and description (/retitle [title])", CommandScope.TUI
73
+ ),
71
74
  SlashCommandEntry("gigacode", "Toggle gigacode workflow orchestration on or off", CommandScope.TUI),
72
75
  SlashCommandEntry("prompts", "Dump, list, or validate project prompt override files", CommandScope.TUI),
73
76
  SlashCommandEntry("queue-clear", "Clear queued follow-up messages", CommandScope.TUI),
@@ -273,6 +273,7 @@ class AgentRuntimeMixin(tui_app_base.KolegaAppBase):
273
273
  await self._save_session_history_async()
274
274
  await self._capture_completed_plan()
275
275
  self._log_status(messages.FINISHED, "ok")
276
+ self._maybe_trigger_session_metadata()
276
277
  except asyncio.CancelledError:
277
278
  cancelled_by_user = True
278
279
  # When the app is quitting, action_quit already settled open
@@ -313,6 +314,74 @@ class AgentRuntimeMixin(tui_app_base.KolegaAppBase):
313
314
  self._schedule_primary_focus_restore()
314
315
  return cancelled_by_user
315
316
 
317
+ def _maybe_trigger_session_metadata(self) -> None:
318
+ """Trigger background session title and description generation if turn meets depth."""
319
+ if self._exit or self.agent is None or not self.agent.history:
320
+ return
321
+ if len(self.agent.history) < 2:
322
+ return
323
+ self.run_worker(
324
+ self._update_session_metadata_worker(),
325
+ name="kolega-session-metadata",
326
+ group="metadata",
327
+ exclusive=True,
328
+ )
329
+
330
+ async def _update_session_metadata_worker(self, *, force_notify: bool = False) -> None:
331
+ """Generate descriptive session title and description in the background."""
332
+ if self.agent is None or not getattr(self.agent, "llm", None):
333
+ if force_notify:
334
+ self._notify_user("Cannot generate metadata: agent not ready.", severity="warning")
335
+ return
336
+ messages = list(self.agent.history)
337
+ if len(messages) < 2:
338
+ if force_notify:
339
+ self._notify_user("Not enough conversation history to generate title.", severity="warning")
340
+ return
341
+
342
+ from kolega_code.agent.session_metadata import generate_session_metadata
343
+ from ..main import known_secret_values
344
+
345
+ secret_values: list[str] = []
346
+ try:
347
+ secret_values = known_secret_values(self.settings, self.settings_store, project_path=self.project_path)
348
+ except Exception:
349
+ pass
350
+
351
+ model_cfg = getattr(self.agent, "primary_model_config", None)
352
+ model = model_cfg.model if model_cfg is not None else "fast"
353
+ metadata = await generate_session_metadata(
354
+ messages,
355
+ llm=self.agent.llm,
356
+ model=model,
357
+ secret_values=secret_values,
358
+ )
359
+ if metadata is None:
360
+ if force_notify:
361
+ self._notify_user("Could not generate session title.", severity="warning")
362
+ return
363
+
364
+ changed = False
365
+ if metadata.title and self.session.title != metadata.title:
366
+ self.session.title = metadata.title
367
+ changed = True
368
+ if metadata.description and self.session.description != metadata.description:
369
+ self.session.description = metadata.description
370
+ changed = True
371
+
372
+ if changed:
373
+ await self._save_session_async()
374
+ self._update_mode_chrome()
375
+
376
+ if force_notify:
377
+ self._add_conversation_entry(
378
+ tui_state.ConversationEntry(
379
+ kind="system",
380
+ content=f"Session retitled: **{self.session.title}**"
381
+ + (f"\n{self.session.description}" if self.session.description else ""),
382
+ )
383
+ )
384
+
316
385
  async def _process_message(
317
386
  self, message: str, attachments: list[dict] | None = None, *, turn_label: str | None = None
318
387
  ) -> bool:
@@ -515,7 +584,7 @@ class AgentRuntimeMixin(tui_app_base.KolegaAppBase):
515
584
 
516
585
  message = PeerMessage.create(
517
586
  sender_session_id=self.session.session_id,
518
- sender_title=self.session.title,
587
+ sender_title=self.session.name,
519
588
  text=cleaned_text,
520
589
  )
521
590
 
@@ -292,6 +292,8 @@ class KolegaAppBase(App):
292
292
  async def _refresh_agent_memory(self) -> None: ...
293
293
  async def _save_session_history_async(self) -> None: ...
294
294
  async def _capture_completed_plan(self) -> None: ...
295
+ def _maybe_trigger_session_metadata(self) -> None: ...
296
+ async def _update_session_metadata_worker(self, *, force_notify: bool = False) -> None: ...
295
297
  def _schedule_primary_focus_restore(self) -> None: ...
296
298
  def _set_chat_enabled(self, enabled: bool) -> None: ...
297
299
  def _set_composer_status(self, status: str) -> None: ...