kolega-code 0.28.2__tar.gz → 0.28.4__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.2 → kolega_code-0.28.4}/CHANGELOG.md +16 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/PKG-INFO +1 -1
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/__init__.py +1 -1
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/__init__.py +1 -1
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/baseagent.py +2 -1
- kolega_code-0.28.4/kolega_code/agent/compression.py +324 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/conversation.py +5 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +1 -1
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tools.py +1 -3
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/config.py +1 -1
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/catalog/thinking_machines.py +2 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/catalog/tinker.py +23 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/tinker_catalog.py +4 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/pyproject.toml +1 -1
- kolega_code-0.28.2/kolega_code/agent/compression.py +0 -166
- {kolega_code-0.28.2 → kolega_code-0.28.4}/.gitignore +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/CONTRIBUTING.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/LICENSE +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/MIGRATION.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/README.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/RELEASING.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/LICENSE +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/manifest.json +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/deep-research/SKILL.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/deep-research/references/evidence-and-reporting.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/deep-research/references/gigacode-workflow.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/deep-research/scripts/deep-research.workflow +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/deep-research/scripts/materialize_report.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/docx/LICENSE +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/docx/SKILL.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/docx/references/examples.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/docx/references/limitations.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/docx/references/operations.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/docx/references/quality.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/docx/requirements.txt +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/docx/scripts/docx_tool.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/docx/scripts/smoke_test.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/humanizer/LICENSE +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/humanizer/SKILL.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pdf/LICENSE +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pdf/SKILL.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pdf/references/examples.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pdf/references/limitations.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pdf/references/ocr.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pdf/references/operations.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pdf/references/quality.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pdf/references/redaction.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-paddle.txt +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-surya.txt +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pdf/requirements.txt +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pdf/scripts/pdf_tool.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pdf/scripts/smoke_test.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pptx/LICENSE +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pptx/SKILL.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pptx/references/examples.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pptx/references/limitations.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pptx/references/operations.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pptx/requirements.txt +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pptx/scripts/pptx_tool.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/pptx/scripts/smoke_test.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/review/SKILL.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/review/references/github-publishing.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/skill-authoring/SKILL.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/skill-authoring/references/review-checklist.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/xlsx/LICENSE +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/xlsx/SKILL.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/xlsx/references/examples.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/xlsx/references/limitations.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/xlsx/references/operations.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/xlsx/references/quality.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/xlsx/requirements.txt +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/xlsx/scripts/smoke_test.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/_bundled_skills/skills/xlsx/scripts/xlsx_tool.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/browseragent.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/coder.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/common.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/context.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/custom_agents.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/edit_protocols.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/errors.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/eval/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/eval/bridge.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/eval/bundle-requirements.in +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/eval/bundle-requirements.txt +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/eval/env.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/eval/js_kernel.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/eval/kernel.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/eval/prelude.js +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/eval/prelude.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/eval/protocol.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/eval/py_kernel.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/eval/runner.js +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/eval/runner.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/generalagent.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/goal.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/investigationagent.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/model_routing.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/orchestration/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/orchestration/accounting.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/orchestration/budget.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/orchestration/context.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/orchestration/errors.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/orchestration/executor.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/orchestration/guide.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/orchestration/journal.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/orchestration/runtime.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/orchestration/types.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/planningagent.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_dump.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_overrides.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_provider.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_exhausted.user.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_nudge.user.md.j2 +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/truncated_turn_nudge.user.md.j2 +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/extensions/cli/build_questions.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/extensions/cli/current_plan_artifact.md.j2 +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/extensions/cli/mode_switch_notice.md.j2 +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/extensions/cli/scratchpad.md.j2 +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list_readonly.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/extensions/cli/worktree_control.md.j2 +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/system/agents/coder_ask.md.j2 +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/system/agents/coder_base.md.j2 +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/system/includes/context_updates.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/system/includes/terminal_tools.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/apply_patch.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/ask_user_choice.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_click.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_close.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_console_messages.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_drag.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_drop.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_evaluate.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_file_upload.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_fill_form.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_find.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_handle_dialog.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_hover.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_navigate.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_navigate_back.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_network_request.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_network_requests.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_press_key.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_resize.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_scroll.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_select_option.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_snapshot.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_tabs.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_take_screenshot.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_type.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/browser_wait_for.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/build_backend.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/build_frontend.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/claude_edit.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/claude_write.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/dispatch_agent.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/edit.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/eval.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/exec_command.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/get_host.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/get_task_list.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/get_task_list_readonly.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/hashline_edit.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/hashline_write.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/kill_command.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/list_sessions.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/list_subagent_models.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/list_workflow_runs.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/lsp.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/lsp_edit.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/multi_edit.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/read.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/read_image.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/resolve.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/run_workflow.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/set_goal.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/skill.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/snapshot.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/switch_worktree.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/update_task_list.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/web_fetch.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/web_search.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/write.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/write_plan.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/tools/write_stdin.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/prompts.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/agent_tool.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/base_tool.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/browser_tool.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/build_tool.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/codex_patch.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/edit_tool.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/eval_tool.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/hashline_v2.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/lsp_tool.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/network_status.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/read_file_tool.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/read_image_tool.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/search_backends/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/search_backends/tavily.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/snapshot_tool.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/terminal_tool.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/web_fetch/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/web_fetch/answering.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/web_fetch/documents.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/web_fetch/extractors.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/web_fetch/pipeline.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/web_fetch/retrieval.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/web_fetch_tool.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/web_search_tool.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/tool_definitions.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/utils/commands.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/agent/volatile_context.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/auth/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/auth/_jwt.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/auth/chatgpt_oauth.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/auth/constants.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/auth/tokens.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/browser_extension/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/browser_extension/framing.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/browser_extension/installer.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/browser_extension/manager.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/browser_extension/multiplex.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/browser_extension/native_host.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/browser_extension/protocol.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/browser_extension/registry.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/browser_extension/runtime.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/app.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/ask_output.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/atif_export.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/browser_backend.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/clipboard_image.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/config.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/connection.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/cron.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/diagnostics.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/file_index.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/goal.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/loop.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/main.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/mentions.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/messages.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/model_catalog.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/model_connection.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/plan_artifacts.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/provider_registry.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/session_event_protocol.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/session_event_store.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/session_journal.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/session_store.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/session_usage.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/settings.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/skills.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/slash_commands.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/theme.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/agent_runtime.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/app_base.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/changes_screen.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/command_handlers.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/constants.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/custom_model.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/loop_runtime.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/memory_screen.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/onboarding_screen.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/pacing.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/prompt_flows.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/session_diff.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/settings_panel.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/settings_screen.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/state.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/status_dashboard.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/styles.tcss +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/sub_agent_screen.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/terminal_display.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/transcript.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/tui/widgets.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/cli/updater.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/events.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/extensions.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/git_env.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/hooks/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/hooks/backends.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/hooks/config.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/hooks/dispatcher.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/hooks/events.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/hooks/matcher.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/hooks/outcome.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/client.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/exceptions.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/instrumented_client.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/ledger.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/models.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/providers/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/providers/_token_encoding.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/providers/anthropic.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/providers/base.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/providers/deepseek_responses.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/providers/google.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/providers/models.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/providers/openai.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/providers/openai_responses.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/providers/responses_common.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/providers/tinker.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/providers/tinker_trace.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/ratelimit.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/accessors.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/catalog/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/catalog/anthropic.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/catalog/dashscope.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/catalog/deepseek.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/catalog/fireworks.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/catalog/google.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/catalog/kimi_coding.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/catalog/moonshot.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/catalog/ollama_cloud.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/catalog/openai.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/catalog/openai_chatgpt.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/catalog/openrouter.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/catalog/together.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/catalog/xai.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/catalog/zai.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/ollama_cloud_catalog.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/openrouter_catalog.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/thinking.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/types.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/validation.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/timeouts.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/tool_execution_ids.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/usage.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/local_state.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/mcp/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/mcp/config.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/mcp/oauth.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/mcp/service.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/mcp/state.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/mcp/tools.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/mcp/transport.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/memory/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/memory/identity.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/memory/manager.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/memory/manifest.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/memory/markdown.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/memory/models.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/memory/protocol.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/memory/registry.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/models/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/models/sandbox_terminal_state.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/permissions.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/runtime.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/sandbox/README.md +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/sandbox/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/sandbox/async_filesystem.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/sandbox/base.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/sandbox/browser.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/sandbox/event_loop.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/sandbox/filesystem.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/sandbox/local.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/sandbox/serializer.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/sandbox/terminal.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/sandbox/utils.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/scratchpad.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/security/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/security/secrets.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/services/base.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/services/browser.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/services/file_system.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/services/html.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/services/lsp/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/services/lsp/client.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/services/lsp/config.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/services/lsp/detector.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/services/lsp/diagnostics.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/services/lsp/edits.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/services/lsp/manager.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/services/lsp/registry.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/services/lsp/registry.yaml +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/services/snapshots.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/services/terminal.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/services/terminal_buffer.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/services/workspace_scan.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/session/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/session/control.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/session/inmemory.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/session/projection.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/session/recording.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/session/runtime.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/session/store.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/testing/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/testing/store_conformance.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/tools/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/tools/core.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/tools/definitions.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/tools/param_aliases.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/tools/registry.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/utils/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/utils/images.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/web/__init__.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/web/assets/fold.js +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/web/assets/player.css +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/web/assets/player.html +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/web/assets/player.js +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/web/bundle.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/web/hosting.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/web/redaction.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/web/server.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/web/singlefile.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/web/theme_css.py +0 -0
- {kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/worktrees.py +0 -0
|
@@ -6,6 +6,22 @@ This project uses GitHub Releases for detailed generated release notes. This fil
|
|
|
6
6
|
|
|
7
7
|
## Unreleased
|
|
8
8
|
|
|
9
|
+
## 0.28.4 - 2026-08-12
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- Conversation compaction now keeps the summarization request within the run's
|
|
14
|
+
input token budget, so auto-compaction no longer fails on long conversations
|
|
15
|
+
and lets the run continue instead of aborting.
|
|
16
|
+
|
|
17
|
+
## 0.28.3 - 2026-08-12
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Claude-style `edit` and `write` tools are now the default model-facing edit
|
|
22
|
+
protocol. Explicit overrides and model-catalog preferences still take
|
|
23
|
+
precedence, and the legacy search/replace protocol remains available.
|
|
24
|
+
|
|
9
25
|
## 0.28.2 - 2026-08-12
|
|
10
26
|
|
|
11
27
|
### Fixed
|
|
@@ -321,7 +321,7 @@ class BaseAgent(LogMixin):
|
|
|
321
321
|
self.primary_model_config = self.config.model_config_for_agent(self.agent_name)
|
|
322
322
|
resolved_edit_protocol = self.config.resolve_edit_protocol(self.primary_model_config)
|
|
323
323
|
self.edit_protocol = (
|
|
324
|
-
resolved_edit_protocol if isinstance(resolved_edit_protocol, EditProtocol) else EditProtocol.
|
|
324
|
+
resolved_edit_protocol if isinstance(resolved_edit_protocol, EditProtocol) else EditProtocol.CLAUDE_CODE
|
|
325
325
|
)
|
|
326
326
|
self.filesystem = context.services.filesystem
|
|
327
327
|
self.terminal_manager = context.services.terminal_manager
|
|
@@ -1208,6 +1208,7 @@ class BaseAgent(LogMixin):
|
|
|
1208
1208
|
on_error=on_error,
|
|
1209
1209
|
system_prompt_text=compaction_system_prompt,
|
|
1210
1210
|
keep_recent=keep_recent,
|
|
1211
|
+
max_input_tokens=self.model_max_input_tokens,
|
|
1211
1212
|
)
|
|
1212
1213
|
if result.ok:
|
|
1213
1214
|
# Compaction summarizes the injected volatile-context blocks along with
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
"""History compression: summarize a conversation when it outgrows the context window."""
|
|
2
|
+
|
|
3
|
+
import json
|
|
4
|
+
import logging
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
from typing import Awaitable, Callable, List, Optional
|
|
7
|
+
|
|
8
|
+
from .conversation import Conversation, replace_image_blocks_with_placeholders
|
|
9
|
+
from kolega_code.llm.exceptions import LLMContextWindowExceededError
|
|
10
|
+
from kolega_code.llm.ledger import helper_origin, llm_call_origin
|
|
11
|
+
from kolega_code.llm.models import Message, MessageHistory, TextBlock, ToolCall, ToolResult
|
|
12
|
+
from .prompts import (
|
|
13
|
+
build_compression_summary_user_prompt,
|
|
14
|
+
COMPRESSION_SUMMARY_SYSTEM_PROMPT,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
logger = logging.getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
LogCallback = Callable[[str], Awaitable[None]]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@dataclass(frozen=True)
|
|
23
|
+
class CompactionResult:
|
|
24
|
+
"""Outcome of a compaction attempt, surfaced to callers and the UI.
|
|
25
|
+
|
|
26
|
+
``reason`` is a machine tag: "ok" | "too_few" | "nothing_to_summarize" | "llm_error".
|
|
27
|
+
``message`` is a human-readable line for the command output / logs.
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
ok: bool
|
|
31
|
+
reason: str
|
|
32
|
+
summarized_messages: int = 0
|
|
33
|
+
message: str = ""
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def _render_transcript(messages: List[Message]) -> str:
|
|
37
|
+
"""Role-tagged plain text: JSON only for tool arguments, tool results raw.
|
|
38
|
+
|
|
39
|
+
JSON-escaping newline-heavy tool output costs ~30% more tokens than
|
|
40
|
+
leaving it raw.
|
|
41
|
+
"""
|
|
42
|
+
out: List[str] = []
|
|
43
|
+
for message in messages:
|
|
44
|
+
if isinstance(message.content, str):
|
|
45
|
+
if message.content:
|
|
46
|
+
out.append(f"[{message.role}]\n{message.content}")
|
|
47
|
+
continue
|
|
48
|
+
for block in message.content:
|
|
49
|
+
if isinstance(block, ToolCall):
|
|
50
|
+
try:
|
|
51
|
+
args = json.dumps(block.input, ensure_ascii=False)
|
|
52
|
+
except (TypeError, ValueError):
|
|
53
|
+
args = str(block.input)
|
|
54
|
+
out.append(f"[assistant → {block.name}] {args}")
|
|
55
|
+
elif isinstance(block, ToolResult):
|
|
56
|
+
if isinstance(block.content, str):
|
|
57
|
+
body = block.content
|
|
58
|
+
else:
|
|
59
|
+
body = "\n".join(getattr(item, "text", "") or "" for item in block.content)
|
|
60
|
+
tag = "error" if block.is_error else "result"
|
|
61
|
+
out.append(f"[{block.name} {tag}]\n{body}")
|
|
62
|
+
else:
|
|
63
|
+
text = getattr(block, "text", None)
|
|
64
|
+
thinking = getattr(block, "thinking", None)
|
|
65
|
+
if text:
|
|
66
|
+
out.append(f"[{message.role}]\n{text}")
|
|
67
|
+
elif thinking:
|
|
68
|
+
out.append(f"[{message.role} thinking]\n{thinking}")
|
|
69
|
+
return "\n\n".join(out)
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def _omission_notice(omitted: int) -> str:
|
|
73
|
+
return f"[... {omitted} conversation message(s) omitted here so the compaction request fits the context budget ...]"
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def _approx_message_chars(message: Message) -> int:
|
|
77
|
+
"""Size proxy for picking the omission gap; the request is re-counted before dispatch."""
|
|
78
|
+
if isinstance(message.content, str):
|
|
79
|
+
return len(message.content)
|
|
80
|
+
chars = 0
|
|
81
|
+
for block in message.content:
|
|
82
|
+
if isinstance(block, ToolCall):
|
|
83
|
+
try:
|
|
84
|
+
chars += len(json.dumps(block.input))
|
|
85
|
+
except (TypeError, ValueError):
|
|
86
|
+
chars += len(str(block.input))
|
|
87
|
+
elif isinstance(block, ToolResult):
|
|
88
|
+
if isinstance(block.content, str):
|
|
89
|
+
chars += len(block.content)
|
|
90
|
+
else:
|
|
91
|
+
chars += sum(len(getattr(item, "text", "") or "") for item in block.content)
|
|
92
|
+
else:
|
|
93
|
+
chars += len(getattr(block, "text", "") or "") + len(getattr(block, "thinking", "") or "")
|
|
94
|
+
return chars
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def _middle_gap(weights: List[int], target_chars: float) -> tuple[int, int]:
|
|
98
|
+
"""Pick the (head_end, tail_start) gap keeping ~``target_chars``: half from the
|
|
99
|
+
oldest messages (task statement), half from the newest (continuity)."""
|
|
100
|
+
half = target_chars / 2
|
|
101
|
+
head_end, acc = 0, 0
|
|
102
|
+
for index, weight in enumerate(weights):
|
|
103
|
+
if acc + weight > half:
|
|
104
|
+
break
|
|
105
|
+
acc += weight
|
|
106
|
+
head_end = index + 1
|
|
107
|
+
tail_start, acc = len(weights), 0
|
|
108
|
+
for index in range(len(weights) - 1, head_end - 1, -1):
|
|
109
|
+
if acc + weights[index] > half:
|
|
110
|
+
break
|
|
111
|
+
acc += weights[index]
|
|
112
|
+
tail_start = index
|
|
113
|
+
return head_end, tail_start
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def _bundles_tool_results(message: Message) -> bool:
|
|
117
|
+
return isinstance(message.content, list) and any(isinstance(block, ToolResult) for block in message.content)
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
class HistoryCompressor:
|
|
121
|
+
"""Summarizes a conversation non-destructively when it crosses the budget threshold."""
|
|
122
|
+
|
|
123
|
+
MIN_MESSAGES_TO_COMPRESS = 5
|
|
124
|
+
# How many of the most recent messages to keep verbatim after the summary.
|
|
125
|
+
KEEP_RECENT_MESSAGES = 6
|
|
126
|
+
# Don't bother summarizing a trivially short prefix.
|
|
127
|
+
MIN_PREFIX_TO_SUMMARIZE = 3
|
|
128
|
+
# Cap the summary length. The prompt targets ~600 words, but reasoning
|
|
129
|
+
# models (deepseek-v4-flash Responses, etc.) can consume the entire budget
|
|
130
|
+
# on chain-of-thought and leave no room for text output, producing an empty
|
|
131
|
+
# summary. A generous ceiling gives reasoning headroom while still staying
|
|
132
|
+
# well under the model's full completion budget.
|
|
133
|
+
SUMMARY_MAX_TOKENS = 8192
|
|
134
|
+
# Attempts at widening the omission gap per budget rung.
|
|
135
|
+
MAX_FIT_ATTEMPTS = 6
|
|
136
|
+
|
|
137
|
+
def __init__(self, threshold: float = 0.8) -> None:
|
|
138
|
+
# Fraction of the model context window above which compression kicks in
|
|
139
|
+
self.threshold = threshold
|
|
140
|
+
|
|
141
|
+
def over_budget(self, input_tokens: int, input_budget_tokens: int) -> bool:
|
|
142
|
+
"""True when input exceeds the threshold fraction of the input budget."""
|
|
143
|
+
return input_tokens > input_budget_tokens * self.threshold
|
|
144
|
+
|
|
145
|
+
async def summarize(
|
|
146
|
+
self,
|
|
147
|
+
conversation: Conversation,
|
|
148
|
+
*,
|
|
149
|
+
llm,
|
|
150
|
+
model: str,
|
|
151
|
+
temperature: float,
|
|
152
|
+
thinking,
|
|
153
|
+
on_info: Optional[LogCallback] = None,
|
|
154
|
+
on_error: Optional[LogCallback] = None,
|
|
155
|
+
system_prompt_text: Optional[str] = None,
|
|
156
|
+
keep_recent: Optional[int] = None,
|
|
157
|
+
max_input_tokens: Optional[int] = None,
|
|
158
|
+
) -> CompactionResult:
|
|
159
|
+
"""
|
|
160
|
+
Non-destructively summarize the aged-out prefix while keeping the most
|
|
161
|
+
recent turns verbatim, and move the compaction boundary.
|
|
162
|
+
|
|
163
|
+
Incremental: only the messages that have aged out since the previous
|
|
164
|
+
boundary are summarized, with the prior summary folded in for continuity.
|
|
165
|
+
The aged-out span is presented to the summarizer as a role-tagged
|
|
166
|
+
plain-text transcript (tool arguments as JSON, tool results raw).
|
|
167
|
+
Returns a CompactionResult describing what happened — never a silent no-op.
|
|
168
|
+
|
|
169
|
+
``keep_recent`` overrides KEEP_RECENT_MESSAGES (the verbatim tail). A
|
|
170
|
+
literal ``0`` is the aggressive fallback: everything before the safe
|
|
171
|
+
boundary — potentially including recent user content — becomes eligible
|
|
172
|
+
for lossy summarization. The raw history is never modified, and the
|
|
173
|
+
safe-boundary snap still keeps tool_use/tool_result pairs together.
|
|
174
|
+
|
|
175
|
+
``max_input_tokens`` bounds the summarization request itself: while the
|
|
176
|
+
rendered request exceeds it, whole messages are dropped from the middle
|
|
177
|
+
of the span (never splitting a tool exchange) and an omission notice is
|
|
178
|
+
left in the gap. Dispatch walks a descending budget ladder (100%, 90%,
|
|
179
|
+
80%, ... of the bound): if the enforcing side rejects a request the
|
|
180
|
+
counter accepted, the next rung re-widens the gap and retries until a
|
|
181
|
+
request is accepted. An unbounded request would be rejected before
|
|
182
|
+
dispatch and read as ``llm_error``, permanently disabling
|
|
183
|
+
auto-compaction.
|
|
184
|
+
"""
|
|
185
|
+
history = conversation.history
|
|
186
|
+
if not history or len(history) < self.MIN_MESSAGES_TO_COMPRESS:
|
|
187
|
+
return CompactionResult(
|
|
188
|
+
ok=False,
|
|
189
|
+
reason="too_few",
|
|
190
|
+
message=(
|
|
191
|
+
f"Nothing to compress yet ({len(history)} message(s); "
|
|
192
|
+
f"need at least {self.MIN_MESSAGES_TO_COMPRESS})."
|
|
193
|
+
),
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
if keep_recent is None:
|
|
197
|
+
keep_recent = self.KEEP_RECENT_MESSAGES
|
|
198
|
+
split = conversation.compaction_split_point(keep_recent=keep_recent, min_prefix=self.MIN_PREFIX_TO_SUMMARIZE)
|
|
199
|
+
prior_through = conversation.compacted_through if conversation.summary is not None else 0
|
|
200
|
+
if split is None or split <= prior_through:
|
|
201
|
+
return CompactionResult(
|
|
202
|
+
ok=False,
|
|
203
|
+
reason="nothing_to_summarize",
|
|
204
|
+
message="Already compact — no older messages to summarize.",
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
if on_info:
|
|
208
|
+
await on_info("Compressing message history...")
|
|
209
|
+
|
|
210
|
+
try:
|
|
211
|
+
# A summary needs no pixels, and base64 must stay out of the transcript.
|
|
212
|
+
prefix = replace_image_blocks_with_placeholders(list(history[prior_through:split]), model)
|
|
213
|
+
previous_summary = conversation.summary.get_text_content() if conversation.summary is not None else None
|
|
214
|
+
|
|
215
|
+
def build_request(head_end: int, tail_start: int) -> MessageHistory:
|
|
216
|
+
omitted = tail_start - head_end
|
|
217
|
+
if omitted:
|
|
218
|
+
parts = [
|
|
219
|
+
_render_transcript(prefix[:head_end]),
|
|
220
|
+
_omission_notice(omitted),
|
|
221
|
+
_render_transcript(prefix[tail_start:]),
|
|
222
|
+
]
|
|
223
|
+
transcript = "\n\n".join(part for part in parts if part)
|
|
224
|
+
else:
|
|
225
|
+
transcript = _render_transcript(prefix)
|
|
226
|
+
prompt = build_compression_summary_user_prompt(transcript, previous_summary=previous_summary)
|
|
227
|
+
return MessageHistory([Message(role="user", content=[TextBlock(text=prompt)])])
|
|
228
|
+
|
|
229
|
+
head_end, tail_start = len(prefix), len(prefix)
|
|
230
|
+
messages = build_request(head_end, tail_start)
|
|
231
|
+
system_text = system_prompt_text or COMPRESSION_SUMMARY_SYSTEM_PROMPT
|
|
232
|
+
system_message = Message(role="system", content=[TextBlock(text=system_text)])
|
|
233
|
+
weights = [_approx_message_chars(message) for message in prefix]
|
|
234
|
+
|
|
235
|
+
async def widen_gap_until_fits(budget: int) -> None:
|
|
236
|
+
nonlocal head_end, tail_start, messages
|
|
237
|
+
for _ in range(self.MAX_FIT_ATTEMPTS):
|
|
238
|
+
counted = await llm.count_tokens(
|
|
239
|
+
messages=messages, system=system_message, model=model, thinking=thinking
|
|
240
|
+
)
|
|
241
|
+
if counted.input_tokens <= budget:
|
|
242
|
+
return
|
|
243
|
+
kept_chars = sum(weights[:head_end]) + sum(weights[tail_start:])
|
|
244
|
+
target_chars = kept_chars * budget / counted.input_tokens * 0.9
|
|
245
|
+
new_head, new_tail = _middle_gap(weights, target_chars)
|
|
246
|
+
# Keep tool exchanges whole on both edges of the gap.
|
|
247
|
+
new_head = conversation.snap_split_point(prior_through + new_head) - prior_through
|
|
248
|
+
while new_head < new_tail < len(prefix) and _bundles_tool_results(prefix[new_tail]):
|
|
249
|
+
new_tail += 1
|
|
250
|
+
if (new_head, new_tail) == (head_end, tail_start):
|
|
251
|
+
# Stalled (fixed prompt parts dominate): let the budget
|
|
252
|
+
# check or provider give the definitive answer.
|
|
253
|
+
return
|
|
254
|
+
head_end, tail_start = new_head, new_tail
|
|
255
|
+
messages = build_request(head_end, tail_start)
|
|
256
|
+
|
|
257
|
+
# Stream and drain rather than calling generate(): the Anthropic SDK
|
|
258
|
+
# rejects non-streaming requests whose max_tokens is large enough to risk
|
|
259
|
+
# a >10-minute response, which the model's full completion budget triggers.
|
|
260
|
+
#
|
|
261
|
+
# The helper origin spans the whole request: providers may sample and
|
|
262
|
+
# emit their trace record at context entry or final-message time, not
|
|
263
|
+
# at stream().
|
|
264
|
+
response = None
|
|
265
|
+
last_error: Optional[LLMContextWindowExceededError] = None
|
|
266
|
+
dispatched_gap: Optional[tuple[int, int]] = None
|
|
267
|
+
rungs = range(10, 0, -1) if max_input_tokens is not None else range(1)
|
|
268
|
+
for tenths in rungs:
|
|
269
|
+
if max_input_tokens is not None:
|
|
270
|
+
await widen_gap_until_fits(max_input_tokens * tenths // 10)
|
|
271
|
+
if dispatched_gap == (head_end, tail_start):
|
|
272
|
+
# This rung could not shrink the request any further;
|
|
273
|
+
# re-sending it would only be rejected again.
|
|
274
|
+
continue
|
|
275
|
+
try:
|
|
276
|
+
with llm_call_origin(helper_origin("compression")):
|
|
277
|
+
stream_cm = await llm.stream(
|
|
278
|
+
messages=messages,
|
|
279
|
+
system=system_message,
|
|
280
|
+
temperature=temperature,
|
|
281
|
+
model=model,
|
|
282
|
+
max_completion_tokens=self.SUMMARY_MAX_TOKENS,
|
|
283
|
+
thinking=thinking,
|
|
284
|
+
)
|
|
285
|
+
async with stream_cm as stream:
|
|
286
|
+
async for _event in stream:
|
|
287
|
+
pass
|
|
288
|
+
response = await stream.get_final_message()
|
|
289
|
+
break
|
|
290
|
+
except LLMContextWindowExceededError as exc:
|
|
291
|
+
if max_input_tokens is None:
|
|
292
|
+
raise
|
|
293
|
+
dispatched_gap = (head_end, tail_start)
|
|
294
|
+
last_error = exc
|
|
295
|
+
if response is None:
|
|
296
|
+
# Every rung was rejected or would have re-sent an identical request.
|
|
297
|
+
assert last_error is not None
|
|
298
|
+
raise last_error
|
|
299
|
+
|
|
300
|
+
summary_text = response.get_text_content()
|
|
301
|
+
if not summary_text or not summary_text.strip():
|
|
302
|
+
msg = "Compression produced an empty summary; history left unchanged."
|
|
303
|
+
if on_error:
|
|
304
|
+
await on_error(msg)
|
|
305
|
+
else:
|
|
306
|
+
logger.error(msg)
|
|
307
|
+
return CompactionResult(ok=False, reason="llm_error", message=msg)
|
|
308
|
+
|
|
309
|
+
folded = split - prior_through
|
|
310
|
+
conversation.apply_compaction(summary_text, split)
|
|
311
|
+
|
|
312
|
+
done = f"Compressed {folded} older message(s) into a summary; kept the latest turns verbatim."
|
|
313
|
+
if on_info:
|
|
314
|
+
await on_info(done)
|
|
315
|
+
return CompactionResult(ok=True, reason="ok", summarized_messages=folded, message=done)
|
|
316
|
+
|
|
317
|
+
except Exception as e:
|
|
318
|
+
# Never swallow into a fake success: log the full traceback and surface
|
|
319
|
+
# the real error to the caller.
|
|
320
|
+
logger.exception("Failed to compress message history")
|
|
321
|
+
msg = f"Failed to compress message history: {type(e).__name__}: {e}"
|
|
322
|
+
if on_error:
|
|
323
|
+
await on_error(msg)
|
|
324
|
+
return CompactionResult(ok=False, reason="llm_error", message=msg)
|
|
@@ -1085,6 +1085,11 @@ class Conversation:
|
|
|
1085
1085
|
return None
|
|
1086
1086
|
return candidate
|
|
1087
1087
|
|
|
1088
|
+
def snap_split_point(self, idx: int) -> int:
|
|
1089
|
+
"""Clamp ``idx`` to history bounds and snap it backward so a tool_use/
|
|
1090
|
+
tool_result group is never split across a compaction boundary."""
|
|
1091
|
+
return self._snap_to_safe_boundary(max(0, min(idx, len(self._history))))
|
|
1092
|
+
|
|
1088
1093
|
def _snap_to_safe_boundary(self, idx: int) -> int:
|
|
1089
1094
|
"""Move ``idx`` backward past any assistant tool_use so a tool_use/tool_result
|
|
1090
1095
|
group is never split across the compaction boundary."""
|
|
@@ -14,4 +14,4 @@ Summarize the following coding session so far:
|
|
|
14
14
|
{{ history }}
|
|
15
15
|
</conversation_history>
|
|
16
16
|
|
|
17
|
-
Produce the continuity briefing exactly as specified in your instructions. Summary text only — do not call tools.
|
|
17
|
+
Each transcript entry is tagged with its role; tool calls show their JSON arguments and tool results follow raw. A bracketed line marks messages omitted for length. Produce the continuity briefing exactly as specified in your instructions. Summary text only — do not call tools.
|
|
@@ -341,9 +341,7 @@ class ToolCollection(LogMixin):
|
|
|
341
341
|
model_config = config.long_context_config
|
|
342
342
|
resolved_edit_protocol = config.resolve_edit_protocol(model_config)
|
|
343
343
|
self.edit_protocol = (
|
|
344
|
-
resolved_edit_protocol
|
|
345
|
-
if isinstance(resolved_edit_protocol, EditProtocol)
|
|
346
|
-
else EditProtocol.SEARCH_REPLACE
|
|
344
|
+
resolved_edit_protocol if isinstance(resolved_edit_protocol, EditProtocol) else EditProtocol.CLAUDE_CODE
|
|
347
345
|
)
|
|
348
346
|
self.langfuse_client = langfuse_client
|
|
349
347
|
self.tool_extensions = tool_extensions or []
|
|
@@ -313,7 +313,7 @@ class AgentConfig(BaseModel):
|
|
|
313
313
|
preferred = preferred_edit_protocol(effective_model.provider, effective_model.model)
|
|
314
314
|
if preferred is not None:
|
|
315
315
|
return EditProtocol(preferred), "model_catalog"
|
|
316
|
-
return EditProtocol.
|
|
316
|
+
return EditProtocol.CLAUDE_CODE, "default"
|
|
317
317
|
|
|
318
318
|
def get_api_key(self, provider: ModelProvider) -> Optional[str]:
|
|
319
319
|
"""Get the API key for a specific provider."""
|
{kolega_code-0.28.2 → kolega_code-0.28.4}/kolega_code/llm/specs/catalog/thinking_machines.py
RENAMED
|
@@ -15,6 +15,7 @@ THINKING_MACHINES_SPECS = {
|
|
|
15
15
|
"input_budget": "window_minus_output",
|
|
16
16
|
"default_temperature": 1.0,
|
|
17
17
|
"supports_vision": True,
|
|
18
|
+
"preferred_edit_protocol": "claude_code",
|
|
18
19
|
"thinking_effort": ThinkingEffortSpec(
|
|
19
20
|
options=("none", "low", "medium", "high", "xhigh", "max"),
|
|
20
21
|
default="high",
|
|
@@ -27,6 +28,7 @@ THINKING_MACHINES_SPECS = {
|
|
|
27
28
|
"input_budget": "window_minus_output",
|
|
28
29
|
"default_temperature": 1.0,
|
|
29
30
|
"supports_vision": True,
|
|
31
|
+
"preferred_edit_protocol": "claude_code",
|
|
30
32
|
"thinking_effort": ThinkingEffortSpec(
|
|
31
33
|
options=("none", "low", "medium", "high", "xhigh", "max"),
|
|
32
34
|
default="high",
|
|
@@ -16,6 +16,7 @@ TINKER_SPECS = {
|
|
|
16
16
|
"input_budget": "window_minus_output",
|
|
17
17
|
"default_temperature": 1.0,
|
|
18
18
|
"supports_vision": True,
|
|
19
|
+
"preferred_edit_protocol": "claude_code",
|
|
19
20
|
"thinking_effort": ThinkingEffortSpec(
|
|
20
21
|
options=("none", "low", "medium", "high", "xhigh", "max"),
|
|
21
22
|
default="high",
|
|
@@ -28,6 +29,7 @@ TINKER_SPECS = {
|
|
|
28
29
|
"input_budget": "window_minus_output",
|
|
29
30
|
"default_temperature": 1.0,
|
|
30
31
|
"supports_vision": True,
|
|
32
|
+
"preferred_edit_protocol": "claude_code",
|
|
31
33
|
"thinking_effort": ThinkingEffortSpec(
|
|
32
34
|
options=("none", "low", "medium", "high", "xhigh", "max"),
|
|
33
35
|
default="high",
|
|
@@ -40,6 +42,7 @@ TINKER_SPECS = {
|
|
|
40
42
|
"input_budget": "window_minus_output",
|
|
41
43
|
"default_temperature": 1.0,
|
|
42
44
|
"supports_vision": True,
|
|
45
|
+
"preferred_edit_protocol": "claude_code",
|
|
43
46
|
"thinking_effort": ThinkingEffortSpec(
|
|
44
47
|
options=("none", "low", "medium", "high", "xhigh", "max"),
|
|
45
48
|
default="high",
|
|
@@ -52,6 +55,7 @@ TINKER_SPECS = {
|
|
|
52
55
|
"input_budget": "window_minus_output",
|
|
53
56
|
"default_temperature": 1.0,
|
|
54
57
|
"supports_vision": True,
|
|
58
|
+
"preferred_edit_protocol": "claude_code",
|
|
55
59
|
"thinking_effort": ThinkingEffortSpec(
|
|
56
60
|
options=("none", "low", "medium", "high", "xhigh", "max"),
|
|
57
61
|
default="high",
|
|
@@ -64,6 +68,7 @@ TINKER_SPECS = {
|
|
|
64
68
|
"input_budget": "window_minus_output",
|
|
65
69
|
"default_temperature": 1.0,
|
|
66
70
|
"supports_vision": False,
|
|
71
|
+
"preferred_edit_protocol": "claude_code",
|
|
67
72
|
},
|
|
68
73
|
("tinker", "nvidia/NVIDIA-Nemotron-3-Ultra-550B-A55B-BF16:peft:262144"): {
|
|
69
74
|
"context_length": 262144,
|
|
@@ -71,6 +76,7 @@ TINKER_SPECS = {
|
|
|
71
76
|
"input_budget": "window_minus_output",
|
|
72
77
|
"default_temperature": 1.0,
|
|
73
78
|
"supports_vision": False,
|
|
79
|
+
"preferred_edit_protocol": "claude_code",
|
|
74
80
|
},
|
|
75
81
|
("tinker", "nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16"): {
|
|
76
82
|
"context_length": 65536,
|
|
@@ -78,6 +84,7 @@ TINKER_SPECS = {
|
|
|
78
84
|
"input_budget": "window_minus_output",
|
|
79
85
|
"default_temperature": 1.0,
|
|
80
86
|
"supports_vision": False,
|
|
87
|
+
"preferred_edit_protocol": "claude_code",
|
|
81
88
|
},
|
|
82
89
|
("tinker", "nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-BF16:peft:262144"): {
|
|
83
90
|
"context_length": 262144,
|
|
@@ -85,6 +92,7 @@ TINKER_SPECS = {
|
|
|
85
92
|
"input_budget": "window_minus_output",
|
|
86
93
|
"default_temperature": 1.0,
|
|
87
94
|
"supports_vision": False,
|
|
95
|
+
"preferred_edit_protocol": "claude_code",
|
|
88
96
|
},
|
|
89
97
|
("tinker", "nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-BF16"): {
|
|
90
98
|
"context_length": 65536,
|
|
@@ -92,6 +100,7 @@ TINKER_SPECS = {
|
|
|
92
100
|
"input_budget": "window_minus_output",
|
|
93
101
|
"default_temperature": 1.0,
|
|
94
102
|
"supports_vision": False,
|
|
103
|
+
"preferred_edit_protocol": "claude_code",
|
|
95
104
|
},
|
|
96
105
|
("tinker", "moonshotai/Kimi-K2.6"): {
|
|
97
106
|
"context_length": 32768,
|
|
@@ -99,6 +108,7 @@ TINKER_SPECS = {
|
|
|
99
108
|
"input_budget": "output_shares_window",
|
|
100
109
|
"default_temperature": 1.0,
|
|
101
110
|
"supports_vision": True,
|
|
111
|
+
"preferred_edit_protocol": "claude_code",
|
|
102
112
|
"thinking_effort": ThinkingEffortSpec(
|
|
103
113
|
options=("none", "auto"),
|
|
104
114
|
default="auto",
|
|
@@ -111,6 +121,7 @@ TINKER_SPECS = {
|
|
|
111
121
|
"input_budget": "window_minus_output",
|
|
112
122
|
"default_temperature": 1.0,
|
|
113
123
|
"supports_vision": True,
|
|
124
|
+
"preferred_edit_protocol": "claude_code",
|
|
114
125
|
"thinking_effort": ThinkingEffortSpec(
|
|
115
126
|
options=("none", "auto"),
|
|
116
127
|
default="auto",
|
|
@@ -123,6 +134,7 @@ TINKER_SPECS = {
|
|
|
123
134
|
"input_budget": "window_minus_output",
|
|
124
135
|
"default_temperature": 1.0,
|
|
125
136
|
"supports_vision": True,
|
|
137
|
+
"preferred_edit_protocol": "claude_code",
|
|
126
138
|
"thinking_effort": ThinkingEffortSpec(
|
|
127
139
|
options=("none", "auto"),
|
|
128
140
|
default="auto",
|
|
@@ -135,6 +147,7 @@ TINKER_SPECS = {
|
|
|
135
147
|
"input_budget": "window_minus_output",
|
|
136
148
|
"default_temperature": 1.0,
|
|
137
149
|
"supports_vision": True,
|
|
150
|
+
"preferred_edit_protocol": "claude_code",
|
|
138
151
|
"thinking_effort": ThinkingEffortSpec(
|
|
139
152
|
options=("none", "auto"),
|
|
140
153
|
default="auto",
|
|
@@ -147,6 +160,7 @@ TINKER_SPECS = {
|
|
|
147
160
|
"input_budget": "window_minus_output",
|
|
148
161
|
"default_temperature": 1.0,
|
|
149
162
|
"supports_vision": True,
|
|
163
|
+
"preferred_edit_protocol": "claude_code",
|
|
150
164
|
"thinking_effort": ThinkingEffortSpec(
|
|
151
165
|
options=("none", "auto"),
|
|
152
166
|
default="auto",
|
|
@@ -159,6 +173,7 @@ TINKER_SPECS = {
|
|
|
159
173
|
"input_budget": "window_minus_output",
|
|
160
174
|
"default_temperature": 1.0,
|
|
161
175
|
"supports_vision": True,
|
|
176
|
+
"preferred_edit_protocol": "claude_code",
|
|
162
177
|
"thinking_effort": ThinkingEffortSpec(
|
|
163
178
|
options=("none", "auto"),
|
|
164
179
|
default="auto",
|
|
@@ -171,6 +186,7 @@ TINKER_SPECS = {
|
|
|
171
186
|
"input_budget": "window_minus_output",
|
|
172
187
|
"default_temperature": 1.0,
|
|
173
188
|
"supports_vision": True,
|
|
189
|
+
"preferred_edit_protocol": "claude_code",
|
|
174
190
|
"thinking_effort": ThinkingEffortSpec(
|
|
175
191
|
options=("none", "auto"),
|
|
176
192
|
default="auto",
|
|
@@ -183,6 +199,7 @@ TINKER_SPECS = {
|
|
|
183
199
|
"input_budget": "window_minus_output",
|
|
184
200
|
"default_temperature": 1.0,
|
|
185
201
|
"supports_vision": True,
|
|
202
|
+
"preferred_edit_protocol": "claude_code",
|
|
186
203
|
"thinking_effort": ThinkingEffortSpec(
|
|
187
204
|
options=("none", "auto"),
|
|
188
205
|
default="auto",
|
|
@@ -195,6 +212,7 @@ TINKER_SPECS = {
|
|
|
195
212
|
"input_budget": "output_shares_window",
|
|
196
213
|
"default_temperature": 1.0,
|
|
197
214
|
"supports_vision": False,
|
|
215
|
+
"preferred_edit_protocol": "claude_code",
|
|
198
216
|
},
|
|
199
217
|
("tinker", "openai/gpt-oss-120b"): {
|
|
200
218
|
"context_length": 32768,
|
|
@@ -202,6 +220,7 @@ TINKER_SPECS = {
|
|
|
202
220
|
"input_budget": "output_shares_window",
|
|
203
221
|
"default_temperature": 1.0,
|
|
204
222
|
"supports_vision": False,
|
|
223
|
+
"preferred_edit_protocol": "claude_code",
|
|
205
224
|
},
|
|
206
225
|
("tinker", "openai/gpt-oss-120b:peft:131072"): {
|
|
207
226
|
"context_length": 131072,
|
|
@@ -209,6 +228,7 @@ TINKER_SPECS = {
|
|
|
209
228
|
"input_budget": "window_minus_output",
|
|
210
229
|
"default_temperature": 1.0,
|
|
211
230
|
"supports_vision": False,
|
|
231
|
+
"preferred_edit_protocol": "claude_code",
|
|
212
232
|
},
|
|
213
233
|
("tinker", "openai/gpt-oss-20b"): {
|
|
214
234
|
"context_length": 32768,
|
|
@@ -216,6 +236,7 @@ TINKER_SPECS = {
|
|
|
216
236
|
"input_budget": "output_shares_window",
|
|
217
237
|
"default_temperature": 1.0,
|
|
218
238
|
"supports_vision": False,
|
|
239
|
+
"preferred_edit_protocol": "claude_code",
|
|
219
240
|
},
|
|
220
241
|
("tinker", "deepseek-ai/DeepSeek-V3.1"): {
|
|
221
242
|
"context_length": 32768,
|
|
@@ -223,6 +244,7 @@ TINKER_SPECS = {
|
|
|
223
244
|
"input_budget": "output_shares_window",
|
|
224
245
|
"default_temperature": 1.0,
|
|
225
246
|
"supports_vision": False,
|
|
247
|
+
"preferred_edit_protocol": "claude_code",
|
|
226
248
|
"thinking_effort": ThinkingEffortSpec(
|
|
227
249
|
options=("none", "auto"),
|
|
228
250
|
default="auto",
|
|
@@ -240,5 +262,6 @@ TINKER_WILDCARD_SPECS = {
|
|
|
240
262
|
"input_budget": "window_minus_output",
|
|
241
263
|
"default_temperature": 1.0,
|
|
242
264
|
"supports_vision": False,
|
|
265
|
+
"preferred_edit_protocol": "claude_code",
|
|
243
266
|
},
|
|
244
267
|
}
|
|
@@ -51,6 +51,7 @@ _USER_AGENT = (
|
|
|
51
51
|
# used across the direct-provider catalogs.
|
|
52
52
|
MAX_COMPLETION_TOKENS = 32768
|
|
53
53
|
DEFAULT_TEMPERATURE = 1.0
|
|
54
|
+
PREFERRED_EDIT_PROTOCOL = "claude_code"
|
|
54
55
|
|
|
55
56
|
# Named-effort spec for the Inkling family (tml-renderers effort floats).
|
|
56
57
|
INKLING_EFFORT_SPEC = ThinkingEffortSpec(
|
|
@@ -131,6 +132,7 @@ def catalog_entries(payload: Any) -> list[tuple[str, dict[str, Any]]]:
|
|
|
131
132
|
"input_budget": "output_shares_window",
|
|
132
133
|
"default_temperature": DEFAULT_TEMPERATURE,
|
|
133
134
|
"supports_vision": "Vision" in model_type,
|
|
135
|
+
"preferred_edit_protocol": PREFERRED_EDIT_PROTOCOL,
|
|
134
136
|
}
|
|
135
137
|
spec.update(_family_spec(str(identifier)))
|
|
136
138
|
entries.append((str(identifier), spec))
|
|
@@ -160,6 +162,7 @@ def spec_to_jsonable(spec: Mapping[str, Any]) -> dict[str, Any]:
|
|
|
160
162
|
def spec_from_jsonable(payload: Mapping[str, Any]) -> dict[str, Any]:
|
|
161
163
|
"""Rebuild a runtime spec from ``spec_to_jsonable`` output."""
|
|
162
164
|
spec = dict(payload)
|
|
165
|
+
spec.setdefault("preferred_edit_protocol", PREFERRED_EDIT_PROTOCOL)
|
|
163
166
|
thinking = spec.get("thinking_effort")
|
|
164
167
|
if isinstance(thinking, Mapping) and thinking.get("mode") == "tinker_native_effort":
|
|
165
168
|
spec["thinking_effort"] = ThinkingEffortSpec(
|
|
@@ -236,5 +239,6 @@ TINKER_WILDCARD_SPECS = {
|
|
|
236
239
|
"input_budget": "output_shares_window",
|
|
237
240
|
"default_temperature": DEFAULT_TEMPERATURE,
|
|
238
241
|
"supports_vision": False,
|
|
242
|
+
"preferred_edit_protocol": PREFERRED_EDIT_PROTOCOL,
|
|
239
243
|
},
|
|
240
244
|
}
|