kolega-code 0.38.0__tar.gz → 0.40.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 (497) hide show
  1. {kolega_code-0.38.0 → kolega_code-0.40.0}/CHANGELOG.md +60 -0
  2. {kolega_code-0.38.0 → kolega_code-0.40.0}/PKG-INFO +2 -1
  3. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/__init__.py +1 -1
  4. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/__init__.py +1 -1
  5. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/baseagent.py +85 -2
  6. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/app.py +458 -84
  7. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/gateway.py +76 -15
  8. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/main.py +182 -95
  9. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/messages.py +5 -0
  10. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/session_store.py +70 -19
  11. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/settings.py +22 -13
  12. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/theme.py +3 -0
  13. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/agent_runtime.py +11 -1
  14. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/app_base.py +12 -2
  15. kolega_code-0.40.0/kolega_code/cli/tui/boot_splash.py +390 -0
  16. kolega_code-0.40.0/kolega_code/cli/tui/discovery.py +153 -0
  17. kolega_code-0.40.0/kolega_code/cli/tui/metadata.py +201 -0
  18. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/settings_panel.py +20 -10
  19. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/settings_screen.py +32 -4
  20. kolega_code-0.40.0/kolega_code/cli/tui/shortcut_bar.py +271 -0
  21. kolega_code-0.40.0/kolega_code/cli/tui/startup.py +368 -0
  22. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/state.py +7 -0
  23. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/status_dashboard.py +52 -19
  24. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/styles.tcss +79 -2
  25. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/sub_agent_screen.py +2 -0
  26. kolega_code-0.40.0/kolega_code/cli/tui/task_list.py +95 -0
  27. kolega_code-0.40.0/kolega_code/cli/tui/tool_presentation.py +186 -0
  28. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/transcript.py +140 -72
  29. kolega_code-0.40.0/kolega_code/cli/tui/turn_status.py +92 -0
  30. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/widgets.py +149 -10
  31. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/events.py +17 -0
  32. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/gateway/access.py +65 -10
  33. kolega_code-0.40.0/kolega_code/gateway/access_settings.py +67 -0
  34. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/gateway/adapters/base.py +10 -1
  35. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/gateway/adapters/telegram/adapter.py +45 -24
  36. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/gateway/config.py +16 -18
  37. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/gateway/daemon.py +34 -7
  38. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/session/projection.py +49 -0
  39. kolega_code-0.40.0/kolega_code/tool_subjects.py +686 -0
  40. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/web/assets/fold.js +15 -0
  41. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/web/assets/player.css +23 -0
  42. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/web/assets/player.js +11 -0
  43. {kolega_code-0.38.0 → kolega_code-0.40.0}/pyproject.toml +3 -1
  44. {kolega_code-0.38.0 → kolega_code-0.40.0}/.gitignore +0 -0
  45. {kolega_code-0.38.0 → kolega_code-0.40.0}/CONTRIBUTING.md +0 -0
  46. {kolega_code-0.38.0 → kolega_code-0.40.0}/LICENSE +0 -0
  47. {kolega_code-0.38.0 → kolega_code-0.40.0}/MIGRATION.md +0 -0
  48. {kolega_code-0.38.0 → kolega_code-0.40.0}/README.md +0 -0
  49. {kolega_code-0.38.0 → kolega_code-0.40.0}/RELEASING.md +0 -0
  50. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/LICENSE +0 -0
  51. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/manifest.json +0 -0
  52. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/deep-research/SKILL.md +0 -0
  53. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/deep-research/references/evidence-and-reporting.md +0 -0
  54. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/deep-research/references/gigacode-workflow.md +0 -0
  55. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/deep-research/scripts/deep-research.workflow +0 -0
  56. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/deep-research/scripts/materialize_report.py +0 -0
  57. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/docx/LICENSE +0 -0
  58. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/docx/SKILL.md +0 -0
  59. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/docx/references/examples.md +0 -0
  60. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/docx/references/limitations.md +0 -0
  61. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/docx/references/operations.md +0 -0
  62. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/docx/references/quality.md +0 -0
  63. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/docx/requirements.txt +0 -0
  64. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/docx/scripts/docx_tool.py +0 -0
  65. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/docx/scripts/smoke_test.py +0 -0
  66. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/humanizer/LICENSE +0 -0
  67. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/humanizer/SKILL.md +0 -0
  68. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pdf/LICENSE +0 -0
  69. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pdf/SKILL.md +0 -0
  70. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pdf/references/examples.md +0 -0
  71. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pdf/references/limitations.md +0 -0
  72. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pdf/references/ocr.md +0 -0
  73. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pdf/references/operations.md +0 -0
  74. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pdf/references/quality.md +0 -0
  75. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pdf/references/redaction.md +0 -0
  76. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-paddle.txt +0 -0
  77. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-surya.txt +0 -0
  78. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pdf/requirements.txt +0 -0
  79. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pdf/scripts/pdf_tool.py +0 -0
  80. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pdf/scripts/smoke_test.py +0 -0
  81. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pptx/LICENSE +0 -0
  82. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pptx/SKILL.md +0 -0
  83. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pptx/references/examples.md +0 -0
  84. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pptx/references/limitations.md +0 -0
  85. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pptx/references/operations.md +0 -0
  86. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pptx/requirements.txt +0 -0
  87. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pptx/scripts/pptx_tool.py +0 -0
  88. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/pptx/scripts/smoke_test.py +0 -0
  89. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/review/SKILL.md +0 -0
  90. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/review/references/github-publishing.md +0 -0
  91. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/skill-authoring/SKILL.md +0 -0
  92. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/skill-authoring/references/review-checklist.md +0 -0
  93. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/xlsx/LICENSE +0 -0
  94. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/xlsx/SKILL.md +0 -0
  95. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/xlsx/references/examples.md +0 -0
  96. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/xlsx/references/limitations.md +0 -0
  97. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/xlsx/references/operations.md +0 -0
  98. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/xlsx/references/quality.md +0 -0
  99. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/xlsx/requirements.txt +0 -0
  100. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/xlsx/scripts/smoke_test.py +0 -0
  101. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/_bundled_skills/skills/xlsx/scripts/xlsx_tool.py +0 -0
  102. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/acp/__init__.py +0 -0
  103. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/acp/agent_factory.py +0 -0
  104. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/acp/bridge.py +0 -0
  105. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/acp/diffs.py +0 -0
  106. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/acp/permissions.py +0 -0
  107. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/acp/plans.py +0 -0
  108. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/acp/questions.py +0 -0
  109. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/acp/server.py +0 -0
  110. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/acp/session.py +0 -0
  111. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/acp/usage.py +0 -0
  112. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/browseragent.py +0 -0
  113. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/coder.py +0 -0
  114. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/common.py +0 -0
  115. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/compression.py +0 -0
  116. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/context.py +0 -0
  117. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/conversation.py +0 -0
  118. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/custom_agents.py +0 -0
  119. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/edit_protocols.py +0 -0
  120. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/errors.py +0 -0
  121. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/eval/__init__.py +0 -0
  122. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/eval/bridge.py +0 -0
  123. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/eval/bundle-requirements.in +0 -0
  124. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/eval/bundle-requirements.txt +0 -0
  125. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/eval/env.py +0 -0
  126. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/eval/js_kernel.py +0 -0
  127. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/eval/kernel.py +0 -0
  128. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/eval/prelude.js +0 -0
  129. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/eval/prelude.py +0 -0
  130. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/eval/protocol.py +0 -0
  131. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/eval/py_kernel.py +0 -0
  132. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/eval/runner.js +0 -0
  133. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/eval/runner.py +0 -0
  134. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/generalagent.py +0 -0
  135. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/goal.py +0 -0
  136. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/handoff.py +0 -0
  137. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/investigationagent.py +0 -0
  138. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/model_routing.py +0 -0
  139. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/orchestration/__init__.py +0 -0
  140. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/orchestration/accounting.py +0 -0
  141. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/orchestration/budget.py +0 -0
  142. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/orchestration/context.py +0 -0
  143. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/orchestration/errors.py +0 -0
  144. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/orchestration/executor.py +0 -0
  145. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/orchestration/guide.py +0 -0
  146. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/orchestration/journal.py +0 -0
  147. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/orchestration/runtime.py +0 -0
  148. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/orchestration/types.py +0 -0
  149. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/planningagent.py +0 -0
  150. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_dump.py +0 -0
  151. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_overrides.py +0 -0
  152. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_provider.py +0 -0
  153. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_exhausted.user.md +0 -0
  154. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_nudge.user.md.j2 +0 -0
  155. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/truncated_turn_nudge.user.md.j2 +0 -0
  156. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
  157. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
  158. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/auxiliary/handoff/document.system.md +0 -0
  159. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/auxiliary/handoff/document.user.md.j2 +0 -0
  160. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
  161. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
  162. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/extensions/cli/build_questions.md +0 -0
  163. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/extensions/cli/current_plan_artifact.md.j2 +0 -0
  164. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/extensions/cli/mode_switch_notice.md.j2 +0 -0
  165. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
  166. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/extensions/cli/scratchpad.md.j2 +0 -0
  167. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
  168. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list_readonly.md +0 -0
  169. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/extensions/cli/worktree_control.md.j2 +0 -0
  170. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -0
  171. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +0 -0
  172. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/system/agents/coder_ask.md.j2 +0 -0
  173. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/system/agents/coder_base.md.j2 +0 -0
  174. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
  175. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +0 -0
  176. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +0 -0
  177. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +0 -0
  178. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
  179. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/system/includes/context_updates.md +0 -0
  180. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
  181. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -0
  182. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +0 -0
  183. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -0
  184. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -0
  185. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +0 -0
  186. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/system/includes/terminal_tools.md +0 -0
  187. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/apply_patch.md +0 -0
  188. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/ask_user_choice.md +0 -0
  189. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_click.md +0 -0
  190. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_close.md +0 -0
  191. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_console_messages.md +0 -0
  192. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_drag.md +0 -0
  193. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_drop.md +0 -0
  194. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_evaluate.md +0 -0
  195. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_file_upload.md +0 -0
  196. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_fill_form.md +0 -0
  197. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_find.md +0 -0
  198. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_handle_dialog.md +0 -0
  199. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_hover.md +0 -0
  200. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_navigate.md +0 -0
  201. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_navigate_back.md +0 -0
  202. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_network_request.md +0 -0
  203. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_network_requests.md +0 -0
  204. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_press_key.md +0 -0
  205. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_resize.md +0 -0
  206. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_scroll.md +0 -0
  207. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_select_option.md +0 -0
  208. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_snapshot.md +0 -0
  209. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_tabs.md +0 -0
  210. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_take_screenshot.md +0 -0
  211. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_type.md +0 -0
  212. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/browser_wait_for.md +0 -0
  213. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/build_backend.md +0 -0
  214. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/build_frontend.md +0 -0
  215. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/claude_edit.md +0 -0
  216. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/claude_write.md +0 -0
  217. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/dispatch_agent.md +0 -0
  218. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/edit.md +0 -0
  219. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/eval.md +0 -0
  220. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/exec_command.md +0 -0
  221. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/get_host.md +0 -0
  222. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/get_task_list.md +0 -0
  223. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/get_task_list_readonly.md +0 -0
  224. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/hashline_edit.md +0 -0
  225. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/hashline_write.md +0 -0
  226. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/kill_command.md +0 -0
  227. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/list_agents.md +0 -0
  228. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/list_sessions.md +0 -0
  229. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/list_subagent_models.md +0 -0
  230. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/list_workflow_runs.md +0 -0
  231. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/lsp.md +0 -0
  232. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/lsp_edit.md +0 -0
  233. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/multi_edit.md +0 -0
  234. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/read.md +0 -0
  235. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/read_image.md +0 -0
  236. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/resolve.md +0 -0
  237. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/run_workflow.md +0 -0
  238. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/send_message.md +0 -0
  239. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/set_goal.md +0 -0
  240. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/skill.md +0 -0
  241. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/snapshot.md +0 -0
  242. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/switch_worktree.md +0 -0
  243. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/update_task_list.md +0 -0
  244. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/web_fetch.md +0 -0
  245. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/web_search.md +0 -0
  246. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/write.md +0 -0
  247. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/write_plan.md +0 -0
  248. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/tools/write_stdin.md +0 -0
  249. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +0 -0
  250. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
  251. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/prompts.py +0 -0
  252. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/session_metadata.py +0 -0
  253. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/agent_tool.py +0 -0
  254. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/base_tool.py +0 -0
  255. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/browser_tool.py +0 -0
  256. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/build_tool.py +0 -0
  257. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/codex_patch.py +0 -0
  258. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
  259. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/edit_tool.py +0 -0
  260. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/eval_tool.py +0 -0
  261. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/hashline_v2.py +0 -0
  262. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/lsp_tool.py +0 -0
  263. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
  264. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/network_status.py +0 -0
  265. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/read_file_tool.py +0 -0
  266. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/read_image_tool.py +0 -0
  267. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/search_backends/__init__.py +0 -0
  268. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
  269. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +0 -0
  270. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
  271. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +0 -0
  272. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
  273. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
  274. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/search_backends/tavily.py +0 -0
  275. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/snapshot_tool.py +0 -0
  276. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
  277. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/terminal_tool.py +0 -0
  278. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/web_fetch/__init__.py +0 -0
  279. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/web_fetch/answering.py +0 -0
  280. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/web_fetch/documents.py +0 -0
  281. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/web_fetch/extractors.py +0 -0
  282. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/web_fetch/pipeline.py +0 -0
  283. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/web_fetch/retrieval.py +0 -0
  284. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/web_fetch_tool.py +0 -0
  285. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/web_search_tool.py +0 -0
  286. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
  287. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tool_definitions.py +0 -0
  288. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/tools.py +0 -0
  289. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/utils/commands.py +0 -0
  290. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/agent/volatile_context.py +0 -0
  291. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/auth/__init__.py +0 -0
  292. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/auth/_jwt.py +0 -0
  293. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/auth/chatgpt_oauth.py +0 -0
  294. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/auth/constants.py +0 -0
  295. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/auth/tokens.py +0 -0
  296. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/browser_extension/__init__.py +0 -0
  297. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/browser_extension/framing.py +0 -0
  298. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/browser_extension/installer.py +0 -0
  299. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/browser_extension/manager.py +0 -0
  300. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/browser_extension/multiplex.py +0 -0
  301. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/browser_extension/native_host.py +0 -0
  302. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/browser_extension/protocol.py +0 -0
  303. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/browser_extension/registry.py +0 -0
  304. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/browser_extension/runtime.py +0 -0
  305. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/__init__.py +0 -0
  306. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/acp.py +0 -0
  307. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/ask_output.py +0 -0
  308. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/atif_export.py +0 -0
  309. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/browser_backend.py +0 -0
  310. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/clipboard_image.py +0 -0
  311. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/config.py +0 -0
  312. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/connection.py +0 -0
  313. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/cron.py +0 -0
  314. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/diagnostics.py +0 -0
  315. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/file_index.py +0 -0
  316. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/goal.py +0 -0
  317. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/loop.py +0 -0
  318. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/mentions.py +0 -0
  319. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/model_catalog.py +0 -0
  320. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/model_connection.py +0 -0
  321. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/peer_messaging.py +0 -0
  322. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/plan_artifacts.py +0 -0
  323. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/prompt_history.py +0 -0
  324. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/provider_registry.py +0 -0
  325. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/session_event_protocol.py +0 -0
  326. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/session_event_store.py +0 -0
  327. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/session_journal.py +0 -0
  328. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/session_usage.py +0 -0
  329. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/skills.py +0 -0
  330. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/slash_commands.py +0 -0
  331. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/__init__.py +0 -0
  332. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/changes_screen.py +0 -0
  333. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/command_handlers.py +0 -0
  334. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/constants.py +0 -0
  335. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/custom_model.py +0 -0
  336. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/loop_runtime.py +0 -0
  337. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/memory_screen.py +0 -0
  338. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/onboarding_screen.py +0 -0
  339. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/pacing.py +0 -0
  340. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/prompt_flows.py +0 -0
  341. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/session_diff.py +0 -0
  342. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/tui/terminal_display.py +0 -0
  343. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/cli/updater.py +0 -0
  344. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/config.py +0 -0
  345. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/extensions.py +0 -0
  346. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/gateway/__init__.py +0 -0
  347. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/gateway/adapters/__init__.py +0 -0
  348. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/gateway/adapters/echo.py +0 -0
  349. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/gateway/adapters/telegram/__init__.py +0 -0
  350. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/gateway/adapters/telegram/formatting.py +0 -0
  351. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/gateway/bridge.py +0 -0
  352. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/gateway/commands.py +0 -0
  353. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/gateway/control_relay.py +0 -0
  354. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/gateway/event_router.py +0 -0
  355. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/gateway/questions.py +0 -0
  356. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/gateway/redaction.py +0 -0
  357. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/gateway/router.py +0 -0
  358. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/gateway/service.py +0 -0
  359. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/gateway/sessions.py +0 -0
  360. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/gateway/stt.py +0 -0
  361. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/git_env.py +0 -0
  362. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/hooks/__init__.py +0 -0
  363. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/hooks/backends.py +0 -0
  364. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/hooks/config.py +0 -0
  365. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/hooks/dispatcher.py +0 -0
  366. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/hooks/events.py +0 -0
  367. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/hooks/matcher.py +0 -0
  368. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/hooks/outcome.py +0 -0
  369. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/client.py +0 -0
  370. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/exceptions.py +0 -0
  371. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/instrumented_client.py +0 -0
  372. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/ledger.py +0 -0
  373. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/models.py +0 -0
  374. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/providers/__init__.py +0 -0
  375. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/providers/_token_encoding.py +0 -0
  376. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/providers/anthropic.py +0 -0
  377. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/providers/base.py +0 -0
  378. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
  379. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/providers/deepseek_responses.py +0 -0
  380. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/providers/google.py +0 -0
  381. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/providers/models.py +0 -0
  382. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/providers/openai.py +0 -0
  383. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/providers/openai_responses.py +0 -0
  384. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/providers/perplexity_responses.py +0 -0
  385. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/providers/responses_common.py +0 -0
  386. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/providers/tinker.py +0 -0
  387. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/providers/tinker_trace.py +0 -0
  388. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/ratelimit.py +0 -0
  389. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/__init__.py +0 -0
  390. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/accessors.py +0 -0
  391. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/catalog/__init__.py +0 -0
  392. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/catalog/anthropic.py +0 -0
  393. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/catalog/dashscope.py +0 -0
  394. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/catalog/deepseek.py +0 -0
  395. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/catalog/fireworks.py +0 -0
  396. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/catalog/google.py +0 -0
  397. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/catalog/groq.py +0 -0
  398. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/catalog/kimi_coding.py +0 -0
  399. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/catalog/moonshot.py +0 -0
  400. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/catalog/ollama_cloud.py +0 -0
  401. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/catalog/openai.py +0 -0
  402. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/catalog/openai_chatgpt.py +0 -0
  403. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/catalog/openrouter.py +0 -0
  404. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/catalog/perplexity_agent.py +0 -0
  405. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/catalog/thinking_machines.py +0 -0
  406. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/catalog/tinker.py +0 -0
  407. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/catalog/together.py +0 -0
  408. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/catalog/xai.py +0 -0
  409. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/catalog/zai.py +0 -0
  410. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/custom_endpoints.py +0 -0
  411. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/ollama_cloud_catalog.py +0 -0
  412. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/openrouter_catalog.py +0 -0
  413. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/perplexity_catalog.py +0 -0
  414. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/thinking.py +0 -0
  415. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/tinker_catalog.py +0 -0
  416. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/types.py +0 -0
  417. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/specs/validation.py +0 -0
  418. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/timeouts.py +0 -0
  419. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/tool_execution_ids.py +0 -0
  420. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/llm/usage.py +0 -0
  421. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/local_state.py +0 -0
  422. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/mcp/__init__.py +0 -0
  423. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/mcp/config.py +0 -0
  424. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/mcp/oauth.py +0 -0
  425. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/mcp/service.py +0 -0
  426. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/mcp/state.py +0 -0
  427. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/mcp/tools.py +0 -0
  428. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/mcp/transport.py +0 -0
  429. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/memory/__init__.py +0 -0
  430. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/memory/identity.py +0 -0
  431. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/memory/manager.py +0 -0
  432. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/memory/manifest.py +0 -0
  433. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/memory/markdown.py +0 -0
  434. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/memory/models.py +0 -0
  435. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/memory/protocol.py +0 -0
  436. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/memory/registry.py +0 -0
  437. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/models/__init__.py +0 -0
  438. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/models/sandbox_terminal_state.py +0 -0
  439. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/permissions.py +0 -0
  440. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/runtime.py +0 -0
  441. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/sandbox/README.md +0 -0
  442. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/sandbox/__init__.py +0 -0
  443. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/sandbox/async_filesystem.py +0 -0
  444. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/sandbox/base.py +0 -0
  445. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/sandbox/browser.py +0 -0
  446. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/sandbox/event_loop.py +0 -0
  447. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/sandbox/filesystem.py +0 -0
  448. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/sandbox/local.py +0 -0
  449. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/sandbox/serializer.py +0 -0
  450. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/sandbox/terminal.py +0 -0
  451. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/sandbox/utils.py +0 -0
  452. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/scratchpad.py +0 -0
  453. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/security/__init__.py +0 -0
  454. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/security/secrets.py +0 -0
  455. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/services/base.py +0 -0
  456. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/services/browser.py +0 -0
  457. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/services/file_system.py +0 -0
  458. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/services/html.py +0 -0
  459. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/services/lsp/__init__.py +0 -0
  460. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/services/lsp/client.py +0 -0
  461. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/services/lsp/config.py +0 -0
  462. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/services/lsp/detector.py +0 -0
  463. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/services/lsp/diagnostics.py +0 -0
  464. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/services/lsp/edits.py +0 -0
  465. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/services/lsp/manager.py +0 -0
  466. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/services/lsp/registry.py +0 -0
  467. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/services/lsp/registry.yaml +0 -0
  468. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/services/snapshots.py +0 -0
  469. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/services/terminal.py +0 -0
  470. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/services/terminal_buffer.py +0 -0
  471. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/services/workspace_scan.py +0 -0
  472. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/session/__init__.py +0 -0
  473. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/session/control.py +0 -0
  474. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/session/inbox.py +0 -0
  475. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/session/inmemory.py +0 -0
  476. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/session/recording.py +0 -0
  477. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/session/runtime.py +0 -0
  478. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/session/store.py +0 -0
  479. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/testing/__init__.py +0 -0
  480. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/testing/store_conformance.py +0 -0
  481. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/tools/__init__.py +0 -0
  482. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/tools/ask_user.py +0 -0
  483. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/tools/core.py +0 -0
  484. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/tools/definitions.py +0 -0
  485. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/tools/param_aliases.py +0 -0
  486. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/tools/registry.py +0 -0
  487. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/utils/__init__.py +0 -0
  488. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/utils/images.py +0 -0
  489. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/web/__init__.py +0 -0
  490. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/web/assets/player.html +0 -0
  491. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/web/bundle.py +0 -0
  492. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/web/hosting.py +0 -0
  493. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/web/redaction.py +0 -0
  494. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/web/server.py +0 -0
  495. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/web/singlefile.py +0 -0
  496. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/web/theme_css.py +0 -0
  497. {kolega_code-0.38.0 → kolega_code-0.40.0}/kolega_code/worktrees.py +0 -0
