kolega-code 0.8.4__tar.gz → 0.9.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.8.4 → kolega_code-0.9.0}/.env.example +1 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/CHANGELOG.md +10 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/PKG-INFO +1 -1
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/configuration/environment-variables.md +7 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/configuration/providers-and-models.mdx +12 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/__init__.py +1 -1
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/__init__.py +1 -1
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/app.py +20 -3
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/config.py +2 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/messages.py +6 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/provider_registry.py +33 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/tui/agent_runtime.py +0 -3
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/tui/status_dashboard.py +7 -2
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/config.py +3 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/llm/client.py +2 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/llm/exceptions.py +1 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/llm/models.py +7 -4
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/llm/providers/openai.py +3 -1
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/llm/specs.py +321 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/pyproject.toml +1 -1
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_live_providers.py +69 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_openai_message_conversion.py +92 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_provider_usage_mapping.py +9 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_bootstrap_settings.py +26 -6
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_cli_config.py +34 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_settings.py +19 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/uv.lock +2 -2
- {kolega_code-0.8.4 → kolega_code-0.9.0}/.githooks/pre-commit +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/.github/workflows/ci.yml +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/.github/workflows/docs.yml +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/.github/workflows/release.yml +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/.gitignore +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/.pre-commit-config.yaml +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/CONTRIBUTING.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/LICENSE +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/README.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/RELEASING.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/SECURITY.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/.gitignore +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/README.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/astro.config.mjs +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/package-lock.json +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/package.json +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/public/favicon.svg +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/assets/coverage.svg +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/assets/demo.gif +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/assets/kolega-dark.svg +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/assets/kolega-light.svg +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/cli/ask.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/cli/doctor.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/cli/overview.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/cli/sessions.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/concepts/agents.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/concepts/how-it-works.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/concepts/tools.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/configuration/settings-and-api-keys.mdx +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/configuration/sign-in-with-chatgpt.mdx +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/getting-started/installation.mdx +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/getting-started/quick-start.mdx +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/gigacode.mdx +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/hooks.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/index.mdx +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/skills.mdx +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/tui/composer.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/tui/interface.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/tui/modes.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/tui/sessions-and-resume.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/tui/slash-commands.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content.config.ts +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/styles/brand.css +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/docs/tsconfig.json +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/baseagent.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/browseragent.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/coder.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/common.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/compression.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/context.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/conversation.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/errors.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/generalagent.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/investigationagent.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/orchestration/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/orchestration/budget.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/orchestration/errors.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/orchestration/executor.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/orchestration/guide.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/orchestration/journal.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/orchestration/runtime.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/orchestration/types.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/planningagent.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_provider.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/auxiliary/tools/think_hard.system.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/prompts.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/agent_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/base_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/browser_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/build_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/create_file_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/glob_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/list_directory_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/read_file_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/read_image_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/replace_entire_file_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/replace_lines_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/search_and_replace_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/search_backends/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/search_backends/tavily.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/search_codebase_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/terminal_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/think_hard_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/web_fetch_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/web_search_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/tools.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/agent/utils/commands.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/auth/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/auth/_jwt.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/auth/chatgpt_oauth.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/auth/constants.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/auth/tokens.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/clipboard_image.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/connection.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/file_index.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/main.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/mentions.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/session_store.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/settings.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/skills.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/slash_commands.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/theme.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/tui/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/tui/command_handlers.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/tui/constants.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/tui/prompt_flows.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/tui/settings_panel.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/tui/state.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/tui/styles.tcss +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/tui/sub_agent_screen.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/tui/transcript.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/tui/widgets.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/cli/updater.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/events.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/hooks/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/hooks/backends.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/hooks/config.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/hooks/dispatcher.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/hooks/events.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/hooks/matcher.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/hooks/outcome.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/llm/instrumented_client.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/llm/providers/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/llm/providers/anthropic.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/llm/providers/base.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/llm/providers/google.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/llm/providers/models.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/llm/providers/openai_responses.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/llm/providers/responses_common.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/llm/ratelimit.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/llm/tool_execution_ids.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/local_state.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/models/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/models/sandbox_terminal_state.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/permissions.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/runtime.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/sandbox/README.md +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/sandbox/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/sandbox/async_filesystem.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/sandbox/base.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/sandbox/browser.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/sandbox/event_loop.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/sandbox/filesystem.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/sandbox/local.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/sandbox/serializer.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/sandbox/terminal.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/sandbox/utils.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/services/base.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/services/browser.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/services/file_system.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/services/html.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/services/terminal.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/services/terminal_buffer.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/tools/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/tools/core.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/tools/definitions.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/tools/registry.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/utils/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/kolega_code/utils/images.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/run_tests.sh +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/scripts/check-dev-hooks.sh +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/scripts/install-kolega-code.sh +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/scripts/setup-dev.sh +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/compaction_helpers.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/conftest.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/_token_counting_utils.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_anthropic_token_counting.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_billing_openai_cache.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_chatgpt_live.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_chatgpt_oauth_auth_config.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_chatgpt_oauth_conversion.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_chatgpt_oauth_provider.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_chatgpt_oauth_provider_generate.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_chatgpt_oauth_streaming.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_client.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_client_live.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_client_runtime.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_dashscope_mapping.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_error_boundary.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_exceptions.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_google_thought_signature.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_google_tool_signature_live.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_instrumented_client.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_instrumented_client_integration.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_instrumented_client_stream.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_langfuse_normalization.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_message_conversion.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_model_specs.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_openai_cached_tokens.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_openai_cached_tokens_stream.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_openai_responses_provider.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_openai_token_counting.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_supports_vision.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_thinking_effort.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/llm/test_tool_execution_ids.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/orchestration/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/orchestration/test_orchestration.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/services/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/services/test_browser.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/services/test_browser_console_logs.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/services/test_browser_content.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/services/test_browser_integration.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/services/test_browser_parity.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/services/test_file_system.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/services/test_file_system_integration.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/services/test_file_system_path.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/services/test_local_file_system.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/services/test_sandbox_terminal_input.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/services/test_terminal.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/services/test_terminal_buffer.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/services/test_terminal_state_serializer.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_agent_tools_inventory.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_base_agent.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_base_agent_anthropic_history_validation.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_base_agent_compaction.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_base_agent_effective_history.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_base_agent_history_serialization.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_base_agent_prompt_context.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_base_agent_role_overrides.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_base_agent_runtime.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_base_agent_tool_call_repair.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_base_agent_tool_call_repair_integration.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_base_agent_tool_execution.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_coder_attachments.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_coder_prompt_extensions.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_commands.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_compaction_integration.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_compaction_persistence.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_compaction_subagent.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_compaction_tui_events.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_compress_command.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_compression.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_conversation_compaction.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_duplicate_tool_results.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_empty_message_handling.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_event_emitter.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_general_agent.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_gigacode_gating.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_history_adapter_thinking.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_history_image_blocks.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_hooks_integration.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_html.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_image_compat.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_parallel_tool_calls.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_permissions.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_planning_agent.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_prompt_provider.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_prompts.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_read_image_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_tool_collection_builtin_dispatch.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_tool_collection_config.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_tool_collection_extensions.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_tool_collection_initialization.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_tool_collection_memory.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_tool_registry.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/test_tools.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_agent_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_base_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_browser_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_build_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_create_file_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_edit_preview.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_glob_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_glob_tool_sandbox_parity.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_list_directory_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_read_file_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_replace_entire_file_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_replace_lines_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_search_and_replace_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_search_codebase_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_terminal_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_think_hard_integration.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_think_hard_streaming.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_think_hard_streaming_content.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_think_hard_streaming_errors.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_think_hard_streaming_updates.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_web_fetch_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_web_search_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/agent/tool_backend/test_workflow_tool.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/auth/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/auth/test_chatgpt_oauth.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/auth/test_tokens.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/_app_test_utils.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_agent_wiring.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_compaction_restore.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_composer_commands.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_composer_input.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_conversation_rendering.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_focus_behavior.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_image_vision_warning.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_mention_dropdown.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_misc_commands.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_model_effort_commands.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_model_switch_vision.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_modes_planning.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_navigation_commands.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_permission_prompts.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_persistence_history.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_plan_lifecycle.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_planning_questions.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_planning_restore.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_rendering_entries.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_rendering_errors.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_rendering_scroll.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_rendering_selection.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_rendering_status.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_rendering_streaming.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_rendering_terminal_logs.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_rendering_tools.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_skill_commands.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_slash_dropdown.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_status_modes.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_app_sub_agents_workflows.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_clipboard_image.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_connection.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_file_index.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_main.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_mentions.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_provider_registry.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_session_store.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_skills.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_slash_commands.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_themes.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_tui_stylesheet.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/cli/test_updater.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/conftest.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/hooks/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/hooks/test_hooks.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/tools/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/tools/test_definitions.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/utils/__init__.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/utils/test_images.py +0 -0
- {kolega_code-0.8.4 → kolega_code-0.9.0}/tests/utils/test_images_ascii.py +0 -0
|
@@ -6,6 +6,16 @@ This project uses GitHub Releases for detailed generated release notes. This fil
|
|
|
6
6
|
|
|
7
7
|
## Unreleased
|
|
8
8
|
|
|
9
|
+
## 0.9.0 - 2026-06-24
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Added Ollama Cloud as a supported provider, including its model catalog and reasoning-field capture.
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- Clarified the disconnected state shown on first run when no provider is configured.
|
|
18
|
+
|
|
9
19
|
## 0.8.4 - 2026-06-24
|
|
10
20
|
|
|
11
21
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kolega-code
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.0
|
|
4
4
|
Summary: Local-first AI coding agent for 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/
|
{kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/configuration/environment-variables.md
RENAMED
|
@@ -46,12 +46,14 @@ provider or model.
|
|
|
46
46
|
| `DEEPSEEK_API_KEY` | DeepSeek |
|
|
47
47
|
| `ZAI_API_KEY` | Z.AI (GLM Coding Plan) |
|
|
48
48
|
| `KIMI_CODING_API_KEY` | Kimi Coding Plan |
|
|
49
|
+
| `OLLAMA_API_KEY` | Ollama Cloud |
|
|
49
50
|
|
|
50
51
|
The local `llama` provider needs no key. The `zai` key authenticates against Z.AI's
|
|
51
52
|
Anthropic-compatible endpoint (it is the key Z.AI also documents as `ANTHROPIC_AUTH_TOKEN`).
|
|
52
53
|
The `kimi_coding` key authenticates against the Kimi Coding Plan's separate
|
|
53
54
|
Anthropic-compatible endpoint (`https://api.kimi.com/coding/`), which is distinct from the
|
|
54
55
|
standard Moonshot API used by the `moonshot` provider.
|
|
56
|
+
The `OLLAMA_API_KEY` key authenticates against Ollama Cloud's direct API (`https://ollama.com/v1` for OpenAI-compatible requests).
|
|
55
57
|
|
|
56
58
|
## Model selection
|
|
57
59
|
|
|
@@ -120,6 +122,7 @@ MOONSHOT_API_KEY=
|
|
|
120
122
|
DEEPSEEK_API_KEY=
|
|
121
123
|
FIREWORKS_API_KEY=
|
|
122
124
|
ANTHROPIC_API_KEY=
|
|
125
|
+
OLLAMA_API_KEY=
|
|
123
126
|
|
|
124
127
|
# Optional: choose models per role
|
|
125
128
|
KOLEGA_CODE_PROVIDER=moonshot
|
|
@@ -130,6 +133,10 @@ KOLEGA_CODE_THINKING_EFFORT=auto
|
|
|
130
133
|
# KOLEGA_CODE_PROVIDER=fireworks
|
|
131
134
|
# KOLEGA_CODE_MODEL=accounts/fireworks/models/glm-5p2
|
|
132
135
|
|
|
136
|
+
# Ollama Cloud example:
|
|
137
|
+
# KOLEGA_CODE_PROVIDER=ollama_cloud
|
|
138
|
+
# KOLEGA_CODE_MODEL=glm-5.2
|
|
139
|
+
|
|
133
140
|
# Optional: web search
|
|
134
141
|
KOLEGA_CODE_WEB_SEARCH_BACKEND=duckduckgo
|
|
135
142
|
|
{kolega_code-0.8.4 → kolega_code-0.9.0}/docs/src/content/docs/configuration/providers-and-models.mdx
RENAMED
|
@@ -27,6 +27,7 @@ The agent runtime recognizes these providers:
|
|
|
27
27
|
| DeepSeek | `deepseek` | `DEEPSEEK_API_KEY` |
|
|
28
28
|
| Z.AI (GLM Coding Plan) | `zai` | `ZAI_API_KEY` |
|
|
29
29
|
| Kimi Coding Plan | `kimi_coding` | `KIMI_CODING_API_KEY` |
|
|
30
|
+
| Ollama Cloud | `ollama_cloud` | `OLLAMA_API_KEY` |
|
|
30
31
|
| Llama (local) | `llama` | _none — local model_ |
|
|
31
32
|
|
|
32
33
|
<Aside type="tip">
|
|
@@ -45,6 +46,15 @@ with thinking effort `auto` (enabled) requests route to **K2.7 Code**, and with
|
|
|
45
46
|
(disabled) they route to **K2.6**. Set `KIMI_CODING_API_KEY` to your Kimi Coding Plan key.
|
|
46
47
|
</Aside>
|
|
47
48
|
|
|
49
|
+
<Aside type="tip">
|
|
50
|
+
**Ollama Cloud.** The `ollama_cloud` provider uses Ollama Cloud's direct
|
|
51
|
+
OpenAI-compatible API at `https://ollama.com/v1` with `OLLAMA_API_KEY`. Kolega
|
|
52
|
+
Code uses the direct API model IDs returned by Ollama, such as **`glm-5.2`** and
|
|
53
|
+
**`gpt-oss:120b`**, rather than local Ollama aliases such as `:cloud` or
|
|
54
|
+
`-cloud`. Ollama may deprecate or retire older cloud models, so the supported
|
|
55
|
+
model catalog should be refreshed periodically from Ollama's model library/API.
|
|
56
|
+
</Aside>
|
|
57
|
+
|
|
48
58
|
<Aside type="tip">
|
|
49
59
|
**Fireworks.ai.** The `fireworks` provider targets Fireworks' OpenAI-compatible
|
|
50
60
|
serverless endpoint (`https://api.fireworks.ai/inference/v1`) with `FIREWORKS_API_KEY`.
|
|
@@ -164,6 +174,8 @@ models in the TUI.
|
|
|
164
174
|
| Z.AI `glm-5.2` | `high`, `max` | `max` |
|
|
165
175
|
| Z.AI `glm-5.1` | `auto`, `none` | `auto` |
|
|
166
176
|
| Fireworks serverless reasoning models | `none`, `low`, `medium`, `high`, `max` | `medium` |
|
|
177
|
+
| Ollama Cloud thinking models | `none`, `low`, `medium`, `high`, `max` | `medium` |
|
|
178
|
+
| Ollama Cloud `gpt-oss:*` | `low`, `medium`, `high` | `medium` |
|
|
167
179
|
| Google `gemini-2.5-pro` | `auto`, `low`, `medium`, `high` | `medium` |
|
|
168
180
|
| OpenAI reasoning models | `low`, `medium`, `high` | `medium` |
|
|
169
181
|
|
|
@@ -714,6 +714,9 @@ class KolegaCodeApp(
|
|
|
714
714
|
if not stripped_text or self.agent is None:
|
|
715
715
|
if stripped_text:
|
|
716
716
|
self._set_settings_status(messages.SETTINGS_REQUIRED, tone="warning")
|
|
717
|
+
if self.config is None:
|
|
718
|
+
self._set_composer_status(messages.DISCONNECTED_COMPOSER_PLACEHOLDER)
|
|
719
|
+
self._show_composer_hint(messages.DISCONNECTED_ACTIVITY, tone="warning")
|
|
717
720
|
return
|
|
718
721
|
# Build attachments first (without clearing pending) so the vision gate
|
|
719
722
|
# can block before we consume the composer text and pending images.
|
|
@@ -1340,6 +1343,10 @@ class KolegaCodeApp(
|
|
|
1340
1343
|
def _set_chat_enabled(self, enabled: bool) -> None:
|
|
1341
1344
|
composer = self.query_one("#composer", tui_widgets.ChatComposer)
|
|
1342
1345
|
composer.disabled = not enabled or self._plan_decision_active or self._pending_approval is not None
|
|
1346
|
+
if self.config is None and self.agent is None:
|
|
1347
|
+
composer.placeholder = messages.DISCONNECTED_COMPOSER_PLACEHOLDER
|
|
1348
|
+
elif enabled and composer.placeholder == messages.DISCONNECTED_COMPOSER_PLACEHOLDER:
|
|
1349
|
+
composer.placeholder = messages.COMPOSER_PLACEHOLDER
|
|
1343
1350
|
|
|
1344
1351
|
def _set_composer_status(self, status: str) -> None:
|
|
1345
1352
|
self.query_one("#composer", tui_widgets.ChatComposer).placeholder = status
|
|
@@ -1460,10 +1467,19 @@ class KolegaCodeApp(
|
|
|
1460
1467
|
if model
|
|
1461
1468
|
else "not checked until a model is configured"
|
|
1462
1469
|
)
|
|
1463
|
-
|
|
1470
|
+
startup_lines = [*tui_constants.STARTUP_WORDMARK, ""]
|
|
1471
|
+
if self.config is None:
|
|
1472
|
+
startup_lines.extend(
|
|
1473
|
+
[
|
|
1474
|
+
messages.DISCONNECTED_HEADLINE,
|
|
1475
|
+
"",
|
|
1476
|
+
messages.DISCONNECTED_STARTUP_GUIDANCE,
|
|
1477
|
+
messages.DISCONNECTED_SIDEBAR_GUIDANCE,
|
|
1478
|
+
"",
|
|
1479
|
+
]
|
|
1480
|
+
)
|
|
1481
|
+
startup_lines.extend(
|
|
1464
1482
|
[
|
|
1465
|
-
*tui_constants.STARTUP_WORDMARK,
|
|
1466
|
-
"",
|
|
1467
1483
|
f"Project: {self.project_path}",
|
|
1468
1484
|
f"Session: {session_id}",
|
|
1469
1485
|
f"Mode: {self.mode}",
|
|
@@ -1477,6 +1493,7 @@ class KolegaCodeApp(
|
|
|
1477
1493
|
f"Ctrl+C stop turn {theme.g(Glyph.BULLET_SEP)} Cmd+C copy selection {theme.g(Glyph.BULLET_SEP)} / commands",
|
|
1478
1494
|
]
|
|
1479
1495
|
)
|
|
1496
|
+
return "\n".join(startup_lines)
|
|
1480
1497
|
|
|
1481
1498
|
def _startup_model(self) -> tuple[str, str]:
|
|
1482
1499
|
if self.config is not None:
|
|
@@ -49,6 +49,7 @@ API_KEY_ENV = {
|
|
|
49
49
|
ModelProvider.DEEPSEEK: "DEEPSEEK_API_KEY",
|
|
50
50
|
ModelProvider.ZAI: "ZAI_API_KEY",
|
|
51
51
|
ModelProvider.KIMI_CODING: "KIMI_CODING_API_KEY",
|
|
52
|
+
ModelProvider.OLLAMA_CLOUD: "OLLAMA_API_KEY",
|
|
52
53
|
}
|
|
53
54
|
|
|
54
55
|
DEFAULT_WEB_SEARCH_BACKEND = "duckduckgo"
|
|
@@ -399,6 +400,7 @@ def build_agent_config(
|
|
|
399
400
|
deepseek_api_key=_api_key_for_provider(ModelProvider.DEEPSEEK, loaded_env, settings),
|
|
400
401
|
zai_api_key=_api_key_for_provider(ModelProvider.ZAI, loaded_env, settings),
|
|
401
402
|
kimi_coding_api_key=_api_key_for_provider(ModelProvider.KIMI_CODING, loaded_env, settings),
|
|
403
|
+
ollama_cloud_api_key=_api_key_for_provider(ModelProvider.OLLAMA_CLOUD, loaded_env, settings),
|
|
402
404
|
environment=overrides.environment or loaded_env.get("KOLEGA_CODE_ENVIRONMENT", "development"),
|
|
403
405
|
long_context_config=_model_config(long_provider, long_model, thinking_effort=active_thinking_effort),
|
|
404
406
|
fast_config=_model_config(fast_provider, fast_model),
|
|
@@ -9,6 +9,7 @@ from __future__ import annotations
|
|
|
9
9
|
|
|
10
10
|
# Composer placeholders and modal prompts
|
|
11
11
|
COMPOSER_PLACEHOLDER = "Ask Kolega Code..."
|
|
12
|
+
DISCONNECTED_COMPOSER_PLACEHOLDER = "Connect a model in Settings before chatting."
|
|
12
13
|
PLAN_READY_PLACEHOLDER = "Plan ready. Choose Implement plan or Discuss further."
|
|
13
14
|
QUESTION_PLACEHOLDER = "Choose an option below or type a custom answer..."
|
|
14
15
|
APPROVAL_PLACEHOLDER = "Choose whether to allow this action..."
|
|
@@ -18,6 +19,11 @@ THEME_PLACEHOLDER = "Choose a theme below or type a theme name..."
|
|
|
18
19
|
|
|
19
20
|
# Durable transcript messages
|
|
20
21
|
THREAD_RESET_MESSAGE = "Thread reset. Previous messages were cleared."
|
|
22
|
+
DISCONNECTED_HEADLINE = "Not connected."
|
|
23
|
+
DISCONNECTED_STARTUP_GUIDANCE = "Choose a provider and add an API key or sign in from the Settings tab before chatting."
|
|
24
|
+
DISCONNECTED_SIDEBAR_GUIDANCE = "Press Ctrl+O to open the sidebar, then select Settings."
|
|
25
|
+
DISCONNECTED_ACTIVITY = "Open Settings and connect a provider to start chatting."
|
|
26
|
+
DISCONNECTED_MODEL = "not connected"
|
|
21
27
|
TASK_LIST_EMPTY_MESSAGE = "No task list has been set."
|
|
22
28
|
PLAN_EMPTY_MESSAGE = "No plan captured yet."
|
|
23
29
|
|
|
@@ -34,6 +34,7 @@ PROVIDER_LABELS: dict[ModelProvider, str] = {
|
|
|
34
34
|
ModelProvider.FIREWORKS: "Fireworks",
|
|
35
35
|
ModelProvider.TOGETHER: "Together AI",
|
|
36
36
|
ModelProvider.DASHSCOPE: "DashScope / Qwen",
|
|
37
|
+
ModelProvider.OLLAMA_CLOUD: "Ollama Cloud",
|
|
37
38
|
}
|
|
38
39
|
|
|
39
40
|
# Friendly display names for models. Anything not listed falls back to its raw
|
|
@@ -84,6 +85,35 @@ MODEL_LABELS: dict[str, str] = {
|
|
|
84
85
|
# DashScope / Qwen
|
|
85
86
|
"qwen3-coder-plus": "Qwen3 Coder Plus",
|
|
86
87
|
"qwen3-coder-flash": "Qwen3 Coder Flash",
|
|
88
|
+
# Ollama Cloud
|
|
89
|
+
"deepseek-v3.1:671b": "DeepSeek V3.1 671B",
|
|
90
|
+
"deepseek-v3.2": "DeepSeek V3.2",
|
|
91
|
+
"devstral-2:123b": "Devstral 2 123B",
|
|
92
|
+
"devstral-small-2:24b": "Devstral Small 2 24B",
|
|
93
|
+
"gemini-3-flash-preview": "Gemini 3 Flash Preview",
|
|
94
|
+
"gemma3:4b": "Gemma 3 4B",
|
|
95
|
+
"gemma3:12b": "Gemma 3 12B",
|
|
96
|
+
"gemma3:27b": "Gemma 3 27B",
|
|
97
|
+
"gemma4:31b": "Gemma 4 31B",
|
|
98
|
+
"glm-4.7": "GLM-4.7",
|
|
99
|
+
"glm-5": "GLM-5",
|
|
100
|
+
"gpt-oss:20b": "GPT-OSS 20B",
|
|
101
|
+
"gpt-oss:120b": "GPT-OSS 120B",
|
|
102
|
+
"kimi-k2.5": "Kimi K2.5",
|
|
103
|
+
"minimax-m2.1": "MiniMax M2.1",
|
|
104
|
+
"minimax-m2.5": "MiniMax M2.5",
|
|
105
|
+
"minimax-m2.7": "MiniMax M2.7",
|
|
106
|
+
"minimax-m3": "MiniMax M3",
|
|
107
|
+
"ministral-3:3b": "Ministral 3 3B",
|
|
108
|
+
"ministral-3:8b": "Ministral 3 8B",
|
|
109
|
+
"ministral-3:14b": "Ministral 3 14B",
|
|
110
|
+
"mistral-large-3:675b": "Mistral Large 3 675B",
|
|
111
|
+
"nemotron-3-nano:30b": "Nemotron 3 Nano 30B",
|
|
112
|
+
"nemotron-3-super": "Nemotron 3 Super",
|
|
113
|
+
"nemotron-3-ultra": "Nemotron 3 Ultra",
|
|
114
|
+
"qwen3-coder-next": "Qwen3 Coder Next",
|
|
115
|
+
"qwen3-coder:480b": "Qwen3 Coder 480B",
|
|
116
|
+
"qwen3.5:397b": "Qwen3.5 397B",
|
|
87
117
|
}
|
|
88
118
|
|
|
89
119
|
# Per-provider default model used when only a provider is selected. Covers the
|
|
@@ -101,6 +131,7 @@ PROVIDER_DEFAULT_MODEL: dict[ModelProvider, str] = {
|
|
|
101
131
|
ModelProvider.FIREWORKS: "accounts/fireworks/models/glm-5p2",
|
|
102
132
|
ModelProvider.TOGETHER: "moonshotai/Kimi-K2.7-Code",
|
|
103
133
|
ModelProvider.DASHSCOPE: "qwen3-coder-plus",
|
|
134
|
+
ModelProvider.OLLAMA_CLOUD: "gpt-oss:20b",
|
|
104
135
|
}
|
|
105
136
|
|
|
106
137
|
UI_DEFAULT_PROVIDER = ModelProvider.MOONSHOT.value
|
|
@@ -130,6 +161,8 @@ def _api_key_env(provider: ModelProvider) -> str:
|
|
|
130
161
|
"""
|
|
131
162
|
if provider == ModelProvider.OPENAI_CHATGPT:
|
|
132
163
|
return ""
|
|
164
|
+
if provider == ModelProvider.OLLAMA_CLOUD:
|
|
165
|
+
return "OLLAMA_API_KEY"
|
|
133
166
|
return f"{provider.value.upper()}_API_KEY"
|
|
134
167
|
|
|
135
168
|
|
|
@@ -4,8 +4,6 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import asyncio
|
|
6
6
|
|
|
7
|
-
from textual.widgets import TabbedContent
|
|
8
|
-
|
|
9
7
|
from kolega_code.agent import AgentConfig, AgentEvent, CoderAgent, PlanningAgent, PromptExtension, ToolExtension
|
|
10
8
|
from kolega_code.agent.prompt_provider import AgentMode
|
|
11
9
|
from kolega_code.hooks import HookDispatcher, HookEvent, load_hook_config, project_hooks_present
|
|
@@ -198,7 +196,6 @@ class AgentRuntimeMixin:
|
|
|
198
196
|
self._refresh_status_dashboard()
|
|
199
197
|
self._set_settings_status(messages.SETTINGS_INCOMPLETE.format(error=exc), tone="error")
|
|
200
198
|
self._ensure_startup_entry()
|
|
201
|
-
self.query_one("#events", TabbedContent).active = "settings_pane"
|
|
202
199
|
return
|
|
203
200
|
|
|
204
201
|
self.config = config
|
|
@@ -38,7 +38,12 @@ class StatusDashboardMixin:
|
|
|
38
38
|
|
|
39
39
|
def _format_status_dashboard(self) -> str:
|
|
40
40
|
state = self._status_state
|
|
41
|
-
|
|
41
|
+
disconnected = self.config is None
|
|
42
|
+
provider_model = (
|
|
43
|
+
messages.DISCONNECTED_MODEL
|
|
44
|
+
if disconnected
|
|
45
|
+
else (f"{state.provider}/{state.model}" if state.model else state.provider)
|
|
46
|
+
)
|
|
42
47
|
effort = state.thinking_effort or "not supported"
|
|
43
48
|
mode = state.mode.title()
|
|
44
49
|
permission_mode = state.permission_mode.title()
|
|
@@ -83,7 +88,7 @@ class StatusDashboardMixin:
|
|
|
83
88
|
f"{label('Context')}\n"
|
|
84
89
|
f"{context_lines}\n\n"
|
|
85
90
|
f"{label('Activity')}\n"
|
|
86
|
-
f"{escape(state.activity)}"
|
|
91
|
+
f"{escape(messages.DISCONNECTED_ACTIVITY if disconnected else state.activity)}"
|
|
87
92
|
)
|
|
88
93
|
|
|
89
94
|
def _context_bar(self, usage_percentage: float) -> str:
|
|
@@ -23,6 +23,7 @@ class ModelProvider(str, Enum):
|
|
|
23
23
|
DEEPSEEK = "deepseek"
|
|
24
24
|
ZAI = "zai"
|
|
25
25
|
KIMI_CODING = "kimi_coding"
|
|
26
|
+
OLLAMA_CLOUD = "ollama_cloud"
|
|
26
27
|
|
|
27
28
|
|
|
28
29
|
class AgentRole(str, Enum):
|
|
@@ -131,6 +132,7 @@ class AgentConfig(BaseModel):
|
|
|
131
132
|
deepseek_api_key: Optional[str] = Field(default=None, description="API key for DeepSeek")
|
|
132
133
|
zai_api_key: Optional[str] = Field(default=None, description="API key for Z.AI (GLM Coding Plan)")
|
|
133
134
|
kimi_coding_api_key: Optional[str] = Field(default=None, description="API key for Kimi Coding Plan")
|
|
135
|
+
ollama_cloud_api_key: Optional[str] = Field(default=None, description="API key for Ollama Cloud")
|
|
134
136
|
|
|
135
137
|
# ChatGPT-subscription OAuth credentials (used instead of an api key for the
|
|
136
138
|
# OPENAI_CHATGPT provider). The live, refreshing token manager is attached
|
|
@@ -221,6 +223,7 @@ class AgentConfig(BaseModel):
|
|
|
221
223
|
ModelProvider.DEEPSEEK: self.deepseek_api_key,
|
|
222
224
|
ModelProvider.ZAI: self.zai_api_key,
|
|
223
225
|
ModelProvider.KIMI_CODING: self.kimi_coding_api_key,
|
|
226
|
+
ModelProvider.OLLAMA_CLOUD: self.ollama_cloud_api_key,
|
|
224
227
|
ModelProvider.LLAMA: None, # Local model, no API key needed
|
|
225
228
|
}
|
|
226
229
|
return api_key_map[provider]
|
|
@@ -135,6 +135,7 @@ class LLMClient:
|
|
|
135
135
|
"deepseek": AnthropicProvider,
|
|
136
136
|
"zai": AnthropicProvider,
|
|
137
137
|
"kimi_coding": AnthropicProvider,
|
|
138
|
+
"ollama_cloud": OpenAIProvider,
|
|
138
139
|
}
|
|
139
140
|
|
|
140
141
|
base_urls: Dict[str, str] = {
|
|
@@ -150,6 +151,7 @@ class LLMClient:
|
|
|
150
151
|
"deepseek": "https://api.deepseek.com/anthropic",
|
|
151
152
|
"zai": "https://api.z.ai/api/anthropic",
|
|
152
153
|
"kimi_coding": "https://api.kimi.com/coding",
|
|
154
|
+
"ollama_cloud": "https://ollama.com/v1",
|
|
153
155
|
}
|
|
154
156
|
|
|
155
157
|
provider_class = providers.get(provider.lower())
|
|
@@ -141,6 +141,7 @@ def _provider_display_name(provider: str | None) -> str:
|
|
|
141
141
|
ModelProvider.MOONSHOT.value: "Moonshot",
|
|
142
142
|
ModelProvider.DEEPSEEK.value: "DeepSeek",
|
|
143
143
|
ModelProvider.LLAMA.value: "Llama",
|
|
144
|
+
ModelProvider.OLLAMA_CLOUD.value: "Ollama Cloud",
|
|
144
145
|
}
|
|
145
146
|
if not provider:
|
|
146
147
|
return "The selected provider"
|
|
@@ -934,8 +934,10 @@ class MessageChunk:
|
|
|
934
934
|
delta = chunk.choices[0].delta
|
|
935
935
|
|
|
936
936
|
# Fireworks and other OpenAI-compatible reasoning models stream their
|
|
937
|
-
# reasoning separately from answer text.
|
|
938
|
-
|
|
937
|
+
# reasoning separately from answer text. Ollama Cloud uses the
|
|
938
|
+
# OpenAI-compatible non-standard "reasoning" field instead of
|
|
939
|
+
# "reasoning_content".
|
|
940
|
+
reasoning_content = getattr(delta, "reasoning_content", None) or getattr(delta, "reasoning", None)
|
|
939
941
|
if reasoning_content:
|
|
940
942
|
return cls(type="thinking", thinking=reasoning_content)
|
|
941
943
|
|
|
@@ -1142,8 +1144,9 @@ class Message:
|
|
|
1142
1144
|
tool_use_blocks = []
|
|
1143
1145
|
|
|
1144
1146
|
# OpenAI-compatible reasoning models (including Fireworks via Chat
|
|
1145
|
-
# Completions) may return reasoning separately from answer text.
|
|
1146
|
-
|
|
1147
|
+
# Completions) may return reasoning separately from answer text. Ollama
|
|
1148
|
+
# Cloud uses the OpenAI-compatible non-standard "reasoning" field.
|
|
1149
|
+
reasoning_content = getattr(message, "reasoning_content", None) or getattr(message, "reasoning", None)
|
|
1147
1150
|
if reasoning_content:
|
|
1148
1151
|
content_blocks.append(ThinkingBlock(thinking=reasoning_content))
|
|
1149
1152
|
|
|
@@ -56,7 +56,9 @@ class OpenAIStreamWrapper:
|
|
|
56
56
|
if content:
|
|
57
57
|
self.final_content += content
|
|
58
58
|
|
|
59
|
-
reasoning_content =
|
|
59
|
+
reasoning_content = (
|
|
60
|
+
getattr(delta, "reasoning_content", None) or getattr(delta, "reasoning", None) or ""
|
|
61
|
+
)
|
|
60
62
|
if reasoning_content:
|
|
61
63
|
self.final_reasoning_content += reasoning_content
|
|
62
64
|
|