kolega-code 0.25.0__tar.gz → 0.25.2__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 (872) hide show
  1. {kolega_code-0.25.0 → kolega_code-0.25.2}/CHANGELOG.md +16 -0
  2. {kolega_code-0.25.0 → kolega_code-0.25.2}/PKG-INFO +1 -1
  3. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/assets/coverage.svg +1 -1
  4. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/__init__.py +1 -1
  5. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/__init__.py +1 -1
  6. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/conversation.py +154 -10
  7. kolega_code-0.25.2/kolega_code/utils/images.py +309 -0
  8. {kolega_code-0.25.0 → kolega_code-0.25.2}/pyproject.toml +1 -1
  9. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_base_agent_effective_history.py +75 -2
  10. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_coder_attachments.py +2 -1
  11. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_history_adapter_thinking.py +14 -1
  12. kolega_code-0.25.2/tests/agent/test_history_image_blocks.py +574 -0
  13. kolega_code-0.25.2/tests/utils/test_images.py +302 -0
  14. {kolega_code-0.25.0 → kolega_code-0.25.2}/uv.lock +2 -2
  15. kolega_code-0.25.0/kolega_code/utils/images.py +0 -143
  16. kolega_code-0.25.0/tests/agent/test_history_image_blocks.py +0 -221
  17. kolega_code-0.25.0/tests/utils/test_images.py +0 -90
  18. {kolega_code-0.25.0 → kolega_code-0.25.2}/.env.example +0 -0
  19. {kolega_code-0.25.0 → kolega_code-0.25.2}/.githooks/pre-commit +0 -0
  20. {kolega_code-0.25.0 → kolega_code-0.25.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  21. {kolega_code-0.25.0 → kolega_code-0.25.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  22. {kolega_code-0.25.0 → kolega_code-0.25.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  23. {kolega_code-0.25.0 → kolega_code-0.25.2}/.github/codeql/codeql-config.yml +0 -0
  24. {kolega_code-0.25.0 → kolega_code-0.25.2}/.github/dependabot.yml +0 -0
  25. {kolega_code-0.25.0 → kolega_code-0.25.2}/.github/workflows/ci.yml +0 -0
  26. {kolega_code-0.25.0 → kolega_code-0.25.2}/.github/workflows/codeql.yml +0 -0
  27. {kolega_code-0.25.0 → kolega_code-0.25.2}/.github/workflows/docs.yml +0 -0
  28. {kolega_code-0.25.0 → kolega_code-0.25.2}/.github/workflows/release.yml +0 -0
  29. {kolega_code-0.25.0 → kolega_code-0.25.2}/.gitignore +0 -0
  30. {kolega_code-0.25.0 → kolega_code-0.25.2}/.pre-commit-config.yaml +0 -0
  31. {kolega_code-0.25.0 → kolega_code-0.25.2}/CONTRIBUTING.md +0 -0
  32. {kolega_code-0.25.0 → kolega_code-0.25.2}/LICENSE +0 -0
  33. {kolega_code-0.25.0 → kolega_code-0.25.2}/MIGRATION.md +0 -0
  34. {kolega_code-0.25.0 → kolega_code-0.25.2}/README.md +0 -0
  35. {kolega_code-0.25.0 → kolega_code-0.25.2}/RELEASING.md +0 -0
  36. {kolega_code-0.25.0 → kolega_code-0.25.2}/SECURITY.md +0 -0
  37. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/__init__.py +0 -0
  38. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/README.md +0 -0
  39. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/__init__.py +0 -0
  40. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/__main__.py +0 -0
  41. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/artifacts.py +0 -0
  42. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/authoring.py +0 -0
  43. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/browser.py +0 -0
  44. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/browser_assets/app.js +0 -0
  45. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/browser_assets/index.html +0 -0
  46. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/browser_assets/styles.css +0 -0
  47. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/corpus.py +0 -0
  48. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/authoring-slots.yaml +0 -0
  49. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/licenses/LICENSE +0 -0
  50. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/manifest.yaml +0 -0
  51. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/tree/cursed_renderer.go +0 -0
  52. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/tree/exec_test.go +0 -0
  53. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/tree/go.mod +0 -0
  54. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/tree/key.go +0 -0
  55. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/tree/logging.go +0 -0
  56. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/tree/options.go +0 -0
  57. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/tree/options_test.go +0 -0
  58. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/tree/tea.go +0 -0
  59. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/tree/tea_test.go +0 -0
  60. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/tree/tty.go +0 -0
  61. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/licenses/LICENSE-APACHE +0 -0
  62. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/licenses/LICENSE-MIT +0 -0
  63. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/manifest.yaml +0 -0
  64. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/tree/clap_builder/Cargo.toml +0 -0
  65. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/tree/clap_builder/src/builder/arg.rs +0 -0
  66. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/tree/clap_builder/src/builder/arg_group.rs +0 -0
  67. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/tree/clap_builder/src/builder/value_parser.rs +0 -0
  68. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/tree/clap_builder/src/derive.rs +0 -0
  69. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/tree/clap_builder/src/error/context.rs +0 -0
  70. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/tree/clap_builder/src/error/mod.rs +0 -0
  71. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/tree/clap_builder/src/output/help_template.rs +0 -0
  72. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/tree/clap_builder/src/parser/matches/arg_matches.rs +0 -0
  73. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/tree/clap_builder/src/parser/parser.rs +0 -0
  74. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/licenses/LICENSE.txt +0 -0
  75. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/manifest.yaml +0 -0
  76. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/tree/pyproject.toml +0 -0
  77. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/tree/src/click/__init__.py +0 -0
  78. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/tree/src/click/_termui_impl.py +0 -0
  79. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/tree/src/click/_winconsole.py +0 -0
  80. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/tree/src/click/core.py +0 -0
  81. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/tree/src/click/exceptions.py +0 -0
  82. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/tree/src/click/globals.py +0 -0
  83. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/tree/src/click/termui.py +0 -0
  84. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/tree/src/click/types.py +0 -0
  85. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/tree/src/click/utils.py +0 -0
  86. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/licenses/LICENSE +0 -0
  87. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/manifest.yaml +0 -0
  88. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/tree/lib/request.js +0 -0
  89. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/tree/package.json +0 -0
  90. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/tree/test/Router.js +0 -0
  91. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/tree/test/acceptance/resource.js +0 -0
  92. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/tree/test/app.options.js +0 -0
  93. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/tree/test/app.render.js +0 -0
  94. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/tree/test/app.router.js +0 -0
  95. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/tree/test/express.static.js +0 -0
  96. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/tree/test/express.text.js +0 -0
  97. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/licenses/LICENSE +0 -0
  98. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/manifest.yaml +0 -0
  99. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/tree/CMakeLists.txt +0 -0
  100. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/tree/include/fmt/base.h +0 -0
  101. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/tree/include/fmt/chrono.h +0 -0
  102. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/tree/include/fmt/format-inl.h +0 -0
  103. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/tree/include/fmt/format.h +0 -0
  104. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/tree/include/fmt/os.h +0 -0
  105. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/tree/include/fmt/ranges.h +0 -0
  106. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/tree/include/fmt/std.h +0 -0
  107. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/tree/src/fmt.cc +0 -0
  108. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/gson-c9f3fd55854a/licenses/LICENSE +0 -0
  109. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/gson-c9f3fd55854a/manifest.yaml +0 -0
  110. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/gson-c9f3fd55854a/tree/gson/pom.xml +0 -0
  111. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/gson-c9f3fd55854a/tree/gson/src/main/java/com/google/gson/FormattingStyle.java +0 -0
  112. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/gson-c9f3fd55854a/tree/gson/src/main/java/com/google/gson/Gson.java +0 -0
  113. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/gson-c9f3fd55854a/tree/gson/src/main/java/com/google/gson/GsonBuilder.java +0 -0
  114. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/gson-c9f3fd55854a/tree/gson/src/main/java/com/google/gson/JsonElement.java +0 -0
  115. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/gson-c9f3fd55854a/tree/gson/src/main/java/com/google/gson/internal/ReflectionAccessFilterHelper.java +0 -0
  116. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/gson-c9f3fd55854a/tree/gson/src/main/java/com/google/gson/internal/bind/TypeAdapters.java +0 -0
  117. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/gson-c9f3fd55854a/tree/gson/src/main/java/com/google/gson/internal/bind/util/ISO8601Utils.java +0 -0
  118. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/gson-c9f3fd55854a/tree/gson/src/main/java/module-info.java +0 -0
  119. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/licenses/LICENSE.txt +0 -0
  120. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/manifest.yaml +0 -0
  121. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/tree/build.gradle.kts +0 -0
  122. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/tree/okhttp/src/commonJvmAndroid/kotlin/okhttp3/CipherSuite.kt +0 -0
  123. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/tree/okhttp/src/commonJvmAndroid/kotlin/okhttp3/Headers.kt +0 -0
  124. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/tree/okhttp/src/commonJvmAndroid/kotlin/okhttp3/MultipartBody.kt +0 -0
  125. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/tree/okhttp/src/commonJvmAndroid/kotlin/okhttp3/MultipartReader.kt +0 -0
  126. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/tree/okhttp/src/commonJvmAndroid/kotlin/okhttp3/OkHttpClient.kt +0 -0
  127. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/tree/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Http2Connection.kt +0 -0
  128. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/tree/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Settings.kt +0 -0
  129. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/tree/okhttp/src/jvmMain/kotlin/okhttp3/internal/platform/Jdk8WithJettyBootPlatform.kt +0 -0
  130. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/licenses/MIT-LICENSE +0 -0
  131. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/manifest.yaml +0 -0
  132. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/tree/lib/rake/application.rb +0 -0
  133. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/tree/lib/rake/file_list.rb +0 -0
  134. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/tree/lib/rake/file_utils.rb +0 -0
  135. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/tree/lib/rake/file_utils_ext.rb +0 -0
  136. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/tree/lib/rake/loaders/makefile.rb +0 -0
  137. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/tree/lib/rake/rake_test_loader.rb +0 -0
  138. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/tree/lib/rake/task.rb +0 -0
  139. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/tree/lib/rake/task_manager.rb +0 -0
  140. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/tree/rake.gemspec +0 -0
  141. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/licenses/LICENSE.md +0 -0
  142. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/manifest.yaml +0 -0
  143. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/tree/src/Spectre.Console/Live/LiveDisplay.cs +0 -0
  144. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/tree/src/Spectre.Console/Spectre.Console.csproj +0 -0
  145. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/tree/src/Spectre.Console/Widgets/Layout/Layout.cs +0 -0
  146. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/tree/src/Spectre.Console/Widgets/Markup.cs +0 -0
  147. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/tree/src/Spectre.Console/Widgets/Table/Table.cs +0 -0
  148. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/tree/src/Spectre.Console/Widgets/Table/TableColumn.cs +0 -0
  149. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/tree/src/Spectre.Console.Ansi/AnsiMarkup.cs +0 -0
  150. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/tree/src/Spectre.Console.Ansi/AnsiWriter.cs +0 -0
  151. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/tree/src/Spectre.Console.Ansi/Utilities/StringBuffer.cs +0 -0
  152. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/licenses/LICENSE.txt +0 -0
  153. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/manifest.yaml +0 -0
  154. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/tree/Package.swift +0 -0
  155. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/tree/Sources/ArgumentParser/Completions/BashCompletionsGenerator.swift +0 -0
  156. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/tree/Sources/ArgumentParser/Completions/ZshCompletionsGenerator.swift +0 -0
  157. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/tree/Sources/ArgumentParser/Parsable Properties/Flag.swift +0 -0
  158. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/tree/Sources/ArgumentParser/Parsing/ArgumentDefinition.swift +0 -0
  159. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/tree/Sources/ArgumentParser/Parsing/ArgumentSet.swift +0 -0
  160. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/tree/Sources/ArgumentParser/Parsing/ParserError.swift +0 -0
  161. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/tree/Sources/ArgumentParser/Usage/DumpHelpGenerator.swift +0 -0
  162. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/tree/Sources/ArgumentParser/Utilities/SequenceExtensions.swift +0 -0
  163. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/licenses/LICENSE +0 -0
  164. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/manifest.yaml +0 -0
  165. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/tree/Application.php +0 -0
  166. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/tree/Descriptor/JsonDescriptor.php +0 -0
  167. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/tree/Helper/ProgressBar.php +0 -0
  168. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/tree/Helper/SymfonyQuestionHelper.php +0 -0
  169. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/tree/Helper/Table.php +0 -0
  170. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/tree/Helper/TableStyle.php +0 -0
  171. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/tree/Interaction/Interaction.php +0 -0
  172. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/tree/Style/SymfonyStyle.php +0 -0
  173. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/tree/composer.json +0 -0
  174. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/licenses/LICENSE +0 -0
  175. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/manifest.yaml +0 -0
  176. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/tree/packages/zod/package.json +0 -0
  177. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/tree/packages/zod/src/v3/types.ts +0 -0
  178. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/tree/packages/zod/src/v4/classic/schemas.ts +0 -0
  179. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/tree/packages/zod/src/v4/core/checks.ts +0 -0
  180. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/tree/packages/zod/src/v4/core/errors.ts +0 -0
  181. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/tree/packages/zod/src/v4/core/json-schema-processors.ts +0 -0
  182. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/tree/packages/zod/src/v4/core/regexes.ts +0 -0
  183. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/tree/packages/zod/src/v4/core/schemas.ts +0 -0
  184. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/tree/packages/zod/src/v4/core/util.ts +0 -0
  185. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/tree/packages/zod/src/v4/mini/schemas.ts +0 -0
  186. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/sources.yaml +0 -0
  187. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/matrices/deepseek-v4.yaml +0 -0
  188. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/matrices/example.yaml +0 -0
  189. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/matrices/validity-slice.yaml +0 -0
  190. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/models.py +0 -0
  191. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/protocols.py +0 -0
  192. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/recipes.py +0 -0
  193. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/report.py +0 -0
  194. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/runner.py +0 -0
  195. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/scoring.py +0 -0
  196. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/suites/coder-agent.yaml +0 -0
  197. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/suites/core.yaml +0 -0
  198. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/suites/corpora/edit-core.yaml +0 -0
  199. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/suites/fixtures/smoke-tasks.yaml +0 -0
  200. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/suites/smoke.yaml +0 -0
  201. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/usage.py +0 -0
  202. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/verifier/Dockerfile +0 -0
  203. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/verifier/toolchains.lock.yaml +0 -0
  204. {kolega_code-0.25.0 → kolega_code-0.25.2}/benchmarks/edit_tools/workspace.py +0 -0
  205. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/.gitignore +0 -0
  206. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/README.md +0 -0
  207. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/astro.config.mjs +0 -0
  208. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/package-lock.json +0 -0
  209. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/package.json +0 -0
  210. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/public/favicon.svg +0 -0
  211. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/assets/demo.gif +0 -0
  212. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/assets/kolega-dark.svg +0 -0
  213. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/assets/kolega-light.svg +0 -0
  214. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/cli/ask.md +0 -0
  215. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/cli/doctor.md +0 -0
  216. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/cli/overview.md +0 -0
  217. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/cli/sessions.md +0 -0
  218. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/cli/share.md +0 -0
  219. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/concepts/agents.md +0 -0
  220. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/concepts/how-it-works.md +0 -0
  221. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/concepts/tools.md +0 -0
  222. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/configuration/environment-variables.md +0 -0
  223. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/configuration/lsp.md +0 -0
  224. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/configuration/mcp.md +0 -0
  225. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/configuration/prompt-overrides.md +0 -0
  226. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/configuration/providers-and-models.mdx +0 -0
  227. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/configuration/settings-and-api-keys.mdx +0 -0
  228. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/configuration/sign-in-with-chatgpt.mdx +0 -0
  229. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/custom-agents.mdx +0 -0
  230. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/getting-started/installation.mdx +0 -0
  231. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/getting-started/quick-start.mdx +0 -0
  232. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/gigacode.mdx +0 -0
  233. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/goal.md +0 -0
  234. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/hooks.md +0 -0
  235. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/index.mdx +0 -0
  236. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/loop.md +0 -0
  237. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/skills.mdx +0 -0
  238. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/troubleshooting/diagnostics.md +0 -0
  239. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/troubleshooting/terminal-tmux.md +0 -0
  240. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/tui/composer.md +0 -0
  241. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/tui/interface.md +0 -0
  242. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/tui/modes.md +0 -0
  243. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/tui/project-memory.md +0 -0
  244. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/tui/scratchpad.md +0 -0
  245. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/tui/sessions-and-resume.md +0 -0
  246. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content/docs/tui/slash-commands.md +0 -0
  247. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/content.config.ts +0 -0
  248. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/src/styles/brand.css +0 -0
  249. {kolega_code-0.25.0 → kolega_code-0.25.2}/docs/tsconfig.json +0 -0
  250. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/LICENSE +0 -0
  251. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/manifest.json +0 -0
  252. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/docx/LICENSE +0 -0
  253. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/docx/SKILL.md +0 -0
  254. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/docx/references/examples.md +0 -0
  255. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/docx/references/limitations.md +0 -0
  256. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/docx/references/operations.md +0 -0
  257. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/docx/references/quality.md +0 -0
  258. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/docx/requirements.txt +0 -0
  259. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/docx/scripts/docx_tool.py +0 -0
  260. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/docx/scripts/smoke_test.py +0 -0
  261. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/LICENSE +0 -0
  262. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/SKILL.md +0 -0
  263. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/references/examples.md +0 -0
  264. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/references/limitations.md +0 -0
  265. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/references/ocr.md +0 -0
  266. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/references/operations.md +0 -0
  267. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/references/quality.md +0 -0
  268. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/references/redaction.md +0 -0
  269. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-paddle.txt +0 -0
  270. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-surya.txt +0 -0
  271. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/requirements.txt +0 -0
  272. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/scripts/pdf_tool.py +0 -0
  273. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/scripts/smoke_test.py +0 -0
  274. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pptx/LICENSE +0 -0
  275. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pptx/SKILL.md +0 -0
  276. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pptx/references/examples.md +0 -0
  277. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pptx/references/limitations.md +0 -0
  278. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pptx/references/operations.md +0 -0
  279. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pptx/requirements.txt +0 -0
  280. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pptx/scripts/pptx_tool.py +0 -0
  281. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pptx/scripts/smoke_test.py +0 -0
  282. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/review/SKILL.md +0 -0
  283. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/review/references/github-publishing.md +0 -0
  284. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/skill-authoring/SKILL.md +0 -0
  285. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/skill-authoring/references/review-checklist.md +0 -0
  286. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/xlsx/LICENSE +0 -0
  287. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/xlsx/SKILL.md +0 -0
  288. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/xlsx/references/examples.md +0 -0
  289. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/xlsx/references/limitations.md +0 -0
  290. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/xlsx/references/operations.md +0 -0
  291. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/xlsx/references/quality.md +0 -0
  292. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/xlsx/requirements.txt +0 -0
  293. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/xlsx/scripts/smoke_test.py +0 -0
  294. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/xlsx/scripts/xlsx_tool.py +0 -0
  295. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/baseagent.py +0 -0
  296. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/browseragent.py +0 -0
  297. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/coder.py +0 -0
  298. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/common.py +0 -0
  299. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/compression.py +0 -0
  300. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/context.py +0 -0
  301. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/custom_agents.py +0 -0
  302. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/edit_protocols.py +0 -0
  303. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/errors.py +0 -0
  304. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/eval/__init__.py +0 -0
  305. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/eval/bridge.py +0 -0
  306. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/eval/bundle-requirements.in +0 -0
  307. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/eval/bundle-requirements.txt +0 -0
  308. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/eval/env.py +0 -0
  309. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/eval/js_kernel.py +0 -0
  310. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/eval/kernel.py +0 -0
  311. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/eval/prelude.js +0 -0
  312. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/eval/prelude.py +0 -0
  313. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/eval/protocol.py +0 -0
  314. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/eval/py_kernel.py +0 -0
  315. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/eval/runner.js +0 -0
  316. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/eval/runner.py +0 -0
  317. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/generalagent.py +0 -0
  318. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/goal.py +0 -0
  319. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/investigationagent.py +0 -0
  320. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/model_routing.py +0 -0
  321. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/orchestration/__init__.py +0 -0
  322. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/orchestration/accounting.py +0 -0
  323. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/orchestration/budget.py +0 -0
  324. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/orchestration/context.py +0 -0
  325. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/orchestration/errors.py +0 -0
  326. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/orchestration/executor.py +0 -0
  327. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/orchestration/guide.py +0 -0
  328. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/orchestration/journal.py +0 -0
  329. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/orchestration/runtime.py +0 -0
  330. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/orchestration/types.py +0 -0
  331. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/planningagent.py +0 -0
  332. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_dump.py +0 -0
  333. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_overrides.py +0 -0
  334. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_provider.py +0 -0
  335. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
  336. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
  337. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
  338. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
  339. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/auxiliary/tools/think_hard.system.md +0 -0
  340. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/extensions/cli/build_questions.md +0 -0
  341. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/extensions/cli/current_plan_artifact.md.j2 +0 -0
  342. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
  343. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/extensions/cli/scratchpad.md.j2 +0 -0
  344. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
  345. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list_readonly.md +0 -0
  346. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -0
  347. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +0 -0
  348. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
  349. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +0 -0
  350. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +0 -0
  351. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +0 -0
  352. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
  353. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
  354. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -0
  355. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +0 -0
  356. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -0
  357. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -0
  358. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +0 -0
  359. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +0 -0
  360. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
  361. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/prompts.py +0 -0
  362. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/agent_tool.py +0 -0
  363. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/base_tool.py +0 -0
  364. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/browser_tool.py +0 -0
  365. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/build_tool.py +0 -0
  366. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/codex_patch.py +0 -0
  367. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
  368. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/edit_tool.py +0 -0
  369. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/eval_tool.py +0 -0
  370. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/glob_tool.py +0 -0
  371. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/hashline_v2.py +0 -0
  372. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/list_directory_tool.py +0 -0
  373. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/lsp_tool.py +0 -0
  374. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
  375. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/read_file_tool.py +0 -0
  376. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/read_image_tool.py +0 -0
  377. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/search_backends/__init__.py +0 -0
  378. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
  379. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +0 -0
  380. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
  381. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +0 -0
  382. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
  383. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
  384. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/search_backends/tavily.py +0 -0
  385. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/search_codebase_tool.py +0 -0
  386. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/snapshot_tool.py +0 -0
  387. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
  388. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/terminal_tool.py +0 -0
  389. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/think_hard_tool.py +0 -0
  390. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/web_fetch/__init__.py +0 -0
  391. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/web_fetch/answering.py +0 -0
  392. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/web_fetch/documents.py +0 -0
  393. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/web_fetch/extractors.py +0 -0
  394. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/web_fetch/pipeline.py +0 -0
  395. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/web_fetch/retrieval.py +0 -0
  396. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/web_fetch_tool.py +0 -0
  397. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/web_search_tool.py +0 -0
  398. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
  399. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/tools.py +0 -0
  400. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/agent/utils/commands.py +0 -0
  401. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/auth/__init__.py +0 -0
  402. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/auth/_jwt.py +0 -0
  403. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/auth/chatgpt_oauth.py +0 -0
  404. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/auth/constants.py +0 -0
  405. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/auth/tokens.py +0 -0
  406. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/__init__.py +0 -0
  407. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/app.py +0 -0
  408. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/clipboard_image.py +0 -0
  409. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/config.py +0 -0
  410. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/connection.py +0 -0
  411. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/cron.py +0 -0
  412. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/diagnostics.py +0 -0
  413. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/file_index.py +0 -0
  414. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/goal.py +0 -0
  415. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/loop.py +0 -0
  416. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/main.py +0 -0
  417. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/mentions.py +0 -0
  418. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/messages.py +0 -0
  419. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/model_connection.py +0 -0
  420. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/plan_artifacts.py +0 -0
  421. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/provider_registry.py +0 -0
  422. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/session_event_store.py +0 -0
  423. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/session_journal.py +0 -0
  424. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/session_store.py +0 -0
  425. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/settings.py +0 -0
  426. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/skills.py +0 -0
  427. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/slash_commands.py +0 -0
  428. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/theme.py +0 -0
  429. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/tui/__init__.py +0 -0
  430. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/tui/agent_runtime.py +0 -0
  431. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/tui/app_base.py +0 -0
  432. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/tui/changes_screen.py +0 -0
  433. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/tui/command_handlers.py +0 -0
  434. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/tui/constants.py +0 -0
  435. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/tui/loop_runtime.py +0 -0
  436. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/tui/memory_screen.py +0 -0
  437. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/tui/onboarding_screen.py +0 -0
  438. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/tui/prompt_flows.py +0 -0
  439. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/tui/session_diff.py +0 -0
  440. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/tui/settings_panel.py +0 -0
  441. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/tui/settings_screen.py +0 -0
  442. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/tui/state.py +0 -0
  443. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/tui/status_dashboard.py +0 -0
  444. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/tui/styles.tcss +0 -0
  445. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/tui/sub_agent_screen.py +0 -0
  446. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/tui/terminal_display.py +0 -0
  447. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/tui/transcript.py +0 -0
  448. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/tui/widgets.py +0 -0
  449. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/cli/updater.py +0 -0
  450. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/config.py +0 -0
  451. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/events.py +0 -0
  452. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/git_env.py +0 -0
  453. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/hooks/__init__.py +0 -0
  454. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/hooks/backends.py +0 -0
  455. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/hooks/config.py +0 -0
  456. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/hooks/dispatcher.py +0 -0
  457. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/hooks/events.py +0 -0
  458. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/hooks/matcher.py +0 -0
  459. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/hooks/outcome.py +0 -0
  460. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/client.py +0 -0
  461. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/exceptions.py +0 -0
  462. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/instrumented_client.py +0 -0
  463. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/models.py +0 -0
  464. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/providers/__init__.py +0 -0
  465. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/providers/anthropic.py +0 -0
  466. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/providers/base.py +0 -0
  467. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
  468. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/providers/google.py +0 -0
  469. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/providers/models.py +0 -0
  470. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/providers/openai.py +0 -0
  471. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/providers/openai_responses.py +0 -0
  472. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/providers/responses_common.py +0 -0
  473. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/ratelimit.py +0 -0
  474. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/specs/__init__.py +0 -0
  475. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/specs/accessors.py +0 -0
  476. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/__init__.py +0 -0
  477. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/anthropic.py +0 -0
  478. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/dashscope.py +0 -0
  479. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/deepseek.py +0 -0
  480. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/fireworks.py +0 -0
  481. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/google.py +0 -0
  482. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/kimi_coding.py +0 -0
  483. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/moonshot.py +0 -0
  484. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/ollama_cloud.py +0 -0
  485. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/openai.py +0 -0
  486. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/openai_chatgpt.py +0 -0
  487. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/together.py +0 -0
  488. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/xai.py +0 -0
  489. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/zai.py +0 -0
  490. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/specs/thinking.py +0 -0
  491. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/specs/types.py +0 -0
  492. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/timeouts.py +0 -0
  493. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/llm/tool_execution_ids.py +0 -0
  494. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/local_state.py +0 -0
  495. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/mcp/__init__.py +0 -0
  496. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/mcp/config.py +0 -0
  497. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/mcp/oauth.py +0 -0
  498. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/mcp/service.py +0 -0
  499. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/mcp/state.py +0 -0
  500. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/mcp/tools.py +0 -0
  501. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/mcp/transport.py +0 -0
  502. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/memory/__init__.py +0 -0
  503. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/memory/identity.py +0 -0
  504. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/memory/manager.py +0 -0
  505. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/memory/manifest.py +0 -0
  506. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/memory/markdown.py +0 -0
  507. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/memory/models.py +0 -0
  508. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/memory/protocol.py +0 -0
  509. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/memory/registry.py +0 -0
  510. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/models/__init__.py +0 -0
  511. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/models/sandbox_terminal_state.py +0 -0
  512. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/permissions.py +0 -0
  513. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/runtime.py +0 -0
  514. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/sandbox/README.md +0 -0
  515. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/sandbox/__init__.py +0 -0
  516. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/sandbox/async_filesystem.py +0 -0
  517. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/sandbox/base.py +0 -0
  518. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/sandbox/browser.py +0 -0
  519. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/sandbox/event_loop.py +0 -0
  520. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/sandbox/filesystem.py +0 -0
  521. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/sandbox/local.py +0 -0
  522. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/sandbox/serializer.py +0 -0
  523. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/sandbox/terminal.py +0 -0
  524. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/sandbox/utils.py +0 -0
  525. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/scratchpad.py +0 -0
  526. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/security/__init__.py +0 -0
  527. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/security/secrets.py +0 -0
  528. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/services/base.py +0 -0
  529. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/services/browser.py +0 -0
  530. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/services/file_system.py +0 -0
  531. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/services/html.py +0 -0
  532. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/services/lsp/__init__.py +0 -0
  533. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/services/lsp/client.py +0 -0
  534. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/services/lsp/config.py +0 -0
  535. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/services/lsp/detector.py +0 -0
  536. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/services/lsp/diagnostics.py +0 -0
  537. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/services/lsp/edits.py +0 -0
  538. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/services/lsp/manager.py +0 -0
  539. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/services/lsp/registry.py +0 -0
  540. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/services/lsp/registry.yaml +0 -0
  541. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/services/snapshots.py +0 -0
  542. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/services/terminal.py +0 -0
  543. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/services/terminal_buffer.py +0 -0
  544. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/services/workspace_scan.py +0 -0
  545. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/session/__init__.py +0 -0
  546. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/session/control.py +0 -0
  547. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/session/inmemory.py +0 -0
  548. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/session/projection.py +0 -0
  549. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/session/recording.py +0 -0
  550. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/session/runtime.py +0 -0
  551. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/session/store.py +0 -0
  552. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/testing/__init__.py +0 -0
  553. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/testing/store_conformance.py +0 -0
  554. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/tools/__init__.py +0 -0
  555. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/tools/core.py +0 -0
  556. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/tools/definitions.py +0 -0
  557. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/tools/registry.py +0 -0
  558. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/utils/__init__.py +0 -0
  559. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/web/__init__.py +0 -0
  560. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/web/assets/fold.js +0 -0
  561. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/web/assets/player.css +0 -0
  562. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/web/assets/player.html +0 -0
  563. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/web/assets/player.js +0 -0
  564. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/web/bundle.py +0 -0
  565. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/web/hosting.py +0 -0
  566. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/web/redaction.py +0 -0
  567. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/web/server.py +0 -0
  568. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/web/singlefile.py +0 -0
  569. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/web/theme_css.py +0 -0
  570. {kolega_code-0.25.0 → kolega_code-0.25.2}/kolega_code/worktrees.py +0 -0
  571. {kolega_code-0.25.0 → kolega_code-0.25.2}/run_tests.sh +0 -0
  572. {kolega_code-0.25.0 → kolega_code-0.25.2}/scripts/bench_hotpaths.py +0 -0
  573. {kolega_code-0.25.0 → kolega_code-0.25.2}/scripts/bench_web_fetch.py +0 -0
  574. {kolega_code-0.25.0 → kolega_code-0.25.2}/scripts/check-dev-hooks.sh +0 -0
  575. {kolega_code-0.25.0 → kolega_code-0.25.2}/scripts/check_no_host_internals.py +0 -0
  576. {kolega_code-0.25.0 → kolega_code-0.25.2}/scripts/count_loc.py +0 -0
  577. {kolega_code-0.25.0 → kolega_code-0.25.2}/scripts/install-kolega-code.sh +0 -0
  578. {kolega_code-0.25.0 → kolega_code-0.25.2}/scripts/setup-dev.sh +0 -0
  579. {kolega_code-0.25.0 → kolega_code-0.25.2}/scripts/sync_bundled_skills.py +0 -0
  580. {kolega_code-0.25.0 → kolega_code-0.25.2}/scripts/verify_bundled_skill_artifacts.py +0 -0
  581. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/__init__.py +0 -0
  582. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/__init__.py +0 -0
  583. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/compaction_helpers.py +0 -0
  584. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/conftest.py +0 -0
  585. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/eval/__init__.py +0 -0
  586. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/eval/test_bridge.py +0 -0
  587. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/eval/test_bundle_requirements.py +0 -0
  588. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/eval/test_env.py +0 -0
  589. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/eval/test_env_provisioning.py +0 -0
  590. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/eval/test_js_kernel.py +0 -0
  591. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/eval/test_protocol.py +0 -0
  592. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/eval/test_py_kernel.py +0 -0
  593. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/__init__.py +0 -0
  594. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/_token_counting_utils.py +0 -0
  595. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_anthropic_local_token_counting_incremental.py +0 -0
  596. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_anthropic_token_counting.py +0 -0
  597. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_billing_openai_cache.py +0 -0
  598. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_chatgpt_live.py +0 -0
  599. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_chatgpt_oauth_auth_config.py +0 -0
  600. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_chatgpt_oauth_conversion.py +0 -0
  601. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_chatgpt_oauth_provider.py +0 -0
  602. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_chatgpt_oauth_provider_generate.py +0 -0
  603. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_chatgpt_oauth_streaming.py +0 -0
  604. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_client.py +0 -0
  605. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_client_live.py +0 -0
  606. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_client_runtime.py +0 -0
  607. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_dashscope_mapping.py +0 -0
  608. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_edit_protocol_resolution.py +0 -0
  609. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_error_boundary.py +0 -0
  610. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_exceptions.py +0 -0
  611. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_freeform_tools.py +0 -0
  612. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_freeform_tools_live.py +0 -0
  613. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_google_provider.py +0 -0
  614. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_google_thought_signature.py +0 -0
  615. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_google_tool_signature_live.py +0 -0
  616. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_instrumented_client.py +0 -0
  617. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_instrumented_client_integration.py +0 -0
  618. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_instrumented_client_stream.py +0 -0
  619. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_langfuse_normalization.py +0 -0
  620. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_live_providers.py +0 -0
  621. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_message_conversion.py +0 -0
  622. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_model_specs.py +0 -0
  623. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_openai_cached_tokens.py +0 -0
  624. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_openai_cached_tokens_stream.py +0 -0
  625. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_openai_message_conversion.py +0 -0
  626. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_openai_reasoning_replay.py +0 -0
  627. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_openai_responses_provider.py +0 -0
  628. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_openai_sdk_compatibility.py +0 -0
  629. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_openai_stream_accumulation.py +0 -0
  630. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_openai_token_counting.py +0 -0
  631. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_openai_token_counting_incremental.py +0 -0
  632. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_provider_usage_mapping.py +0 -0
  633. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_streaming_timeouts.py +0 -0
  634. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_supports_vision.py +0 -0
  635. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_thinking_effort.py +0 -0
  636. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_tool_execution_ids.py +0 -0
  637. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/llm/test_xai_prompt_cache_header.py +0 -0
  638. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/orchestration/__init__.py +0 -0
  639. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/orchestration/test_accounting.py +0 -0
  640. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/orchestration/test_orchestration.py +0 -0
  641. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/services/__init__.py +0 -0
  642. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/services/test_browser.py +0 -0
  643. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/services/test_browser_console_logs.py +0 -0
  644. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/services/test_browser_content.py +0 -0
  645. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/services/test_browser_integration.py +0 -0
  646. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/services/test_browser_parity.py +0 -0
  647. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/services/test_file_system.py +0 -0
  648. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/services/test_file_system_integration.py +0 -0
  649. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/services/test_file_system_path.py +0 -0
  650. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/services/test_local_file_system.py +0 -0
  651. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/services/test_sandbox_terminal_input.py +0 -0
  652. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/services/test_terminal.py +0 -0
  653. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/services/test_terminal_buffer.py +0 -0
  654. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/services/test_terminal_state_serializer.py +0 -0
  655. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_agent_tools_inventory.py +0 -0
  656. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_base_agent.py +0 -0
  657. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_base_agent_anthropic_history_validation.py +0 -0
  658. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_base_agent_compaction.py +0 -0
  659. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_base_agent_history_serialization.py +0 -0
  660. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_base_agent_prompt_context.py +0 -0
  661. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_base_agent_queued_injection.py +0 -0
  662. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_base_agent_role_overrides.py +0 -0
  663. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_base_agent_runtime.py +0 -0
  664. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_base_agent_tool_call_repair.py +0 -0
  665. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_base_agent_tool_call_repair_integration.py +0 -0
  666. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_base_agent_tool_execution.py +0 -0
  667. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_coder_prompt_extensions.py +0 -0
  668. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_commands.py +0 -0
  669. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_compaction_integration.py +0 -0
  670. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_compaction_persistence.py +0 -0
  671. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_compaction_subagent.py +0 -0
  672. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_compaction_tui_events.py +0 -0
  673. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_compress_command.py +0 -0
  674. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_compression.py +0 -0
  675. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_conversation_compaction.py +0 -0
  676. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_custom_agents.py +0 -0
  677. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_duplicate_tool_results.py +0 -0
  678. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_edit_protocol_tools.py +0 -0
  679. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_empty_message_handling.py +0 -0
  680. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_event_emitter.py +0 -0
  681. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_general_agent.py +0 -0
  682. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_gigacode_gating.py +0 -0
  683. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_goal.py +0 -0
  684. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_goal_evaluate.py +0 -0
  685. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_hooks_integration.py +0 -0
  686. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_html.py +0 -0
  687. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_image_compat.py +0 -0
  688. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_model_routing.py +0 -0
  689. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_parallel_tool_calls.py +0 -0
  690. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_permissions.py +0 -0
  691. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_planning_agent.py +0 -0
  692. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_prompt_dump.py +0 -0
  693. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_prompt_overrides.py +0 -0
  694. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_prompt_provider.py +0 -0
  695. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_prompts.py +0 -0
  696. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_read_image_tool.py +0 -0
  697. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_scratchpad.py +0 -0
  698. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_tool_collection_builtin_dispatch.py +0 -0
  699. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_tool_collection_config.py +0 -0
  700. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_tool_collection_extensions.py +0 -0
  701. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_tool_collection_initialization.py +0 -0
  702. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_tool_collection_memory.py +0 -0
  703. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_tool_registry.py +0 -0
  704. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_tools.py +0 -0
  705. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/test_worktrees.py +0 -0
  706. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/__init__.py +0 -0
  707. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_agent_tool.py +0 -0
  708. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_base_tool.py +0 -0
  709. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_browser_tool.py +0 -0
  710. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_build_tool.py +0 -0
  711. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_claude_edit.py +0 -0
  712. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_codex_apply_patch.py +0 -0
  713. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_edit_preview.py +0 -0
  714. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_edit_tool.py +0 -0
  715. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_eval_tool.py +0 -0
  716. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_glob_tool.py +0 -0
  717. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_glob_tool_sandbox_parity.py +0 -0
  718. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_hashline_v2.py +0 -0
  719. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_list_directory_tool.py +0 -0
  720. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_lsp_tool.py +0 -0
  721. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_read_file_tool.py +0 -0
  722. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_search_codebase_tool.py +0 -0
  723. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_snapshot_tool.py +0 -0
  724. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_terminal_tool.py +0 -0
  725. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_think_hard_integration.py +0 -0
  726. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_think_hard_streaming.py +0 -0
  727. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_think_hard_streaming_content.py +0 -0
  728. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_think_hard_streaming_errors.py +0 -0
  729. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_think_hard_streaming_updates.py +0 -0
  730. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_web_fetch_answering.py +0 -0
  731. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_web_fetch_pipeline.py +0 -0
  732. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_web_fetch_tool.py +0 -0
  733. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_web_search_tool.py +0 -0
  734. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/agent/tool_backend/test_workflow_tool.py +0 -0
  735. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/auth/__init__.py +0 -0
  736. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/auth/test_chatgpt_oauth.py +0 -0
  737. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/auth/test_tokens.py +0 -0
  738. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/benchmarks/test_edit_benchmark_browser.py +0 -0
  739. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/benchmarks/test_edit_benchmark_corpus.py +0 -0
  740. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/benchmarks/test_edit_benchmark_protocols.py +0 -0
  741. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/benchmarks/test_edit_benchmark_providers.py +0 -0
  742. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/benchmarks/test_edit_benchmark_recipes.py +0 -0
  743. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/benchmarks/test_edit_benchmark_report.py +0 -0
  744. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/benchmarks/test_edit_benchmark_runner.py +0 -0
  745. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/benchmarks/test_edit_benchmark_scoring.py +0 -0
  746. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/benchmarks/test_edit_benchmark_workspace.py +0 -0
  747. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/benchmarks/test_live_edit_benchmark_providers.py +0 -0
  748. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/__init__.py +0 -0
  749. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/_app_test_utils.py +0 -0
  750. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app.py +0 -0
  751. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_agent_wiring.py +0 -0
  752. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_bootstrap_settings.py +0 -0
  753. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_changes_inspector.py +0 -0
  754. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_compaction_restore.py +0 -0
  755. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_composer_commands.py +0 -0
  756. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_composer_input.py +0 -0
  757. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_conversation_rendering.py +0 -0
  758. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_diagnostics.py +0 -0
  759. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_focus_behavior.py +0 -0
  760. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_goal_command.py +0 -0
  761. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_image_vision_warning.py +0 -0
  762. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_loop_command.py +0 -0
  763. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_lsp_settings_status.py +0 -0
  764. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_memory.py +0 -0
  765. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_mention_dropdown.py +0 -0
  766. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_misc_commands.py +0 -0
  767. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_model_effort_commands.py +0 -0
  768. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_model_switch_vision.py +0 -0
  769. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_modes_planning.py +0 -0
  770. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_navigation_commands.py +0 -0
  771. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_permission_prompts.py +0 -0
  772. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_persistence_history.py +0 -0
  773. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_plan_lifecycle.py +0 -0
  774. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_planning_questions.py +0 -0
  775. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_planning_restore.py +0 -0
  776. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_rendering_entries.py +0 -0
  777. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_rendering_errors.py +0 -0
  778. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_rendering_scroll.py +0 -0
  779. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_rendering_selection.py +0 -0
  780. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_rendering_status.py +0 -0
  781. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_rendering_streaming.py +0 -0
  782. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_rendering_terminal_logs.py +0 -0
  783. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_rendering_tools.py +0 -0
  784. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_rendering_window.py +0 -0
  785. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_rewind.py +0 -0
  786. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_scratchpad.py +0 -0
  787. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_session_diff_async.py +0 -0
  788. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_share.py +0 -0
  789. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_skill_commands.py +0 -0
  790. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_slash_dropdown.py +0 -0
  791. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_status_modes.py +0 -0
  792. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_sub_agents_workflows.py +0 -0
  793. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_app_tmux_shortcuts.py +0 -0
  794. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_ask_goal.py +0 -0
  795. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_ask_loop.py +0 -0
  796. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_bundled_skills.py +0 -0
  797. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_cli_config.py +0 -0
  798. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_clipboard_image.py +0 -0
  799. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_connection.py +0 -0
  800. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_cron.py +0 -0
  801. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_custom_agents_cli.py +0 -0
  802. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_diagnostics.py +0 -0
  803. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_file_index.py +0 -0
  804. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_loop_state.py +0 -0
  805. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_main.py +0 -0
  806. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_main_share_export.py +0 -0
  807. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_mcp_cli.py +0 -0
  808. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_mcp_settings_formatting.py +0 -0
  809. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_mentions.py +0 -0
  810. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_model_connection.py +0 -0
  811. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_plan_artifacts.py +0 -0
  812. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_provider_registry.py +0 -0
  813. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_session_diff.py +0 -0
  814. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_session_event_store.py +0 -0
  815. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_session_rewind.py +0 -0
  816. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_session_store.py +0 -0
  817. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_settings.py +0 -0
  818. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_skills.py +0 -0
  819. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_slash_commands.py +0 -0
  820. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_sub_agent_routing_state.py +0 -0
  821. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_sub_agent_stream_accumulation.py +0 -0
  822. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_terminal_display.py +0 -0
  823. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_theme_web_tokens.py +0 -0
  824. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_themes.py +0 -0
  825. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_transcript_streaming_render.py +0 -0
  826. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_tui_control_sanitization.py +0 -0
  827. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_tui_settings_screens.py +0 -0
  828. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_tui_stylesheet.py +0 -0
  829. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/cli/test_updater.py +0 -0
  830. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/conftest.py +0 -0
  831. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/hooks/__init__.py +0 -0
  832. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/hooks/test_hooks.py +0 -0
  833. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/mcp/test_config_state_tools.py +0 -0
  834. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/memory/test_backend.py +0 -0
  835. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/memory/test_project_memory_manager.py +0 -0
  836. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/security/__init__.py +0 -0
  837. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/security/test_secrets.py +0 -0
  838. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/services/lsp/_fake_server.py +0 -0
  839. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/services/lsp/conftest.py +0 -0
  840. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/services/lsp/test_client.py +0 -0
  841. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/services/lsp/test_detector.py +0 -0
  842. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/services/lsp/test_diagnostics.py +0 -0
  843. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/services/lsp/test_edits.py +0 -0
  844. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/services/lsp/test_integration.py +0 -0
  845. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/services/lsp/test_lsp_edit_tool_integration.py +0 -0
  846. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/services/lsp/test_manager.py +0 -0
  847. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/services/lsp/test_project_config.py +0 -0
  848. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/services/lsp/test_registry.py +0 -0
  849. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/services/lsp/test_trust.py +0 -0
  850. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/services/test_snapshots.py +0 -0
  851. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/services/test_workspace_scan.py +0 -0
  852. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/session/test_control.py +0 -0
  853. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/session/test_projection.py +0 -0
  854. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/session/test_recording.py +0 -0
  855. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/session/test_runtime.py +0 -0
  856. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/session/test_store_conformance.py +0 -0
  857. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/test_agent_config_defaults.py +0 -0
  858. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/test_agent_config_serialization.py +0 -0
  859. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/test_git_env.py +0 -0
  860. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/test_mcp_permissions.py +0 -0
  861. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/test_mcp_transport.py +0 -0
  862. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/tools/__init__.py +0 -0
  863. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/tools/test_definitions.py +0 -0
  864. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/utils/__init__.py +0 -0
  865. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/utils/test_images_ascii.py +0 -0
  866. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/web/test_bundle.py +0 -0
  867. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/web/test_fold_parity.py +0 -0
  868. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/web/test_hosting.py +0 -0
  869. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/web/test_player_live.py +0 -0
  870. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/web/test_player_rendering.py +0 -0
  871. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/web/test_server.py +0 -0
  872. {kolega_code-0.25.0 → kolega_code-0.25.2}/tests/web/test_singlefile.py +0 -0
@@ -6,6 +6,22 @@ This project uses GitHub Releases for detailed generated release notes. This fil
6
6
 
7
7
  ## Unreleased
8
8
 
9
+ ## 0.25.2 - 2026-07-28
10
+
11
+ ### Fixed
12
+
13
+ - Downscaled outbound image copies to satisfy Anthropic's per-image dimensions
14
+ and aggregate request-size limit, preventing image-heavy conversations from
15
+ failing later turns while preserving full-resolution history and artifacts.
16
+
17
+ ## 0.25.1 - 2026-07-28
18
+
19
+ ### Fixed
20
+
21
+ - Resized oversized images only in outbound Anthropic request history while
22
+ preserving full originals in session artifacts and replay, preventing one
23
+ large image from breaking every later turn in a resumed conversation.
24
+
9
25
  ## 0.25.0 - 2026-07-28
10
26
 
11
27
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kolega-code
3
- Version: 0.25.0
3
+ Version: 0.25.2
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/
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="114" height="20" role="img" aria-label="coverage: 82.37%"><title>coverage: 82.37%</title><filter id="blur"><feGaussianBlur stdDeviation="16"/></filter><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="114" height="20" rx="3"/></clipPath><g clip-path="url(#r)"><rect width="61" height="20" fill="#555"/><rect x="61" width="53" height="20" fill="#67ac09"/><rect width="114" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><g transform="scale(.1)"><g aria-hidden="true" fill="#010101"><text x="315" y="150" fill-opacity=".8" filter="url(#blur)" textLength="510">coverage</text><text x="315" y="150" fill-opacity=".3" textLength="510">coverage</text></g><text x="315" y="140" textLength="510">coverage</text></g><g transform="scale(.1)"><g aria-hidden="true" fill="#010101"><text x="865" y="150" fill-opacity=".8" filter="url(#blur)" textLength="430">82.37%</text><text x="865" y="150" fill-opacity=".3" textLength="430">82.37%</text></g><text x="865" y="140" textLength="430">82.37%</text></g></g></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="114" height="20" role="img" aria-label="coverage: 82.41%"><title>coverage: 82.41%</title><filter id="blur"><feGaussianBlur stdDeviation="16"/></filter><linearGradient id="s" x2="0" y2="100%"><stop offset="0" stop-color="#bbb" stop-opacity=".1"/><stop offset="1" stop-opacity=".1"/></linearGradient><clipPath id="r"><rect width="114" height="20" rx="3"/></clipPath><g clip-path="url(#r)"><rect width="61" height="20" fill="#555"/><rect x="61" width="53" height="20" fill="#67ac09"/><rect width="114" height="20" fill="url(#s)"/></g><g fill="#fff" text-anchor="middle" font-family="Verdana,Geneva,DejaVu Sans,sans-serif" text-rendering="geometricPrecision" font-size="110"><g transform="scale(.1)"><g aria-hidden="true" fill="#010101"><text x="315" y="150" fill-opacity=".8" filter="url(#blur)" textLength="510">coverage</text><text x="315" y="150" fill-opacity=".3" textLength="510">coverage</text></g><text x="315" y="140" textLength="510">coverage</text></g><g transform="scale(.1)"><g aria-hidden="true" fill="#010101"><text x="865" y="150" fill-opacity=".8" filter="url(#blur)" textLength="430">82.41%</text><text x="865" y="150" fill-opacity=".3" textLength="430">82.41%</text></g><text x="865" y="140" textLength="430">82.41%</text></g></g></svg>
@@ -151,4 +151,4 @@ __all__ = [
151
151
  "parse_git_status_output",
152
152
  ]
153
153
 
154
- __version__ = "0.25.0"
154
+ __version__ = "0.25.2"
@@ -51,4 +51,4 @@ __all__ = [
51
51
  "ToolExtension",
52
52
  ]
53
53
 
54
- __version__ = "0.25.0"
54
+ __version__ = "0.25.2"
@@ -23,6 +23,7 @@ from kolega_code.llm.models import (
23
23
  ToolCall,
24
24
  ToolResult,
25
25
  )
26
+ from kolega_code.utils import images as image_utils
26
27
  from kolega_code.agent.tool_backend.hashline_v2 import strip_hashline_read_output
27
28
 
28
29
  logger = logging.getLogger(__name__)
@@ -33,18 +34,117 @@ def _image_placeholder(media_type: str, model_name: str) -> str:
33
34
  return f"[An image ({media_type}) was shared earlier in this thread but is not visible to {model_name}.]"
34
35
 
35
36
 
36
- def count_image_blocks(messages: List[Message]) -> int:
37
- """Count ``ImageBlock`` instances across messages, including ones nested in tool results."""
37
+ def _oversized_image_placeholder(media_type: str, model_name: str) -> str:
38
+ """Text substituted when a provider-safe image derivative cannot be made."""
39
+ return (
40
+ f"[An earlier image ({media_type}) exceeded {model_name}'s request limit and could not be resized safely, "
41
+ "so it was omitted from this request.]"
42
+ )
43
+
44
+
45
+ def _adapt_image_block_for_provider(
46
+ block: ImageBlock,
47
+ *,
48
+ target_provider: str,
49
+ target_model: str,
50
+ supports_vision: bool,
51
+ max_image_dimension: Optional[int],
52
+ max_image_base64_bytes: int,
53
+ ) -> tuple[ContentBlock, bool]:
54
+ """Return a request-safe image block without mutating stored history."""
55
+ if not supports_vision:
56
+ return TextBlock(text=_image_placeholder(block.media_type, target_model)), True
57
+
58
+ if target_provider != "anthropic" or block.image_type != "base64":
59
+ return block, False
60
+
61
+ result = image_utils.resize_base64_image_to_limit(
62
+ block.data,
63
+ block.media_type,
64
+ max_base64_bytes=max_image_base64_bytes,
65
+ max_dimension=max_image_dimension,
66
+ )
67
+ if not result.succeeded:
68
+ logger.warning(
69
+ "Omitting oversized Anthropic history image that could not be resized: %s",
70
+ result.error or "unknown image conversion error",
71
+ )
72
+ return (
73
+ TextBlock(
74
+ text=_oversized_image_placeholder(block.media_type, target_model),
75
+ cache_checkpoint=block.cache_checkpoint,
76
+ ),
77
+ True,
78
+ )
79
+ if not result.resized:
80
+ return block, False
81
+
82
+ assert result.data is not None
83
+ assert result.media_type is not None
84
+ logger.info(
85
+ "Resized Anthropic history image from %d to %d base64 bytes",
86
+ len(block.data),
87
+ len(result.data),
88
+ )
89
+ return (
90
+ ImageBlock(
91
+ image_type="base64",
92
+ media_type=result.media_type,
93
+ data=result.data,
94
+ cache_checkpoint=block.cache_checkpoint,
95
+ ),
96
+ True,
97
+ )
98
+
99
+
100
+ def _image_block_stats(messages: List[Message]) -> tuple[int, List[int]]:
101
+ """Return total image count and base64 lengths, including nested tool results."""
38
102
  count = 0
103
+ base64_sizes: List[int] = []
39
104
  for message in messages:
40
105
  if not isinstance(message.content, list):
41
106
  continue
42
107
  for block in message.content:
43
108
  if isinstance(block, ImageBlock):
44
109
  count += 1
110
+ if block.image_type == "base64":
111
+ base64_sizes.append(len(block.data))
45
112
  elif isinstance(block, ToolResult) and isinstance(block.content, list):
46
- count += sum(1 for inner in block.content if isinstance(inner, ImageBlock))
47
- return count
113
+ for inner in block.content:
114
+ if isinstance(inner, ImageBlock):
115
+ count += 1
116
+ if inner.image_type == "base64":
117
+ base64_sizes.append(len(inner.data))
118
+ return count, base64_sizes
119
+
120
+
121
+ def count_image_blocks(messages: List[Message]) -> int:
122
+ """Count ``ImageBlock`` instances across messages, including ones nested in tool results."""
123
+ return _image_block_stats(messages)[0]
124
+
125
+
126
+ def _anthropic_image_base64_limit(base64_sizes: List[int]) -> int:
127
+ """Return a shared per-image cap that keeps aggregate image data request-safe.
128
+
129
+ Images already below the shared cap remain byte-for-byte unchanged. Larger
130
+ images divide the remaining aggregate budget evenly after accounting for
131
+ those smaller images, avoiding unnecessary reductions when the request
132
+ already fits.
133
+ """
134
+ per_image_limit = image_utils.ANTHROPIC_MAX_IMAGE_BASE64_BYTES
135
+ aggregate_limit = image_utils.ANTHROPIC_MAX_REQUEST_IMAGE_BASE64_BYTES
136
+ projected_sizes = sorted(min(size, per_image_limit) for size in base64_sizes)
137
+ if sum(projected_sizes) <= aggregate_limit:
138
+ return per_image_limit
139
+
140
+ remaining_budget = aggregate_limit
141
+ for index, size in enumerate(projected_sizes):
142
+ remaining_images = len(projected_sizes) - index
143
+ shared_limit = remaining_budget // remaining_images
144
+ if size > shared_limit:
145
+ return max(4, min(per_image_limit, shared_limit))
146
+ remaining_budget -= size
147
+ return per_image_limit
48
148
 
49
149
 
50
150
  def _provider_value(provider: Any) -> str:
@@ -199,6 +299,8 @@ def _adapt_content_blocks_for_provider(
199
299
  target_provider: str,
200
300
  target_model: str,
201
301
  supports_vision: bool,
302
+ max_image_dimension: Optional[int] = None,
303
+ max_image_base64_bytes: int = image_utils.ANTHROPIC_MAX_IMAGE_BASE64_BYTES,
202
304
  target_edit_protocol: Optional[str] = None,
203
305
  tool_call_providers: Optional[Dict[str, str]] = None,
204
306
  tool_call_protocols: Optional[Dict[str, Optional[str]]] = None,
@@ -209,9 +311,17 @@ def _adapt_content_blocks_for_provider(
209
311
  changed = False
210
312
 
211
313
  for block in blocks:
212
- if isinstance(block, ImageBlock) and not supports_vision:
213
- adapted.append(TextBlock(text=_image_placeholder(block.media_type, target_model)))
214
- changed = True
314
+ if isinstance(block, ImageBlock):
315
+ adapted_block, image_changed = _adapt_image_block_for_provider(
316
+ block,
317
+ target_provider=target_provider,
318
+ target_model=target_model,
319
+ supports_vision=supports_vision,
320
+ max_image_dimension=max_image_dimension,
321
+ max_image_base64_bytes=max_image_base64_bytes,
322
+ )
323
+ adapted.append(adapted_block)
324
+ changed = changed or image_changed
215
325
  elif isinstance(block, (ThinkingBlock, RedactedThinkingBlock, ResponsesReasoningBlock)):
216
326
  if _preserve_reasoning_block(block, source_provider=source_provider, target_provider=target_provider):
217
327
  adapted.append(block)
@@ -240,7 +350,26 @@ def _adapt_content_blocks_for_provider(
240
350
  source_edit_protocol=call_protocol,
241
351
  target_edit_protocol=target_edit_protocol,
242
352
  ):
243
- adapted.append(block)
353
+ if isinstance(block.content, list):
354
+ inner, inner_changed = _adapt_content_blocks_for_provider(
355
+ block.content,
356
+ source_provider=source_provider,
357
+ target_provider=target_provider,
358
+ target_model=target_model,
359
+ supports_vision=supports_vision,
360
+ max_image_dimension=max_image_dimension,
361
+ max_image_base64_bytes=max_image_base64_bytes,
362
+ target_edit_protocol=target_edit_protocol,
363
+ tool_call_providers=tool_call_providers,
364
+ tool_call_protocols=tool_call_protocols,
365
+ source_usage_metadata=source_usage_metadata,
366
+ # Nested tool-result content is tool output, never assistant prose.
367
+ message_role=None,
368
+ )
369
+ adapted.append(_tool_result_with_content(block, inner) if inner_changed else block)
370
+ changed = changed or inner_changed
371
+ else:
372
+ adapted.append(block)
244
373
  else:
245
374
  adapted.append(_freeform_result_placeholder(block, call_source))
246
375
  changed = True
@@ -271,6 +400,8 @@ def _adapt_content_blocks_for_provider(
271
400
  target_provider=target_provider,
272
401
  target_model=target_model,
273
402
  supports_vision=supports_vision,
403
+ max_image_dimension=max_image_dimension,
404
+ max_image_base64_bytes=max_image_base64_bytes,
274
405
  target_edit_protocol=target_edit_protocol,
275
406
  tool_call_providers=tool_call_providers,
276
407
  tool_call_protocols=tool_call_protocols,
@@ -315,8 +446,9 @@ def adapt_history_for_provider(
315
446
  blocks — substituting model-visible text there gets echoed back by the model
316
447
  and then persisted as real history. Assistant text carrying placeholders
317
448
  echoed by earlier builds is scrubbed for the same reason. Image blocks are
318
- preserved for vision models and replaced with placeholders for non-vision
319
- models, matching the previous image compatibility behavior.
449
+ preserved for vision models, except that oversized base64 images get an
450
+ ephemeral provider-safe derivative for Anthropic. Non-vision models receive
451
+ placeholders, matching the previous image compatibility behavior.
320
452
 
321
453
  An assistant message left with no content blocks is omitted from the returned
322
454
  history. That orphans nothing: tool calls are never dropped by this pass, so
@@ -327,6 +459,16 @@ def adapt_history_for_provider(
327
459
  target_provider = _provider_value(target_provider)
328
460
  if target_edit_protocol is not None:
329
461
  target_edit_protocol = _provider_value(target_edit_protocol)
462
+ max_image_dimension: Optional[int] = None
463
+ max_image_base64_bytes = image_utils.ANTHROPIC_MAX_IMAGE_BASE64_BYTES
464
+ if target_provider == "anthropic" and supports_vision:
465
+ image_count, base64_sizes = _image_block_stats(messages)
466
+ max_image_dimension = (
467
+ image_utils.ANTHROPIC_MANY_IMAGE_MAX_DIMENSION
468
+ if image_count > image_utils.ANTHROPIC_MANY_IMAGE_THRESHOLD
469
+ else image_utils.ANTHROPIC_MAX_IMAGE_DIMENSION
470
+ )
471
+ max_image_base64_bytes = _anthropic_image_base64_limit(base64_sizes)
330
472
  result: List[Message] = []
331
473
  changed_any = False
332
474
  tool_call_providers: Dict[str, str] = {}
@@ -351,6 +493,8 @@ def adapt_history_for_provider(
351
493
  target_provider=target_provider,
352
494
  target_model=target_model,
353
495
  supports_vision=supports_vision,
496
+ max_image_dimension=max_image_dimension,
497
+ max_image_base64_bytes=max_image_base64_bytes,
354
498
  target_edit_protocol=target_edit_protocol,
355
499
  tool_call_providers=tool_call_providers,
356
500
  tool_call_protocols=tool_call_protocols,
@@ -0,0 +1,309 @@
1
+ """Shared image-encoding and MIME helpers for vision support.
2
+
3
+ Used by the CLI attachment paths (@-mention detection, ``/attach`` slash
4
+ command, clipboard paste, the ``ask --image`` flag) and by the agent
5
+ ``read_image`` tool backend. Keeping the MIME map and base64 encoding in one
6
+ place avoids three copies of the logic and CLI<->agent import cycles.
7
+
8
+ ``ascii_thumbnail_from_base64`` is the display-only renderer used by
9
+ ``ImageBlock.to_markdown`` so that expanding an image tool call in the TUI
10
+ shows a small ASCII-art preview instead of a wall of base64.
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ import base64
16
+ import io
17
+ import math
18
+ from dataclasses import dataclass
19
+ from pathlib import Path
20
+ from typing import Any, Dict, Optional, Union
21
+
22
+ from PIL import Image, ImageOps
23
+
24
+ # Supported image extensions -> MIME types. These are the common web image
25
+ # formats accepted by all four provider backends (Anthropic, OpenAI, Google,
26
+ # ChatGPT/Responses).
27
+ IMAGE_MIME_TYPES: Dict[str, str] = {
28
+ ".png": "image/png",
29
+ ".jpg": "image/jpeg",
30
+ ".jpeg": "image/jpeg",
31
+ ".gif": "image/gif",
32
+ ".webp": "image/webp",
33
+ ".bmp": "image/bmp",
34
+ }
35
+
36
+ # Skip images larger than this to avoid blowing the context budget.
37
+ MAX_IMAGE_BYTES = 20 * 1024 * 1024
38
+
39
+ # Anthropic validates the encoded ``source.base64`` field itself, not the
40
+ # decoded image size. A raw image just under 10 MiB may therefore exceed this
41
+ # limit after base64's 4/3 expansion.
42
+ ANTHROPIC_MAX_IMAGE_BASE64_BYTES = 10 * 1024 * 1024
43
+ # Anthropic accepts images up to 8,000 px on either axis for ordinary
44
+ # requests. Once the request contains more than 20 images, every image must
45
+ # instead fit within 2,000 x 2,000 px.
46
+ ANTHROPIC_MAX_IMAGE_DIMENSION = 8_000
47
+ ANTHROPIC_MANY_IMAGE_THRESHOLD = 20
48
+ ANTHROPIC_MANY_IMAGE_MAX_DIMENSION = 2_000
49
+ # Anthropic rejects standard API requests above 32 MB. Keep aggregate base64
50
+ # image data at 24 MiB so JSON, system prompts, tools, and text history retain
51
+ # substantial request headroom.
52
+ ANTHROPIC_MAX_REQUEST_IMAGE_BASE64_BYTES = 24 * 1024 * 1024
53
+
54
+ # Leave headroom below the provider's hard boundary when producing a
55
+ # derivative. This avoids repeatedly re-encoding an image for tiny accounting
56
+ # differences and gives later request serialization a conservative margin.
57
+ _IMAGE_RESIZE_SAFETY_RATIO = 0.95
58
+ _IMAGE_RESIZE_MAX_ATTEMPTS = 12
59
+ # Bound decoded working memory before Pillow copies/converts a provider
60
+ # derivative. Forty megapixels can already require 160 MiB as RGBA.
61
+ _IMAGE_RESIZE_MAX_PIXELS = 40_000_000
62
+
63
+ # Dark -> light ramp for grayscale ASCII rendering. Index 0 (space) is the
64
+ # darkest pixel; the last char (``@``) is the brightest.
65
+ _ASCII_RAMP = " .:-=+*#%@"
66
+
67
+
68
+ @dataclass(frozen=True)
69
+ class ImageResizeResult:
70
+ """Result of fitting a base64 image to a provider payload limit."""
71
+
72
+ data: Optional[str]
73
+ media_type: Optional[str]
74
+ resized: bool
75
+ error: Optional[str] = None
76
+
77
+ @property
78
+ def succeeded(self) -> bool:
79
+ return self.data is not None and self.media_type is not None
80
+
81
+
82
+ def base64_encoded_size(raw_size: int) -> int:
83
+ """Return the exact base64 length for ``raw_size`` bytes."""
84
+ if raw_size < 0:
85
+ raise ValueError("raw_size must be non-negative")
86
+ return 4 * ((raw_size + 2) // 3)
87
+
88
+
89
+ def max_raw_size_for_base64_limit(encoded_limit: int) -> int:
90
+ """Return the largest raw byte count whose base64 fits ``encoded_limit``."""
91
+ if encoded_limit < 0:
92
+ raise ValueError("encoded_limit must be non-negative")
93
+ return 3 * (encoded_limit // 4)
94
+
95
+
96
+ def resize_base64_image_to_limit(
97
+ data: str,
98
+ media_type: str,
99
+ *,
100
+ max_base64_bytes: int,
101
+ max_dimension: Optional[int] = None,
102
+ ) -> ImageResizeResult:
103
+ """Return a non-mutating provider-safe derivative of a base64 image.
104
+
105
+ Images already within the byte and optional dimension limits are returned
106
+ byte-for-byte unchanged. Oversized images are decoded and re-encoded as PNG
107
+ when transparency must be retained, or optimized JPEG otherwise.
108
+ Dimensions are reduced proportionally to the requested maximum first, then
109
+ iteratively until the payload has a safety margin below the provider limit.
110
+ Animated images use their first frame for the ephemeral provider copy.
111
+ """
112
+ if max_base64_bytes <= 0:
113
+ raise ValueError("max_base64_bytes must be positive")
114
+ if max_dimension is not None and max_dimension <= 0:
115
+ raise ValueError("max_dimension must be positive")
116
+
117
+ if not data.isascii():
118
+ return ImageResizeResult(None, None, resized=False, error="Image payload is not ASCII base64")
119
+ encoded_size = len(data)
120
+
121
+ # Existing byte-only callers keep the cheap path and never decode a valid
122
+ # image that already fits. A dimension constraint requires reading the
123
+ # image header before the same unchanged decision can be made.
124
+ if encoded_size <= max_base64_bytes and max_dimension is None:
125
+ return ImageResizeResult(data, media_type, resized=False)
126
+
127
+ try:
128
+ raw = base64.b64decode(data, validate=True)
129
+ with Image.open(io.BytesIO(raw)) as opened:
130
+ opened.seek(0)
131
+ width, height = opened.size
132
+ dimensions_fit = max_dimension is None or (width <= max_dimension and height <= max_dimension)
133
+ if encoded_size <= max_base64_bytes and dimensions_fit:
134
+ return ImageResizeResult(data, media_type, resized=False)
135
+ if width * height > _IMAGE_RESIZE_MAX_PIXELS:
136
+ return ImageResizeResult(
137
+ None,
138
+ None,
139
+ resized=False,
140
+ error=f"Image dimensions exceed the {_IMAGE_RESIZE_MAX_PIXELS:,}-pixel resize safety limit",
141
+ )
142
+ image = ImageOps.exif_transpose(opened).copy()
143
+ except Exception as exc:
144
+ return ImageResizeResult(None, None, resized=False, error=f"Could not decode image: {exc}")
145
+
146
+ has_transparency = "A" in image.getbands() or "transparency" in image.info
147
+ if max_dimension is not None and (image.width > max_dimension or image.height > max_dimension):
148
+ image.thumbnail((max_dimension, max_dimension), Image.Resampling.LANCZOS)
149
+
150
+ if has_transparency:
151
+ image = image.convert("RGBA")
152
+ output_format = "PNG"
153
+ output_media_type = "image/png"
154
+ else:
155
+ image = image.convert("RGB")
156
+ output_format = "JPEG"
157
+ output_media_type = "image/jpeg"
158
+
159
+ target_size = int(max_base64_bytes * _IMAGE_RESIZE_SAFETY_RATIO)
160
+ target_size -= target_size % 4
161
+ if target_size < 4:
162
+ return ImageResizeResult(
163
+ None,
164
+ None,
165
+ resized=False,
166
+ error=f"Could not fit image below the {max_base64_bytes}-byte base64 limit",
167
+ )
168
+
169
+ for _ in range(_IMAGE_RESIZE_MAX_ATTEMPTS):
170
+ output = io.BytesIO()
171
+ try:
172
+ if output_format == "PNG":
173
+ image.save(output, format=output_format, optimize=True, compress_level=9)
174
+ else:
175
+ image.save(output, format=output_format, quality=90, optimize=True, progressive=True)
176
+ except Exception as exc:
177
+ return ImageResizeResult(None, None, resized=False, error=f"Could not encode resized image: {exc}")
178
+
179
+ derivative = base64.b64encode(output.getvalue()).decode("ascii")
180
+ if len(derivative) <= target_size:
181
+ return ImageResizeResult(derivative, output_media_type, resized=True)
182
+
183
+ width, height = image.size
184
+ if width <= 1 and height <= 1:
185
+ break
186
+
187
+ # Encoded size trends with pixel area, so the square root estimates a
188
+ # useful one-step dimension ratio. The extra margin guarantees progress
189
+ # when compression ratios are nonlinear.
190
+ ratio = math.sqrt(target_size / len(derivative)) * 0.95
191
+ ratio = min(0.9, max(0.1, ratio))
192
+ next_width = max(1, int(width * ratio))
193
+ next_height = max(1, int(height * ratio))
194
+ if next_width == width and width > 1:
195
+ next_width -= 1
196
+ if next_height == height and height > 1:
197
+ next_height -= 1
198
+ image = image.resize((next_width, next_height), Image.Resampling.LANCZOS)
199
+
200
+ return ImageResizeResult(
201
+ None,
202
+ None,
203
+ resized=False,
204
+ error=f"Could not fit image below the {max_base64_bytes}-byte base64 limit",
205
+ )
206
+
207
+
208
+ def image_media_type(path_or_suffix: Union[str, Path]) -> Optional[str]:
209
+ """Return the MIME type for an image path/suffix, or ``None`` if unsupported.
210
+
211
+ Args:
212
+ path_or_suffix: A file path (e.g. ``"assets/logo.png"``) or a bare
213
+ extension (e.g. ``".png"`` or ``"png"``). Case-insensitive.
214
+ """
215
+ text = str(path_or_suffix).lower()
216
+ if text.startswith("."):
217
+ suffix = text
218
+ else:
219
+ suffix = Path(text).suffix.lower()
220
+ if not suffix: # bare extension like "png" with no dot or path sep
221
+ suffix = f".{text}" if "/" not in text and "\\" not in text else ""
222
+ return IMAGE_MIME_TYPES.get(suffix)
223
+
224
+
225
+ def is_supported_image(path: Union[str, Path]) -> bool:
226
+ """True if ``path`` has a supported image extension."""
227
+ return image_media_type(path) is not None
228
+
229
+
230
+ def encode_image_attachment(data: bytes, media_type: str, *, path: Optional[str] = None) -> Dict[str, Any]:
231
+ """Build an image attachment dict from raw bytes.
232
+
233
+ Args:
234
+ data: Raw image bytes.
235
+ media_type: MIME type (e.g. ``"image/png"``).
236
+ path: Optional source path included for display/debugging.
237
+
238
+ Returns:
239
+ ``{"type": "image", "media_type": ..., "data": "<base64>", ...}`` —
240
+ the shape consumed by ``BaseAgent._attachment_blocks``.
241
+ """
242
+ attachment: Dict[str, Any] = {
243
+ "type": "image",
244
+ "media_type": media_type,
245
+ "data": base64.b64encode(data).decode("ascii"),
246
+ }
247
+ if path:
248
+ attachment["path"] = path
249
+ return attachment
250
+
251
+
252
+ def encode_image_file(path: Union[str, Path]) -> Optional[Dict[str, Any]]:
253
+ """Read, validate, and base64-encode an image file.
254
+
255
+ Returns ``None`` if the path is not a supported image format, the file is
256
+ missing/unreadable, or it exceeds ``MAX_IMAGE_BYTES`` (so callers can fall
257
+ back to a friendly message instead of crashing).
258
+ """
259
+ path = Path(path)
260
+ media_type = image_media_type(path)
261
+ if media_type is None:
262
+ return None
263
+ try:
264
+ if not path.is_file():
265
+ return None
266
+ size = path.stat().st_size
267
+ except OSError:
268
+ return None
269
+ if size > MAX_IMAGE_BYTES:
270
+ return None
271
+ try:
272
+ data = path.read_bytes()
273
+ except OSError:
274
+ return None
275
+ return encode_image_attachment(data, media_type, path=str(path))
276
+
277
+
278
+ def ascii_thumbnail_from_base64(data: str, media_type: str, *, width: int = 40, height: int = 20) -> str:
279
+ """Render a grayscale ASCII-art thumbnail from a base64-encoded image.
280
+
281
+ Decodes the image with Pillow, converts to grayscale, downsamples to
282
+ ``width`` x ``height``, and maps each pixel's brightness to a character
283
+ in ``_ASCII_RAMP`` (dark = space, light = ``@``).
284
+
285
+ Returns the multi-line ASCII string. If the image cannot be decoded
286
+ (corrupt data, unsupported format, etc.), returns a short placeholder
287
+ string instead of raising — a malformed image must never crash the TUI.
288
+ """
289
+ try:
290
+ raw = base64.b64decode(data)
291
+ img = Image.open(io.BytesIO(raw))
292
+ img = img.convert("L").resize((width, height), Image.Resampling.LANCZOS)
293
+ except Exception:
294
+ return f"[Image — {media_type} — could not render preview]"
295
+
296
+ pixels = img.load()
297
+ if pixels is None:
298
+ return f"[Image — {media_type} — could not render preview]"
299
+ ramp_last = len(_ASCII_RAMP) - 1
300
+ lines: list[str] = []
301
+ for y in range(height):
302
+ chars: list[str] = []
303
+ for x in range(width):
304
+ v = pixels[x, y]
305
+ if isinstance(v, tuple):
306
+ v = v[0]
307
+ chars.append(_ASCII_RAMP[int(v) * ramp_last // 255])
308
+ lines.append("".join(chars))
309
+ return "\n".join(lines)
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "kolega-code"
7
- version = "0.25.0"
7
+ version = "0.25.2"
8
8
  description = "Multi-agent coding in the terminal"
9
9
  readme = "README.md"
10
10
  license = {file = "LICENSE"}