@@ -6,6 +6,66 @@ This project uses GitHub Releases for detailed generated release notes. This fil
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 0.40.0 - 2026-09-18
10
+
11
+ ### Added
12
+
13
+ - **Faster, clearer startup.** A themed splash paints immediately while the
14
+ application loads, followed by a compact startup card with expandable details
15
+ that folds away when the conversation begins.
16
+ - **Resume recent sessions from the startup card.** Browse recent conversations
17
+ and resume them directly, with ownership checks to avoid opening a session
18
+ already in use.
19
+ - **Context-sensitive keyboard help.** A shortcut bar follows the focused widget,
20
+ and `F1` opens local help for the current context.
21
+ - **Optional discovery tips.** Fresh sessions can show dismissible tips covering
22
+ commands, settings, and workflows; enable them in Settings.
23
+
24
+ ### Changed
25
+
26
+ - **More informative tool calls.** Tool headings include concise, sanitized
27
+ subjects such as file paths, commands, and search queries. Recorded sessions
28
+ and the web player retain those subjects too.
29
+ - **A more compact, readable TUI.** Session metadata, empty sidebar sections,
30
+ task lists, transcript paths, and command previews take less space. Build and
31
+ plan indicators have distinct colors, and working-state labels use a subtle
32
+ shimmer.
33
+
34
+ ### Fixed
35
+
36
+ - Startup-card disclosure preferences persist reliably across rapid toggles and
37
+ terminal resizes.
38
+
39
+ ### Security
40
+
41
+ - Updated Soup Sieve to 2.9.2 to fix CVE-2026-86000 and CVE-2026-85999.
42
+
43
+ ## 0.39.0 - 2026-09-15
44
+
45
+ ### Security
46
+
47
+ - **Telegram gateway now fails closed.** Empty configured and persisted
48
+ allowlists no longer admit everyone: access is locked, or pairing-only when
49
+ explicitly enabled. Unknown senders cannot start sessions, run commands,
50
+ download attachments, or consume permission buttons. First-user pairing
51
+ requires local review of the numeric sender ID and approval of the code.
52
+ - **Strict access settings and running-policy diagnostics.** Malformed
53
+ restrictions produce actionable field-specific errors rather than permissive
54
+ defaults. Token-only setup warns when no operators are authorized; omitting
55
+ `--allow` preserves configured IDs, while `--allow ''` clears only that list.
56
+ Startup/status report the enforced access policy from the daemon heartbeat;
57
+ old snapshots without policy fields are explicitly unknown.
58
+ - **Migration required for formerly open gateways.** Restart old daemons after
59
+ upgrading; updating files alone does not change a running process. Configured
60
+ IDs and `gateway_allowlist.json` approvals remain a union, with no automatic
61
+ deletion of approvals or sessions. For exclusive-owner access, stop the
62
+ gateway, inspect both authorization sources, remove unwanted approvals,
63
+ configure the owner, and restart without deleting settings or credentials.
64
+ All admitted users remain trusted operators: `ask` prompts their chat, allows
65
+ them to approve their own tools, and does not prevent switching to `auto`;
66
+ admitted group participants share the chat's control surface. Local echo
67
+ smoke testing remains available without opening remote access.
68
+
9
69
  ## 0.38.0 - 2026-09-11
