kolega-code 0.25.1__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.
- {kolega_code-0.25.1 → kolega_code-0.25.2}/CHANGELOG.md +8 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/PKG-INFO +1 -1
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/assets/coverage.svg +1 -1
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/__init__.py +1 -1
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/__init__.py +1 -1
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/conversation.py +64 -5
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/utils/images.py +27 -4
- {kolega_code-0.25.1 → kolega_code-0.25.2}/pyproject.toml +1 -1
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_base_agent_effective_history.py +34 -17
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_coder_attachments.py +2 -1
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_history_adapter_thinking.py +14 -1
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_history_image_blocks.py +192 -2
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/utils/test_images.py +59 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/uv.lock +2 -2
- {kolega_code-0.25.1 → kolega_code-0.25.2}/.env.example +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/.githooks/pre-commit +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/.github/codeql/codeql-config.yml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/.github/dependabot.yml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/.github/workflows/ci.yml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/.github/workflows/codeql.yml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/.github/workflows/docs.yml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/.github/workflows/release.yml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/.gitignore +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/.pre-commit-config.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/CONTRIBUTING.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/LICENSE +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/MIGRATION.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/README.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/RELEASING.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/SECURITY.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/README.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/__main__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/artifacts.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/authoring.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/browser.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/browser_assets/app.js +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/browser_assets/index.html +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/browser_assets/styles.css +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/corpus.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/authoring-slots.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/licenses/LICENSE +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/manifest.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/tree/cursed_renderer.go +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/tree/exec_test.go +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/tree/go.mod +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/tree/key.go +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/tree/logging.go +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/tree/options.go +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/tree/options_test.go +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/tree/tea.go +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/tree/tea_test.go +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/bubbletea-fc707bb7ea01/tree/tty.go +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/licenses/LICENSE-APACHE +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/licenses/LICENSE-MIT +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/manifest.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/tree/clap_builder/Cargo.toml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/tree/clap_builder/src/builder/arg.rs +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/tree/clap_builder/src/builder/arg_group.rs +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/tree/clap_builder/src/builder/value_parser.rs +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/tree/clap_builder/src/derive.rs +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/tree/clap_builder/src/error/context.rs +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/tree/clap_builder/src/error/mod.rs +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/tree/clap_builder/src/output/help_template.rs +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/tree/clap_builder/src/parser/matches/arg_matches.rs +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/clap-4a35e3bcabf7/tree/clap_builder/src/parser/parser.rs +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/licenses/LICENSE.txt +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/manifest.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/tree/pyproject.toml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/tree/src/click/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/tree/src/click/_termui_impl.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/tree/src/click/_winconsole.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/tree/src/click/core.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/tree/src/click/exceptions.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/tree/src/click/globals.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/tree/src/click/termui.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/tree/src/click/types.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/click-b67832c2167e/tree/src/click/utils.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/licenses/LICENSE +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/manifest.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/tree/lib/request.js +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/tree/package.json +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/tree/test/Router.js +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/tree/test/acceptance/resource.js +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/tree/test/app.options.js +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/tree/test/app.render.js +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/tree/test/app.router.js +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/tree/test/express.static.js +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/express-ae6dd37680e3/tree/test/express.text.js +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/licenses/LICENSE +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/manifest.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/tree/CMakeLists.txt +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/tree/include/fmt/base.h +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/tree/include/fmt/chrono.h +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/tree/include/fmt/format-inl.h +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/tree/include/fmt/format.h +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/tree/include/fmt/os.h +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/tree/include/fmt/ranges.h +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/tree/include/fmt/std.h +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/fmt-a79df4504cd4/tree/src/fmt.cc +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/gson-c9f3fd55854a/licenses/LICENSE +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/gson-c9f3fd55854a/manifest.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/gson-c9f3fd55854a/tree/gson/pom.xml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/gson-c9f3fd55854a/tree/gson/src/main/java/com/google/gson/FormattingStyle.java +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/gson-c9f3fd55854a/tree/gson/src/main/java/com/google/gson/Gson.java +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/gson-c9f3fd55854a/tree/gson/src/main/java/com/google/gson/GsonBuilder.java +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/gson-c9f3fd55854a/tree/gson/src/main/java/com/google/gson/JsonElement.java +0 -0
- {kolega_code-0.25.1 → 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
- {kolega_code-0.25.1 → 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
- {kolega_code-0.25.1 → 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
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/gson-c9f3fd55854a/tree/gson/src/main/java/module-info.java +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/licenses/LICENSE.txt +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/manifest.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/tree/build.gradle.kts +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/tree/okhttp/src/commonJvmAndroid/kotlin/okhttp3/CipherSuite.kt +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/tree/okhttp/src/commonJvmAndroid/kotlin/okhttp3/Headers.kt +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/tree/okhttp/src/commonJvmAndroid/kotlin/okhttp3/MultipartBody.kt +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/tree/okhttp/src/commonJvmAndroid/kotlin/okhttp3/MultipartReader.kt +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/tree/okhttp/src/commonJvmAndroid/kotlin/okhttp3/OkHttpClient.kt +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/tree/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Http2Connection.kt +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/tree/okhttp/src/commonJvmAndroid/kotlin/okhttp3/internal/http2/Settings.kt +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/okhttp-6a237f781144/tree/okhttp/src/jvmMain/kotlin/okhttp3/internal/platform/Jdk8WithJettyBootPlatform.kt +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/licenses/MIT-LICENSE +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/manifest.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/tree/lib/rake/application.rb +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/tree/lib/rake/file_list.rb +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/tree/lib/rake/file_utils.rb +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/tree/lib/rake/file_utils_ext.rb +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/tree/lib/rake/loaders/makefile.rb +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/tree/lib/rake/rake_test_loader.rb +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/tree/lib/rake/task.rb +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/tree/lib/rake/task_manager.rb +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/rake-162f9f80cad8/tree/rake.gemspec +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/licenses/LICENSE.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/manifest.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/tree/src/Spectre.Console/Live/LiveDisplay.cs +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/tree/src/Spectre.Console/Spectre.Console.csproj +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/tree/src/Spectre.Console/Widgets/Layout/Layout.cs +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/tree/src/Spectre.Console/Widgets/Markup.cs +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/tree/src/Spectre.Console/Widgets/Table/Table.cs +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/tree/src/Spectre.Console/Widgets/Table/TableColumn.cs +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/tree/src/Spectre.Console.Ansi/AnsiMarkup.cs +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/tree/src/Spectre.Console.Ansi/AnsiWriter.cs +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/spectre-console-3ba102309539/tree/src/Spectre.Console.Ansi/Utilities/StringBuffer.cs +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/licenses/LICENSE.txt +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/manifest.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/tree/Package.swift +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/tree/Sources/ArgumentParser/Completions/BashCompletionsGenerator.swift +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/tree/Sources/ArgumentParser/Completions/ZshCompletionsGenerator.swift +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/tree/Sources/ArgumentParser/Parsable Properties/Flag.swift +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/tree/Sources/ArgumentParser/Parsing/ArgumentDefinition.swift +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/tree/Sources/ArgumentParser/Parsing/ArgumentSet.swift +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/tree/Sources/ArgumentParser/Parsing/ParserError.swift +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/tree/Sources/ArgumentParser/Usage/DumpHelpGenerator.swift +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/swift-argument-parser-e579882f9557/tree/Sources/ArgumentParser/Utilities/SequenceExtensions.swift +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/licenses/LICENSE +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/manifest.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/tree/Application.php +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/tree/Descriptor/JsonDescriptor.php +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/tree/Helper/ProgressBar.php +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/tree/Helper/SymfonyQuestionHelper.php +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/tree/Helper/Table.php +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/tree/Helper/TableStyle.php +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/tree/Interaction/Interaction.php +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/tree/Style/SymfonyStyle.php +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/symfony-console-9df1ce79867b/tree/composer.json +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/licenses/LICENSE +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/manifest.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/tree/packages/zod/package.json +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/tree/packages/zod/src/v3/types.ts +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/tree/packages/zod/src/v4/classic/schemas.ts +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/tree/packages/zod/src/v4/core/checks.ts +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/tree/packages/zod/src/v4/core/errors.ts +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/tree/packages/zod/src/v4/core/json-schema-processors.ts +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/tree/packages/zod/src/v4/core/regexes.ts +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/tree/packages/zod/src/v4/core/schemas.ts +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/tree/packages/zod/src/v4/core/util.ts +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/snapshots/zod-912f0f51b0ce/tree/packages/zod/src/v4/mini/schemas.ts +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/fixtures/sources.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/matrices/deepseek-v4.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/matrices/example.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/matrices/validity-slice.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/models.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/protocols.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/recipes.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/report.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/runner.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/scoring.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/suites/coder-agent.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/suites/core.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/suites/corpora/edit-core.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/suites/fixtures/smoke-tasks.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/suites/smoke.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/usage.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/verifier/Dockerfile +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/verifier/toolchains.lock.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/benchmarks/edit_tools/workspace.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/.gitignore +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/README.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/astro.config.mjs +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/package-lock.json +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/package.json +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/public/favicon.svg +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/assets/demo.gif +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/assets/kolega-dark.svg +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/assets/kolega-light.svg +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/cli/ask.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/cli/doctor.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/cli/overview.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/cli/sessions.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/cli/share.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/concepts/agents.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/concepts/how-it-works.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/concepts/tools.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/configuration/environment-variables.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/configuration/lsp.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/configuration/mcp.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/configuration/prompt-overrides.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/configuration/providers-and-models.mdx +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/configuration/settings-and-api-keys.mdx +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/configuration/sign-in-with-chatgpt.mdx +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/custom-agents.mdx +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/getting-started/installation.mdx +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/getting-started/quick-start.mdx +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/gigacode.mdx +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/goal.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/hooks.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/index.mdx +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/loop.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/skills.mdx +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/troubleshooting/diagnostics.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/troubleshooting/terminal-tmux.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/tui/composer.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/tui/interface.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/tui/modes.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/tui/project-memory.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/tui/scratchpad.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/tui/sessions-and-resume.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content/docs/tui/slash-commands.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/content.config.ts +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/src/styles/brand.css +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/docs/tsconfig.json +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/LICENSE +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/manifest.json +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/docx/LICENSE +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/docx/SKILL.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/docx/references/examples.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/docx/references/limitations.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/docx/references/operations.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/docx/references/quality.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/docx/requirements.txt +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/docx/scripts/docx_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/docx/scripts/smoke_test.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/LICENSE +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/SKILL.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/references/examples.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/references/limitations.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/references/ocr.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/references/operations.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/references/quality.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/references/redaction.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-paddle.txt +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-surya.txt +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/requirements.txt +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/scripts/pdf_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pdf/scripts/smoke_test.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pptx/LICENSE +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pptx/SKILL.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pptx/references/examples.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pptx/references/limitations.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pptx/references/operations.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pptx/requirements.txt +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pptx/scripts/pptx_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/pptx/scripts/smoke_test.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/review/SKILL.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/review/references/github-publishing.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/skill-authoring/SKILL.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/skill-authoring/references/review-checklist.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/xlsx/LICENSE +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/xlsx/SKILL.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/xlsx/references/examples.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/xlsx/references/limitations.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/xlsx/references/operations.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/xlsx/references/quality.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/xlsx/requirements.txt +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/xlsx/scripts/smoke_test.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/_bundled_skills/skills/xlsx/scripts/xlsx_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/baseagent.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/browseragent.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/coder.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/common.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/compression.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/context.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/custom_agents.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/edit_protocols.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/errors.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/eval/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/eval/bridge.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/eval/bundle-requirements.in +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/eval/bundle-requirements.txt +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/eval/env.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/eval/js_kernel.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/eval/kernel.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/eval/prelude.js +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/eval/prelude.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/eval/protocol.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/eval/py_kernel.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/eval/runner.js +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/eval/runner.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/generalagent.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/goal.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/investigationagent.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/model_routing.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/orchestration/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/orchestration/accounting.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/orchestration/budget.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/orchestration/context.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/orchestration/errors.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/orchestration/executor.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/orchestration/guide.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/orchestration/journal.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/orchestration/runtime.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/orchestration/types.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/planningagent.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_dump.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_overrides.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_provider.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/auxiliary/tools/think_hard.system.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/extensions/cli/build_questions.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/extensions/cli/current_plan_artifact.md.j2 +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/extensions/cli/scratchpad.md.j2 +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list_readonly.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/prompts.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/agent_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/base_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/browser_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/build_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/codex_patch.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/edit_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/eval_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/glob_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/hashline_v2.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/list_directory_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/lsp_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/read_file_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/read_image_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/search_backends/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/search_backends/tavily.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/search_codebase_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/snapshot_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/terminal_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/think_hard_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/web_fetch/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/web_fetch/answering.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/web_fetch/documents.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/web_fetch/extractors.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/web_fetch/pipeline.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/web_fetch/retrieval.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/web_fetch_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/web_search_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/tools.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/agent/utils/commands.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/auth/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/auth/_jwt.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/auth/chatgpt_oauth.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/auth/constants.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/auth/tokens.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/app.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/clipboard_image.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/config.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/connection.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/cron.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/diagnostics.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/file_index.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/goal.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/loop.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/main.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/mentions.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/messages.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/model_connection.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/plan_artifacts.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/provider_registry.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/session_event_store.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/session_journal.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/session_store.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/settings.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/skills.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/slash_commands.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/theme.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/tui/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/tui/agent_runtime.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/tui/app_base.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/tui/changes_screen.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/tui/command_handlers.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/tui/constants.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/tui/loop_runtime.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/tui/memory_screen.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/tui/onboarding_screen.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/tui/prompt_flows.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/tui/session_diff.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/tui/settings_panel.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/tui/settings_screen.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/tui/state.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/tui/status_dashboard.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/tui/styles.tcss +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/tui/sub_agent_screen.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/tui/terminal_display.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/tui/transcript.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/tui/widgets.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/cli/updater.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/config.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/events.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/git_env.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/hooks/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/hooks/backends.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/hooks/config.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/hooks/dispatcher.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/hooks/events.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/hooks/matcher.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/hooks/outcome.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/client.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/exceptions.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/instrumented_client.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/models.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/providers/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/providers/anthropic.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/providers/base.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/providers/google.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/providers/models.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/providers/openai.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/providers/openai_responses.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/providers/responses_common.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/ratelimit.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/specs/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/specs/accessors.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/anthropic.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/dashscope.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/deepseek.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/fireworks.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/google.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/kimi_coding.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/moonshot.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/ollama_cloud.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/openai.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/openai_chatgpt.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/together.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/xai.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/specs/catalog/zai.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/specs/thinking.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/specs/types.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/timeouts.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/llm/tool_execution_ids.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/local_state.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/mcp/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/mcp/config.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/mcp/oauth.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/mcp/service.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/mcp/state.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/mcp/tools.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/mcp/transport.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/memory/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/memory/identity.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/memory/manager.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/memory/manifest.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/memory/markdown.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/memory/models.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/memory/protocol.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/memory/registry.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/models/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/models/sandbox_terminal_state.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/permissions.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/runtime.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/sandbox/README.md +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/sandbox/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/sandbox/async_filesystem.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/sandbox/base.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/sandbox/browser.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/sandbox/event_loop.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/sandbox/filesystem.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/sandbox/local.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/sandbox/serializer.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/sandbox/terminal.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/sandbox/utils.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/scratchpad.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/security/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/security/secrets.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/services/base.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/services/browser.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/services/file_system.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/services/html.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/services/lsp/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/services/lsp/client.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/services/lsp/config.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/services/lsp/detector.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/services/lsp/diagnostics.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/services/lsp/edits.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/services/lsp/manager.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/services/lsp/registry.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/services/lsp/registry.yaml +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/services/snapshots.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/services/terminal.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/services/terminal_buffer.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/services/workspace_scan.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/session/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/session/control.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/session/inmemory.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/session/projection.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/session/recording.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/session/runtime.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/session/store.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/testing/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/testing/store_conformance.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/tools/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/tools/core.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/tools/definitions.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/tools/registry.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/utils/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/web/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/web/assets/fold.js +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/web/assets/player.css +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/web/assets/player.html +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/web/assets/player.js +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/web/bundle.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/web/hosting.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/web/redaction.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/web/server.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/web/singlefile.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/web/theme_css.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/kolega_code/worktrees.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/run_tests.sh +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/scripts/bench_hotpaths.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/scripts/bench_web_fetch.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/scripts/check-dev-hooks.sh +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/scripts/check_no_host_internals.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/scripts/count_loc.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/scripts/install-kolega-code.sh +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/scripts/setup-dev.sh +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/scripts/sync_bundled_skills.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/scripts/verify_bundled_skill_artifacts.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/compaction_helpers.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/conftest.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/eval/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/eval/test_bridge.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/eval/test_bundle_requirements.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/eval/test_env.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/eval/test_env_provisioning.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/eval/test_js_kernel.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/eval/test_protocol.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/eval/test_py_kernel.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/_token_counting_utils.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_anthropic_local_token_counting_incremental.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_anthropic_token_counting.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_billing_openai_cache.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_chatgpt_live.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_chatgpt_oauth_auth_config.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_chatgpt_oauth_conversion.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_chatgpt_oauth_provider.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_chatgpt_oauth_provider_generate.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_chatgpt_oauth_streaming.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_client.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_client_live.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_client_runtime.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_dashscope_mapping.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_edit_protocol_resolution.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_error_boundary.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_exceptions.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_freeform_tools.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_freeform_tools_live.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_google_provider.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_google_thought_signature.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_google_tool_signature_live.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_instrumented_client.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_instrumented_client_integration.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_instrumented_client_stream.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_langfuse_normalization.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_live_providers.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_message_conversion.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_model_specs.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_openai_cached_tokens.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_openai_cached_tokens_stream.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_openai_message_conversion.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_openai_reasoning_replay.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_openai_responses_provider.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_openai_sdk_compatibility.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_openai_stream_accumulation.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_openai_token_counting.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_openai_token_counting_incremental.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_provider_usage_mapping.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_streaming_timeouts.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_supports_vision.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_thinking_effort.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_tool_execution_ids.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/llm/test_xai_prompt_cache_header.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/orchestration/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/orchestration/test_accounting.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/orchestration/test_orchestration.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/services/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/services/test_browser.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/services/test_browser_console_logs.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/services/test_browser_content.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/services/test_browser_integration.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/services/test_browser_parity.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/services/test_file_system.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/services/test_file_system_integration.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/services/test_file_system_path.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/services/test_local_file_system.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/services/test_sandbox_terminal_input.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/services/test_terminal.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/services/test_terminal_buffer.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/services/test_terminal_state_serializer.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_agent_tools_inventory.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_base_agent.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_base_agent_anthropic_history_validation.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_base_agent_compaction.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_base_agent_history_serialization.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_base_agent_prompt_context.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_base_agent_queued_injection.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_base_agent_role_overrides.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_base_agent_runtime.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_base_agent_tool_call_repair.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_base_agent_tool_call_repair_integration.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_base_agent_tool_execution.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_coder_prompt_extensions.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_commands.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_compaction_integration.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_compaction_persistence.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_compaction_subagent.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_compaction_tui_events.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_compress_command.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_compression.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_conversation_compaction.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_custom_agents.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_duplicate_tool_results.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_edit_protocol_tools.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_empty_message_handling.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_event_emitter.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_general_agent.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_gigacode_gating.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_goal.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_goal_evaluate.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_hooks_integration.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_html.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_image_compat.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_model_routing.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_parallel_tool_calls.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_permissions.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_planning_agent.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_prompt_dump.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_prompt_overrides.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_prompt_provider.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_prompts.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_read_image_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_scratchpad.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_tool_collection_builtin_dispatch.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_tool_collection_config.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_tool_collection_extensions.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_tool_collection_initialization.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_tool_collection_memory.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_tool_registry.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_tools.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/test_worktrees.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_agent_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_base_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_browser_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_build_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_claude_edit.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_codex_apply_patch.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_edit_preview.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_edit_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_eval_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_glob_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_glob_tool_sandbox_parity.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_hashline_v2.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_list_directory_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_lsp_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_read_file_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_search_codebase_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_snapshot_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_terminal_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_think_hard_integration.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_think_hard_streaming.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_think_hard_streaming_content.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_think_hard_streaming_errors.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_think_hard_streaming_updates.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_web_fetch_answering.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_web_fetch_pipeline.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_web_fetch_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_web_search_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/agent/tool_backend/test_workflow_tool.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/auth/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/auth/test_chatgpt_oauth.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/auth/test_tokens.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/benchmarks/test_edit_benchmark_browser.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/benchmarks/test_edit_benchmark_corpus.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/benchmarks/test_edit_benchmark_protocols.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/benchmarks/test_edit_benchmark_providers.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/benchmarks/test_edit_benchmark_recipes.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/benchmarks/test_edit_benchmark_report.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/benchmarks/test_edit_benchmark_runner.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/benchmarks/test_edit_benchmark_scoring.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/benchmarks/test_edit_benchmark_workspace.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/benchmarks/test_live_edit_benchmark_providers.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/_app_test_utils.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_agent_wiring.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_bootstrap_settings.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_changes_inspector.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_compaction_restore.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_composer_commands.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_composer_input.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_conversation_rendering.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_diagnostics.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_focus_behavior.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_goal_command.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_image_vision_warning.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_loop_command.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_lsp_settings_status.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_memory.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_mention_dropdown.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_misc_commands.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_model_effort_commands.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_model_switch_vision.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_modes_planning.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_navigation_commands.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_permission_prompts.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_persistence_history.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_plan_lifecycle.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_planning_questions.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_planning_restore.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_rendering_entries.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_rendering_errors.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_rendering_scroll.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_rendering_selection.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_rendering_status.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_rendering_streaming.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_rendering_terminal_logs.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_rendering_tools.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_rendering_window.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_rewind.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_scratchpad.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_session_diff_async.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_share.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_skill_commands.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_slash_dropdown.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_status_modes.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_sub_agents_workflows.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_app_tmux_shortcuts.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_ask_goal.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_ask_loop.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_bundled_skills.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_cli_config.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_clipboard_image.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_connection.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_cron.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_custom_agents_cli.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_diagnostics.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_file_index.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_loop_state.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_main.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_main_share_export.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_mcp_cli.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_mcp_settings_formatting.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_mentions.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_model_connection.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_plan_artifacts.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_provider_registry.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_session_diff.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_session_event_store.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_session_rewind.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_session_store.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_settings.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_skills.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_slash_commands.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_sub_agent_routing_state.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_sub_agent_stream_accumulation.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_terminal_display.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_theme_web_tokens.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_themes.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_transcript_streaming_render.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_tui_control_sanitization.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_tui_settings_screens.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_tui_stylesheet.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/cli/test_updater.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/conftest.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/hooks/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/hooks/test_hooks.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/mcp/test_config_state_tools.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/memory/test_backend.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/memory/test_project_memory_manager.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/security/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/security/test_secrets.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/services/lsp/_fake_server.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/services/lsp/conftest.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/services/lsp/test_client.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/services/lsp/test_detector.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/services/lsp/test_diagnostics.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/services/lsp/test_edits.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/services/lsp/test_integration.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/services/lsp/test_lsp_edit_tool_integration.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/services/lsp/test_manager.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/services/lsp/test_project_config.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/services/lsp/test_registry.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/services/lsp/test_trust.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/services/test_snapshots.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/services/test_workspace_scan.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/session/test_control.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/session/test_projection.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/session/test_recording.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/session/test_runtime.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/session/test_store_conformance.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/test_agent_config_defaults.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/test_agent_config_serialization.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/test_git_env.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/test_mcp_permissions.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/test_mcp_transport.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/tools/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/tools/test_definitions.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/utils/__init__.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/utils/test_images_ascii.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/web/test_bundle.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/web/test_fold_parity.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/web/test_hosting.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/web/test_player_live.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/web/test_player_rendering.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/web/test_server.py +0 -0
- {kolega_code-0.25.1 → kolega_code-0.25.2}/tests/web/test_singlefile.py +0 -0
|
@@ -6,6 +6,14 @@ 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
|
+
|
|
9
17
|
## 0.25.1 - 2026-07-28
|
|
10
18
|
|
|
11
19
|
### Fixed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="114" height="20" role="img" aria-label="coverage: 82.
|
|
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>
|
|
@@ -48,6 +48,8 @@ def _adapt_image_block_for_provider(
|
|
|
48
48
|
target_provider: str,
|
|
49
49
|
target_model: str,
|
|
50
50
|
supports_vision: bool,
|
|
51
|
+
max_image_dimension: Optional[int],
|
|
52
|
+
max_image_base64_bytes: int,
|
|
51
53
|
) -> tuple[ContentBlock, bool]:
|
|
52
54
|
"""Return a request-safe image block without mutating stored history."""
|
|
53
55
|
if not supports_vision:
|
|
@@ -59,7 +61,8 @@ def _adapt_image_block_for_provider(
|
|
|
59
61
|
result = image_utils.resize_base64_image_to_limit(
|
|
60
62
|
block.data,
|
|
61
63
|
block.media_type,
|
|
62
|
-
max_base64_bytes=
|
|
64
|
+
max_base64_bytes=max_image_base64_bytes,
|
|
65
|
+
max_dimension=max_image_dimension,
|
|
63
66
|
)
|
|
64
67
|
if not result.succeeded:
|
|
65
68
|
logger.warning(
|
|
@@ -94,18 +97,54 @@ def _adapt_image_block_for_provider(
|
|
|
94
97
|
)
|
|
95
98
|
|
|
96
99
|
|
|
97
|
-
def
|
|
98
|
-
"""
|
|
100
|
+
def _image_block_stats(messages: List[Message]) -> tuple[int, List[int]]:
|
|
101
|
+
"""Return total image count and base64 lengths, including nested tool results."""
|
|
99
102
|
count = 0
|
|
103
|
+
base64_sizes: List[int] = []
|
|
100
104
|
for message in messages:
|
|
101
105
|
if not isinstance(message.content, list):
|
|
102
106
|
continue
|
|
103
107
|
for block in message.content:
|
|
104
108
|
if isinstance(block, ImageBlock):
|
|
105
109
|
count += 1
|
|
110
|
+
if block.image_type == "base64":
|
|
111
|
+
base64_sizes.append(len(block.data))
|
|
106
112
|
elif isinstance(block, ToolResult) and isinstance(block.content, list):
|
|
107
|
-
|
|
108
|
-
|
|
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
|
|
109
148
|
|
|
110
149
|
|
|
111
150
|
def _provider_value(provider: Any) -> str:
|
|
@@ -260,6 +299,8 @@ def _adapt_content_blocks_for_provider(
|
|
|
260
299
|
target_provider: str,
|
|
261
300
|
target_model: str,
|
|
262
301
|
supports_vision: bool,
|
|
302
|
+
max_image_dimension: Optional[int] = None,
|
|
303
|
+
max_image_base64_bytes: int = image_utils.ANTHROPIC_MAX_IMAGE_BASE64_BYTES,
|
|
263
304
|
target_edit_protocol: Optional[str] = None,
|
|
264
305
|
tool_call_providers: Optional[Dict[str, str]] = None,
|
|
265
306
|
tool_call_protocols: Optional[Dict[str, Optional[str]]] = None,
|
|
@@ -276,6 +317,8 @@ def _adapt_content_blocks_for_provider(
|
|
|
276
317
|
target_provider=target_provider,
|
|
277
318
|
target_model=target_model,
|
|
278
319
|
supports_vision=supports_vision,
|
|
320
|
+
max_image_dimension=max_image_dimension,
|
|
321
|
+
max_image_base64_bytes=max_image_base64_bytes,
|
|
279
322
|
)
|
|
280
323
|
adapted.append(adapted_block)
|
|
281
324
|
changed = changed or image_changed
|
|
@@ -314,6 +357,8 @@ def _adapt_content_blocks_for_provider(
|
|
|
314
357
|
target_provider=target_provider,
|
|
315
358
|
target_model=target_model,
|
|
316
359
|
supports_vision=supports_vision,
|
|
360
|
+
max_image_dimension=max_image_dimension,
|
|
361
|
+
max_image_base64_bytes=max_image_base64_bytes,
|
|
317
362
|
target_edit_protocol=target_edit_protocol,
|
|
318
363
|
tool_call_providers=tool_call_providers,
|
|
319
364
|
tool_call_protocols=tool_call_protocols,
|
|
@@ -355,6 +400,8 @@ def _adapt_content_blocks_for_provider(
|
|
|
355
400
|
target_provider=target_provider,
|
|
356
401
|
target_model=target_model,
|
|
357
402
|
supports_vision=supports_vision,
|
|
403
|
+
max_image_dimension=max_image_dimension,
|
|
404
|
+
max_image_base64_bytes=max_image_base64_bytes,
|
|
358
405
|
target_edit_protocol=target_edit_protocol,
|
|
359
406
|
tool_call_providers=tool_call_providers,
|
|
360
407
|
tool_call_protocols=tool_call_protocols,
|
|
@@ -412,6 +459,16 @@ def adapt_history_for_provider(
|
|
|
412
459
|
target_provider = _provider_value(target_provider)
|
|
413
460
|
if target_edit_protocol is not None:
|
|
414
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)
|
|
415
472
|
result: List[Message] = []
|
|
416
473
|
changed_any = False
|
|
417
474
|
tool_call_providers: Dict[str, str] = {}
|
|
@@ -436,6 +493,8 @@ def adapt_history_for_provider(
|
|
|
436
493
|
target_provider=target_provider,
|
|
437
494
|
target_model=target_model,
|
|
438
495
|
supports_vision=supports_vision,
|
|
496
|
+
max_image_dimension=max_image_dimension,
|
|
497
|
+
max_image_base64_bytes=max_image_base64_bytes,
|
|
439
498
|
target_edit_protocol=target_edit_protocol,
|
|
440
499
|
tool_call_providers=tool_call_providers,
|
|
441
500
|
tool_call_protocols=tool_call_protocols,
|
|
@@ -40,6 +40,16 @@ MAX_IMAGE_BYTES = 20 * 1024 * 1024
|
|
|
40
40
|
# decoded image size. A raw image just under 10 MiB may therefore exceed this
|
|
41
41
|
# limit after base64's 4/3 expansion.
|
|
42
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
|
|
43
53
|
|
|
44
54
|
# Leave headroom below the provider's hard boundary when producing a
|
|
45
55
|
# derivative. This avoids repeatedly re-encoding an image for tiny accounting
|
|
@@ -88,23 +98,30 @@ def resize_base64_image_to_limit(
|
|
|
88
98
|
media_type: str,
|
|
89
99
|
*,
|
|
90
100
|
max_base64_bytes: int,
|
|
101
|
+
max_dimension: Optional[int] = None,
|
|
91
102
|
) -> ImageResizeResult:
|
|
92
103
|
"""Return a non-mutating provider-safe derivative of a base64 image.
|
|
93
104
|
|
|
94
|
-
Images already within the
|
|
95
|
-
Oversized images are decoded and re-encoded as PNG
|
|
96
|
-
be retained, or optimized JPEG otherwise.
|
|
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
|
|
97
109
|
iteratively until the payload has a safety margin below the provider limit.
|
|
98
110
|
Animated images use their first frame for the ephemeral provider copy.
|
|
99
111
|
"""
|
|
100
112
|
if max_base64_bytes <= 0:
|
|
101
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")
|
|
102
116
|
|
|
103
117
|
if not data.isascii():
|
|
104
118
|
return ImageResizeResult(None, None, resized=False, error="Image payload is not ASCII base64")
|
|
105
119
|
encoded_size = len(data)
|
|
106
120
|
|
|
107
|
-
|
|
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:
|
|
108
125
|
return ImageResizeResult(data, media_type, resized=False)
|
|
109
126
|
|
|
110
127
|
try:
|
|
@@ -112,6 +129,9 @@ def resize_base64_image_to_limit(
|
|
|
112
129
|
with Image.open(io.BytesIO(raw)) as opened:
|
|
113
130
|
opened.seek(0)
|
|
114
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)
|
|
115
135
|
if width * height > _IMAGE_RESIZE_MAX_PIXELS:
|
|
116
136
|
return ImageResizeResult(
|
|
117
137
|
None,
|
|
@@ -124,6 +144,9 @@ def resize_base64_image_to_limit(
|
|
|
124
144
|
return ImageResizeResult(None, None, resized=False, error=f"Could not decode image: {exc}")
|
|
125
145
|
|
|
126
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
|
+
|
|
127
150
|
if has_transparency:
|
|
128
151
|
image = image.convert("RGBA")
|
|
129
152
|
output_format = "PNG"
|
|
@@ -124,8 +124,20 @@ class TestBaseAgent:
|
|
|
124
124
|
assert history[0].content[1].text == "final answer"
|
|
125
125
|
|
|
126
126
|
def test_history_for_llm_preserves_images_when_target_anthropic_supports_vision(self, base_agent):
|
|
127
|
-
|
|
128
|
-
|
|
127
|
+
png_output = io.BytesIO()
|
|
128
|
+
Image.new("RGB", (1, 1), "navy").save(png_output, format="PNG")
|
|
129
|
+
jpeg_output = io.BytesIO()
|
|
130
|
+
Image.new("RGB", (1, 1), "navy").save(jpeg_output, format="JPEG")
|
|
131
|
+
image = ImageBlock(
|
|
132
|
+
image_type="base64",
|
|
133
|
+
media_type="image/png",
|
|
134
|
+
data=base64.b64encode(png_output.getvalue()).decode("ascii"),
|
|
135
|
+
)
|
|
136
|
+
nested_image = ImageBlock(
|
|
137
|
+
image_type="base64",
|
|
138
|
+
media_type="image/jpeg",
|
|
139
|
+
data=base64.b64encode(jpeg_output.getvalue()).decode("ascii"),
|
|
140
|
+
)
|
|
129
141
|
base_agent.primary_model_config.provider = ModelProvider.ANTHROPIC
|
|
130
142
|
base_agent.primary_model_config.model = "claude-opus-4-8"
|
|
131
143
|
base_agent.supports_vision = True
|
|
@@ -151,7 +163,7 @@ class TestBaseAgent:
|
|
|
151
163
|
assert history[0].content[1] is image
|
|
152
164
|
assert history[1].content[0].content[0] is nested_image
|
|
153
165
|
|
|
154
|
-
def
|
|
166
|
+
def test_anthropic_many_image_resize_preserves_hydrated_history_and_artifact(
|
|
155
167
|
self,
|
|
156
168
|
base_agent,
|
|
157
169
|
tmp_path,
|
|
@@ -159,13 +171,11 @@ class TestBaseAgent:
|
|
|
159
171
|
):
|
|
160
172
|
import kolega_code.utils.images as image_utils
|
|
161
173
|
|
|
162
|
-
image = Image.
|
|
174
|
+
image = Image.new("RGB", (2_001, 100), "navy")
|
|
163
175
|
output = io.BytesIO()
|
|
164
176
|
image.save(output, format="JPEG")
|
|
165
177
|
original_bytes = output.getvalue()
|
|
166
178
|
original_base64 = base64.b64encode(original_bytes).decode("ascii")
|
|
167
|
-
limit = 1_600
|
|
168
|
-
assert len(original_base64) > limit
|
|
169
179
|
|
|
170
180
|
project = tmp_path / "project"
|
|
171
181
|
project.mkdir()
|
|
@@ -174,7 +184,9 @@ class TestBaseAgent:
|
|
|
174
184
|
store.recorder(record.session_id).record_context_message(
|
|
175
185
|
Message(
|
|
176
186
|
role="user",
|
|
177
|
-
content=[
|
|
187
|
+
content=[
|
|
188
|
+
ImageBlock(image_type="base64", media_type="image/jpeg", data=original_base64) for _ in range(21)
|
|
189
|
+
],
|
|
178
190
|
)
|
|
179
191
|
)
|
|
180
192
|
journal = store.journal(record.session_id)
|
|
@@ -185,22 +197,27 @@ class TestBaseAgent:
|
|
|
185
197
|
|
|
186
198
|
loaded = store.load(record.session_id)
|
|
187
199
|
base_agent.restore_message_history(loaded.history)
|
|
188
|
-
|
|
189
|
-
assert
|
|
190
|
-
assert
|
|
200
|
+
restored_images = base_agent.history[0].content
|
|
201
|
+
assert len(restored_images) == 21
|
|
202
|
+
assert all(isinstance(block, ImageBlock) and block.data == original_base64 for block in restored_images)
|
|
191
203
|
|
|
192
|
-
monkeypatch.setattr(image_utils, "ANTHROPIC_MAX_IMAGE_BASE64_BYTES", limit)
|
|
193
204
|
base_agent.primary_model_config.provider = ModelProvider.ANTHROPIC
|
|
194
|
-
base_agent.primary_model_config.model = "claude-opus-
|
|
205
|
+
base_agent.primary_model_config.model = "claude-opus-5"
|
|
195
206
|
base_agent.supports_vision = True
|
|
207
|
+
aggregate_limit = 60_000
|
|
208
|
+
monkeypatch.setattr(image_utils, "ANTHROPIC_MAX_REQUEST_IMAGE_BASE64_BYTES", aggregate_limit)
|
|
196
209
|
|
|
197
210
|
outbound = base_agent._history_for_llm()
|
|
198
211
|
|
|
199
|
-
|
|
200
|
-
assert
|
|
201
|
-
assert
|
|
202
|
-
|
|
203
|
-
|
|
212
|
+
outbound_images = outbound[0].content
|
|
213
|
+
assert len(outbound_images) == 21
|
|
214
|
+
assert sum(len(block.data) for block in outbound_images if isinstance(block, ImageBlock)) <= aggregate_limit
|
|
215
|
+
for outbound_image in outbound_images:
|
|
216
|
+
assert isinstance(outbound_image, ImageBlock)
|
|
217
|
+
assert outbound_image.data != original_base64
|
|
218
|
+
with Image.open(io.BytesIO(base64.b64decode(outbound_image.data))) as resized:
|
|
219
|
+
assert max(resized.size) <= 2_000
|
|
220
|
+
assert all(isinstance(block, ImageBlock) and block.data == original_base64 for block in restored_images)
|
|
204
221
|
assert journal.read_artifact(artifact_ref) == artifact_before
|
|
205
222
|
|
|
206
223
|
def test_get_effective_history_falls_back_when_no_compression(self, base_agent):
|
|
@@ -357,11 +357,12 @@ def _anthropic_config() -> AgentConfig:
|
|
|
357
357
|
|
|
358
358
|
def _image_history_message() -> Message:
|
|
359
359
|
"""A user message carrying a text block and an image block from an earlier turn."""
|
|
360
|
+
one_pixel_png = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=="
|
|
360
361
|
return Message(
|
|
361
362
|
role="user",
|
|
362
363
|
content=[
|
|
363
364
|
TextBlock(text="what is in this image?"),
|
|
364
|
-
ImageBlock(image_type="base64", media_type="image/png", data=
|
|
365
|
+
ImageBlock(image_type="base64", media_type="image/png", data=one_pixel_png),
|
|
365
366
|
],
|
|
366
367
|
)
|
|
367
368
|
|
|
@@ -7,6 +7,11 @@ request copy (stored history is never mutated), and the compaction-aware detecto
|
|
|
7
7
|
only reports images that would actually be sent.
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
|
+
import base64
|
|
11
|
+
import io
|
|
12
|
+
|
|
13
|
+
from PIL import Image
|
|
14
|
+
|
|
10
15
|
from kolega_code.agent.conversation import (
|
|
11
16
|
Conversation,
|
|
12
17
|
adapt_history_for_provider,
|
|
@@ -26,7 +31,15 @@ from kolega_code.llm.models import (
|
|
|
26
31
|
|
|
27
32
|
|
|
28
33
|
def _image(media_type: str = "image/png") -> ImageBlock:
|
|
29
|
-
|
|
34
|
+
image_format = "JPEG" if media_type == "image/jpeg" else "PNG"
|
|
35
|
+
image = Image.new("RGB", (1, 1), "navy")
|
|
36
|
+
output = io.BytesIO()
|
|
37
|
+
image.save(output, format=image_format)
|
|
38
|
+
return ImageBlock(
|
|
39
|
+
image_type="base64",
|
|
40
|
+
media_type=media_type,
|
|
41
|
+
data=base64.b64encode(output.getvalue()).decode("ascii"),
|
|
42
|
+
)
|
|
30
43
|
|
|
31
44
|
|
|
32
45
|
def _user(*blocks) -> Message:
|
|
@@ -32,7 +32,31 @@ from kolega_code.llm.models import (
|
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
def _image(media_type: str = "image/png") -> ImageBlock:
|
|
35
|
-
|
|
35
|
+
image_format = "JPEG" if media_type == "image/jpeg" else "PNG"
|
|
36
|
+
image = Image.new("RGB", (1, 1), "navy")
|
|
37
|
+
output = io.BytesIO()
|
|
38
|
+
image.save(output, format=image_format)
|
|
39
|
+
return ImageBlock(
|
|
40
|
+
image_type="base64",
|
|
41
|
+
media_type=media_type,
|
|
42
|
+
data=base64.b64encode(output.getvalue()).decode("ascii"),
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def _solid_png(width: int, height: int) -> ImageBlock:
|
|
47
|
+
image = Image.new("RGB", (width, height), "navy")
|
|
48
|
+
output = io.BytesIO()
|
|
49
|
+
image.save(output, format="PNG")
|
|
50
|
+
return ImageBlock(
|
|
51
|
+
image_type="base64",
|
|
52
|
+
media_type="image/png",
|
|
53
|
+
data=base64.b64encode(output.getvalue()).decode("ascii"),
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def _image_dimensions(block: ImageBlock) -> tuple[int, int]:
|
|
58
|
+
with Image.open(io.BytesIO(base64.b64decode(block.data))) as image:
|
|
59
|
+
return image.size
|
|
36
60
|
|
|
37
61
|
|
|
38
62
|
def _noise_jpeg() -> ImageBlock:
|
|
@@ -238,6 +262,138 @@ def test_replace_preserves_cache_checkpoint_on_tool_result():
|
|
|
238
262
|
assert new_tr.cache_checkpoint is True
|
|
239
263
|
|
|
240
264
|
|
|
265
|
+
def test_adapt_keeps_normal_anthropic_dimensions_at_exactly_twenty_images() -> None:
|
|
266
|
+
large = _solid_png(2_001, 100)
|
|
267
|
+
history = [_user(large, *[_image() for _ in range(19)])]
|
|
268
|
+
|
|
269
|
+
adapted = adapt_history_for_provider(
|
|
270
|
+
history,
|
|
271
|
+
target_provider="anthropic",
|
|
272
|
+
target_model="claude-opus-5",
|
|
273
|
+
supports_vision=True,
|
|
274
|
+
)
|
|
275
|
+
|
|
276
|
+
assert count_image_blocks(adapted) == 20
|
|
277
|
+
assert adapted is history
|
|
278
|
+
assert adapted[0].content[0] is large
|
|
279
|
+
assert _image_dimensions(large) == (2_001, 100)
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
def test_adapt_constrains_direct_and_nested_images_when_request_has_more_than_twenty() -> None:
|
|
283
|
+
top_level = _solid_png(2_001, 100)
|
|
284
|
+
nested = _solid_png(100, 2_001)
|
|
285
|
+
valid = [_image() for _ in range(19)]
|
|
286
|
+
result = ToolResult(
|
|
287
|
+
tool_use_id="many-image-call",
|
|
288
|
+
name="browser_take_screenshot",
|
|
289
|
+
content=[nested, TextBlock(text="caption")],
|
|
290
|
+
is_error=False,
|
|
291
|
+
cache_checkpoint=True,
|
|
292
|
+
execution_id="many-image-exec",
|
|
293
|
+
)
|
|
294
|
+
history = [_user(top_level, *valid), _user(result)]
|
|
295
|
+
|
|
296
|
+
adapted = adapt_history_for_provider(
|
|
297
|
+
history,
|
|
298
|
+
target_provider="anthropic",
|
|
299
|
+
target_model="claude-opus-5",
|
|
300
|
+
supports_vision=True,
|
|
301
|
+
)
|
|
302
|
+
|
|
303
|
+
assert count_image_blocks(adapted) == 21
|
|
304
|
+
adapted_top = adapted[0].content[0]
|
|
305
|
+
assert isinstance(adapted_top, ImageBlock)
|
|
306
|
+
assert adapted_top is not top_level
|
|
307
|
+
assert max(_image_dimensions(adapted_top)) <= 2_000
|
|
308
|
+
assert all(adapted[0].content[index + 1] is block for index, block in enumerate(valid))
|
|
309
|
+
|
|
310
|
+
adapted_result = adapted[1].content[0]
|
|
311
|
+
assert isinstance(adapted_result, ToolResult)
|
|
312
|
+
assert adapted_result is not result
|
|
313
|
+
assert adapted_result.tool_use_id == "many-image-call"
|
|
314
|
+
assert adapted_result.name == "browser_take_screenshot"
|
|
315
|
+
assert adapted_result.cache_checkpoint is True
|
|
316
|
+
assert adapted_result.execution_id == "many-image-exec"
|
|
317
|
+
adapted_nested = adapted_result.content[0]
|
|
318
|
+
assert isinstance(adapted_nested, ImageBlock)
|
|
319
|
+
assert adapted_nested is not nested
|
|
320
|
+
assert max(_image_dimensions(adapted_nested)) <= 2_000
|
|
321
|
+
assert isinstance(adapted_result.content[1], TextBlock)
|
|
322
|
+
assert adapted_result.content[1].text == "caption"
|
|
323
|
+
|
|
324
|
+
# Only the outbound request receives derivatives.
|
|
325
|
+
assert history[0].content[0] is top_level
|
|
326
|
+
assert history[1].content[0] is result
|
|
327
|
+
assert result.content[0] is nested
|
|
328
|
+
assert _image_dimensions(top_level) == (2_001, 100)
|
|
329
|
+
assert _image_dimensions(nested) == (100, 2_001)
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
def test_adapt_constrains_single_anthropic_image_to_normal_dimension_limit() -> None:
|
|
333
|
+
oversized = _solid_png(8_001, 2)
|
|
334
|
+
history = [_user(oversized)]
|
|
335
|
+
|
|
336
|
+
adapted = adapt_history_for_provider(
|
|
337
|
+
history,
|
|
338
|
+
target_provider="anthropic",
|
|
339
|
+
target_model="claude-opus-5",
|
|
340
|
+
supports_vision=True,
|
|
341
|
+
)
|
|
342
|
+
|
|
343
|
+
adapted_image = adapted[0].content[0]
|
|
344
|
+
assert isinstance(adapted_image, ImageBlock)
|
|
345
|
+
assert adapted_image is not oversized
|
|
346
|
+
assert max(_image_dimensions(adapted_image)) <= 8_000
|
|
347
|
+
assert history[0].content[0] is oversized
|
|
348
|
+
assert _image_dimensions(oversized) == (8_001, 2)
|
|
349
|
+
|
|
350
|
+
|
|
351
|
+
def test_adapt_caps_aggregate_anthropic_image_payload_without_mutating_history(
|
|
352
|
+
monkeypatch: pytest.MonkeyPatch,
|
|
353
|
+
) -> None:
|
|
354
|
+
import kolega_code.utils.images as image_utils
|
|
355
|
+
|
|
356
|
+
aggregate_limit = 60_000
|
|
357
|
+
monkeypatch.setattr(image_utils, "ANTHROPIC_MAX_REQUEST_IMAGE_BASE64_BYTES", aggregate_limit)
|
|
358
|
+
valid = _image()
|
|
359
|
+
nested_images = [_noise_jpeg() for _ in range(14)]
|
|
360
|
+
results = [
|
|
361
|
+
ToolResult(
|
|
362
|
+
tool_use_id=f"aggregate-image-call-{index}",
|
|
363
|
+
name="read_image",
|
|
364
|
+
content=[image],
|
|
365
|
+
is_error=False,
|
|
366
|
+
cache_checkpoint=True,
|
|
367
|
+
)
|
|
368
|
+
for index, image in enumerate(nested_images)
|
|
369
|
+
]
|
|
370
|
+
history = [_user(valid, *results)]
|
|
371
|
+
assert len(valid.data) + sum(len(image.data) for image in nested_images) > aggregate_limit
|
|
372
|
+
|
|
373
|
+
adapted = adapt_history_for_provider(
|
|
374
|
+
history,
|
|
375
|
+
target_provider="anthropic",
|
|
376
|
+
target_model="claude-opus-5",
|
|
377
|
+
supports_vision=True,
|
|
378
|
+
)
|
|
379
|
+
|
|
380
|
+
assert adapted is not history
|
|
381
|
+
assert adapted[0].content[0] is valid
|
|
382
|
+
adapted_results = adapted[0].content[1:]
|
|
383
|
+
adapted_images = []
|
|
384
|
+
for adapted_result in adapted_results:
|
|
385
|
+
assert isinstance(adapted_result, ToolResult)
|
|
386
|
+
assert adapted_result.cache_checkpoint is True
|
|
387
|
+
adapted_image = adapted_result.content[0]
|
|
388
|
+
assert isinstance(adapted_image, ImageBlock)
|
|
389
|
+
assert _image_dimensions(adapted_image)[0] > 0
|
|
390
|
+
adapted_images.append(adapted_image)
|
|
391
|
+
assert len(valid.data) + sum(len(image.data) for image in adapted_images) <= aggregate_limit
|
|
392
|
+
|
|
393
|
+
for original_result, original_image in zip(results, nested_images, strict=True):
|
|
394
|
+
assert original_result.content[0] is original_image
|
|
395
|
+
|
|
396
|
+
|
|
241
397
|
def test_adapt_resizes_top_level_and_nested_anthropic_images_without_mutating_history(
|
|
242
398
|
monkeypatch: pytest.MonkeyPatch,
|
|
243
399
|
) -> None:
|
|
@@ -330,10 +486,44 @@ def test_adapt_resizes_image_nested_in_compatible_freeform_tool_result(monkeypat
|
|
|
330
486
|
assert result.content[0] is nested
|
|
331
487
|
|
|
332
488
|
|
|
489
|
+
def test_adapt_applies_many_image_dimension_to_compatible_freeform_tool_result() -> None:
|
|
490
|
+
nested = _solid_png(2_001, 100)
|
|
491
|
+
result = ToolResult(
|
|
492
|
+
tool_use_id="freeform-many-image-call",
|
|
493
|
+
name="browser_take_screenshot",
|
|
494
|
+
content=[nested],
|
|
495
|
+
is_error=False,
|
|
496
|
+
input_kind="freeform",
|
|
497
|
+
)
|
|
498
|
+
history = [
|
|
499
|
+
Message(
|
|
500
|
+
role="user",
|
|
501
|
+
content=[*[_image() for _ in range(20)], result],
|
|
502
|
+
usage_metadata={"provider": "anthropic"},
|
|
503
|
+
)
|
|
504
|
+
]
|
|
505
|
+
|
|
506
|
+
adapted = adapt_history_for_provider(
|
|
507
|
+
history,
|
|
508
|
+
target_provider="anthropic",
|
|
509
|
+
target_model="claude-opus-5",
|
|
510
|
+
supports_vision=True,
|
|
511
|
+
)
|
|
512
|
+
|
|
513
|
+
adapted_result = adapted[0].content[-1]
|
|
514
|
+
assert isinstance(adapted_result, ToolResult)
|
|
515
|
+
assert isinstance(adapted_result.content, list)
|
|
516
|
+
adapted_image = adapted_result.content[0]
|
|
517
|
+
assert isinstance(adapted_image, ImageBlock)
|
|
518
|
+
assert max(_image_dimensions(adapted_image)) <= 2_000
|
|
519
|
+
assert result.content[0] is nested
|
|
520
|
+
assert _image_dimensions(nested) == (2_001, 100)
|
|
521
|
+
|
|
522
|
+
|
|
333
523
|
def test_adapt_leaves_valid_url_and_non_anthropic_images_unchanged(monkeypatch: pytest.MonkeyPatch) -> None:
|
|
334
524
|
import kolega_code.utils.images as image_utils
|
|
335
525
|
|
|
336
|
-
monkeypatch.setattr(image_utils, "ANTHROPIC_MAX_IMAGE_BASE64_BYTES",
|
|
526
|
+
monkeypatch.setattr(image_utils, "ANTHROPIC_MAX_IMAGE_BASE64_BYTES", 128)
|
|
337
527
|
valid = _image()
|
|
338
528
|
url = ImageBlock(image_type="url", media_type="image/png", data="https://example.com/image.png")
|
|
339
529
|
oversized = _noise_jpeg()
|