kolega-code 0.28.0__tar.gz → 0.28.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {kolega_code-0.28.0 → kolega_code-0.28.2}/CHANGELOG.md +15 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/PKG-INFO +3 -2
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/__init__.py +1 -1
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/__init__.py +1 -1
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/conversation.py +63 -27
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/models.py +69 -28
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/providers/tinker.py +16 -3
- {kolega_code-0.28.0 → kolega_code-0.28.2}/pyproject.toml +13 -3
- {kolega_code-0.28.0 → kolega_code-0.28.2}/.gitignore +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/CONTRIBUTING.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/LICENSE +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/MIGRATION.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/README.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/RELEASING.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/LICENSE +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/manifest.json +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/deep-research/SKILL.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/deep-research/references/evidence-and-reporting.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/deep-research/references/gigacode-workflow.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/deep-research/scripts/deep-research.workflow +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/deep-research/scripts/materialize_report.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/docx/LICENSE +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/docx/SKILL.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/docx/references/examples.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/docx/references/limitations.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/docx/references/operations.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/docx/references/quality.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/docx/requirements.txt +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/docx/scripts/docx_tool.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/docx/scripts/smoke_test.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/humanizer/LICENSE +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/humanizer/SKILL.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pdf/LICENSE +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pdf/SKILL.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pdf/references/examples.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pdf/references/limitations.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pdf/references/ocr.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pdf/references/operations.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pdf/references/quality.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pdf/references/redaction.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-paddle.txt +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-surya.txt +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pdf/requirements.txt +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pdf/scripts/pdf_tool.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pdf/scripts/smoke_test.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pptx/LICENSE +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pptx/SKILL.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pptx/references/examples.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pptx/references/limitations.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pptx/references/operations.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pptx/requirements.txt +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pptx/scripts/pptx_tool.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pptx/scripts/smoke_test.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/review/SKILL.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/review/references/github-publishing.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/skill-authoring/SKILL.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/skill-authoring/references/review-checklist.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/xlsx/LICENSE +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/xlsx/SKILL.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/xlsx/references/examples.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/xlsx/references/limitations.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/xlsx/references/operations.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/xlsx/references/quality.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/xlsx/requirements.txt +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/xlsx/scripts/smoke_test.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/xlsx/scripts/xlsx_tool.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/baseagent.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/browseragent.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/coder.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/common.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/compression.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/context.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/custom_agents.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/edit_protocols.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/errors.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/eval/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/eval/bridge.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/eval/bundle-requirements.in +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/eval/bundle-requirements.txt +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/eval/env.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/eval/js_kernel.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/eval/kernel.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/eval/prelude.js +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/eval/prelude.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/eval/protocol.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/eval/py_kernel.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/eval/runner.js +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/eval/runner.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/generalagent.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/goal.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/investigationagent.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/model_routing.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/orchestration/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/orchestration/accounting.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/orchestration/budget.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/orchestration/context.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/orchestration/errors.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/orchestration/executor.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/orchestration/guide.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/orchestration/journal.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/orchestration/runtime.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/orchestration/types.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/planningagent.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_dump.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_overrides.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_provider.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_exhausted.user.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_nudge.user.md.j2 +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/truncated_turn_nudge.user.md.j2 +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/extensions/cli/build_questions.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/extensions/cli/current_plan_artifact.md.j2 +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/extensions/cli/mode_switch_notice.md.j2 +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/extensions/cli/scratchpad.md.j2 +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list_readonly.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/extensions/cli/worktree_control.md.j2 +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/system/agents/coder_ask.md.j2 +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/system/agents/coder_base.md.j2 +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/system/includes/context_updates.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/system/includes/terminal_tools.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/apply_patch.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/ask_user_choice.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_click.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_close.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_console_messages.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_drag.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_drop.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_evaluate.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_file_upload.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_fill_form.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_find.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_handle_dialog.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_hover.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_navigate.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_navigate_back.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_network_request.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_network_requests.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_press_key.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_resize.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_scroll.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_select_option.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_snapshot.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_tabs.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_take_screenshot.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_type.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/browser_wait_for.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/build_backend.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/build_frontend.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/claude_edit.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/claude_write.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/dispatch_agent.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/edit.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/eval.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/exec_command.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/get_host.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/get_task_list.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/get_task_list_readonly.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/hashline_edit.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/hashline_write.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/kill_command.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/list_sessions.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/list_subagent_models.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/list_workflow_runs.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/lsp.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/lsp_edit.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/multi_edit.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/read.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/read_image.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/resolve.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/run_workflow.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/set_goal.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/skill.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/snapshot.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/switch_worktree.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/update_task_list.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/web_fetch.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/web_search.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/write.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/write_plan.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/tools/write_stdin.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/prompts.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/agent_tool.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/base_tool.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/browser_tool.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/build_tool.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/codex_patch.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/edit_tool.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/eval_tool.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/hashline_v2.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/lsp_tool.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/network_status.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/read_file_tool.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/read_image_tool.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/search_backends/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/search_backends/tavily.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/snapshot_tool.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/terminal_tool.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/web_fetch/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/web_fetch/answering.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/web_fetch/documents.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/web_fetch/extractors.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/web_fetch/pipeline.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/web_fetch/retrieval.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/web_fetch_tool.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/web_search_tool.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tool_definitions.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/tools.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/utils/commands.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/agent/volatile_context.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/auth/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/auth/_jwt.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/auth/chatgpt_oauth.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/auth/constants.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/auth/tokens.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/browser_extension/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/browser_extension/framing.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/browser_extension/installer.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/browser_extension/manager.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/browser_extension/multiplex.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/browser_extension/native_host.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/browser_extension/protocol.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/browser_extension/registry.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/browser_extension/runtime.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/app.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/ask_output.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/atif_export.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/browser_backend.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/clipboard_image.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/config.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/connection.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/cron.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/diagnostics.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/file_index.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/goal.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/loop.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/main.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/mentions.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/messages.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/model_catalog.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/model_connection.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/plan_artifacts.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/provider_registry.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/session_event_protocol.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/session_event_store.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/session_journal.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/session_store.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/session_usage.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/settings.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/skills.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/slash_commands.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/theme.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/agent_runtime.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/app_base.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/changes_screen.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/command_handlers.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/constants.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/custom_model.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/loop_runtime.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/memory_screen.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/onboarding_screen.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/pacing.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/prompt_flows.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/session_diff.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/settings_panel.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/settings_screen.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/state.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/status_dashboard.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/styles.tcss +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/sub_agent_screen.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/terminal_display.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/transcript.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/tui/widgets.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/cli/updater.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/config.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/events.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/extensions.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/git_env.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/hooks/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/hooks/backends.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/hooks/config.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/hooks/dispatcher.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/hooks/events.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/hooks/matcher.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/hooks/outcome.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/client.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/exceptions.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/instrumented_client.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/ledger.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/providers/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/providers/_token_encoding.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/providers/anthropic.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/providers/base.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/providers/deepseek_responses.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/providers/google.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/providers/models.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/providers/openai.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/providers/openai_responses.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/providers/responses_common.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/providers/tinker_trace.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/ratelimit.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/accessors.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/catalog/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/catalog/anthropic.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/catalog/dashscope.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/catalog/deepseek.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/catalog/fireworks.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/catalog/google.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/catalog/kimi_coding.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/catalog/moonshot.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/catalog/ollama_cloud.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/catalog/openai.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/catalog/openai_chatgpt.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/catalog/openrouter.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/catalog/thinking_machines.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/catalog/tinker.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/catalog/together.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/catalog/xai.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/catalog/zai.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/ollama_cloud_catalog.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/openrouter_catalog.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/thinking.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/tinker_catalog.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/types.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/specs/validation.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/timeouts.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/tool_execution_ids.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/llm/usage.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/local_state.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/mcp/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/mcp/config.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/mcp/oauth.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/mcp/service.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/mcp/state.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/mcp/tools.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/mcp/transport.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/memory/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/memory/identity.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/memory/manager.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/memory/manifest.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/memory/markdown.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/memory/models.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/memory/protocol.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/memory/registry.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/models/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/models/sandbox_terminal_state.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/permissions.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/runtime.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/sandbox/README.md +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/sandbox/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/sandbox/async_filesystem.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/sandbox/base.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/sandbox/browser.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/sandbox/event_loop.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/sandbox/filesystem.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/sandbox/local.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/sandbox/serializer.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/sandbox/terminal.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/sandbox/utils.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/scratchpad.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/security/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/security/secrets.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/services/base.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/services/browser.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/services/file_system.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/services/html.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/services/lsp/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/services/lsp/client.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/services/lsp/config.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/services/lsp/detector.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/services/lsp/diagnostics.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/services/lsp/edits.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/services/lsp/manager.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/services/lsp/registry.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/services/lsp/registry.yaml +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/services/snapshots.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/services/terminal.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/services/terminal_buffer.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/services/workspace_scan.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/session/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/session/control.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/session/inmemory.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/session/projection.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/session/recording.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/session/runtime.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/session/store.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/testing/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/testing/store_conformance.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/tools/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/tools/core.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/tools/definitions.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/tools/param_aliases.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/tools/registry.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/utils/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/utils/images.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/web/__init__.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/web/assets/fold.js +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/web/assets/player.css +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/web/assets/player.html +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/web/assets/player.js +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/web/bundle.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/web/hosting.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/web/redaction.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/web/server.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/web/singlefile.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/web/theme_css.py +0 -0
- {kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/worktrees.py +0 -0
|
@@ -6,6 +6,21 @@ This project uses GitHub Releases for detailed generated release notes. This fil
|
|
|
6
6
|
|
|
7
7
|
## Unreleased
|
|
8
8
|
|
|
9
|
+
## 0.28.2 - 2026-08-12
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- Native Tinker sessions now keep repeated provider tool-call IDs paired with
|
|
14
|
+
their distinct executions after persistence, avoiding false interrupted-tool
|
|
15
|
+
placeholders and preserving every result in subsequent model history.
|
|
16
|
+
|
|
17
|
+
## 0.28.1 - 2026-08-12
|
|
18
|
+
|
|
19
|
+
### Fixed
|
|
20
|
+
|
|
21
|
+
- Restored native Tinker tool dispatch so generated tool calls execute through
|
|
22
|
+
the agent loop instead of being returned as plain assistant output.
|
|
23
|
+
|
|
9
24
|
## 0.28.0 - 2026-08-11
|
|
10
25
|
|
|
11
26
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kolega-code
|
|
3
|
-
Version: 0.28.
|
|
3
|
+
Version: 0.28.2
|
|
4
4
|
Summary: Multi-agent coding in the terminal
|
|
5
5
|
Project-URL: Homepage, https://kolega-ai.github.io/kolega-code/
|
|
6
6
|
Project-URL: Documentation, https://kolega-ai.github.io/kolega-code/
|
|
@@ -278,7 +278,8 @@ Requires-Dist: pytest==9.0.3; extra == 'dev'
|
|
|
278
278
|
Requires-Dist: ruff==0.15.12; extra == 'dev'
|
|
279
279
|
Requires-Dist: twine==6.2.0; extra == 'dev'
|
|
280
280
|
Provides-Extra: tinker
|
|
281
|
-
Requires-Dist: tinker-cookbook==0.5.
|
|
281
|
+
Requires-Dist: tinker-cookbook==0.5.4; extra == 'tinker'
|
|
282
|
+
Requires-Dist: tinker==0.25.0; extra == 'tinker'
|
|
282
283
|
Requires-Dist: tml-renderers==0.1.0; extra == 'tinker'
|
|
283
284
|
Description-Content-Type: text/markdown
|
|
284
285
|
|
|
@@ -9,8 +9,9 @@ holding their own reference.
|
|
|
9
9
|
|
|
10
10
|
import logging
|
|
11
11
|
import re
|
|
12
|
-
from typing import Any, Dict, List, Optional, Union
|
|
12
|
+
from typing import Any, Dict, List, Optional, Union, cast
|
|
13
13
|
|
|
14
|
+
from kolega_code.agent.tool_backend.hashline_v2 import strip_hashline_read_output
|
|
14
15
|
from kolega_code.llm.models import (
|
|
15
16
|
ContentBlock,
|
|
16
17
|
ImageBlock,
|
|
@@ -23,10 +24,10 @@ from kolega_code.llm.models import (
|
|
|
23
24
|
ToolCall,
|
|
24
25
|
ToolResult,
|
|
25
26
|
WebSearchCallBlock,
|
|
27
|
+
same_tool_execution,
|
|
26
28
|
)
|
|
27
29
|
from kolega_code.llm.specs import prior_reasoning_is_replayable
|
|
28
30
|
from kolega_code.utils import images as image_utils
|
|
29
|
-
from kolega_code.agent.tool_backend.hashline_v2 import strip_hashline_read_output
|
|
30
31
|
|
|
31
32
|
logger = logging.getLogger(__name__)
|
|
32
33
|
|
|
@@ -630,25 +631,48 @@ class Conversation:
|
|
|
630
631
|
content_blocks = [content]
|
|
631
632
|
|
|
632
633
|
if isinstance(content_blocks, list):
|
|
633
|
-
new_tool_results =
|
|
634
|
+
new_tool_results: List[ToolResult] = []
|
|
634
635
|
other_blocks = []
|
|
635
636
|
|
|
636
637
|
for block in content_blocks:
|
|
637
638
|
if isinstance(block, ToolResult):
|
|
638
|
-
|
|
639
|
+
duplicate_index = next(
|
|
640
|
+
(
|
|
641
|
+
index
|
|
642
|
+
for index, existing in enumerate(new_tool_results)
|
|
643
|
+
if same_tool_execution(existing, block)
|
|
644
|
+
),
|
|
645
|
+
None,
|
|
646
|
+
)
|
|
647
|
+
if duplicate_index is None:
|
|
648
|
+
new_tool_results.append(block)
|
|
649
|
+
else:
|
|
650
|
+
new_tool_results[duplicate_index] = block
|
|
639
651
|
else:
|
|
640
652
|
other_blocks.append(block)
|
|
641
653
|
|
|
642
654
|
if new_tool_results:
|
|
643
|
-
# Find and update any existing
|
|
655
|
+
# Find and update any existing result for the same execution.
|
|
644
656
|
for i, msg in enumerate(self.history):
|
|
645
657
|
if msg.role == "user" and isinstance(msg.content, list):
|
|
646
658
|
updated_content = []
|
|
647
659
|
replaced_any = False
|
|
648
660
|
|
|
649
661
|
for block in msg.content:
|
|
650
|
-
|
|
651
|
-
|
|
662
|
+
matching_index = (
|
|
663
|
+
next(
|
|
664
|
+
(
|
|
665
|
+
index
|
|
666
|
+
for index, candidate in enumerate(new_tool_results)
|
|
667
|
+
if same_tool_execution(block, candidate)
|
|
668
|
+
),
|
|
669
|
+
None,
|
|
670
|
+
)
|
|
671
|
+
if isinstance(block, ToolResult)
|
|
672
|
+
else None
|
|
673
|
+
)
|
|
674
|
+
if isinstance(block, ToolResult) and matching_index is not None:
|
|
675
|
+
new_result = new_tool_results[matching_index]
|
|
652
676
|
# Replace if: old is dummy error OR new is success and old is error
|
|
653
677
|
should_replace = (block.is_error and "Operation was interrupted" in block.content) or (
|
|
654
678
|
not new_result.is_error and block.is_error
|
|
@@ -658,14 +682,13 @@ class Conversation:
|
|
|
658
682
|
updated_content.append(new_result)
|
|
659
683
|
replaced_any = True
|
|
660
684
|
logger.debug("Replaced tool result for tool_use_id: %s", block.tool_use_id)
|
|
661
|
-
del new_tool_results[
|
|
685
|
+
del new_tool_results[matching_index]
|
|
662
686
|
else:
|
|
663
687
|
updated_content.append(block)
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
del new_tool_results[block.tool_use_id]
|
|
688
|
+
logger.debug(
|
|
689
|
+
"Skipping duplicate tool result for tool_use_id: %s", block.tool_use_id
|
|
690
|
+
)
|
|
691
|
+
del new_tool_results[matching_index]
|
|
669
692
|
else:
|
|
670
693
|
updated_content.append(block)
|
|
671
694
|
|
|
@@ -679,7 +702,7 @@ class Conversation:
|
|
|
679
702
|
)
|
|
680
703
|
|
|
681
704
|
# Add any remaining new tool results along with other blocks
|
|
682
|
-
content_blocks = list(new_tool_results
|
|
705
|
+
content_blocks = cast(List[ContentBlock], list(new_tool_results)) + other_blocks
|
|
683
706
|
|
|
684
707
|
# If all blocks were handled (replaced or skipped), don't add empty message
|
|
685
708
|
if not content_blocks:
|
|
@@ -826,19 +849,32 @@ class Conversation:
|
|
|
826
849
|
fixed_messages.append(current_message)
|
|
827
850
|
processed_indices.add(i)
|
|
828
851
|
|
|
829
|
-
# Collect all tool results from the entire remaining conversation
|
|
830
|
-
|
|
831
|
-
|
|
852
|
+
# Collect all tool results from the entire remaining conversation.
|
|
853
|
+
# Provider IDs may repeat across responses, so correlate modern
|
|
854
|
+
# records by their durable execution IDs and fall back to provider
|
|
855
|
+
# IDs only when either side is legacy.
|
|
856
|
+
all_tool_results: Dict[int, ToolResult] = {}
|
|
832
857
|
other_content_blocks = [] # Non-tool-result content from the next user message
|
|
833
858
|
|
|
859
|
+
def unmatched_call_index(block: ToolResult) -> Optional[int]:
|
|
860
|
+
return next(
|
|
861
|
+
(
|
|
862
|
+
index
|
|
863
|
+
for index, call in enumerate(tool_calls)
|
|
864
|
+
if index not in all_tool_results and same_tool_execution(call, block)
|
|
865
|
+
),
|
|
866
|
+
None,
|
|
867
|
+
)
|
|
868
|
+
|
|
834
869
|
# First, check the immediately following message (expected position)
|
|
835
870
|
next_user_message = None
|
|
836
871
|
if i + 1 < len(messages) and messages[i + 1].role == "user":
|
|
837
872
|
next_user_message = messages[i + 1]
|
|
838
873
|
if isinstance(next_user_message.content, list):
|
|
839
874
|
for block in next_user_message.content:
|
|
840
|
-
if isinstance(block, ToolResult)
|
|
841
|
-
|
|
875
|
+
call_index = unmatched_call_index(block) if isinstance(block, ToolResult) else None
|
|
876
|
+
if isinstance(block, ToolResult) and call_index is not None:
|
|
877
|
+
all_tool_results[call_index] = block
|
|
842
878
|
else:
|
|
843
879
|
other_content_blocks.append(block)
|
|
844
880
|
|
|
@@ -848,8 +884,7 @@ class Conversation:
|
|
|
848
884
|
processed_indices.add(i + 1)
|
|
849
885
|
|
|
850
886
|
# Search the entire remaining conversation for any missing tool results
|
|
851
|
-
|
|
852
|
-
if missing_ids:
|
|
887
|
+
if len(all_tool_results) < len(tool_calls):
|
|
853
888
|
for j in range(i + 1, len(messages)):
|
|
854
889
|
if j in processed_indices:
|
|
855
890
|
continue
|
|
@@ -860,15 +895,15 @@ class Conversation:
|
|
|
860
895
|
found_any = False
|
|
861
896
|
|
|
862
897
|
for block in msg.content:
|
|
863
|
-
if isinstance(block, ToolResult)
|
|
898
|
+
call_index = unmatched_call_index(block) if isinstance(block, ToolResult) else None
|
|
899
|
+
if isinstance(block, ToolResult) and call_index is not None:
|
|
864
900
|
logger.warning(
|
|
865
901
|
"Found tool result %s at position %s instead of expected position %s",
|
|
866
902
|
block.tool_use_id,
|
|
867
903
|
j,
|
|
868
904
|
i + 1,
|
|
869
905
|
)
|
|
870
|
-
all_tool_results[
|
|
871
|
-
missing_ids.remove(block.tool_use_id)
|
|
906
|
+
all_tool_results[call_index] = block
|
|
872
907
|
found_any = True
|
|
873
908
|
else:
|
|
874
909
|
remaining_content.append(block)
|
|
@@ -890,9 +925,9 @@ class Conversation:
|
|
|
890
925
|
|
|
891
926
|
# Create the complete tool results list in the correct order
|
|
892
927
|
complete_tool_results = []
|
|
893
|
-
for tool_call in tool_calls:
|
|
894
|
-
if
|
|
895
|
-
complete_tool_results.append(all_tool_results[
|
|
928
|
+
for call_index, tool_call in enumerate(tool_calls):
|
|
929
|
+
if call_index in all_tool_results:
|
|
930
|
+
complete_tool_results.append(all_tool_results[call_index])
|
|
896
931
|
else:
|
|
897
932
|
logger.warning("Adding placeholder result for missing tool call: %s", tool_call.id)
|
|
898
933
|
complete_tool_results.append(
|
|
@@ -901,6 +936,7 @@ class Conversation:
|
|
|
901
936
|
content="Operation was interrupted. Please retry if needed.",
|
|
902
937
|
name=tool_call.name,
|
|
903
938
|
is_error=True,
|
|
939
|
+
execution_id=tool_call.execution_id,
|
|
904
940
|
input_kind=tool_call.input_kind,
|
|
905
941
|
)
|
|
906
942
|
)
|
|
@@ -1119,6 +1119,34 @@ class ToolResult(ContentBlock):
|
|
|
1119
1119
|
return f"{status} from tool call (ID: {self.tool_use_id}):\n\n```\n{markdown_content}\n```"
|
|
1120
1120
|
|
|
1121
1121
|
|
|
1122
|
+
ToolExecutionBlock = Union[ToolCall, ToolResult]
|
|
1123
|
+
|
|
1124
|
+
|
|
1125
|
+
def provider_tool_call_id(block: ToolExecutionBlock) -> str:
|
|
1126
|
+
"""Return the provider-owned identifier used on the model wire."""
|
|
1127
|
+
return block.id if isinstance(block, ToolCall) else block.tool_use_id
|
|
1128
|
+
|
|
1129
|
+
|
|
1130
|
+
def same_tool_execution(left: ToolExecutionBlock, right: ToolExecutionBlock) -> bool:
|
|
1131
|
+
"""Whether two call/result blocks describe one app-level execution.
|
|
1132
|
+
|
|
1133
|
+
Modern records carry the globally unique app ``execution_id`` on both
|
|
1134
|
+
sides. Legacy records may lack it on the result (while restoring the call
|
|
1135
|
+
generates one), so provider-ID matching remains the compatibility fallback
|
|
1136
|
+
whenever either side has no durable execution ID.
|
|
1137
|
+
"""
|
|
1138
|
+
if left.execution_id is not None and right.execution_id is not None:
|
|
1139
|
+
return left.execution_id == right.execution_id
|
|
1140
|
+
return provider_tool_call_id(left) == provider_tool_call_id(right)
|
|
1141
|
+
|
|
1142
|
+
|
|
1143
|
+
def tool_result_identity(result: ToolResult) -> tuple[str, str]:
|
|
1144
|
+
"""Stable de-duplication key for one result, with legacy fallback."""
|
|
1145
|
+
if result.execution_id is not None:
|
|
1146
|
+
return ("execution", result.execution_id)
|
|
1147
|
+
return ("provider", result.tool_use_id)
|
|
1148
|
+
|
|
1149
|
+
|
|
1122
1150
|
def _tool_result_blocks(tool_result: "ToolResult") -> List[ContentBlock]:
|
|
1123
1151
|
if isinstance(tool_result.content, list):
|
|
1124
1152
|
return tool_result.content
|
|
@@ -1905,31 +1933,46 @@ class MessageHistory(list):
|
|
|
1905
1933
|
|
|
1906
1934
|
def to_openai(self, provider: Optional[str] = None, model: Optional[str] = None) -> list:
|
|
1907
1935
|
processed_messages = []
|
|
1908
|
-
|
|
1936
|
+
# A provider tool-call ID need not be globally unique (native Tinker
|
|
1937
|
+
# emits call_0 in each response). Track their execution identities
|
|
1938
|
+
# instead of treating wire IDs as conversation-global IDs.
|
|
1939
|
+
consumed_tool_results: set[tuple[str, str]] = set()
|
|
1909
1940
|
messages = list(self)
|
|
1910
1941
|
|
|
1911
1942
|
def payload_has_content(payload: Dict[str, Any]) -> bool:
|
|
1912
1943
|
content = payload.get("content")
|
|
1913
1944
|
return (isinstance(content, str) and bool(content)) or (isinstance(content, list) and bool(content))
|
|
1914
1945
|
|
|
1915
|
-
def
|
|
1946
|
+
def unmatched_tool_calls(calls: List[ToolCall], results: List[ToolResult]) -> List[ToolCall]:
|
|
1947
|
+
unmatched = list(calls)
|
|
1948
|
+
for result in results:
|
|
1949
|
+
matching_index = next(
|
|
1950
|
+
(index for index, call in enumerate(unmatched) if same_tool_execution(call, result)),
|
|
1951
|
+
None,
|
|
1952
|
+
)
|
|
1953
|
+
if matching_index is not None:
|
|
1954
|
+
unmatched.pop(matching_index)
|
|
1955
|
+
return unmatched
|
|
1956
|
+
|
|
1957
|
+
def collect_lookahead_tool_results(start_index: int, needed_calls: List[ToolCall]) -> List[ToolResult]:
|
|
1916
1958
|
found: List[ToolResult] = []
|
|
1917
|
-
|
|
1959
|
+
unmatched = list(needed_calls)
|
|
1960
|
+
if not unmatched:
|
|
1918
1961
|
return found
|
|
1919
|
-
found_ids = set()
|
|
1920
1962
|
for look_ahead in messages[start_index + 1 :]:
|
|
1921
1963
|
if not isinstance(look_ahead.content, list):
|
|
1922
1964
|
continue
|
|
1923
1965
|
for item in look_ahead.content:
|
|
1924
|
-
if (
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
)
|
|
1966
|
+
if not isinstance(item, ToolResult) or tool_result_identity(item) in consumed_tool_results:
|
|
1967
|
+
continue
|
|
1968
|
+
matching_index = next(
|
|
1969
|
+
(index for index, call in enumerate(unmatched) if same_tool_execution(call, item)),
|
|
1970
|
+
None,
|
|
1971
|
+
)
|
|
1972
|
+
if matching_index is not None:
|
|
1930
1973
|
found.append(item)
|
|
1931
|
-
|
|
1932
|
-
if
|
|
1974
|
+
unmatched.pop(matching_index)
|
|
1975
|
+
if not unmatched:
|
|
1933
1976
|
break
|
|
1934
1977
|
return found
|
|
1935
1978
|
|
|
@@ -1944,7 +1987,7 @@ class MessageHistory(list):
|
|
|
1944
1987
|
tool_result_blocks = [
|
|
1945
1988
|
item
|
|
1946
1989
|
for item in message.content
|
|
1947
|
-
if isinstance(item, ToolResult) and item
|
|
1990
|
+
if isinstance(item, ToolResult) and tool_result_identity(item) not in consumed_tool_results
|
|
1948
1991
|
]
|
|
1949
1992
|
|
|
1950
1993
|
if tool_result_blocks:
|
|
@@ -1964,22 +2007,21 @@ class MessageHistory(list):
|
|
|
1964
2007
|
|
|
1965
2008
|
# If this same message included tool_calls, pull any missing tool
|
|
1966
2009
|
# results forward so all role=tool messages stay contiguous.
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
lookahead_results = collect_lookahead_tool_results(index,
|
|
2010
|
+
tool_calls = [item for item in message.content if isinstance(item, ToolCall)]
|
|
2011
|
+
missing_calls = unmatched_tool_calls(tool_calls, tool_result_blocks)
|
|
2012
|
+
lookahead_results = collect_lookahead_tool_results(index, missing_calls)
|
|
1970
2013
|
batch_tool_results = tool_result_blocks + lookahead_results
|
|
1971
2014
|
|
|
1972
2015
|
processed_messages.extend(_openai_tool_result_message(tr) for tr in batch_tool_results)
|
|
1973
2016
|
for tr in batch_tool_results:
|
|
1974
|
-
|
|
2017
|
+
consumed_tool_results.add(tool_result_identity(tr))
|
|
1975
2018
|
|
|
1976
2019
|
# If still missing, emit placeholder tool messages to satisfy API requirements.
|
|
1977
2020
|
# These must come before any image follow-up user messages so all required
|
|
1978
2021
|
# role=tool responses stay contiguous after the assistant tool calls.
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
processed_messages.append({"role": "tool", "content": "", "tool_call_id": missing_id})
|
|
2022
|
+
remaining_calls = unmatched_tool_calls(missing_calls, lookahead_results)
|
|
2023
|
+
for missing_call in remaining_calls:
|
|
2024
|
+
processed_messages.append({"role": "tool", "content": "", "tool_call_id": missing_call.id})
|
|
1983
2025
|
for tr in batch_tool_results:
|
|
1984
2026
|
followup = _openai_tool_result_image_followup(tr)
|
|
1985
2027
|
if followup is not None:
|
|
@@ -1997,20 +2039,19 @@ class MessageHistory(list):
|
|
|
1997
2039
|
|
|
1998
2040
|
tool_calls = temp_payload.get("tool_calls") or []
|
|
1999
2041
|
if tool_calls:
|
|
2000
|
-
|
|
2001
|
-
lookahead_results = collect_lookahead_tool_results(index,
|
|
2042
|
+
content_tool_calls = [item for item in message.content if isinstance(item, ToolCall)]
|
|
2043
|
+
lookahead_results = collect_lookahead_tool_results(index, content_tool_calls)
|
|
2002
2044
|
|
|
2003
2045
|
processed_messages.extend(_openai_tool_result_message(tr) for tr in lookahead_results)
|
|
2004
2046
|
for tr in lookahead_results:
|
|
2005
|
-
|
|
2047
|
+
consumed_tool_results.add(tool_result_identity(tr))
|
|
2006
2048
|
|
|
2007
2049
|
# If any are still missing, emit placeholder tool messages to satisfy API ordering.
|
|
2008
2050
|
# Placeholders also come before image follow-up user messages to keep all role=tool
|
|
2009
2051
|
# responses contiguous after the assistant tool-call message.
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
processed_messages.append({"role": "tool", "content": "", "tool_call_id": missing_id})
|
|
2052
|
+
remaining_calls = unmatched_tool_calls(content_tool_calls, lookahead_results)
|
|
2053
|
+
for missing_call in remaining_calls:
|
|
2054
|
+
processed_messages.append({"role": "tool", "content": "", "tool_call_id": missing_call.id})
|
|
2014
2055
|
for tr in lookahead_results:
|
|
2015
2056
|
followup = _openai_tool_result_image_followup(tr)
|
|
2016
2057
|
if followup is not None:
|
|
@@ -166,6 +166,7 @@ def _parsed_to_message(parsed: Any, stop_reason: str) -> Message:
|
|
|
166
166
|
are fabricated when the renderer does not emit one.
|
|
167
167
|
"""
|
|
168
168
|
blocks: List[Any] = []
|
|
169
|
+
message_tool_calls: List[ToolCall] = []
|
|
169
170
|
|
|
170
171
|
reasoning = (
|
|
171
172
|
parsed.get("reasoning_content") if isinstance(parsed, dict) else getattr(parsed, "reasoning_content", None)
|
|
@@ -211,11 +212,18 @@ def _parsed_to_message(parsed: Any, stop_reason: str) -> Message:
|
|
|
211
212
|
tool_input = {"raw": arguments}
|
|
212
213
|
raw_id = call.get("id") if isinstance(call, dict) else getattr(call, "id", None)
|
|
213
214
|
call_id = str(raw_id) if raw_id else f"call_{index}"
|
|
214
|
-
|
|
215
|
+
tool_call = ToolCall(id=call_id, name=name, input=tool_input)
|
|
216
|
+
message_tool_calls.append(tool_call)
|
|
217
|
+
blocks.append(tool_call)
|
|
215
218
|
|
|
216
219
|
if not blocks:
|
|
217
220
|
blocks.append(TextBlock(text=""))
|
|
218
|
-
return Message(
|
|
221
|
+
return Message(
|
|
222
|
+
role="assistant",
|
|
223
|
+
content=blocks,
|
|
224
|
+
stop_reason="tool_use" if message_tool_calls else stop_reason,
|
|
225
|
+
tool_calls=message_tool_calls,
|
|
226
|
+
)
|
|
219
227
|
|
|
220
228
|
|
|
221
229
|
def _kolega_stop_reason(sdk_reason: str, termination: Any) -> str:
|
|
@@ -573,7 +581,12 @@ def _message_to_chunks(message: Message) -> List[MessageChunk]:
|
|
|
573
581
|
chunks.append(
|
|
574
582
|
MessageChunk(
|
|
575
583
|
type="tool_use_start",
|
|
576
|
-
tool_call_delta={
|
|
584
|
+
tool_call_delta={
|
|
585
|
+
"id": block.id,
|
|
586
|
+
"name": block.name,
|
|
587
|
+
"input": "",
|
|
588
|
+
"execution_id": block.execution_id,
|
|
589
|
+
},
|
|
577
590
|
)
|
|
578
591
|
)
|
|
579
592
|
chunks.append(
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "kolega-code"
|
|
7
|
-
version = "0.28.
|
|
7
|
+
version = "0.28.2"
|
|
8
8
|
description = "Multi-agent coding in the terminal"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = {file = "LICENSE"}
|
|
@@ -107,7 +107,8 @@ cli = []
|
|
|
107
107
|
# tml-renderers >=2.10) and transformers; the base install stays torch-free.
|
|
108
108
|
# tml-renderers ships abi3 wheels for Linux x86_64/aarch64 and macOS arm64 only.
|
|
109
109
|
tinker = [
|
|
110
|
-
"tinker
|
|
110
|
+
"tinker==0.25.0",
|
|
111
|
+
"tinker-cookbook==0.5.4",
|
|
111
112
|
"tml-renderers==0.1.0",
|
|
112
113
|
]
|
|
113
114
|
dev = [
|
|
@@ -166,7 +167,16 @@ exclude-newer = "1 week"
|
|
|
166
167
|
# h2 4.4.1 (released 2026-08-03) is the only release fixing GHSA-6hr6-w5qg-qmwg
|
|
167
168
|
# (CVE-2026-71554, duplicate Host header request smuggling) and sits inside the
|
|
168
169
|
# same quarantine; admit it the same way.
|
|
169
|
-
|
|
170
|
+
# tinker 0.25.0 (released 2026-08-08) is required by the live service, which
|
|
171
|
+
# warns that 0.24.0 is outdated; admit that SDK without widening the global window.
|
|
172
|
+
# tinker-cookbook 0.5.4 (released 2026-08-11) is the matching current cookbook;
|
|
173
|
+
# admit it through the same targeted exception.
|
|
174
|
+
|
|
175
|
+
[tool.uv.exclude-newer-package]
|
|
176
|
+
cryptography = "2026-08-01T00:00:00Z"
|
|
177
|
+
h2 = "2026-08-04T00:00:00Z"
|
|
178
|
+
tinker = "2026-08-09T00:00:00Z"
|
|
179
|
+
tinker-cookbook = "2026-08-12T00:00:00Z"
|
|
170
180
|
|
|
171
181
|
[tool.pyright]
|
|
172
182
|
include = ["kolega_code", "benchmarks", "tests"]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/deep-research/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/docx/requirements.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/humanizer/LICENSE
RENAMED
|
File without changes
|
{kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/humanizer/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pdf/references/ocr.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pdf/requirements.txt
RENAMED
|
File without changes
|
{kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pdf/scripts/pdf_tool.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/pptx/requirements.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kolega_code-0.28.0 → kolega_code-0.28.2}/kolega_code/_bundled_skills/skills/review/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|