10
70
 
11
71
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kolega-code
3
- Version: 0.38.0
3
+ Version: 0.40.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/
@@ -61,6 +61,7 @@ Requires-Dist: pypdfium2==5.11.0
61
61
  Requires-Dist: python-dotenv==1.2.2
62
62
  Requires-Dist: pyyaml==6.0.3
63
63
  Requires-Dist: readability-lxml==0.8.4.1
64
+ Requires-Dist: soupsieve==2.9.2
64
65
  Requires-Dist: tavily-python==0.7.26
65
66
  Requires-Dist: tenacity==9.1.4
66
67
  Requires-Dist: textual==8.2.5
@@ -174,4 +174,4 @@ __all__ = [
174
174
  "parse_git_status_output",
175
175
  ]
176
176
 
177
- __version__ = "0.38.0"
177
+ __version__ = "0.40.0"
@@ -51,4 +51,4 @@ __all__ = [
51
51
  "ToolExtension",
52
52
  ]
53
53
 
54
- __version__ = "0.38.0"
54
+ __version__ = "0.40.0"
@@ -75,6 +75,7 @@ from kolega_code.services.base import TerminalManager, BrowserManager
75
75
  from kolega_code.services.file_system import FileSystem, LocalFileSystem
76
76
  from .tools import ToolCollection, ToolExtension # noqa: F401 - ToolCollection kept for downstream monkeypatching
