kolega-code 0.16.0__tar.gz → 0.17.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {kolega_code-0.16.0 → kolega_code-0.17.0}/.env.example +6 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/.github/workflows/ci.yml +5 -1
- {kolega_code-0.16.0 → kolega_code-0.17.0}/.github/workflows/release.yml +3 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/CHANGELOG.md +42 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/PKG-INFO +4 -1
- {kolega_code-0.16.0 → kolega_code-0.17.0}/RELEASING.md +2 -2
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/assets/coverage.svg +1 -1
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/concepts/tools.md +19 -5
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/configuration/environment-variables.md +24 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/configuration/providers-and-models.mdx +10 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/configuration/settings-and-api-keys.mdx +4 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/__init__.py +1 -1
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/__init__.py +1 -1
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/browseragent.py +15 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +9 -0
- kolega_code-0.17.0/kolega_code/agent/tool_backend/browser_tool.py +395 -0
- kolega_code-0.17.0/kolega_code/agent/tool_backend/glob_tool.py +533 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/search_codebase_tool.py +245 -40
- kolega_code-0.17.0/kolega_code/agent/tool_backend/web_fetch/__init__.py +1 -0
- kolega_code-0.17.0/kolega_code/agent/tool_backend/web_fetch/answering.py +213 -0
- kolega_code-0.17.0/kolega_code/agent/tool_backend/web_fetch/documents.py +58 -0
- kolega_code-0.17.0/kolega_code/agent/tool_backend/web_fetch/extractors.py +255 -0
- kolega_code-0.17.0/kolega_code/agent/tool_backend/web_fetch/pipeline.py +217 -0
- kolega_code-0.17.0/kolega_code/agent/tool_backend/web_fetch/retrieval.py +276 -0
- kolega_code-0.17.0/kolega_code/agent/tool_backend/web_fetch_tool.py +234 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tools.py +206 -224
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/app.py +2 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/messages.py +12 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/provider_registry.py +8 -2
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/theme.py +1 -1
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/tui/agent_runtime.py +7 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/tui/settings_panel.py +95 -1
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/tui/state.py +2 -2
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/tui/styles.tcss +30 -1
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/tui/transcript.py +35 -47
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/tui/widgets.py +20 -5
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/models.py +7 -0
- kolega_code-0.17.0/kolega_code/services/base.py +199 -0
- kolega_code-0.17.0/kolega_code/services/browser.py +911 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/services/lsp/detector.py +60 -66
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/services/lsp/manager.py +14 -0
- kolega_code-0.17.0/kolega_code/services/workspace_scan.py +244 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/pyproject.toml +4 -1
- {kolega_code-0.16.0 → kolega_code-0.17.0}/scripts/bench_hotpaths.py +5 -5
- kolega_code-0.17.0/scripts/bench_web_fetch.py +90 -0
- kolega_code-0.17.0/tests/agent/services/test_browser_console_logs.py +129 -0
- kolega_code-0.17.0/tests/agent/services/test_browser_content.py +130 -0
- kolega_code-0.17.0/tests/agent/services/test_browser_integration.py +36 -0
- kolega_code-0.17.0/tests/agent/services/test_browser_parity.py +117 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_agent_tools_inventory.py +82 -9
- kolega_code-0.17.0/tests/agent/tool_backend/test_browser_tool.py +167 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/test_glob_tool.py +79 -2
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/test_glob_tool_sandbox_parity.py +1 -1
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/test_search_codebase_tool.py +78 -0
- kolega_code-0.17.0/tests/agent/tool_backend/test_web_fetch_answering.py +73 -0
- kolega_code-0.17.0/tests/agent/tool_backend/test_web_fetch_pipeline.py +260 -0
- kolega_code-0.17.0/tests/agent/tool_backend/test_web_fetch_tool.py +187 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_bootstrap_settings.py +89 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_lsp_settings_status.py +25 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_rendering_entries.py +95 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_rendering_selection.py +6 -6
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_rendering_tools.py +111 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_provider_registry.py +10 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_transcript_streaming_render.py +21 -14
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/services/lsp/test_detector.py +21 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/services/lsp/test_manager.py +14 -0
- kolega_code-0.17.0/tests/services/test_workspace_scan.py +116 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/uv.lock +579 -10
- kolega_code-0.16.0/kolega_code/agent/tool_backend/browser_tool.py +0 -271
- kolega_code-0.16.0/kolega_code/agent/tool_backend/glob_tool.py +0 -325
- kolega_code-0.16.0/kolega_code/agent/tool_backend/web_fetch_tool.py +0 -204
- kolega_code-0.16.0/kolega_code/services/base.py +0 -233
- kolega_code-0.16.0/kolega_code/services/browser.py +0 -446
- kolega_code-0.16.0/tests/agent/services/test_browser_console_logs.py +0 -314
- kolega_code-0.16.0/tests/agent/services/test_browser_content.py +0 -94
- kolega_code-0.16.0/tests/agent/services/test_browser_integration.py +0 -120
- kolega_code-0.16.0/tests/agent/services/test_browser_parity.py +0 -355
- kolega_code-0.16.0/tests/agent/tool_backend/test_browser_tool.py +0 -335
- kolega_code-0.16.0/tests/agent/tool_backend/test_web_fetch_tool.py +0 -217
- {kolega_code-0.16.0 → kolega_code-0.17.0}/.githooks/pre-commit +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/.github/workflows/docs.yml +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/.gitignore +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/.pre-commit-config.yaml +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/CONTRIBUTING.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/LICENSE +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/README.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/SECURITY.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/.gitignore +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/README.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/astro.config.mjs +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/package-lock.json +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/package.json +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/public/favicon.svg +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/assets/demo.gif +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/assets/kolega-dark.svg +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/assets/kolega-light.svg +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/cli/ask.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/cli/doctor.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/cli/overview.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/cli/sessions.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/concepts/agents.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/concepts/how-it-works.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/configuration/lsp.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/configuration/mcp.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/configuration/prompt-overrides.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/configuration/sign-in-with-chatgpt.mdx +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/getting-started/installation.mdx +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/getting-started/quick-start.mdx +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/gigacode.mdx +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/goal.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/hooks.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/index.mdx +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/skills.mdx +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/troubleshooting/diagnostics.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/troubleshooting/terminal-tmux.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/tui/composer.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/tui/interface.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/tui/modes.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/tui/sessions-and-resume.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content/docs/tui/slash-commands.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/content.config.ts +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/src/styles/brand.css +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/docs/tsconfig.json +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/baseagent.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/coder.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/common.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/compression.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/context.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/conversation.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/errors.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/generalagent.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/goal.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/investigationagent.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/orchestration/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/orchestration/budget.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/orchestration/errors.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/orchestration/executor.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/orchestration/guide.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/orchestration/journal.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/orchestration/runtime.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/orchestration/types.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/planningagent.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_dump.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_overrides.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_provider.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/auxiliary/tools/think_hard.system.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/extensions/cli/current_plan_artifact.md.j2 +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/prompts.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/agent_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/base_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/build_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/edit_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/list_directory_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/lsp_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/read_file_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/read_image_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/search_backends/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/search_backends/tavily.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/snapshot_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/terminal_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/think_hard_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/web_search_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/agent/utils/commands.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/auth/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/auth/_jwt.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/auth/chatgpt_oauth.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/auth/constants.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/auth/tokens.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/clipboard_image.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/config.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/connection.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/diagnostics.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/file_index.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/goal.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/main.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/mentions.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/plan_artifacts.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/session_store.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/settings.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/skills.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/slash_commands.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/tui/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/tui/app_base.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/tui/changes_screen.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/tui/command_handlers.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/tui/constants.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/tui/prompt_flows.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/tui/session_diff.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/tui/status_dashboard.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/tui/sub_agent_screen.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/tui/terminal_display.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/cli/updater.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/config.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/events.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/hooks/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/hooks/backends.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/hooks/config.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/hooks/dispatcher.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/hooks/events.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/hooks/matcher.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/hooks/outcome.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/client.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/exceptions.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/instrumented_client.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/providers/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/providers/anthropic.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/providers/base.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/providers/google.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/providers/models.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/providers/openai.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/providers/openai_responses.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/providers/responses_common.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/ratelimit.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/specs/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/specs/accessors.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/specs/catalog/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/specs/catalog/anthropic.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/specs/catalog/dashscope.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/specs/catalog/deepseek.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/specs/catalog/fireworks.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/specs/catalog/google.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/specs/catalog/kimi_coding.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/specs/catalog/moonshot.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/specs/catalog/ollama_cloud.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/specs/catalog/openai.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/specs/catalog/openai_chatgpt.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/specs/catalog/together.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/specs/catalog/xai.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/specs/catalog/zai.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/specs/thinking.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/specs/types.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/timeouts.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/llm/tool_execution_ids.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/local_state.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/mcp/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/mcp/config.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/mcp/oauth.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/mcp/service.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/mcp/state.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/mcp/tools.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/mcp/transport.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/models/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/models/sandbox_terminal_state.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/permissions.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/runtime.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/sandbox/README.md +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/sandbox/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/sandbox/async_filesystem.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/sandbox/base.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/sandbox/browser.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/sandbox/event_loop.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/sandbox/filesystem.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/sandbox/local.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/sandbox/serializer.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/sandbox/terminal.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/sandbox/utils.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/services/file_system.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/services/html.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/services/lsp/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/services/lsp/client.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/services/lsp/config.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/services/lsp/diagnostics.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/services/lsp/edits.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/services/lsp/registry.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/services/lsp/registry.yaml +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/services/snapshots.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/services/terminal.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/services/terminal_buffer.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/tools/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/tools/core.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/tools/definitions.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/tools/registry.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/utils/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/kolega_code/utils/images.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/run_tests.sh +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/scripts/check-dev-hooks.sh +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/scripts/install-kolega-code.sh +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/scripts/setup-dev.sh +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/compaction_helpers.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/conftest.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/_token_counting_utils.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_anthropic_local_token_counting_incremental.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_anthropic_token_counting.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_billing_openai_cache.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_chatgpt_live.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_chatgpt_oauth_auth_config.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_chatgpt_oauth_conversion.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_chatgpt_oauth_provider.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_chatgpt_oauth_provider_generate.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_chatgpt_oauth_streaming.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_client.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_client_live.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_client_runtime.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_dashscope_mapping.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_error_boundary.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_exceptions.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_google_thought_signature.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_google_tool_signature_live.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_instrumented_client.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_instrumented_client_integration.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_instrumented_client_stream.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_langfuse_normalization.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_live_providers.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_message_conversion.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_model_specs.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_openai_cached_tokens.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_openai_cached_tokens_stream.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_openai_message_conversion.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_openai_reasoning_replay.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_openai_responses_provider.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_openai_stream_accumulation.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_openai_token_counting.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_openai_token_counting_incremental.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_provider_usage_mapping.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_streaming_timeouts.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_supports_vision.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_thinking_effort.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_tool_execution_ids.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/llm/test_xai_prompt_cache_header.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/orchestration/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/orchestration/test_orchestration.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/services/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/services/test_browser.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/services/test_file_system.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/services/test_file_system_integration.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/services/test_file_system_path.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/services/test_local_file_system.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/services/test_sandbox_terminal_input.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/services/test_terminal.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/services/test_terminal_buffer.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/services/test_terminal_state_serializer.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_base_agent.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_base_agent_anthropic_history_validation.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_base_agent_compaction.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_base_agent_effective_history.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_base_agent_history_serialization.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_base_agent_prompt_context.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_base_agent_role_overrides.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_base_agent_runtime.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_base_agent_tool_call_repair.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_base_agent_tool_call_repair_integration.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_base_agent_tool_execution.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_coder_attachments.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_coder_prompt_extensions.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_commands.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_compaction_integration.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_compaction_persistence.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_compaction_subagent.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_compaction_tui_events.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_compress_command.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_compression.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_conversation_compaction.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_duplicate_tool_results.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_empty_message_handling.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_event_emitter.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_general_agent.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_gigacode_gating.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_goal.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_goal_evaluate.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_history_adapter_thinking.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_history_image_blocks.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_hooks_integration.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_html.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_image_compat.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_parallel_tool_calls.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_permissions.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_planning_agent.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_prompt_dump.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_prompt_overrides.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_prompt_provider.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_prompts.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_read_image_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_tool_collection_builtin_dispatch.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_tool_collection_config.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_tool_collection_extensions.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_tool_collection_initialization.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_tool_collection_memory.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_tool_registry.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/test_tools.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/test_agent_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/test_base_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/test_build_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/test_edit_preview.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/test_edit_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/test_list_directory_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/test_lsp_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/test_read_file_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/test_snapshot_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/test_terminal_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/test_think_hard_integration.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/test_think_hard_streaming.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/test_think_hard_streaming_content.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/test_think_hard_streaming_errors.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/test_think_hard_streaming_updates.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/test_web_search_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/agent/tool_backend/test_workflow_tool.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/auth/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/auth/test_chatgpt_oauth.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/auth/test_tokens.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/_app_test_utils.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_agent_wiring.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_changes_inspector.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_compaction_restore.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_composer_commands.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_composer_input.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_conversation_rendering.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_diagnostics.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_focus_behavior.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_goal_command.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_image_vision_warning.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_mention_dropdown.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_misc_commands.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_model_effort_commands.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_model_switch_vision.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_modes_planning.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_navigation_commands.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_permission_prompts.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_persistence_history.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_plan_lifecycle.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_planning_questions.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_planning_restore.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_rendering_errors.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_rendering_scroll.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_rendering_status.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_rendering_streaming.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_rendering_terminal_logs.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_session_diff_async.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_skill_commands.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_slash_dropdown.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_status_modes.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_sub_agents_workflows.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_app_tmux_shortcuts.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_ask_goal.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_cli_config.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_clipboard_image.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_connection.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_diagnostics.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_file_index.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_main.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_mcp_cli.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_mcp_settings_formatting.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_mentions.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_plan_artifacts.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_session_diff.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_session_store.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_settings.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_skills.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_slash_commands.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_sub_agent_stream_accumulation.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_terminal_display.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_themes.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_tui_stylesheet.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/cli/test_updater.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/conftest.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/hooks/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/hooks/test_hooks.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/mcp/test_config_state_tools.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/services/lsp/_fake_server.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/services/lsp/conftest.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/services/lsp/test_client.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/services/lsp/test_diagnostics.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/services/lsp/test_edits.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/services/lsp/test_integration.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/services/lsp/test_lsp_edit_tool_integration.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/services/lsp/test_project_config.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/services/lsp/test_registry.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/services/lsp/test_trust.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/services/test_snapshots.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/test_agent_config_serialization.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/test_mcp_permissions.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/test_mcp_transport.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/tools/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/tools/test_definitions.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/utils/__init__.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/utils/test_images.py +0 -0
- {kolega_code-0.16.0 → kolega_code-0.17.0}/tests/utils/test_images_ascii.py +0 -0
|
@@ -25,6 +25,12 @@ OLLAMA_API_KEY=
|
|
|
25
25
|
KOLEGA_CODE_THINKING_EFFORT=
|
|
26
26
|
|
|
27
27
|
BROWSERLESS_API_KEY=
|
|
28
|
+
# Optional Browserless connection overrides. CDP and the SFO region remain the defaults.
|
|
29
|
+
# BROWSERLESS_WS_ENDPOINT=wss://production-sfo.browserless.io
|
|
30
|
+
# BROWSERLESS_REGION=sfo
|
|
31
|
+
# BROWSERLESS_PROTOCOL=cdp
|
|
32
|
+
# BROWSERLESS_TIMEOUT_MS=300000
|
|
33
|
+
# BROWSER_CONNECT_TIMEOUT_MS=30000
|
|
28
34
|
|
|
29
35
|
LANGFUSE_HOST=https://us.cloud.langfuse.com
|
|
30
36
|
LANGFUSE_PUBLIC_KEY=
|
|
@@ -3,7 +3,7 @@ name: CI
|
|
|
3
3
|
on:
|
|
4
4
|
pull_request:
|
|
5
5
|
branches: [main]
|
|
6
|
-
types: [opened, synchronize, reopened
|
|
6
|
+
types: [opened, synchronize, reopened]
|
|
7
7
|
push:
|
|
8
8
|
branches: [main]
|
|
9
9
|
workflow_dispatch:
|
|
@@ -84,6 +84,10 @@ jobs:
|
|
|
84
84
|
if: needs.changes.outputs.coverage-badge-only != 'true'
|
|
85
85
|
run: uv sync --extra dev --frozen
|
|
86
86
|
|
|
87
|
+
- name: Install Playwright Chromium
|
|
88
|
+
if: needs.changes.outputs.coverage-badge-only != 'true'
|
|
89
|
+
run: uv run playwright install --with-deps chromium
|
|
90
|
+
|
|
87
91
|
- name: Run pre-commit hooks
|
|
88
92
|
if: needs.changes.outputs.coverage-badge-only != 'true'
|
|
89
93
|
run: uv run pre-commit run --all-files --show-diff-on-failure
|
|
@@ -6,6 +6,48 @@ This project uses GitHub Releases for detailed generated release notes. This fil
|
|
|
6
6
|
|
|
7
7
|
## Unreleased
|
|
8
8
|
|
|
9
|
+
## 0.17.0 - 2026-07-10
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- Rebuilt the browser agent on a Playwright MCP-style accessibility-snapshot
|
|
14
|
+
toolset (`browser_navigate`, `browser_snapshot`, `browser_find`,
|
|
15
|
+
`browser_click`, `browser_type`, and more). Actions use stable element refs
|
|
16
|
+
(e.g. `e12`) and return an updated snapshot, so the agent interacts
|
|
17
|
+
deterministically without inventing CSS selectors or relying on screenshots.
|
|
18
|
+
- The browser agent now requires a vision-capable model. Models without image
|
|
19
|
+
input support are rejected with guidance to choose a vision-capable model or
|
|
20
|
+
inherit the default.
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- Prevented `glob`, `search_codebase`, and LSP language detection from hanging
|
|
25
|
+
on large or broad project directories by adding bounded, cancellable,
|
|
26
|
+
timeout-limited workspace traversal.
|
|
27
|
+
- Normalized TUI transcript indentation for consistent rendering.
|
|
28
|
+
|
|
29
|
+
### Security
|
|
30
|
+
|
|
31
|
+
- Hardened browser URL validation to address CodeQL static-analysis findings.
|
|
32
|
+
|
|
33
|
+
## 0.16.1 - 2026-07-10
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
|
|
37
|
+
- Rebuilt `web_fetch` as a fully local, content-type-aware pipeline with bounded
|
|
38
|
+
HTTP retries, automatic quality-gated Trafilatura/Readability/DOM extraction,
|
|
39
|
+
JSON/text/feed handling, and local PDF/Office conversion.
|
|
40
|
+
- `web_fetch` now returns grounded fast-model answers with verified page excerpts,
|
|
41
|
+
long-content chunking, and a bounded extracted-content fallback when answering fails.
|
|
42
|
+
|
|
43
|
+
### Fixed
|
|
44
|
+
|
|
45
|
+
- `web_fetch` now reports HTTP, extraction, unsupported-content, scanned-document,
|
|
46
|
+
and JavaScript-rendered SPA failures precisely instead of collapsing them into
|
|
47
|
+
empty Trafilatura output, and UI progress failures no longer discard results.
|
|
48
|
+
- Removed the arbitrary 512-character answer clipping and first-100,000-character
|
|
49
|
+
page truncation that could omit valid answers near the end of a resource.
|
|
50
|
+
|
|
9
51
|
## 0.16.0 - 2026-07-09
|
|
10
52
|
|
|
11
53
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kolega-code
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.17.0
|
|
4
4
|
Summary: Multi-agent coding in the terminal
|
|
5
5
|
Project-URL: Homepage, https://kolega-ai.github.io/kolega-code/
|
|
6
6
|
Project-URL: Documentation, https://kolega-ai.github.io/kolega-code/
|
|
@@ -235,6 +235,8 @@ Requires-Dist: httpx==0.28.1
|
|
|
235
235
|
Requires-Dist: jinja2==3.1.6
|
|
236
236
|
Requires-Dist: langfuse==3.14.5
|
|
237
237
|
Requires-Dist: lxml-html-clean==0.4.5
|
|
238
|
+
Requires-Dist: markdownify==1.2.3
|
|
239
|
+
Requires-Dist: markitdown[docx,pdf,pptx,xls,xlsx]==0.1.6
|
|
238
240
|
Requires-Dist: mcp>=1.21.2
|
|
239
241
|
Requires-Dist: nest-asyncio==1.6.0
|
|
240
242
|
Requires-Dist: openai==1.109.1
|
|
@@ -246,6 +248,7 @@ Requires-Dist: psutil==7.2.2
|
|
|
246
248
|
Requires-Dist: pydantic==2.13.4
|
|
247
249
|
Requires-Dist: python-dotenv==1.2.2
|
|
248
250
|
Requires-Dist: pyyaml==6.0.3
|
|
251
|
+
Requires-Dist: readability-lxml==0.8.4.1
|
|
249
252
|
Requires-Dist: tavily-python==0.7.26
|
|
250
253
|
Requires-Dist: tenacity==9.1.4
|
|
251
254
|
Requires-Dist: textual==8.2.5
|
|
@@ -115,8 +115,8 @@ the organization request.
|
|
|
115
115
|
|
|
116
116
|
2. In GitHub, create an environment named `pypi`.
|
|
117
117
|
|
|
118
|
-
|
|
119
|
-
|
|
118
|
+
The release workflow publishes to PyPI automatically when a release tag is
|
|
119
|
+
pushed; no manual deployment approval is required.
|
|
120
120
|
|
|
121
121
|
## Installer handoff
|
|
122
122
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="114" height="20" role="img" aria-label="coverage: 79.
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="114" height="20" role="img" aria-label="coverage: 79.92%"><title>coverage: 79.92%</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">79.92%</text><text x="865" y="150" fill-opacity=".3" textLength="430">79.92%</text></g><text x="865" y="140" textLength="430">79.92%</text></g></g></svg>
|
|
@@ -31,10 +31,14 @@ Run shell commands in the project and stream their output to the **Terminal** ta
|
|
|
31
31
|
|
|
32
32
|
Drive a real browser (Playwright) for web tasks:
|
|
33
33
|
|
|
34
|
-
- `
|
|
35
|
-
- `
|
|
36
|
-
- `
|
|
37
|
-
- `
|
|
34
|
+
- `browser_navigate`, `browser_snapshot`, `browser_find`, `browser_close`
|
|
35
|
+
- `browser_click`, `browser_type`, `browser_fill_form`, `browser_select_option`
|
|
36
|
+
- `browser_tabs`, `browser_wait_for`, `browser_handle_dialog`, `browser_file_upload`
|
|
37
|
+
- `browser_console_messages`, `browser_network_requests`, `browser_take_screenshot`
|
|
38
|
+
|
|
39
|
+
The browser agent uses accessibility snapshots with element refs such as `e12`.
|
|
40
|
+
Actions return an updated snapshot, so the agent can interact deterministically
|
|
41
|
+
without inventing CSS selectors or relying on screenshots.
|
|
38
42
|
|
|
39
43
|
Launch visible browser windows (instead of headless) with `--browser-visible` on
|
|
40
44
|
the [TUI](../../cli/overview/) or [`ask`](../../cli/ask/).
|
|
@@ -42,13 +46,23 @@ the [TUI](../../cli/overview/) or [`ask`](../../cli/ask/).
|
|
|
42
46
|
### Web
|
|
43
47
|
|
|
44
48
|
- `web_search` — search the web for relevant pages and return ranked results.
|
|
45
|
-
- `web_fetch` —
|
|
49
|
+
- `web_fetch` — retrieve a URL, extract local-readable content, and answer an
|
|
50
|
+
instruction with source evidence. It handles HTML, plain text, Markdown,
|
|
51
|
+
JSON/XML/feeds, PDF, DOCX, PPTX, XLSX, and XLS. HTML extraction uses a
|
|
52
|
+
quality-gated local chain (Trafilatura, Readability, semantic DOM, then full
|
|
53
|
+
visible text) and automatically selects the best result.
|
|
46
54
|
|
|
47
55
|
Use `web_search` when you do not already know the right URL, then follow up with
|
|
48
56
|
`web_fetch` to read a result in depth. The default backend is keyless DuckDuckGo;
|
|
49
57
|
Firecrawl, Tavily, and self-hosted SearXNG can be selected in Settings or with
|
|
50
58
|
environment variables.
|
|
51
59
|
|
|
60
|
+
`web_fetch` never sends the URL or page content to a third-party reader service
|
|
61
|
+
and does not launch a browser. If a page appears to be a JavaScript-rendered SPA,
|
|
62
|
+
the result says that its content may be incomplete so the agent can use the
|
|
63
|
+
browser tools instead. Scanned/image-only PDFs and legacy DOC/PPT files require
|
|
64
|
+
OCR/conversion outside this tool.
|
|
65
|
+
|
|
52
66
|
### Reasoning & memory
|
|
53
67
|
|
|
54
68
|
- `think_hard` — an extended-reasoning step that uses the
|
|
@@ -86,6 +86,12 @@ section.
|
|
|
86
86
|
| `KOLEGA_CODE_<ROLE>_MODEL` | Model for that agent |
|
|
87
87
|
| `KOLEGA_CODE_<ROLE>_EFFORT` | Thinking effort for that agent |
|
|
88
88
|
|
|
89
|
+
The `BROWSER` role requires a vision-capable model. An incompatible explicit or
|
|
90
|
+
inherited model is never replaced automatically; dispatching the browser agent
|
|
91
|
+
fails with a configuration error until `KOLEGA_CODE_BROWSER_PROVIDER` and
|
|
92
|
+
`KOLEGA_CODE_BROWSER_MODEL` (or the equivalent Settings override) select a model
|
|
93
|
+
with vision support.
|
|
94
|
+
|
|
89
95
|
## State & environment
|
|
90
96
|
|
|
91
97
|
| Variable | Purpose |
|
|
@@ -106,6 +112,24 @@ explicitly when you want a cloud provider or a self-hosted SearXNG instance.
|
|
|
106
112
|
| `TAVILY_API_KEY` | Tavily API key |
|
|
107
113
|
| `SEARXNG_BASE_URL` | Base URL for a self-hosted SearXNG instance |
|
|
108
114
|
|
|
115
|
+
## Browser automation
|
|
116
|
+
|
|
117
|
+
Local browser automation needs no credentials. Hosted sandbox deployments can
|
|
118
|
+
connect the same browser agent to Browserless.
|
|
119
|
+
|
|
120
|
+
| Variable | Purpose |
|
|
121
|
+
| --- | --- |
|
|
122
|
+
| `BROWSERLESS_API_KEY` | Browserless cloud API token |
|
|
123
|
+
| `BROWSERLESS_WS_ENDPOINT` | Optional cloud or self-hosted WebSocket endpoint |
|
|
124
|
+
| `BROWSERLESS_REGION` | Cloud region used when no endpoint is supplied: `sfo`, `lon`, or `ams` |
|
|
125
|
+
| `BROWSERLESS_PROTOCOL` | Connection protocol: `cdp` (default) or `playwright` |
|
|
126
|
+
| `BROWSERLESS_TIMEOUT_MS` | Optional maximum Browserless session duration; must fit the account plan |
|
|
127
|
+
| `BROWSER_CONNECT_TIMEOUT_MS` | Browser transport connection timeout (default 30000 ms) |
|
|
128
|
+
|
|
129
|
+
Custom endpoint query parameters are preserved, including Browserless proxy,
|
|
130
|
+
stealth, profile, and recording options. If `BROWSERLESS_TIMEOUT_MS` is unset,
|
|
131
|
+
Browserless applies the account's default session duration.
|
|
132
|
+
|
|
109
133
|
## Telemetry (Langfuse)
|
|
110
134
|
|
|
111
135
|
Optional [Langfuse](https://langfuse.com/) tracing of LLM usage.
|
|
@@ -149,6 +149,12 @@ In the **Settings tab**, the **Agent Models** section (below the main Model sect
|
|
|
149
149
|
has a provider/model/effort group per role. Leave a role on **Default** to inherit;
|
|
150
150
|
pick a provider, model, and thinking effort to override it.
|
|
151
151
|
|
|
152
|
+
The **Browser** role requires a model whose catalog entry supports vision. It does
|
|
153
|
+
not fall back to another model or run in a text-only mode. If **Default** resolves
|
|
154
|
+
to a non-vision model, Settings shows a warning and the browser agent fails with a
|
|
155
|
+
configuration error when dispatched. Select an explicit vision-capable Browser
|
|
156
|
+
model to enable it.
|
|
157
|
+
|
|
152
158
|
Or use environment variables, named `KOLEGA_CODE_<ROLE>_PROVIDER` / `_MODEL` / `_EFFORT`:
|
|
153
159
|
|
|
154
160
|
```bash
|
|
@@ -156,6 +162,10 @@ Or use environment variables, named `KOLEGA_CODE_<ROLE>_PROVIDER` / `_MODEL` / `
|
|
|
156
162
|
export KOLEGA_CODE_INVESTIGATION_PROVIDER=deepseek
|
|
157
163
|
export KOLEGA_CODE_INVESTIGATION_MODEL=deepseek-v4-flash
|
|
158
164
|
export KOLEGA_CODE_INVESTIGATION_EFFORT=high
|
|
165
|
+
|
|
166
|
+
# Browser overrides must name a vision-capable model.
|
|
167
|
+
export KOLEGA_CODE_BROWSER_PROVIDER=anthropic
|
|
168
|
+
export KOLEGA_CODE_BROWSER_MODEL=claude-sonnet-4-6
|
|
159
169
|
```
|
|
160
170
|
|
|
161
171
|
Resolution order for a role (first match wins): **env var → saved Settings → the
|
|
@@ -32,6 +32,10 @@ agents (planning, building, investigation, general, browser) their own provider,
|
|
|
32
32
|
model, and effort. Leave a role on **Default** to inherit the active model. See
|
|
33
33
|
[Per-agent models](../providers-and-models/#per-agent-models).
|
|
34
34
|
|
|
35
|
+
The Browser role only accepts vision-capable model overrides. If it inherits a
|
|
36
|
+
non-vision active model, Settings allows the inheritance but warns that the browser
|
|
37
|
+
agent is unavailable until you choose a compatible Browser model.
|
|
38
|
+
|
|
35
39
|
The **Web Search** section configures the `web_search` tool. DuckDuckGo is the
|
|
36
40
|
default and needs no key. Firecrawl can also run without a key, with an optional
|
|
37
41
|
key for higher rate limits. Tavily requires a key, and SearXNG requires the base
|
|
@@ -5,6 +5,7 @@ from .baseagent import BaseAgent
|
|
|
5
5
|
from kolega_code.config import AgentConfig
|
|
6
6
|
from kolega_code.events import AgentConnectionManager
|
|
7
7
|
from kolega_code.llm.models import Message, TextBlock
|
|
8
|
+
from kolega_code.llm.specs import supports_vision as model_supports_vision
|
|
8
9
|
from .prompt_provider import AgentMode, AgentType, PromptExtension, PromptProvider
|
|
9
10
|
from .tools import ToolCollection
|
|
10
11
|
|
|
@@ -19,6 +20,19 @@ class BrowserAgent(BaseAgent):
|
|
|
19
20
|
|
|
20
21
|
agent_name = "browser-agent"
|
|
21
22
|
|
|
23
|
+
@classmethod
|
|
24
|
+
def validate_model_capabilities(cls, config: AgentConfig) -> None:
|
|
25
|
+
"""Require the resolved browser-agent model to accept image input."""
|
|
26
|
+
model_config = config.model_config_for_agent(cls.agent_name)
|
|
27
|
+
provider = getattr(model_config.provider, "value", model_config.provider)
|
|
28
|
+
if model_supports_vision(provider, model_config.model):
|
|
29
|
+
return
|
|
30
|
+
raise ValueError(
|
|
31
|
+
"BrowserAgent requires a vision-capable model, but "
|
|
32
|
+
f"{provider}/{model_config.model} does not support image input. "
|
|
33
|
+
"Configure a vision-capable model for the Browser agent."
|
|
34
|
+
)
|
|
35
|
+
|
|
22
36
|
def __init__(
|
|
23
37
|
self,
|
|
24
38
|
project_path: str | Path,
|
|
@@ -74,6 +88,7 @@ class BrowserAgent(BaseAgent):
|
|
|
74
88
|
usage_recorder: Optional callback for recording normalized LLM usage
|
|
75
89
|
sub_agent_recorder: Optional callback for persisting sub-agent conversation state
|
|
76
90
|
"""
|
|
91
|
+
self.validate_model_capabilities(config)
|
|
77
92
|
super().__init__(
|
|
78
93
|
project_path,
|
|
79
94
|
workspace_id,
|
|
@@ -45,6 +45,15 @@ If you are asked for links to assets such as images, do not answer from your mem
|
|
|
45
45
|
|
|
46
46
|
1. If a website has a cookie consent popup, avoid it. Try another website if you can.
|
|
47
47
|
2. Your search engine of choice is duckduckgo.com
|
|
48
|
+
3. Navigate with `browser_navigate`; it starts the browser session automatically.
|
|
49
|
+
4. Use `browser_snapshot` to understand the page. Prefer exact element refs such as `e12` from the snapshot
|
|
50
|
+
over manually invented selectors.
|
|
51
|
+
5. Every state-changing action returns an updated snapshot. Use the new refs from that result because refs can
|
|
52
|
+
become stale when the page changes.
|
|
53
|
+
6. On large pages, use `browser_find` to locate relevant snapshot nodes without loading the entire tree again.
|
|
54
|
+
7. Use `browser_take_screenshot` only for visual inspection. Do not choose interaction targets from screenshots.
|
|
55
|
+
8. Use explicit waits for visible or disappearing text when an application updates asynchronously.
|
|
56
|
+
9. If an action reports a dialog or file chooser, handle that modal before attempting another browser action.
|
|
48
57
|
|
|
49
58
|
## **CRITICAL: URL Navigation Guidelines**
|
|
50
59
|
|