kolega-code 0.45.1__tar.gz → 0.47.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.45.1 → kolega_code-0.47.0}/CHANGELOG.md +55 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/PKG-INFO +4 -3
- {kolega_code-0.45.1 → kolega_code-0.47.0}/README.md +1 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/__init__.py +1 -1
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/__init__.py +1 -1
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/baseagent.py +1 -3
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/context.py +3 -5
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/model_routing.py +2 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/terminal_tool.py +1 -3
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/web_fetch_tool.py +1 -3
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/config.py +88 -4
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/messages.py +7 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/model_catalog.py +30 -2
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/model_connection.py +4 -1
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/provider_registry.py +23 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/settings.py +6 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/onboarding_screen.py +30 -2
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/settings_panel.py +59 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/settings_screen.py +17 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/styles.tcss +2 -1
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/config.py +36 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/client.py +44 -13
- kolega_code-0.47.0/kolega_code/llm/cloudflare_workers_ai.py +82 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/exceptions.py +65 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/instrumented_client.py +11 -2
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/providers/openai.py +32 -2
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/__init__.py +2 -0
- kolega_code-0.47.0/kolega_code/llm/specs/catalog/cloudflare_workers_ai.py +151 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/kimi_coding.py +32 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/moonshot.py +30 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/ollama_cloud.py +51 -3
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/openai.py +18 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/openai_chatgpt.py +18 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/openrouter.py +1299 -1231
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/tinker.py +78 -2
- kolega_code-0.47.0/kolega_code/llm/specs/cloudflare_workers_ai_catalog.py +249 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/thinking.py +11 -1
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/usage.py +1 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/security/secrets.py +1 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/pyproject.toml +13 -4
- {kolega_code-0.45.1 → kolega_code-0.47.0}/.gitignore +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/CONTRIBUTING.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/LICENSE +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/MIGRATION.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/RELEASING.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/LICENSE +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/manifest.json +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/deep-research/SKILL.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/deep-research/references/evidence-and-reporting.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/deep-research/references/gigacode-workflow.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/deep-research/scripts/deep-research.workflow +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/deep-research/scripts/materialize_report.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/docx/LICENSE +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/docx/SKILL.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/docx/references/examples.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/docx/references/limitations.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/docx/references/operations.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/docx/references/quality.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/docx/requirements.txt +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/docx/scripts/docx_tool.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/docx/scripts/smoke_test.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/humanizer/LICENSE +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/humanizer/SKILL.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pdf/LICENSE +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pdf/SKILL.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pdf/references/examples.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pdf/references/limitations.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pdf/references/ocr.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pdf/references/operations.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pdf/references/quality.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pdf/references/redaction.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-paddle.txt +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-surya.txt +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pdf/requirements.txt +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pdf/scripts/pdf_tool.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pdf/scripts/smoke_test.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pptx/LICENSE +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pptx/SKILL.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pptx/references/examples.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pptx/references/limitations.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pptx/references/operations.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pptx/requirements.txt +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pptx/scripts/pptx_tool.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/pptx/scripts/smoke_test.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/review/SKILL.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/review/references/github-publishing.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/skill-authoring/SKILL.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/skill-authoring/references/review-checklist.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/xlsx/LICENSE +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/xlsx/SKILL.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/xlsx/references/examples.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/xlsx/references/limitations.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/xlsx/references/operations.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/xlsx/references/quality.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/xlsx/requirements.txt +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/xlsx/scripts/smoke_test.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/_bundled_skills/skills/xlsx/scripts/xlsx_tool.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/acp/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/acp/agent_factory.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/acp/bridge.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/acp/diffs.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/acp/permissions.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/acp/plans.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/acp/questions.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/acp/server.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/acp/session.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/acp/usage.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/browseragent.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/coder.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/common.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/compression.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/conversation.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/custom_agents.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/edit_protocols.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/errors.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/eval/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/eval/bridge.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/eval/bundle-requirements.in +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/eval/bundle-requirements.txt +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/eval/env.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/eval/js_kernel.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/eval/kernel.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/eval/prelude.js +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/eval/prelude.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/eval/protocol.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/eval/py_kernel.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/eval/runner.js +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/eval/runner.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/generalagent.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/goal.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/handoff.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/investigationagent.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/orchestration/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/orchestration/accounting.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/orchestration/budget.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/orchestration/context.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/orchestration/errors.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/orchestration/executor.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/orchestration/guide.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/orchestration/journal.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/orchestration/runtime.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/orchestration/types.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/planningagent.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_dump.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_overrides.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_provider.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_exhausted.user.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_nudge.user.md.j2 +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/truncated_turn_nudge.user.md.j2 +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/auxiliary/handoff/document.system.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/auxiliary/handoff/document.user.md.j2 +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/extensions/cli/build_questions.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/extensions/cli/current_plan_artifact.md.j2 +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/extensions/cli/mode_switch_notice.md.j2 +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/extensions/cli/scratchpad.md.j2 +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list_readonly.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/extensions/cli/worktree_control.md.j2 +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/system/agents/coder_ask.md.j2 +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/system/agents/coder_base.md.j2 +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/system/includes/context_updates.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/system/includes/terminal_tools.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/agent_job.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/apply_patch.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/ask_user_choice.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_click.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_close.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_console_messages.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_drag.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_drop.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_evaluate.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_file_upload.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_fill_form.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_find.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_handle_dialog.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_hover.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_navigate.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_navigate_back.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_network_request.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_network_requests.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_press_key.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_resize.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_scroll.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_select_option.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_snapshot.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_tabs.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_take_screenshot.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_type.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/browser_wait_for.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/build_backend.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/build_frontend.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/claude_edit.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/claude_write.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/dispatch_agent.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/edit.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/eval.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/exec_command.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/get_host.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/get_task_list.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/get_task_list_readonly.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/hashline_edit.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/hashline_write.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/kill_command.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/list_agents.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/list_sessions.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/list_subagent_models.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/list_workflow_runs.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/lsp.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/lsp_edit.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/multi_edit.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/read.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/read_image.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/resolve.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/run_workflow.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/send_message.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/set_goal.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/skill.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/snapshot.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/switch_worktree.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/update_task_list.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/web_fetch.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/web_search.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/write.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/write_plan.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/tools/write_stdin.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/prompts.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/session_metadata.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/agent_tool.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/base_tool.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/browser_tool.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/build_tool.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/codex_patch.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/edit_tool.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/eval_tool.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/hashline_v2.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/lsp_tool.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/network_status.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/read_file_tool.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/read_image_tool.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/search_backends/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/search_backends/tavily.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/snapshot_tool.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/web_fetch/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/web_fetch/answering.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/web_fetch/documents.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/web_fetch/extractors.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/web_fetch/pipeline.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/web_fetch/retrieval.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/web_search_tool.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tool_definitions.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/tools.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/utils/commands.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/agent/volatile_context.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/auth/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/auth/_jwt.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/auth/chatgpt_oauth.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/auth/constants.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/auth/tokens.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/browser_extension/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/browser_extension/framing.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/browser_extension/installer.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/browser_extension/manager.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/browser_extension/multiplex.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/browser_extension/native_host.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/browser_extension/protocol.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/browser_extension/registry.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/browser_extension/runtime.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/acp.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/app.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/ask_output.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/atif_export.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/browser_backend.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/clipboard_image.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/connection.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/cron.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/diagnostics.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/file_index.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/gateway.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/goal.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/loop.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/main.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/mentions.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/peer_messaging.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/plan_artifacts.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/prompt_history.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/session_event_protocol.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/session_event_store.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/session_journal.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/session_store.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/session_usage.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/skills.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/slash_commands.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/theme.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/agent_runtime.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/app_base.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/background_status.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/boot_splash.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/changes_screen.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/command_handlers.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/constants.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/custom_model.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/discovery.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/loop_runtime.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/memory_screen.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/metadata.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/pacing.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/prompt_flows.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/session_diff.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/settings_widgets.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/shortcut_bar.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/startup.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/state.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/status_dashboard.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/sub_agent_screen.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/task_list.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/terminal_display.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/tool_presentation.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/transcript.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/turn_status.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/tui/widgets.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/cli/updater.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/events.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/extensions.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/access.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/access_settings.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/adapters/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/adapters/base.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/adapters/echo.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/adapters/telegram/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/adapters/telegram/adapter.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/adapters/telegram/formatting.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/bridge.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/commands.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/config.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/control_relay.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/daemon.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/event_router.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/questions.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/redaction.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/router.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/service.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/sessions.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/gateway/stt.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/git_env.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/hooks/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/hooks/backends.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/hooks/config.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/hooks/dispatcher.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/hooks/events.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/hooks/matcher.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/hooks/outcome.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/ledger.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/models.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/providers/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/providers/_token_encoding.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/providers/anthropic.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/providers/base.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/providers/deepseek_responses.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/providers/google.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/providers/mistral.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/providers/models.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/providers/openai_responses.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/providers/perplexity_responses.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/providers/responses_common.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/providers/tinker.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/providers/tinker_trace.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/ratelimit.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/accessors.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/anthropic.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/dashscope.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/deepseek.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/fireworks.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/google.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/groq.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/minimax.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/mistral.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/perplexity_agent.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/thinking_machines.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/together.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/xai.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/catalog/zai.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/custom_endpoints.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/mistral_catalog.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/ollama_cloud_catalog.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/openrouter_catalog.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/perplexity_catalog.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/tinker_catalog.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/types.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/specs/validation.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/timeouts.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/llm/tool_execution_ids.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/local_state.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/mcp/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/mcp/config.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/mcp/oauth.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/mcp/service.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/mcp/state.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/mcp/tools.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/mcp/transport.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/memory/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/memory/identity.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/memory/manager.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/memory/manifest.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/memory/markdown.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/memory/models.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/memory/protocol.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/memory/registry.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/models/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/models/sandbox_terminal_state.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/permissions.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/runtime.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/sandbox/README.md +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/sandbox/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/sandbox/async_filesystem.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/sandbox/base.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/sandbox/browser.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/sandbox/event_loop.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/sandbox/filesystem.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/sandbox/local.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/sandbox/serializer.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/sandbox/terminal.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/sandbox/utils.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/scratchpad.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/security/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/services/base.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/services/browser.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/services/file_system.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/services/html.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/services/lsp/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/services/lsp/client.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/services/lsp/config.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/services/lsp/detector.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/services/lsp/diagnostics.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/services/lsp/edits.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/services/lsp/manager.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/services/lsp/registry.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/services/lsp/registry.yaml +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/services/snapshots.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/services/terminal.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/services/terminal_buffer.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/services/workspace_scan.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/session/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/session/background.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/session/control.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/session/inbox.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/session/inmemory.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/session/projection.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/session/recording.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/session/runtime.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/session/store.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/testing/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/testing/store_conformance.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/tool_subjects.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/tools/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/tools/ask_user.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/tools/core.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/tools/definitions.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/tools/param_aliases.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/tools/registry.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/utils/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/utils/images.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/web/__init__.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/web/assets/fold.js +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/web/assets/player.css +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/web/assets/player.html +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/web/assets/player.js +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/web/bundle.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/web/hosting.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/web/redaction.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/web/server.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/web/singlefile.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/web/theme_css.py +0 -0
- {kolega_code-0.45.1 → kolega_code-0.47.0}/kolega_code/worktrees.py +0 -0
|
@@ -6,6 +6,61 @@ This project uses GitHub Releases for detailed generated release notes. This fil
|
|
|
6
6
|
|
|
7
7
|
## Unreleased
|
|
8
8
|
|
|
9
|
+
## 0.47.0 - 2026-10-27
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **GPT-6.1 Terra support.** OpenAI's mid-tier GPT-6.1 model (`gpt-6.1-terra`)
|
|
14
|
+
is selectable on both the `openai` and `openai_chatgpt` providers. It keeps the
|
|
15
|
+
generation's 1,050,000-token window with 128K output reserved on the API
|
|
16
|
+
provider, supports image input and hosted web search, and exposes a
|
|
17
|
+
`none`/`low`/`medium`/`high`/`xhigh`/`max` reasoning-effort ladder (`medium`
|
|
18
|
+
by default); only `minimal` is unavailable.
|
|
19
|
+
|
|
20
|
+
## 0.46.0 - 2026-10-27
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
|
|
24
|
+
- **Kimi K3.1 Pro support.** Moonshot's October 2026 K3.1 release is selectable
|
|
25
|
+
on both Kimi providers: `kimi-k3.1-pro` and `kimi-k3.1-pro-highspeed` on
|
|
26
|
+
`moonshot`, and `k3.1-pro` / `k3.1-pro-highspeed` on the Kimi Coding Plan.
|
|
27
|
+
All four always think and expose a `low`/`high`/`max` reasoning-effort ladder;
|
|
28
|
+
the 1M window is catalogued directly where every eligible plan has it. The
|
|
29
|
+
Coding Plan's `k3.1-pro` keeps a 256K budget because its 1M window is gated to
|
|
30
|
+
Pro-and-above plans.
|
|
31
|
+
- **Cloudflare Workers AI support.** Select `cloudflare_workers_ai` with a
|
|
32
|
+
Workers AI API token (`CLOUDFLARE_API_TOKEN` or Settings) and your account ID
|
|
33
|
+
(`CLOUDFLARE_ACCOUNT_ID`, or the new Account ID field on Settings → Providers
|
|
34
|
+
and in onboarding). The curated catalog covers tool-calling models with at
|
|
35
|
+
least a 128K window, led by GLM-5.3 (the default) plus GLM-5.3 Flash,
|
|
36
|
+
Kimi K2.7 Code, DeepSeek V4.1 Flash, GPT-OSS, and more, with Cloudflare's
|
|
37
|
+
per-model reasoning-effort ladders. `kolega-code models refresh --provider
|
|
38
|
+
cloudflare_workers_ai` discovers newer models from your account.
|
|
39
|
+
`CLOUDFLARE_AI_GATEWAY_ID` optionally routes requests through an AI Gateway.
|
|
40
|
+
Exhausted free allocations and Workers Paid-only models report a billing
|
|
41
|
+
error instead of retrying.
|
|
42
|
+
|
|
43
|
+
### Changed
|
|
44
|
+
|
|
45
|
+
- Refreshed the OpenRouter, Ollama Cloud, and Tinker model catalogs from their
|
|
46
|
+
live endpoints (2026-10-27 snapshots) with newly available models, removal of
|
|
47
|
+
retired entries, updated limits and capabilities, and a refreshed OpenRouter
|
|
48
|
+
featured ordering. OpenRouter also stopped advertising `temperature` for the
|
|
49
|
+
Anthropic family, matching their adaptive thinking behavior. The Perplexity
|
|
50
|
+
Agent catalog is unchanged because its live endpoint could not be read.
|
|
51
|
+
- Updated the documentation site's undici dependency to 8.12.3.
|
|
52
|
+
|
|
53
|
+
### Security
|
|
54
|
+
|
|
55
|
+
- Updated Brotli to 1.2.1, fixing an out-of-bounds write in the decoder
|
|
56
|
+
(CVE-2026-111497, GHSA-9v8h-qqgm-4m35) reachable through compressed HTTP
|
|
57
|
+
responses.
|
|
58
|
+
- Updated filelock to 4.2.4 for three `SoftFileLock`/`ReadWriteLock`
|
|
59
|
+
advisories (Kolega Code uses neither class) and setuptools to 84.2.0
|
|
60
|
+
(GHSA-xmj3-9gf7-h52w). The dev-only virtualenv pin moves to 21.14.5 so
|
|
61
|
+
filelock 4 resolves; its remaining advisories stay an accepted risk until
|
|
62
|
+
langfuse allows the fixed release.
|
|
63
|
+
|
|
9
64
|
## 0.45.1 - 2026-10-23
|
|
10
65
|
|
|
11
66
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kolega-code
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.47.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/
|
|
@@ -35,7 +35,7 @@ Requires-Dist: cryptography==48.0.1; sys_platform == 'darwin' and platform_machi
|
|
|
35
35
|
Requires-Dist: cryptography==50.0.0; sys_platform != 'darwin' or platform_machine != 'x86_64'
|
|
36
36
|
Requires-Dist: ddgs==9.14.4
|
|
37
37
|
Requires-Dist: fastapi==0.139.2
|
|
38
|
-
Requires-Dist: filelock==
|
|
38
|
+
Requires-Dist: filelock==4.2.4
|
|
39
39
|
Requires-Dist: firecrawl-py==4.28.2
|
|
40
40
|
Requires-Dist: google-genai==2.12.1
|
|
41
41
|
Requires-Dist: httpx==0.28.1
|
|
@@ -83,7 +83,7 @@ Requires-Dist: pytest-xdist==3.8.0; extra == 'dev'
|
|
|
83
83
|
Requires-Dist: pytest==9.0.3; extra == 'dev'
|
|
84
84
|
Requires-Dist: ruff==0.15.12; extra == 'dev'
|
|
85
85
|
Requires-Dist: twine==6.2.0; extra == 'dev'
|
|
86
|
-
Requires-Dist: virtualenv==21.
|
|
86
|
+
Requires-Dist: virtualenv==21.14.5; extra == 'dev'
|
|
87
87
|
Provides-Extra: tinker
|
|
88
88
|
Requires-Dist: tinker-cookbook==0.5.4; extra == 'tinker'
|
|
89
89
|
Requires-Dist: tinker==0.25.0; extra == 'tinker'
|
|
@@ -277,6 +277,7 @@ Supported model providers:
|
|
|
277
277
|
- Z.AI / GLM Coding Plan
|
|
278
278
|
- Kimi Coding Plan
|
|
279
279
|
- Ollama Cloud
|
|
280
|
+
- Cloudflare Workers AI
|
|
280
281
|
- local Llama
|
|
281
282
|
|
|
282
283
|
With a paid **ChatGPT** plan (Plus, Pro, or Business), `/login chatgpt` runs
|
|
@@ -1901,7 +1901,6 @@ class BaseAgent(LogMixin):
|
|
|
1901
1901
|
|
|
1902
1902
|
from kolega_code.llm.client import LLMClient
|
|
1903
1903
|
|
|
1904
|
-
endpoint = self.config.custom_endpoint_for(model_config)
|
|
1905
1904
|
client = LLMClient(
|
|
1906
1905
|
provider=model_config.provider.value,
|
|
1907
1906
|
api_key=self.config.get_api_key(model_config.provider) or "",
|
|
@@ -1912,8 +1911,7 @@ class BaseAgent(LogMixin):
|
|
|
1912
1911
|
token_manager=self.config.get_chatgpt_token_manager(),
|
|
1913
1912
|
usage_ledger=self.usage_ledger,
|
|
1914
1913
|
trace_sink=self.llm_trace_sink,
|
|
1915
|
-
|
|
1916
|
-
api_style=endpoint.api_style if endpoint else None,
|
|
1914
|
+
**self.config.llm_client_kwargs(model_config),
|
|
1917
1915
|
)
|
|
1918
1916
|
with llm_call_origin(helper_origin("hook_prompt")):
|
|
1919
1917
|
response = await client.generate(
|
|
@@ -113,7 +113,7 @@ class AgentContext:
|
|
|
113
113
|
itself is still passed per call.
|
|
114
114
|
"""
|
|
115
115
|
model_config = self.config.model_config_for_agent(agent_name)
|
|
116
|
-
|
|
116
|
+
connection_kwargs = self.config.llm_client_kwargs(model_config)
|
|
117
117
|
|
|
118
118
|
if self.telemetry.langfuse_client:
|
|
119
119
|
return InstrumentedLLMClient(
|
|
@@ -136,8 +136,7 @@ class AgentContext:
|
|
|
136
136
|
trace_sink=self.telemetry.llm_trace_sink,
|
|
137
137
|
context_window_tokens=self.config.context_window_tokens,
|
|
138
138
|
max_output_tokens=self.config.max_output_tokens,
|
|
139
|
-
|
|
140
|
-
api_style=endpoint.api_style if endpoint else None,
|
|
139
|
+
**connection_kwargs,
|
|
141
140
|
)
|
|
142
141
|
|
|
143
142
|
return LLMClient(
|
|
@@ -152,6 +151,5 @@ class AgentContext:
|
|
|
152
151
|
trace_sink=self.telemetry.llm_trace_sink,
|
|
153
152
|
context_window_tokens=self.config.context_window_tokens,
|
|
154
153
|
max_output_tokens=self.config.max_output_tokens,
|
|
155
|
-
|
|
156
|
-
api_style=endpoint.api_style if endpoint else None,
|
|
154
|
+
**connection_kwargs,
|
|
157
155
|
)
|
|
@@ -56,6 +56,8 @@ def provider_is_configured(config: AgentConfig, provider: ModelProvider) -> bool
|
|
|
56
56
|
return True
|
|
57
57
|
if provider == ModelProvider.OPENAI_CHATGPT:
|
|
58
58
|
return config.openai_chatgpt_tokens is not None
|
|
59
|
+
if provider == ModelProvider.CLOUDFLARE_WORKERS_AI:
|
|
60
|
+
return bool(config.get_api_key(provider)) and bool(config.cloudflare_account_id)
|
|
59
61
|
return bool(config.get_api_key(provider))
|
|
60
62
|
|
|
61
63
|
|
|
@@ -97,7 +97,6 @@ class TerminalTool(BaseTool):
|
|
|
97
97
|
provider = self.config.fast_config.provider
|
|
98
98
|
api_key = self.config.get_api_key(provider)
|
|
99
99
|
rate_limits = self.config.fast_config.rate_limits
|
|
100
|
-
endpoint = self.config.custom_endpoint_for(self.config.fast_config)
|
|
101
100
|
|
|
102
101
|
client = LLMClient(
|
|
103
102
|
provider=provider.value,
|
|
@@ -109,8 +108,7 @@ class TerminalTool(BaseTool):
|
|
|
109
108
|
token_manager=self.config.get_chatgpt_token_manager(),
|
|
110
109
|
usage_ledger=getattr(self.caller, "usage_ledger", None),
|
|
111
110
|
trace_sink=getattr(self.caller, "llm_trace_sink", None),
|
|
112
|
-
|
|
113
|
-
api_style=endpoint.api_style if endpoint else None,
|
|
111
|
+
**self.config.llm_client_kwargs(self.config.fast_config),
|
|
114
112
|
)
|
|
115
113
|
|
|
116
114
|
try:
|
|
@@ -146,7 +146,6 @@ class WebFetchTool(StreamingTool):
|
|
|
146
146
|
def _build_client(self) -> LLMClient:
|
|
147
147
|
provider = self.config.fast_config.provider
|
|
148
148
|
rate_limits = self.config.fast_config.rate_limits
|
|
149
|
-
endpoint = self.config.custom_endpoint_for(self.config.fast_config)
|
|
150
149
|
client_kwargs = {
|
|
151
150
|
"provider": provider.value,
|
|
152
151
|
"api_key": self.config.get_api_key(provider),
|
|
@@ -157,8 +156,7 @@ class WebFetchTool(StreamingTool):
|
|
|
157
156
|
"token_manager": self.config.get_chatgpt_token_manager(),
|
|
158
157
|
"usage_ledger": getattr(self.caller, "usage_ledger", None),
|
|
159
158
|
"trace_sink": getattr(self.caller, "llm_trace_sink", None),
|
|
160
|
-
|
|
161
|
-
"api_style": endpoint.api_style if endpoint else None,
|
|
159
|
+
**self.config.llm_client_kwargs(self.config.fast_config),
|
|
162
160
|
}
|
|
163
161
|
caller_llm = getattr(self.caller, "llm", None)
|
|
164
162
|
if isinstance(caller_llm, InstrumentedLLMClient):
|
|
@@ -20,6 +20,7 @@ from kolega_code.config import (
|
|
|
20
20
|
ModelProvider,
|
|
21
21
|
RateLimitConfig,
|
|
22
22
|
)
|
|
23
|
+
from kolega_code.llm import cloudflare_workers_ai
|
|
23
24
|
from kolega_code.llm.specs import MODEL_SPECS, get_model_specs, model_is_known, normalize_thinking_effort
|
|
24
25
|
from kolega_code.llm.specs.custom_endpoints import (
|
|
25
26
|
API_STYLES,
|
|
@@ -72,6 +73,7 @@ API_KEY_ENV = {
|
|
|
72
73
|
ModelProvider.ZAI: "ZAI_API_KEY",
|
|
73
74
|
ModelProvider.KIMI_CODING: "KIMI_CODING_API_KEY",
|
|
74
75
|
ModelProvider.OLLAMA_CLOUD: "OLLAMA_API_KEY",
|
|
76
|
+
ModelProvider.CLOUDFLARE_WORKERS_AI: cloudflare_workers_ai.API_TOKEN_ENV,
|
|
75
77
|
ModelProvider.OPENROUTER: "OPENROUTER_API_KEY",
|
|
76
78
|
ModelProvider.THINKING_MACHINES: "TINKER_API_KEY",
|
|
77
79
|
# Native Tinker sampling authenticates with the same key.
|
|
@@ -399,6 +401,45 @@ def _api_key_for_provider(
|
|
|
399
401
|
return None
|
|
400
402
|
|
|
401
403
|
|
|
404
|
+
CLOUDFLARE_MISSING_ACCOUNT_MESSAGE = (
|
|
405
|
+
f"Missing Cloudflare account ID: set {cloudflare_workers_ai.ACCOUNT_ID_ENV} or enter it in Settings → Providers."
|
|
406
|
+
)
|
|
407
|
+
|
|
408
|
+
|
|
409
|
+
def _cloudflare_account_id_source(env: Mapping[str, str], settings: Optional[CliSettings]) -> tuple[Optional[str], str]:
|
|
410
|
+
"""The raw account ID and where it came from: the environment wins over Settings."""
|
|
411
|
+
from_env = (env.get(cloudflare_workers_ai.ACCOUNT_ID_ENV) or "").strip()
|
|
412
|
+
if from_env:
|
|
413
|
+
return from_env, cloudflare_workers_ai.ACCOUNT_ID_ENV
|
|
414
|
+
return (settings.cloudflare_account_id if settings else None), "the account ID saved in Settings"
|
|
415
|
+
|
|
416
|
+
|
|
417
|
+
def _cloudflare_route_settings(
|
|
418
|
+
env: Mapping[str, str], settings: Optional[CliSettings], *, required: bool
|
|
419
|
+
) -> tuple[Optional[str], Optional[str]]:
|
|
420
|
+
"""Resolve ``(account_id, gateway_id)``.
|
|
421
|
+
|
|
422
|
+
Invalid values are fatal only when a Cloudflare route is in use; otherwise they
|
|
423
|
+
are dropped so a stale value cannot lock the user out of other providers.
|
|
424
|
+
"""
|
|
425
|
+
raw_account, account_source = _cloudflare_account_id_source(env, settings)
|
|
426
|
+
try:
|
|
427
|
+
account_id = cloudflare_workers_ai.normalize_account_id(raw_account)
|
|
428
|
+
except ValueError as exc:
|
|
429
|
+
if required:
|
|
430
|
+
raise CliConfigError(f"Invalid Cloudflare account ID from {account_source}: {exc}") from exc
|
|
431
|
+
account_id = None
|
|
432
|
+
if required and account_id is None:
|
|
433
|
+
raise CliConfigError(CLOUDFLARE_MISSING_ACCOUNT_MESSAGE)
|
|
434
|
+
try:
|
|
435
|
+
gateway_id = cloudflare_workers_ai.normalize_gateway_id(env.get(cloudflare_workers_ai.GATEWAY_ID_ENV))
|
|
436
|
+
except ValueError as exc:
|
|
437
|
+
if required:
|
|
438
|
+
raise CliConfigError(f"Invalid {cloudflare_workers_ai.GATEWAY_ID_ENV}: {exc}") from exc
|
|
439
|
+
gateway_id = None
|
|
440
|
+
return account_id, gateway_id
|
|
441
|
+
|
|
442
|
+
|
|
402
443
|
def _resolve_chatgpt_tokens(settings: Optional[CliSettings]) -> Optional[OAuthTokens]:
|
|
403
444
|
"""Load stored ChatGPT OAuth tokens from settings, if present and well-formed."""
|
|
404
445
|
if not settings:
|
|
@@ -952,6 +993,10 @@ def build_agent_config(
|
|
|
952
993
|
if missing_keys:
|
|
953
994
|
raise CliConfigError(f"Missing required API key environment variable(s): {', '.join(missing_keys)}")
|
|
954
995
|
|
|
996
|
+
cloudflare_account_id, cloudflare_ai_gateway_id = _cloudflare_route_settings(
|
|
997
|
+
loaded_env, settings, required=ModelProvider.CLOUDFLARE_WORKERS_AI in required_providers
|
|
998
|
+
)
|
|
999
|
+
|
|
955
1000
|
chatgpt_tokens = _resolve_chatgpt_tokens(settings)
|
|
956
1001
|
if ModelProvider.OPENAI_CHATGPT in required_providers and chatgpt_tokens is None:
|
|
957
1002
|
raise CliConfigError("Not signed in to ChatGPT. Run /login chatgpt to sign in with your ChatGPT subscription.")
|
|
@@ -981,6 +1026,9 @@ def build_agent_config(
|
|
|
981
1026
|
zai_api_key=_api_key_for_provider(ModelProvider.ZAI, loaded_env, settings),
|
|
982
1027
|
kimi_coding_api_key=_api_key_for_provider(ModelProvider.KIMI_CODING, loaded_env, settings),
|
|
983
1028
|
ollama_cloud_api_key=_api_key_for_provider(ModelProvider.OLLAMA_CLOUD, loaded_env, settings),
|
|
1029
|
+
cloudflare_api_token=_api_key_for_provider(ModelProvider.CLOUDFLARE_WORKERS_AI, loaded_env, settings),
|
|
1030
|
+
cloudflare_account_id=cloudflare_account_id,
|
|
1031
|
+
cloudflare_ai_gateway_id=cloudflare_ai_gateway_id,
|
|
984
1032
|
openrouter_api_key=_api_key_for_provider(ModelProvider.OPENROUTER, loaded_env, settings),
|
|
985
1033
|
thinking_machines_api_key=_api_key_for_provider(ModelProvider.THINKING_MACHINES, loaded_env, settings),
|
|
986
1034
|
perplexity_api_key=_api_key_for_provider(ModelProvider.PERPLEXITY_AGENT, loaded_env, settings),
|
|
@@ -1068,10 +1116,19 @@ def key_status(provider: str, project_path: Path, settings: Optional[CliSettings
|
|
|
1068
1116
|
env = load_cli_env(project_path)
|
|
1069
1117
|
env_name = API_KEY_ENV.get(provider_value)
|
|
1070
1118
|
if env_name and env.get(env_name):
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1119
|
+
status = f"present via {env_name}"
|
|
1120
|
+
elif settings and settings.get_api_key(provider_value.value):
|
|
1121
|
+
status = "present in local settings"
|
|
1122
|
+
else:
|
|
1123
|
+
return "missing"
|
|
1124
|
+
if provider_value == ModelProvider.CLOUDFLARE_WORKERS_AI:
|
|
1125
|
+
raw_account, _ = _cloudflare_account_id_source(env, settings)
|
|
1126
|
+
try:
|
|
1127
|
+
if cloudflare_workers_ai.normalize_account_id(raw_account) is None:
|
|
1128
|
+
status += "; account ID missing"
|
|
1129
|
+
except ValueError:
|
|
1130
|
+
status += "; account ID invalid"
|
|
1131
|
+
return status
|
|
1075
1132
|
|
|
1076
1133
|
|
|
1077
1134
|
def resolved_api_key(provider: str, project_path: Path, settings: Optional[CliSettings] = None) -> Optional[str]:
|
|
@@ -1082,6 +1139,33 @@ def resolved_api_key(provider: str, project_path: Path, settings: Optional[CliSe
|
|
|
1082
1139
|
return _api_key_for_provider(_provider(provider), load_cli_env(project_path), settings)
|
|
1083
1140
|
|
|
1084
1141
|
|
|
1142
|
+
def resolved_cloudflare_account_id(project_path: Path, settings: Optional[CliSettings] = None) -> Optional[str]:
|
|
1143
|
+
"""The valid Cloudflare account ID a route would use (environment, then Settings), or ``None``."""
|
|
1144
|
+
raw_account, _ = _cloudflare_account_id_source(load_cli_env(project_path), settings)
|
|
1145
|
+
try:
|
|
1146
|
+
return cloudflare_workers_ai.normalize_account_id(raw_account)
|
|
1147
|
+
except ValueError:
|
|
1148
|
+
return None
|
|
1149
|
+
|
|
1150
|
+
|
|
1151
|
+
def provider_connection_kwargs(
|
|
1152
|
+
provider: str, project_path: Path, settings: Optional[CliSettings] = None
|
|
1153
|
+
) -> dict[str, Any]:
|
|
1154
|
+
"""Connection kwargs for probing a built-in provider's credential from a Settings draft.
|
|
1155
|
+
|
|
1156
|
+
Raises ``ValueError`` with user-facing copy when a Cloudflare account ID is
|
|
1157
|
+
missing or invalid; returns ``{}`` for providers with a fixed endpoint.
|
|
1158
|
+
"""
|
|
1159
|
+
if _provider(provider) != ModelProvider.CLOUDFLARE_WORKERS_AI:
|
|
1160
|
+
return {}
|
|
1161
|
+
env = load_cli_env(project_path)
|
|
1162
|
+
raw_account, _ = _cloudflare_account_id_source(env, settings)
|
|
1163
|
+
return cloudflare_workers_ai.connection_kwargs(
|
|
1164
|
+
cloudflare_workers_ai.normalize_account_id(raw_account),
|
|
1165
|
+
cloudflare_workers_ai.normalize_gateway_id(env.get(cloudflare_workers_ai.GATEWAY_ID_ENV)),
|
|
1166
|
+
)
|
|
1167
|
+
|
|
1168
|
+
|
|
1085
1169
|
def probe_token_manager(settings: Optional[CliSettings]) -> Optional[ChatGPTTokenManager]:
|
|
1086
1170
|
"""A ChatGPT token manager for credential probes, deliberately non-persisting.
|
|
1087
1171
|
|
|
@@ -297,6 +297,13 @@ PROVIDER_KEY_NOT_STORED = (
|
|
|
297
297
|
)
|
|
298
298
|
PROVIDER_KEY_REMOVAL_STAGED = "The locally stored API key will be removed when you Apply."
|
|
299
299
|
PROVIDER_TEST_RUNNING = "Testing {provider}/{model}…"
|
|
300
|
+
CLOUDFLARE_ACCOUNT_ID_PLACEHOLDER = "32-character Cloudflare account ID"
|
|
301
|
+
CLOUDFLARE_ACCOUNT_ID_HINT = (
|
|
302
|
+
"Find the account ID in the Cloudflare dashboard under Workers AI → Use REST API. "
|
|
303
|
+
"CLOUDFLARE_ACCOUNT_ID overrides this value."
|
|
304
|
+
)
|
|
305
|
+
CLOUDFLARE_API_TOKEN_PLACEHOLDER = "Cloudflare API token (Workers AI Read)"
|
|
306
|
+
CLOUDFLARE_ACCOUNT_ID_REQUIRED = "Enter your Cloudflare account ID or set CLOUDFLARE_ACCOUNT_ID."
|
|
300
307
|
MODEL_SLOT_INHERITED = "Using {provider}/{model} (inherited from the active model)."
|
|
301
308
|
MODEL_SLOT_PINNED = "Using {provider}/{model}."
|
|
302
309
|
MODEL_SLOT_HINT = (
|
|
@@ -20,7 +20,9 @@ from pathlib import Path
|
|
|
20
20
|
from typing import Any, Iterable, Optional, Sequence
|
|
21
21
|
|
|
22
22
|
from kolega_code.config import ModelProvider
|
|
23
|
+
from kolega_code.llm.cloudflare_workers_ai import normalize_account_id
|
|
23
24
|
from kolega_code.llm.specs import MODEL_SPECS, is_featured_model
|
|
25
|
+
from kolega_code.llm.specs import cloudflare_workers_ai_catalog as cloudflare_workers_ai
|
|
24
26
|
from kolega_code.llm.specs import mistral_catalog as mistral
|
|
25
27
|
from kolega_code.llm.specs import ollama_cloud_catalog as ollama_cloud
|
|
26
28
|
from kolega_code.llm.specs import openrouter_catalog as openrouter
|
|
@@ -37,13 +39,16 @@ from .settings import SettingsStore, SettingsStoreError
|
|
|
37
39
|
# and save_cache(). The Perplexity entry is a duck-typed catalog object rather
|
|
38
40
|
# than a module — same contract. An entry that publishes ``API_KEY_ENV`` is
|
|
39
41
|
# authenticated: ``models refresh`` resolves that credential and passes it to
|
|
40
|
-
# ``fetch_models(api_key=...)``; every other source is fetched anonymously.
|
|
42
|
+
# ``fetch_models(api_key=...)``; every other source is fetched anonymously. An
|
|
43
|
+
# entry that also publishes ``ACCOUNT_ID_ENV`` is account-scoped and receives
|
|
44
|
+
# ``account_id=...`` too.
|
|
41
45
|
OVERLAY_SOURCES = {
|
|
42
46
|
mistral.PROVIDER: mistral,
|
|
43
47
|
ollama_cloud.PROVIDER: ollama_cloud,
|
|
44
48
|
openrouter.PROVIDER: openrouter,
|
|
45
49
|
tinker.PROVIDER: tinker,
|
|
46
50
|
perplexity.AGENT_PROVIDER: perplexity.AGENT_CATALOG,
|
|
51
|
+
cloudflare_workers_ai.PROVIDER: cloudflare_workers_ai,
|
|
47
52
|
}
|
|
48
53
|
|
|
49
54
|
# Capture the release snapshot before startup applies any runtime caches.
|
|
@@ -83,6 +88,20 @@ def _overlay_api_key(provider: str, env_name: str) -> Optional[str]:
|
|
|
83
88
|
return (stored or "").strip() or None
|
|
84
89
|
|
|
85
90
|
|
|
91
|
+
def _overlay_account_id(env_name: str, setting_name: str) -> Optional[str]:
|
|
92
|
+
"""Resolve an account-scoped overlay's account ID: environment first, then Settings."""
|
|
93
|
+
value = (os.environ.get(env_name) or "").strip()
|
|
94
|
+
if not value:
|
|
95
|
+
try:
|
|
96
|
+
value = str(getattr(SettingsStore().load(), setting_name, None) or "").strip()
|
|
97
|
+
except (SettingsStoreError, OSError):
|
|
98
|
+
return None
|
|
99
|
+
try:
|
|
100
|
+
return normalize_account_id(value)
|
|
101
|
+
except ValueError:
|
|
102
|
+
return None
|
|
103
|
+
|
|
104
|
+
|
|
86
105
|
def _overlay_fetch_kwargs(provider: str, module: Any) -> tuple[Optional[dict[str, Any]], Optional[str]]:
|
|
87
106
|
"""Return ``(fetch kwargs, error message)`` for one overlay source."""
|
|
88
107
|
env_name = getattr(module, "API_KEY_ENV", None)
|
|
@@ -91,7 +110,16 @@ def _overlay_fetch_kwargs(provider: str, module: Any) -> tuple[Optional[dict[str
|
|
|
91
110
|
api_key = _overlay_api_key(provider, str(env_name))
|
|
92
111
|
if not api_key:
|
|
93
112
|
return None, f"Refreshing the {provider} catalog needs {env_name} (or a key saved in Settings)."
|
|
94
|
-
|
|
113
|
+
kwargs: dict[str, Any] = {"api_key": api_key}
|
|
114
|
+
account_env = getattr(module, "ACCOUNT_ID_ENV", None)
|
|
115
|
+
if account_env:
|
|
116
|
+
account_id = _overlay_account_id(str(account_env), str(getattr(module, "ACCOUNT_ID_SETTING", "")))
|
|
117
|
+
if not account_id:
|
|
118
|
+
return None, (
|
|
119
|
+
f"Refreshing the {provider} catalog needs {account_env} (or an account ID saved in Settings)."
|
|
120
|
+
)
|
|
121
|
+
kwargs["account_id"] = account_id
|
|
122
|
+
return kwargs, None
|
|
95
123
|
|
|
96
124
|
|
|
97
125
|
def _catalog_env_names(catalog: str) -> tuple[str, str]:
|
|
@@ -4,7 +4,7 @@ from __future__ import annotations
|
|
|
4
4
|
|
|
5
5
|
import asyncio
|
|
6
6
|
from dataclasses import dataclass
|
|
7
|
-
from typing import Any, Callable, Optional
|
|
7
|
+
from typing import Any, Callable, Mapping, Optional
|
|
8
8
|
|
|
9
9
|
from kolega_code.config import ModelProvider, RateLimitConfig
|
|
10
10
|
from kolega_code.llm.client import LLMClient
|
|
@@ -49,6 +49,7 @@ async def test_model_connection(
|
|
|
49
49
|
usage_ledger: Any = None,
|
|
50
50
|
base_url: Optional[str] = None,
|
|
51
51
|
api_style: Optional[str] = None,
|
|
52
|
+
default_headers: Optional[Mapping[str, str]] = None,
|
|
52
53
|
) -> ModelConnectionResult:
|
|
53
54
|
"""Send a tiny no-tool prompt through one provider/model pair.
|
|
54
55
|
|
|
@@ -78,6 +79,8 @@ async def test_model_connection(
|
|
|
78
79
|
factory_kwargs["base_url"] = base_url
|
|
79
80
|
if api_style:
|
|
80
81
|
factory_kwargs["api_style"] = api_style
|
|
82
|
+
if default_headers:
|
|
83
|
+
factory_kwargs["default_headers"] = dict(default_headers)
|
|
81
84
|
client = client_factory(**factory_kwargs)
|
|
82
85
|
messages = MessageHistory([Message(role="user", content=[TextBlock(text="Reply with OK.")])])
|
|
83
86
|
await asyncio.wait_for(
|
|
@@ -45,6 +45,7 @@ PROVIDER_LABELS: dict[ModelProvider, str] = {
|
|
|
45
45
|
ModelProvider.TOGETHER: "Together AI",
|
|
46
46
|
ModelProvider.DASHSCOPE: "DashScope / Qwen",
|
|
47
47
|
ModelProvider.OLLAMA_CLOUD: "Ollama Cloud",
|
|
48
|
+
ModelProvider.CLOUDFLARE_WORKERS_AI: "Cloudflare Workers AI",
|
|
48
49
|
ModelProvider.OPENROUTER: "OpenRouter",
|
|
49
50
|
ModelProvider.THINKING_MACHINES: "Thinking Machines",
|
|
50
51
|
ModelProvider.TINKER: "Tinker",
|
|
@@ -63,6 +64,8 @@ MODEL_LABELS: dict[str, str] = {
|
|
|
63
64
|
"meta-llama/llama-4-maverick-17b-128e-instruct": "Llama 4 Maverick 17B",
|
|
64
65
|
# Moonshot
|
|
65
66
|
"kimi-k3": "Kimi K3",
|
|
67
|
+
"kimi-k3.1-pro": "Kimi K3.1 Pro",
|
|
68
|
+
"kimi-k3.1-pro-highspeed": "Kimi K3.1 Pro (High-Speed)",
|
|
66
69
|
"kimi-k2.7-code": "Kimi K2.7 Code",
|
|
67
70
|
"kimi-k2.7-code-highspeed": "Kimi K2.7 Code (High-Speed)",
|
|
68
71
|
"kimi-k2.6": "Kimi K2.6",
|
|
@@ -79,6 +82,8 @@ MODEL_LABELS: dict[str, str] = {
|
|
|
79
82
|
# Kimi Coding Plan
|
|
80
83
|
"k3": "Kimi K3 (256K)",
|
|
81
84
|
"k3-256k": "Kimi K3-256K",
|
|
85
|
+
"k3.1-pro": "Kimi K3.1 Pro (256K)",
|
|
86
|
+
"k3.1-pro-highspeed": "Kimi K3.1 Pro (HighSpeed)",
|
|
82
87
|
"kimi-for-coding": "Kimi for Coding",
|
|
83
88
|
"kimi-for-coding-highspeed": "Kimi for Coding (HighSpeed)",
|
|
84
89
|
# DeepSeek
|
|
@@ -115,6 +120,7 @@ MODEL_LABELS: dict[str, str] = {
|
|
|
115
120
|
"gpt-6-sol": "GPT-6 Sol",
|
|
116
121
|
"gpt-6-luna": "GPT-6 Luna",
|
|
117
122
|
"gpt-6.1-sol": "GPT-6.1 Sol",
|
|
123
|
+
"gpt-6.1-terra": "GPT-6.1 Terra",
|
|
118
124
|
# Google
|
|
119
125
|
"gemini-3.8-flash": "Gemini 3.8 Flash",
|
|
120
126
|
"gemini-3.7-flash": "Gemini 3.7 Flash",
|
|
@@ -196,6 +202,20 @@ MODEL_LABELS: dict[str, str] = {
|
|
|
196
202
|
"qwen3-coder-next": "Qwen3 Coder Next",
|
|
197
203
|
"qwen3-coder:480b": "Qwen3 Coder 480B",
|
|
198
204
|
"qwen3.5:397b": "Qwen3.5 397B",
|
|
205
|
+
# Cloudflare Workers AI
|
|
206
|
+
"@cf/zai-org/glm-5.3": "GLM-5.3",
|
|
207
|
+
"@cf/zai-org/glm-5.3-flash": "GLM-5.3 Flash",
|
|
208
|
+
"@cf/moonshotai/kimi-k2.7-code": "Kimi K2.7 Code",
|
|
209
|
+
"@cf/deepseek-ai/deepseek-v4.1-flash-1017": "DeepSeek V4.1 Flash",
|
|
210
|
+
"@cf/deepseek-ai/deepseek-v4-pro-0813": "DeepSeek V4 Pro",
|
|
211
|
+
"@cf/zai-org/glm-5.2": "GLM-5.2",
|
|
212
|
+
"@cf/moonshotai/kimi-k2.6": "Kimi K2.6",
|
|
213
|
+
"@cf/qwen/qwen3.8-27b": "Qwen 3.8 27B",
|
|
214
|
+
"@cf/google/gemma-4-26b-a4b-it": "Gemma 4 26B A4B",
|
|
215
|
+
"@cf/nvidia/nemotron-3-120b-a12b": "Nemotron 3 120B A12B",
|
|
216
|
+
"@cf/openai/gpt-oss-120b": "GPT-OSS 120B",
|
|
217
|
+
"@cf/openai/gpt-oss-20b": "GPT-OSS 20B",
|
|
218
|
+
"@cf/zai-org/glm-4.7-flash": "GLM-4.7 Flash",
|
|
199
219
|
# Thinking Machines
|
|
200
220
|
"thinkingmachines/Inkling": "Inkling",
|
|
201
221
|
"thinkingmachines/Inkling-Small": "Inkling Small",
|
|
@@ -219,6 +239,7 @@ PROVIDER_DEFAULT_MODEL: dict[ModelProvider, str] = {
|
|
|
219
239
|
ModelProvider.TOGETHER: "moonshotai/Kimi-K2.7-Code",
|
|
220
240
|
ModelProvider.DASHSCOPE: "qwen3-coder-plus",
|
|
221
241
|
ModelProvider.OLLAMA_CLOUD: "gpt-oss:20b",
|
|
242
|
+
ModelProvider.CLOUDFLARE_WORKERS_AI: "@cf/zai-org/glm-5.3",
|
|
222
243
|
# Hardcoded on purpose: regenerating the OpenRouter catalog reorders it by
|
|
223
244
|
# live usage, and that must never silently change what new users get.
|
|
224
245
|
ModelProvider.OPENROUTER: "moonshotai/kimi-k3",
|
|
@@ -265,6 +286,8 @@ def _api_key_env(provider: ModelProvider) -> str:
|
|
|
265
286
|
return ""
|
|
266
287
|
if provider == ModelProvider.OLLAMA_CLOUD:
|
|
267
288
|
return "OLLAMA_API_KEY"
|
|
289
|
+
if provider == ModelProvider.CLOUDFLARE_WORKERS_AI:
|
|
290
|
+
return "CLOUDFLARE_API_TOKEN"
|
|
268
291
|
if provider == ModelProvider.THINKING_MACHINES:
|
|
269
292
|
# Thinking Machines documents TINKER_API_KEY, not THINKING_MACHINES_API_KEY.
|
|
270
293
|
return "TINKER_API_KEY"
|
|
@@ -311,6 +311,9 @@ class CliSettings:
|
|
|
311
311
|
# Custom model endpoints keyed by endpoint id (provider value "custom:<id>").
|
|
312
312
|
# Additive optional field — absent in older files -> empty mapping.
|
|
313
313
|
custom_endpoints: dict[str, dict] = field(default_factory=dict)
|
|
314
|
+
# Account that scopes Cloudflare Workers AI requests (not a secret; the API
|
|
315
|
+
# token lives in api_keys). Additive optional field — absent -> None.
|
|
316
|
+
cloudflare_account_id: Optional[str] = None
|
|
314
317
|
schema_version: int = SETTINGS_SCHEMA_VERSION
|
|
315
318
|
# The document this instance was loaded from, used as the merge base by
|
|
316
319
|
# SettingsStore.save(). Never serialized.
|
|
@@ -376,6 +379,8 @@ class CliSettings:
|
|
|
376
379
|
compression_threshold=_coerce_compression_threshold(data.get("compression_threshold")),
|
|
377
380
|
# Additive optional field; absent in older files -> empty mapping.
|
|
378
381
|
custom_endpoints=_coerce_custom_endpoints(data.get("custom_endpoints")),
|
|
382
|
+
# Additive optional field; absent in older files -> None.
|
|
383
|
+
cloudflare_account_id=_coerce_optional_text(data.get("cloudflare_account_id")),
|
|
379
384
|
)
|
|
380
385
|
|
|
381
386
|
def to_dict(self) -> dict:
|
|
@@ -408,6 +413,7 @@ class CliSettings:
|
|
|
408
413
|
"skills_enabled": self.skills_enabled,
|
|
409
414
|
"compression_threshold": self.compression_threshold,
|
|
410
415
|
"custom_endpoints": self.custom_endpoints,
|
|
416
|
+
"cloudflare_account_id": self.cloudflare_account_id,
|
|
411
417
|
}
|
|
412
418
|
|
|
413
419
|
def get_api_key(self, provider: str) -> Optional[str]:
|
|
@@ -13,7 +13,8 @@ from textual.widgets import Button, Input, Label, Select, Static
|
|
|
13
13
|
|
|
14
14
|
from kolega_code.auth import constants as chatgpt_constants
|
|
15
15
|
from kolega_code.auth.chatgpt_oauth import run_login_flow
|
|
16
|
-
from kolega_code.cli
|
|
16
|
+
from kolega_code.cli import messages
|
|
17
|
+
from kolega_code.cli.config import build_agent_config, key_status, resolved_cloudflare_account_id
|
|
17
18
|
from kolega_code.cli.model_connection import test_model_connection
|
|
18
19
|
from kolega_code.cli.provider_registry import (
|
|
19
20
|
UI_DEFAULT_PROVIDER,
|
|
@@ -24,6 +25,7 @@ from kolega_code.cli.provider_registry import (
|
|
|
24
25
|
ui_thinking_effort_options,
|
|
25
26
|
)
|
|
26
27
|
from kolega_code.config import ModelProvider
|
|
28
|
+
from kolega_code.llm import cloudflare_workers_ai
|
|
27
29
|
from kolega_code.llm.specs import CUSTOM_PROVIDER_PREFIX
|
|
28
30
|
|
|
29
31
|
if TYPE_CHECKING:
|
|
@@ -102,6 +104,14 @@ class OnboardingScreen(ModalScreen[None]):
|
|
|
102
104
|
)
|
|
103
105
|
yield Label("API key")
|
|
104
106
|
yield Input(password=True, id="onboarding_api_key")
|
|
107
|
+
with Vertical(id="onboarding_account_id_panel"):
|
|
108
|
+
yield Label("Account ID")
|
|
109
|
+
yield Input(
|
|
110
|
+
self.draft.cloudflare_account_id or "",
|
|
111
|
+
id="onboarding_account_id",
|
|
112
|
+
placeholder=messages.CLOUDFLARE_ACCOUNT_ID_PLACEHOLDER,
|
|
113
|
+
)
|
|
114
|
+
yield Static(messages.CLOUDFLARE_ACCOUNT_ID_HINT, classes="onboarding-hint")
|
|
105
115
|
yield Static("", id="onboarding_key_status", classes="onboarding-hint")
|
|
106
116
|
with Vertical(id="onboarding_step_model", classes="onboarding-step"):
|
|
107
117
|
yield Static("Choose the model used by default for this session and future sessions.")
|
|
@@ -206,7 +216,7 @@ class OnboardingScreen(ModalScreen[None]):
|
|
|
206
216
|
self._reset_test_status()
|
|
207
217
|
|
|
208
218
|
def on_input_changed(self, event: Input.Changed) -> None:
|
|
209
|
-
if event.input.id
|
|
219
|
+
if event.input.id in ("onboarding_api_key", "onboarding_account_id"):
|
|
210
220
|
self._reset_test_status()
|
|
211
221
|
|
|
212
222
|
def _update_api_key_status(self) -> None:
|
|
@@ -214,6 +224,7 @@ class OnboardingScreen(ModalScreen[None]):
|
|
|
214
224
|
provider = str(self.query_one("#onboarding_provider", Select).value)
|
|
215
225
|
except Exception:
|
|
216
226
|
return
|
|
227
|
+
self.query_one("#onboarding_account_id_panel").display = provider == cloudflare_workers_ai.PROVIDER
|
|
217
228
|
status = key_status(provider, self.owner.project_path, self.draft)
|
|
218
229
|
widget = self.query_one("#onboarding_key_status", Static)
|
|
219
230
|
widget.update(f"Credential status: {status}")
|
|
@@ -274,9 +285,25 @@ class OnboardingScreen(ModalScreen[None]):
|
|
|
274
285
|
if key_status(provider, self.owner.project_path, self.draft) == "missing":
|
|
275
286
|
self._set_status("Enter an API key or configure the provider's environment variable.")
|
|
276
287
|
return False
|
|
288
|
+
if provider == cloudflare_workers_ai.PROVIDER and not self._collect_cloudflare_account_id():
|
|
289
|
+
return False
|
|
277
290
|
self.draft.active_provider = provider
|
|
278
291
|
return True
|
|
279
292
|
|
|
293
|
+
def _collect_cloudflare_account_id(self) -> bool:
|
|
294
|
+
typed = self.query_one("#onboarding_account_id", Input).value
|
|
295
|
+
try:
|
|
296
|
+
account_id = cloudflare_workers_ai.normalize_account_id(typed)
|
|
297
|
+
except ValueError as exc:
|
|
298
|
+
self._set_status(str(exc))
|
|
299
|
+
return False
|
|
300
|
+
if account_id:
|
|
301
|
+
self.draft.cloudflare_account_id = account_id
|
|
302
|
+
if resolved_cloudflare_account_id(self.owner.project_path, self.draft) is None:
|
|
303
|
+
self._set_status(messages.CLOUDFLARE_ACCOUNT_ID_REQUIRED)
|
|
304
|
+
return False
|
|
305
|
+
return True
|
|
306
|
+
|
|
280
307
|
def _populate_models(self) -> None:
|
|
281
308
|
provider = self.draft.active_provider or UI_DEFAULT_PROVIDER
|
|
282
309
|
options = ui_model_options(provider)
|
|
@@ -369,6 +396,7 @@ class OnboardingScreen(ModalScreen[None]):
|
|
|
369
396
|
token_manager=config.get_chatgpt_token_manager(),
|
|
370
397
|
rate_limits=model_config.rate_limits,
|
|
371
398
|
usage_ledger=getattr(self.owner, "_usage_ledger", None),
|
|
399
|
+
**config.llm_client_kwargs(model_config),
|
|
372
400
|
)
|
|
373
401
|
status.update(result.message)
|
|
374
402
|
button.disabled = False
|