77
77
  from kolega_code.tools import ToolError
78
+ from kolega_code.tool_subjects import build_tool_display, build_tool_subject, configured_tool_subject_secrets
78
79
  from .utils.commands import CommandProcessor
79
80
 
80
81
  if TYPE_CHECKING:
@@ -829,12 +830,14 @@ class BaseAgent(LogMixin):
829
830
  payload=delta.get("payload"),
830
831
  )
831
832
  tool_call_id = block.item_id or str(uuid.uuid4())
833
+ tool_subject = self._build_tool_subject(block.tool_label, block.action)
832
834
  await self.send_chat_message(
833
835
  message_type="tool_call",
834
836
  content=f"Calling {block.tool_label}: {block.label()}",
835
837
  is_streaming=False,
836
838
  tool_description=block.tool_label,
837
839
  tool_call_id=tool_call_id,
840
+ tool_subject=tool_subject,
838
841
  )
839
842
  await self.send_chat_message(
840
843
  message_type="tool_result",
@@ -842,6 +845,7 @@ class BaseAgent(LogMixin):
842
845
  is_streaming=False,
843
846
  tool_description=block.tool_label,
844
847
  tool_call_id=tool_call_id,
848
+ tool_subject=tool_subject,
845
849
  )
846
850
 
847
851
  def apply_goal(self, condition: Optional[str], prompt_extension: Optional["PromptExtension"] = None) -> None:
@@ -1396,9 +1400,37 @@ class BaseAgent(LogMixin):
1396
1400
  def current_provider_tool_call_id(self, value):
1397
1401
  self._current_provider_tool_call_id_var.set(value)
1398
1402
 
1403
+ def _build_tool_subject(self, tool_name: str, tool_input: object) -> str:
1404
+ """Best-effort display metadata, using only this agent's available credentials."""
1405
+ try:
1406
+ return build_tool_subject(
1407
+ tool_name,
1408
+ tool_input,
1409
+ project_path=self.project_path,
1410
+ secret_values=configured_tool_subject_secrets(self.config),
1411
+ )
1412
+ except Exception:
1413
+ # No input/config/formatter failure should change tool execution.
1414
+ # Deliberately do not log the exception: it could contain credentials.
1415
+ return ""
1416
+
1417
+ def _build_tool_display(self, tool_name: str, tool_input: object) -> dict[str, list[str] | str]:
1418
+ """Structured display metadata parallel to ``tool_subject``."""
1419
+ try:
1420
+ return build_tool_display(
1421
+ tool_name,
1422
+ tool_input,
1423
+ project_path=self.project_path,
1424
+ secret_values=configured_tool_subject_secrets(self.config),
1425
+ )
1426
+ except Exception:
1427
+ return {}
1428
+
1399
1429
  async def execute_single_tool(self, tool_use_block: ToolCall) -> ToolResult:
1400
1430
  """Execute a single tool and return its result with metadata"""
1401
1431
  tool_name = tool_use_block.name
1432
+ tool_subject = self._build_tool_subject(tool_name, tool_use_block.input)
1433
+ tool_display = self._build_tool_display(tool_name, tool_use_block.input)
1402
1434
  inputs = (
1403
1435
  {"input": tool_use_block.input}
1404
1436
  if tool_use_block.input_kind == "freeform" and isinstance(tool_use_block.input, str)
@@ -1429,6 +1461,8 @@ class BaseAgent(LogMixin):
1429
1461
  is_streaming=False,
1430
1462
  tool_description=tool_name,
1431
1463
  tool_call_id=tool_execution_id,
1464
+ tool_subject=tool_subject,
1465
+ tool_display=tool_display,
1432
1466
  )
1433
1467
  return ToolResult(
1434
1468
  tool_use_id=provider_tool_call_id,
@@ -1465,6 +1499,8 @@ class BaseAgent(LogMixin):
1465
1499
  is_streaming=False,
1466
1500
  tool_description=tool_name,
1467
1501
  tool_call_id=tool_execution_id,
1502
+ tool_subject=tool_subject,
1503
+ tool_display=tool_display,
1468
1504
  )
1469
1505
  return ToolResult(
1470
1506
  tool_use_id=provider_tool_call_id,
@@ -1484,6 +1520,8 @@ class BaseAgent(LogMixin):
1484
1520
  is_streaming=False,
1485
1521
  tool_description=tool_name,
1486
1522
  tool_call_id=tool_execution_id,
1523
+ tool_subject=tool_subject,
1524
+ tool_display=tool_display,
1487
1525
  )
1488
1526
  return ToolResult(
1489
1527
  tool_use_id=provider_tool_call_id,
@@ -1501,9 +1539,18 @@ class BaseAgent(LogMixin):
1501
1539
  target=tool_name,
1502
1540
  )
1503
1541
  if pre.blocked:
1504
- return await self._blocked_tool_result(tool_name, provider_tool_call_id, tool_execution_id, pre.reason)
1542
+ return await self._blocked_tool_result(
1543
+ tool_name,
1544
+ provider_tool_call_id,
1545
+ tool_execution_id,
1546
+ pre.reason,
1547
+ tool_subject=tool_subject,
1548
+ tool_display=tool_display,
1549
+ )
1505
1550
  if pre.updated_input is not None:
1506
1551
  inputs = pre.updated_input
1552
+ tool_subject = self._build_tool_subject(tool_name, inputs)
1553
+ tool_display = self._build_tool_display(tool_name, inputs)
1507
1554
 
1508
1555
  # Send tool_call message to indicate we're starting execution
1509
1556
  if not all(
@@ -1518,6 +1565,8 @@ class BaseAgent(LogMixin):
1518
1565
  is_streaming=False,
1519
1566
  tool_description=tool_name,
1520
1567
  tool_call_id=tool_execution_id,
1568
+ tool_subject=tool_subject,
1569
+ tool_display=tool_display,
1521
1570
  )
1522
1571
 
1523
1572
  output = await registry.call(tool_name, **inputs)
@@ -1550,6 +1599,8 @@ class BaseAgent(LogMixin):
1550
1599
  tool_description=tool_name,
1551
1600
  tool_call_id=tool_execution_id,
1552
1601
  images=images,
1602
+ tool_subject=tool_subject,
1603
+ tool_display=tool_display,
1553
1604
  )
1554
1605
 
1555
1606
  return ToolResult(
@@ -1572,6 +1623,8 @@ class BaseAgent(LogMixin):
1572
1623
  is_streaming=False,
1573
1624
  tool_description=tool_name,
1574
1625
  tool_call_id=tool_execution_id,
1626
+ tool_subject=tool_subject,
1627
+ tool_display=tool_display,
1575
1628
  )
1576
1629
 
1577
1630
  return ToolResult(
@@ -1593,6 +1646,8 @@ class BaseAgent(LogMixin):
1593
1646
  is_streaming=False,
1594
1647
  tool_description=tool_name,
1595
1648
  tool_call_id=tool_execution_id,
1649
+ tool_subject=tool_subject,
1650
+ tool_display=tool_display,
1596
1651
  )
1597
1652
 
1598
1653
  return ToolResult(
@@ -1641,6 +1696,8 @@ class BaseAgent(LogMixin):
1641
1696
  is_streaming=False,
1642
1697
  tool_description=block.name,
1643
1698
  tool_call_id=execution_id,
1699
+ tool_subject=self._build_tool_subject(block.name, block.input),
1700
+ tool_display=self._build_tool_display(block.name, block.input),
1644
1701
  )
1645
1702
  results.append(
1646
1703
  ToolResult(
@@ -1862,7 +1919,14 @@ class BaseAgent(LogMixin):
1862
1919
  return output if isinstance(output, str) else str(output)
1863
1920
 
1864
1921
  async def _blocked_tool_result(
1865
- self, tool_name: str, provider_tool_call_id: str, tool_execution_id: str, reason: str
1922
+ self,
1923
+ tool_name: str,
1924
+ provider_tool_call_id: str,
1925
+ tool_execution_id: str,
1926
+ reason: str,
1927
+ *,
1928
+ tool_subject: Optional[str] = None,
1929
+ tool_display: Optional[dict[str, list[str] | str]] = None,
1866
1930
  ) -> ToolResult:
1867
1931
  """Build the is_error ToolResult a blocked tool produces — identical to the
1868
1932
  permission-deny path so the model and UI handle a hook block the same way."""
@@ -1876,6 +1940,8 @@ class BaseAgent(LogMixin):
1876
1940
  is_streaming=False,
1877
1941
  tool_description=tool_name,
1878
1942
  tool_call_id=tool_execution_id,
1943
+ tool_subject=tool_subject,
1944
+ tool_display=tool_display,
1879
1945
  )
1880
1946
  return ToolResult(
1881
1947
  tool_use_id=provider_tool_call_id,
@@ -1935,6 +2001,9 @@ class BaseAgent(LogMixin):
1935
2001
  tool_description=None,
1936
2002
  tool_call_id=None,
1937
2003
  images: Optional[Sequence[Tuple[str, str]]] = None,
2004
+ *,
2005
+ tool_subject: Optional[str] = None,
2006
+ tool_display: Optional[dict[str, list[str] | str]] = None,
1938
2007
  ) -> None:
1939
2008
  """
1940
2009
  Send a message to the chat interface.
@@ -1945,6 +2014,18 @@ class BaseAgent(LogMixin):
1945
2014
  images: ``(media_type, base64_data)`` pairs a tool produced, so a
1946
2015
  frontend can show the picture rather than a description of one
1947
2016
  """
2017
+ if tool_subject or tool_display:
2018
+ await self.emitter.chat(
2019
+ message_type,
2020
+ content,
2021
+ is_streaming=is_streaming,
2022
+ tool_description=tool_description,
2023
+ tool_call_id=tool_call_id,
2024
+ images=images,
2025
+ tool_subject=tool_subject,
2026
+ tool_display=tool_display,
2027
+ )
2028
+ return
1948
2029
  await self.emitter.chat(
1949
2030
  message_type,
1950
2031
  content,
@@ -2109,6 +2190,8 @@ class BaseAgent(LogMixin):
2109
2190
  is_streaming=False,
2110
2191
  tool_description=tool_name,
2111
2192
  tool_call_id=tool_execution_id,
2193
+ tool_subject=self._build_tool_subject(tool_name, tool_call_delta.get("input")),
2194
+ tool_display=self._build_tool_display(tool_name, tool_call_delta.get("input")),
2112
2195
  )
2113
2196
 
2114
2197
  def should_stop_after_tools(self) -> bool: