kolega-code 0.26.10__tar.gz → 0.27.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {kolega_code-0.26.10 → kolega_code-0.27.0}/CHANGELOG.md +162 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/PKG-INFO +1 -1
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/__init__.py +1 -1
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/__init__.py +1 -1
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/baseagent.py +2 -4
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/coder.py +5 -6
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/conversation.py +2 -2
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/extensions/cli/current_plan_artifact.md.j2 +1 -1
- kolega_code-0.27.0/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +6 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +1 -1
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/system/agents/coder_base.md.j2 +1 -9
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +1 -1
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +3 -3
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +3 -1
- kolega_code-0.27.0/kolega_code/agent/prompt_templates/system/includes/terminal_tools.md +11 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +1 -1
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompts.py +0 -1
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/edit_tool.py +22 -24
- kolega_code-0.27.0/kolega_code/agent/tool_backend/read_file_tool.py +155 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/terminal_tool.py +5 -4
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tools.py +254 -619
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/config.py +1 -19
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/file_index.py +67 -3
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/main.py +1 -6
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/provider_registry.py +0 -1
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/settings.py +9 -4
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/skills.py +58 -171
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/agent_runtime.py +1 -1
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/config.py +0 -9
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/ledger.py +1 -1
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/usage.py +14 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/permissions.py +1 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/tools/__init__.py +2 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/tools/core.py +15 -1
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/tools/definitions.py +54 -1
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/tools/param_aliases.py +52 -12
- {kolega_code-0.26.10 → kolega_code-0.27.0}/pyproject.toml +1 -1
- kolega_code-0.26.10/kolega_code/agent/prompt_templates/auxiliary/tools/think_hard.system.md +0 -13
- kolega_code-0.26.10/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -7
- kolega_code-0.26.10/kolega_code/agent/tool_backend/glob_tool.py +0 -533
- kolega_code-0.26.10/kolega_code/agent/tool_backend/list_directory_tool.py +0 -304
- kolega_code-0.26.10/kolega_code/agent/tool_backend/read_file_tool.py +0 -160
- kolega_code-0.26.10/kolega_code/agent/tool_backend/search_codebase_tool.py +0 -870
- kolega_code-0.26.10/kolega_code/agent/tool_backend/think_hard_tool.py +0 -220
- {kolega_code-0.26.10 → kolega_code-0.27.0}/.gitignore +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/CONTRIBUTING.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/LICENSE +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/MIGRATION.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/README.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/RELEASING.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/LICENSE +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/manifest.json +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/deep-research/SKILL.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/deep-research/references/evidence-and-reporting.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/deep-research/references/gigacode-workflow.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/deep-research/scripts/deep-research.workflow +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/deep-research/scripts/materialize_report.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/docx/LICENSE +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/docx/SKILL.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/docx/references/examples.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/docx/references/limitations.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/docx/references/operations.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/docx/references/quality.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/docx/requirements.txt +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/docx/scripts/docx_tool.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/docx/scripts/smoke_test.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/humanizer/LICENSE +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/humanizer/SKILL.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pdf/LICENSE +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pdf/SKILL.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pdf/references/examples.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pdf/references/limitations.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pdf/references/ocr.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pdf/references/operations.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pdf/references/quality.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pdf/references/redaction.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-paddle.txt +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-surya.txt +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pdf/requirements.txt +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pdf/scripts/pdf_tool.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pdf/scripts/smoke_test.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pptx/LICENSE +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pptx/SKILL.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pptx/references/examples.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pptx/references/limitations.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pptx/references/operations.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pptx/requirements.txt +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pptx/scripts/pptx_tool.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/pptx/scripts/smoke_test.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/review/SKILL.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/review/references/github-publishing.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/skill-authoring/SKILL.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/skill-authoring/references/review-checklist.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/xlsx/LICENSE +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/xlsx/SKILL.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/xlsx/references/examples.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/xlsx/references/limitations.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/xlsx/references/operations.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/xlsx/references/quality.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/xlsx/requirements.txt +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/xlsx/scripts/smoke_test.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/_bundled_skills/skills/xlsx/scripts/xlsx_tool.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/browseragent.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/common.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/compression.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/context.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/custom_agents.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/edit_protocols.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/errors.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/eval/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/eval/bridge.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/eval/bundle-requirements.in +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/eval/bundle-requirements.txt +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/eval/env.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/eval/js_kernel.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/eval/kernel.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/eval/prelude.js +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/eval/prelude.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/eval/protocol.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/eval/py_kernel.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/eval/runner.js +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/eval/runner.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/generalagent.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/goal.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/investigationagent.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/model_routing.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/orchestration/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/orchestration/accounting.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/orchestration/budget.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/orchestration/context.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/orchestration/errors.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/orchestration/executor.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/orchestration/guide.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/orchestration/journal.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/orchestration/runtime.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/orchestration/types.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/planningagent.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_dump.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_overrides.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_provider.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_exhausted.user.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_nudge.user.md.j2 +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/truncated_turn_nudge.user.md.j2 +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/extensions/cli/build_questions.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/extensions/cli/mode_switch_notice.md.j2 +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/extensions/cli/scratchpad.md.j2 +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list_readonly.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/extensions/cli/worktree_control.md.j2 +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/system/agents/coder_ask.md.j2 +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/system/includes/context_updates.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/agent_tool.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/base_tool.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/browser_tool.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/build_tool.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/codex_patch.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/eval_tool.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/hashline_v2.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/lsp_tool.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/network_status.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/read_image_tool.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/search_backends/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/search_backends/tavily.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/snapshot_tool.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/web_fetch/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/web_fetch/answering.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/web_fetch/documents.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/web_fetch/extractors.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/web_fetch/pipeline.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/web_fetch/retrieval.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/web_fetch_tool.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/web_search_tool.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/utils/commands.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/agent/volatile_context.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/auth/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/auth/_jwt.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/auth/chatgpt_oauth.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/auth/constants.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/auth/tokens.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/browser_extension/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/browser_extension/framing.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/browser_extension/installer.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/browser_extension/manager.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/browser_extension/multiplex.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/browser_extension/native_host.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/browser_extension/protocol.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/browser_extension/registry.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/browser_extension/runtime.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/app.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/ask_output.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/browser_backend.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/clipboard_image.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/connection.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/cron.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/diagnostics.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/goal.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/loop.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/mentions.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/messages.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/model_catalog.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/model_connection.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/plan_artifacts.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/session_event_store.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/session_journal.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/session_store.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/session_usage.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/slash_commands.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/theme.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/app_base.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/changes_screen.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/command_handlers.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/constants.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/custom_model.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/loop_runtime.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/memory_screen.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/onboarding_screen.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/prompt_flows.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/session_diff.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/settings_panel.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/settings_screen.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/state.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/status_dashboard.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/styles.tcss +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/sub_agent_screen.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/terminal_display.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/transcript.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/tui/widgets.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/cli/updater.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/events.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/git_env.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/hooks/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/hooks/backends.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/hooks/config.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/hooks/dispatcher.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/hooks/events.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/hooks/matcher.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/hooks/outcome.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/client.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/exceptions.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/instrumented_client.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/models.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/providers/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/providers/_token_encoding.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/providers/anthropic.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/providers/base.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/providers/deepseek_responses.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/providers/google.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/providers/models.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/providers/openai.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/providers/openai_responses.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/providers/responses_common.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/ratelimit.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/specs/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/specs/accessors.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/specs/catalog/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/specs/catalog/anthropic.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/specs/catalog/dashscope.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/specs/catalog/deepseek.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/specs/catalog/fireworks.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/specs/catalog/google.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/specs/catalog/kimi_coding.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/specs/catalog/moonshot.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/specs/catalog/ollama_cloud.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/specs/catalog/openai.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/specs/catalog/openai_chatgpt.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/specs/catalog/openrouter.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/specs/catalog/together.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/specs/catalog/xai.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/specs/catalog/zai.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/specs/openrouter_catalog.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/specs/thinking.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/specs/types.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/timeouts.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/llm/tool_execution_ids.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/local_state.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/mcp/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/mcp/config.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/mcp/oauth.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/mcp/service.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/mcp/state.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/mcp/tools.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/mcp/transport.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/memory/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/memory/identity.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/memory/manager.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/memory/manifest.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/memory/markdown.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/memory/models.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/memory/protocol.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/memory/registry.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/models/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/models/sandbox_terminal_state.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/runtime.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/sandbox/README.md +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/sandbox/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/sandbox/async_filesystem.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/sandbox/base.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/sandbox/browser.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/sandbox/event_loop.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/sandbox/filesystem.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/sandbox/local.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/sandbox/serializer.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/sandbox/terminal.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/sandbox/utils.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/scratchpad.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/security/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/security/secrets.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/services/base.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/services/browser.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/services/file_system.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/services/html.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/services/lsp/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/services/lsp/client.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/services/lsp/config.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/services/lsp/detector.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/services/lsp/diagnostics.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/services/lsp/edits.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/services/lsp/manager.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/services/lsp/registry.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/services/lsp/registry.yaml +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/services/snapshots.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/services/terminal.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/services/terminal_buffer.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/services/workspace_scan.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/session/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/session/control.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/session/inmemory.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/session/projection.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/session/recording.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/session/runtime.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/session/store.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/testing/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/testing/store_conformance.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/tools/registry.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/utils/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/utils/images.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/web/__init__.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/web/assets/fold.js +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/web/assets/player.css +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/web/assets/player.html +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/web/assets/player.js +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/web/bundle.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/web/hosting.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/web/redaction.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/web/server.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/web/singlefile.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/web/theme_css.py +0 -0
- {kolega_code-0.26.10 → kolega_code-0.27.0}/kolega_code/worktrees.py +0 -0
|
@@ -6,6 +6,168 @@ This project uses GitHub Releases for detailed generated release notes. This fil
|
|
|
6
6
|
|
|
7
7
|
## Unreleased
|
|
8
8
|
|
|
9
|
+
## 0.27.0 - 2026-08-06
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- The `eval`, `exec_command`, and `lsp` tool descriptions shipped to model
|
|
14
|
+
providers are slimmer (about 450 cl100k tokens less across the three,
|
|
15
|
+
roughly 8% of the whole tool payload): prose now states decision rules and
|
|
16
|
+
contracts instead of restating parameter schema text, `eval`'s JavaScript
|
|
17
|
+
prelude folds to "same helpers as Python, camelCase" with only the
|
|
18
|
+
JS-specific pitfalls spelled out, `lsp`'s operation list groups the seven
|
|
19
|
+
operations that share the `(path, line, symbol)` arguments onto one line,
|
|
20
|
+
and `exec_command`'s `timeout`-alias note is gone (the alias layer absorbs
|
|
21
|
+
it silently). No parameter names, types, or presence change, and no
|
|
22
|
+
behavior changes ride along.
|
|
23
|
+
|
|
24
|
+
- Tool definitions sent to model providers no longer duplicate parameter
|
|
25
|
+
documentation. Every tool docstring's `Args:` section is still parsed into
|
|
26
|
+
per-parameter schema descriptions, but the wire description no longer also
|
|
27
|
+
carries the whole section verbatim (and the schema descriptions no longer
|
|
28
|
+
include the raw docstring continuation-line indentation). Tools whose
|
|
29
|
+
parameters are not fully documented in their schema — freeform tools and
|
|
30
|
+
tools with enum-only schema properties such as the browser tools' `button`,
|
|
31
|
+
`action`, `level`, `part`, `image_type`, and `scale` — keep their `Args:`
|
|
32
|
+
block, since it is the only place those parameters are documented.
|
|
33
|
+
|
|
34
|
+
- The per-type agent dispatch tools (`dispatch_general_agent`,
|
|
35
|
+
`dispatch_investigation_agent`, `dispatch_browser_agent`,
|
|
36
|
+
`dispatch_coding_agent`, and `dispatch_custom_agent`) are consolidated into a
|
|
37
|
+
single `dispatch_agent(agent_type, task, model_override?, browser_target?)`
|
|
38
|
+
tool. `agent_type` is an enum computed per session from the same conditions
|
|
39
|
+
that previously gated the individual tools: `general` and `investigation`
|
|
40
|
+
whenever dispatch is available, `browser` only when the browser-agent model
|
|
41
|
+
supports vision, `coding` where the coding dispatch was previously offered
|
|
42
|
+
(never for the coder itself), and custom agent names when definitions are
|
|
43
|
+
discovered. The description documents the shared dispatch mechanics once plus
|
|
44
|
+
one line per available agent type, and an unavailable `agent_type` returns an
|
|
45
|
+
error listing the valid values. Old sessions that used the removed tool names
|
|
46
|
+
still restore and display normally.
|
|
47
|
+
|
|
48
|
+
- All terminal-capable agents (coder, planning, investigation, general) now
|
|
49
|
+
share a terminal-tools prompt section with codex-style guidance: prefer
|
|
50
|
+
`rg` / `rg --files` over `grep`/`find` when searching for text or files (it is
|
|
51
|
+
much faster; use alternatives if `rg` is not found), and do not use Python
|
|
52
|
+
scripts (or `eval`) to print chunks of a file — use the file-reading tools
|
|
53
|
+
instead.
|
|
54
|
+
- The `resolve` tool — which applies or discards a pending `lsp_edit(apply: false)`
|
|
55
|
+
preview — is now gated like the other LSP tools. With LSP disabled (via
|
|
56
|
+
settings, `KOLEGA_CODE_LSP`, or `--lsp off`) it is removed from the model's
|
|
57
|
+
toolset entirely, since pending actions can only be created while LSP is on.
|
|
58
|
+
Applying a pending action with `resolve` now also goes through the same
|
|
59
|
+
edit-permission prompt as `edit`, `lsp_edit`, and `write`.
|
|
60
|
+
- The two file-read tools are merged into one `read(file_path, offset?, limit?)`
|
|
61
|
+
tool. `offset` is the 1-indexed first line (default 1) and `limit` bounds the
|
|
62
|
+
number of lines; omitted parameters read from the top. Output is truncated to
|
|
63
|
+
2000 lines or 50KB — whichever binds first — snapped to line boundaries, with
|
|
64
|
+
actionable notices such as "[Showing lines a-b of N (50KB limit). Use
|
|
65
|
+
offset=b+1 to continue.]" instead of the old line-only warning and
|
|
66
|
+
100,000-character backstop. A single line larger than the 50KB budget gets an
|
|
67
|
+
explicit message suggesting `rg` / `exec_command` for targeted extraction.
|
|
68
|
+
`path` is accepted at the dispatch boundary as an alias for the canonical
|
|
69
|
+
`file_path`.
|
|
70
|
+
|
|
71
|
+
- `write(path=…)` now also succeeds under the claude_code edit protocol, where
|
|
72
|
+
`write` binds to `claude_write(file_path, content)`: `path` is accepted at
|
|
73
|
+
the dispatch boundary as an alias for `file_path`, matching every other file
|
|
74
|
+
tool. Under the search/replace protocol `path` stays the canonical
|
|
75
|
+
parameter and passes through untouched — alias resolution is signature-aware
|
|
76
|
+
and never rewrites an argument name the bound tool itself accepts.
|
|
77
|
+
|
|
78
|
+
- A successful whole-file `write` (including `hashline_write` and `apply_patch`'s
|
|
79
|
+
Add File) now records the just-written contents as read, so the read-before-edit
|
|
80
|
+
guard accepts a subsequent edit without a fresh read — exactly as it would
|
|
81
|
+
right after a read. Staleness tracking is unchanged: a file modified after the
|
|
82
|
+
write still requires a fresh read before editing.
|
|
83
|
+
- The three skill host tools (`list_skills`, `activate_skill`, and
|
|
84
|
+
`read_skill_resource`) are consolidated into a single `skill` tool with the
|
|
85
|
+
same contract as the old `activate_skill`: it takes the skill name (without a
|
|
86
|
+
leading slash) and returns the activation envelope with the skill's
|
|
87
|
+
instructions, its absolute directory, and the resource file list. Activating
|
|
88
|
+
an already-active skill short-circuits as before, and an unknown name now
|
|
89
|
+
lists close matches (prefix first, then fuzzy) from the catalog so a
|
|
90
|
+
mistyped activation self-corrects in one turn. The in-prompt skill roster
|
|
91
|
+
always lists every skill by name: description text is shed first when the
|
|
92
|
+
metadata budget binds, and skills are never omitted wholesale.
|
|
93
|
+
|
|
94
|
+
### Removed
|
|
95
|
+
|
|
96
|
+
- The `read_entire_file` and `read_file_section` tools are gone, replaced by the
|
|
97
|
+
merged `read` tool above. Deleted: the `ReadFileTool.read_entire_file` /
|
|
98
|
+
`read_file_section` methods and their `read_only_tools` registrations, the
|
|
99
|
+
truncation notices that named `read_file_section`, and the stale
|
|
100
|
+
`dispatch_investigation_agent` docstring tool list. Existing session
|
|
101
|
+
histories keep the old tool names as recorded data and render as-is (restore
|
|
102
|
+
is name-agnostic).
|
|
103
|
+
|
|
104
|
+
- The file-discovery tools are gone from the agent toolset: `glob` (which had
|
|
105
|
+
replaced `list_directory` and `find_files_by_pattern`), and `search_codebase`.
|
|
106
|
+
File and text discovery is now done through the terminal with `rg` /
|
|
107
|
+
`rg --files` (falling back to `find`/`grep`). Deleted: the `GlobTool` and
|
|
108
|
+
`SearchCodebaseTool` backends (the underlying `workspace_scan` service stays),
|
|
109
|
+
the `ToolCollection.glob` / `ToolCollection.search_codebase` methods and their
|
|
110
|
+
`read_only_tools` registrations, the stale `dispatch_investigation_agent`
|
|
111
|
+
docstring tool list (now naming the real surface, including terminal access),
|
|
112
|
+
and the `search_codebase` name from hashline history adaptation.
|
|
113
|
+
`@`-mention autocomplete (`cli/file_index.py`) keeps its exclusions by
|
|
114
|
+
inlining the constants it borrowed. Permission rules and custom-agent
|
|
115
|
+
allowlists naming the removed tools must be updated to the terminal tools
|
|
116
|
+
(`exec_command`, `write_stdin`, `kill_command`, `list_sessions`). Existing
|
|
117
|
+
session histories keep the old tool names as recorded data and render as-is.
|
|
118
|
+
|
|
119
|
+
- The `sleep` tool is gone from the agent toolset: its blind wall-clock wait is
|
|
120
|
+
strictly dominated by `write_stdin`'s empty-input poll, which waits for more
|
|
121
|
+
output or process exit and returns early when the process finishes. The
|
|
122
|
+
`yield_time_ms` clamp semantics (250–30000 ms when writing, 5000–300000 ms
|
|
123
|
+
when polling) moved from the `write_stdin` docstring body into its parameter
|
|
124
|
+
description so the poll path stays discoverable. Existing session histories
|
|
125
|
+
keep the old tool name as recorded data and render as-is.
|
|
126
|
+
|
|
127
|
+
- The `think_hard` tool is gone from the agent toolset, along with the thinking
|
|
128
|
+
model slot that powered it. Deleted: the `ThinkHardTool` backend and its
|
|
129
|
+
`auxiliary/tools/think_hard.system.md` prompt template, the
|
|
130
|
+
`ToolCollection.think_hard` method and its `read_only_tools` registration, the
|
|
131
|
+
`THINK_HARD_PROMPT` constant, and the `thinking_config` model slot itself.
|
|
132
|
+
`prompt` hooks now select only `"fast"` or `"long"`; the
|
|
133
|
+
`--thinking-provider`/`--thinking-model` flags, the
|
|
134
|
+
`KOLEGA_CODE_THINKING_PROVIDER`/`KOLEGA_CODE_THINKING_MODEL` env vars, and the
|
|
135
|
+
Settings Thinking slot row were removed, and a saved `thinking` slot entry in
|
|
136
|
+
`settings.json` is ignored on load. The active model's own thinking effort
|
|
137
|
+
(`--thinking-effort`, `KOLEGA_CODE_THINKING_EFFORT`) is unaffected.
|
|
138
|
+
|
|
139
|
+
- The `get_host` tool is gone from the local toolset. It needs a sandbox host
|
|
140
|
+
provider, so it is now offered only when a terminal manager carrying a
|
|
141
|
+
`sandbox` attribute is injected (cloud sandbox deployments), and the
|
|
142
|
+
localhost fallback branch in the handler is deleted — a registered
|
|
143
|
+
`get_host` always has a sandbox. The gate duck-types on the attribute rather
|
|
144
|
+
than `isinstance`, so kolega-code-e2b's injected `SandboxTerminalManager`
|
|
145
|
+
(possibly subclassed from a pinned older version) keeps qualifying. Existing
|
|
146
|
+
session histories that recorded `get_host` calls keep them as data and
|
|
147
|
+
render as-is (restore is name-agnostic).
|
|
148
|
+
|
|
149
|
+
- The `list_skills`, `activate_skill`, and `read_skill_resource` host tools are
|
|
150
|
+
gone, replaced by the single `skill` tool above. Deleted:
|
|
151
|
+
`SkillCatalog.read_resource` and its truncation cap and traversal guard
|
|
152
|
+
(skill resources are read with the ordinary `read` tool, whose `file_path`
|
|
153
|
+
is relative to the absolute skill directory in the activation output), the
|
|
154
|
+
model-facing list query surface (`format_model_catalog`), and the
|
|
155
|
+
omitted-skills budget pathway in the prompt roster. Existing session
|
|
156
|
+
histories keep the old tool names as recorded data and render as-is
|
|
157
|
+
(restore is name-agnostic).
|
|
158
|
+
|
|
159
|
+
### Fixed
|
|
160
|
+
|
|
161
|
+
- Kimi-family usage is no longer dropped when a request is served entirely from
|
|
162
|
+
the provider's prompt cache. `kimi-for-coding` / `moonshot` report
|
|
163
|
+
`input_tokens: -1` as a sentinel for "no uncached input tokens" on a full
|
|
164
|
+
cache hit; the strict usage validator previously classified that as malformed
|
|
165
|
+
and nulled the whole record, silently removing both input and output tokens
|
|
166
|
+
from session accounting for those turns. The sentinel is now interpreted as
|
|
167
|
+
zero, and the inclusive input total is reconstructed from the cache fields
|
|
168
|
+
(verified live: `-1` + 33 cached = 33 total, matching the same prompt's
|
|
169
|
+
partial-cache report of 27 uncached + 6 cached).
|
|
170
|
+
|
|
9
171
|
## 0.26.10 - 2026-08-05
|
|
10
172
|
|
|
11
173
|
### Added
|
|
@@ -1603,15 +1603,13 @@ class BaseAgent(LogMixin):
|
|
|
1603
1603
|
async def _run_hook_prompt(self, prompt_text: str, model_hint: Optional[str]) -> str:
|
|
1604
1604
|
"""Run a `prompt` hook: a single completion on a chosen model slot.
|
|
1605
1605
|
|
|
1606
|
-
``model_hint`` selects a configured slot ("fast" (default)
|
|
1607
|
-
|
|
1606
|
+
``model_hint`` selects a configured slot ("fast" (default) or "long");
|
|
1607
|
+
arbitrary model ids are not used here to keep provider/API-key
|
|
1608
1608
|
pairing correct across kolega's multi-provider setup.
|
|
1609
1609
|
"""
|
|
1610
1610
|
slot = (model_hint or "fast").lower()
|
|
1611
1611
|
if slot in ("long", "main", "long_context"):
|
|
1612
1612
|
model_config = self.config.long_context_config
|
|
1613
|
-
elif slot == "thinking":
|
|
1614
|
-
model_config = self.config.thinking_config
|
|
1615
1613
|
else:
|
|
1616
1614
|
model_config = self.config.fast_config
|
|
1617
1615
|
|
|
@@ -123,27 +123,26 @@ class CoderAgent(BaseAgent, LogMixin):
|
|
|
123
123
|
memory_enabled=memory_enabled,
|
|
124
124
|
)
|
|
125
125
|
|
|
126
|
-
# Configure tool collection with custom coder agent tools
|
|
126
|
+
# Configure tool collection with custom coder agent tools. The
|
|
127
|
+
# coder_agent_tools dispatch group already omits the "coding"
|
|
128
|
+
# agent_type, so the coder never dispatches itself.
|
|
127
129
|
tool_exclusions = [
|
|
128
130
|
"execute_terminal_command",
|
|
129
131
|
"get_tool_list",
|
|
130
132
|
"log_error",
|
|
131
133
|
"log_info",
|
|
132
|
-
# Exclude task-specific dispatch tools since coder shouldn't call itself or other agents
|
|
133
|
-
"dispatch_coding_agent",
|
|
134
134
|
]
|
|
135
135
|
mode_value = self.agent_mode.value if isinstance(self.agent_mode, AgentMode) else self.agent_mode
|
|
136
136
|
if mode_value in (AgentMode.CLI.value, AgentMode.ASK.value):
|
|
137
137
|
tool_exclusions.extend(["build_backend", "build_frontend"])
|
|
138
|
-
if sub_agent:
|
|
139
|
-
# A dispatched coder must not fan out into further sub-agents
|
|
140
|
-
tool_exclusions.append("dispatch_general_agent")
|
|
141
138
|
|
|
142
139
|
tool_config = ToolCollectionConfig(
|
|
143
140
|
custom_tool_groups=["coder_agent_tools"],
|
|
144
141
|
tool_exclusions=tool_exclusions,
|
|
145
142
|
include_memory_tools=True,
|
|
146
143
|
memory_write_access=True,
|
|
144
|
+
# A dispatched coder must not fan out into further general sub-agents
|
|
145
|
+
excluded_agent_types=["general"] if sub_agent else None,
|
|
147
146
|
)
|
|
148
147
|
|
|
149
148
|
self.tool_collection = ToolCollection(
|
|
@@ -397,7 +397,7 @@ def _adapt_content_blocks_for_provider(
|
|
|
397
397
|
call_protocol = (tool_call_protocols or {}).get(
|
|
398
398
|
block.tool_use_id, _source_edit_protocol(block, source_usage_metadata)
|
|
399
399
|
)
|
|
400
|
-
is_hashline_read = block.name
|
|
400
|
+
is_hashline_read = block.name == "read"
|
|
401
401
|
if (
|
|
402
402
|
is_hashline_read
|
|
403
403
|
and call_protocol == "hashline_v2"
|
|
@@ -407,7 +407,7 @@ def _adapt_content_blocks_for_provider(
|
|
|
407
407
|
adapted.append(
|
|
408
408
|
_tool_result_with_content(
|
|
409
409
|
block,
|
|
410
|
-
strip_hashline_read_output(block.content, search=
|
|
410
|
+
strip_hashline_read_output(block.content, search=False),
|
|
411
411
|
)
|
|
412
412
|
)
|
|
413
413
|
changed = True
|
|
@@ -2,6 +2,6 @@ The current approved implementation plan is persisted as a private Markdown arti
|
|
|
2
2
|
|
|
3
3
|
`{{ plan_artifact_path }}`
|
|
4
4
|
|
|
5
|
-
If the conversation has been compacted, context seems incomplete, or you need exact acceptance criteria, read the artifact with `
|
|
5
|
+
If the conversation has been compacted, context seems incomplete, or you need exact acceptance criteria, read the artifact with `read` (using offset/limit if the file is large) before continuing.
|
|
6
6
|
|
|
7
7
|
Treat this artifact as read-only. Do not edit or overwrite it.
|
|
@@ -104,7 +104,7 @@ URLs refer to services running on your own machine:
|
|
|
104
104
|
|
|
105
105
|
1. ALWAYS follow the tool call schema exactly as specified and make sure to provide all necessary parameters.
|
|
106
106
|
2. If the USER asks you to disclose your tools, ALWAYS respond with the helpful description provided.
|
|
107
|
-
3. **NEVER refer to tool names when speaking to the USER.** For example, instead of saying 'I need to use the
|
|
107
|
+
3. **NEVER refer to tool names when speaking to the USER.** For example, instead of saying 'I need to use the read tool to inspect your file', just say 'I will inspect your file'.
|
|
108
108
|
4. Before calling tools, first explain to the USER why you are calling them.
|
|
109
109
|
5. WHENEVER YOU OPEN A BROWSER OR TERMINAL, ALWAYS CLOSE IT WHEN DONE.
|
|
110
110
|
|
|
@@ -65,15 +65,7 @@ Treat completion as unproven until you have checked it against every requirement
|
|
|
65
65
|
|
|
66
66
|
Deliver the complete, working result. NEVER ship stubs, placeholders, mocks, no-ops, `TODO: implement`, or partial scaffolding as if finished. NEVER relabel unfinished work as "MVP", "v1", or "foundation" to imply completion — if it is not done, say so, do not pretend. NEVER silently shrink scope or substitute a narrower, easier, or merely-compatible task than the one you were given. If the task specifies a file at a particular path, produce exactly that file at exactly that path.
|
|
67
67
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
Prefer one-shot commands that terminate; run long-lived processes like dev servers and watchers in the background. When starting a development server, use a free port.
|
|
71
|
-
|
|
72
|
-
{% if interactive %}
|
|
73
|
-
Do not run destructive commands automatically. Treat commands that delete files, rewrite history, reset worktrees, install system dependencies, or make external state changes as requiring explicit user approval.
|
|
74
|
-
{% else %}
|
|
75
|
-
There is no user present to approve actions, so exercise judgment: do not run destructive commands — deleting files you did not create, rewriting git history, resetting the worktree, or making external state changes — unless the task explicitly requires them.
|
|
76
|
-
{% endif %}
|
|
68
|
+
{% include 'system/includes/terminal_tools.md' %}
|
|
77
69
|
|
|
78
70
|
## Reuse Results
|
|
79
71
|
|
|
@@ -52,7 +52,7 @@ main agent - it will not see your intermediate steps. End with a complete, self-
|
|
|
52
52
|
3. Any commands or checks you ran and their outcomes.
|
|
53
53
|
4. Anything that failed, was skipped, or needs follow-up.
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
{% include 'system/includes/terminal_tools.md' %}
|
|
56
56
|
|
|
57
57
|
When requesting a command to be run, you will be asked to judge if it is appropriate to run without the USER's permission. A command is unsafe if it may have some destructive side-effects. Example unsafe side-effects include: deleting files, mutating state, installing system dependencies, making external requests, etc. You must NEVER NEVER run a command automatically if it could be unsafe. You cannot allow the USER to override your judgement on this. If a command is unsafe, do not run it automatically, even if the USER wants you to.
|
|
58
58
|
|
|
@@ -44,9 +44,9 @@ Do your best to complete the task you are given. If you need more information, u
|
|
|
44
44
|
You must complete the task independently. Once your turn ends your last message will be returned to Kolega Code
|
|
45
45
|
to take further action, so your last message should contain the task result.
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
{% include 'system/includes/terminal_tools.md' %}
|
|
48
48
|
|
|
49
|
-
You may run shell commands (e.g. `git log`, `
|
|
49
|
+
You may run shell commands (e.g. `git log`, `rg`, build/lint/test commands) to investigate the codebase, but never use them to modify the project — no editing files, installing dependencies, committing, pushing, or other side effects. Prefer read-only tools when they suffice. Commands are subject to the active permission mode and may require approval.
|
|
50
50
|
|
|
51
51
|
## **Communication Guidelines**
|
|
52
52
|
|
|
@@ -62,7 +62,7 @@ You may run shell commands (e.g. `git log`, `grep`, build/lint/test commands) to
|
|
|
62
62
|
|
|
63
63
|
1. ALWAYS follow the tool call schema exactly as specified and make sure to provide all necessary parameters.
|
|
64
64
|
2. If the USER asks you to disclose your tools, ALWAYS respond with the helpful description provided.
|
|
65
|
-
3. **NEVER refer to tool names when speaking to the USER.** For example, instead of saying 'I need to use the
|
|
65
|
+
3. **NEVER refer to tool names when speaking to the USER.** For example, instead of saying 'I need to use the read tool to inspect your file', just say 'I will inspect your file'.
|
|
66
66
|
4. Before calling tools, first explain to the USER why you are calling them.
|
|
67
67
|
5. You must ONLY use the tools in the scope of the "Working directory". NEVER expose Kolega Code's implementation.
|
|
68
68
|
|
|
@@ -14,9 +14,11 @@ Here is useful information about the environment:
|
|
|
14
14
|
## Operating Mode
|
|
15
15
|
|
|
16
16
|
You are in planning mode. Do not implement code changes, create files, edit files, start servers, or perform other mutating actions.
|
|
17
|
-
You may run shell commands (e.g. `git log`, `
|
|
17
|
+
You may run shell commands (e.g. `git log`, `rg`, build/lint/test commands) to investigate the codebase and reduce ambiguity, but never use them to modify the project — no editing files, installing dependencies, committing, pushing, or other side effects. Prefer read-only tools when they suffice, and use `exec_command` only to inspect or validate.
|
|
18
18
|
Use read-only tools and investigative commands to inspect the repository and reduce ambiguity.
|
|
19
19
|
|
|
20
|
+
{% include 'system/includes/terminal_tools.md' %}
|
|
21
|
+
|
|
20
22
|
When the plan is decision complete, call `write_plan` with the final markdown plan. Do not call `write_plan` while major product or implementation choices are still unresolved.
|
|
21
23
|
If a planning turn ends with a complete new or revised implementation plan, submit it through `write_plan`; do not only print the plan in a normal assistant response.
|
|
22
24
|
When user answers, constraints, or follow-up discussion change the plan, the next `write_plan` payload must be a complete replacement plan that incorporates those decisions and can be implemented without reading earlier discussion.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
## Running Commands
|
|
2
|
+
|
|
3
|
+
Prefer one-shot commands that terminate; run long-lived processes like dev servers and watchers in the background. When starting a development server, use a free port.
|
|
4
|
+
|
|
5
|
+
Do not run destructive commands automatically — deleting files, rewriting history, resetting worktrees, installing system dependencies, or making external state changes — unless a user has explicitly approved them or the task explicitly requires them.
|
|
6
|
+
|
|
7
|
+
## Searching and Reading Files
|
|
8
|
+
|
|
9
|
+
When searching for text or files, prefer `rg` / `rg --files` over grep/find — it is much faster. If `rg` is not found, use alternatives.
|
|
10
|
+
|
|
11
|
+
Do not use python scripts (or `eval`) to print chunks of a file — use the file-reading tools instead.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Implement the approved plan below. Follow it as the source of truth, but still inspect the code before editing and run appropriate checks.
|
|
2
2
|
{% if plan_artifact_path %}
|
|
3
3
|
|
|
4
|
-
The approved plan is also persisted at `{{ plan_artifact_path }}`. If the conversation is compacted or you need the exact plan again later, read that file with `
|
|
4
|
+
The approved plan is also persisted at `{{ plan_artifact_path }}`. If the conversation is compacted or you need the exact plan again later, read that file with `read` (using offset/limit if needed). Treat it as read-only.
|
|
5
5
|
{% endif %}
|
|
6
6
|
{% if gigacode_enabled %}
|
|
7
7
|
|
|
@@ -37,7 +37,6 @@ def render_prompt_template(template_name: str, **variables: Any) -> str:
|
|
|
37
37
|
return _prompt_template(template_name).render(**variables).strip()
|
|
38
38
|
|
|
39
39
|
|
|
40
|
-
THINK_HARD_PROMPT = render_prompt_template("auxiliary/tools/think_hard.system.md")
|
|
41
40
|
COMPRESSION_SUMMARY_SYSTEM_PROMPT = render_prompt_template("auxiliary/compression/summary.system.md")
|
|
42
41
|
SHELL_SAFETY_SYSTEM_PROMPT = render_prompt_template("auxiliary/terminal/safety.system.md")
|
|
43
42
|
SHELL_COMPRESSION_SYSTEM_PROMPT = render_prompt_template("auxiliary/terminal/output_summary.system.md")
|
|
@@ -67,6 +67,22 @@ class EditTool(BaseTool):
|
|
|
67
67
|
if self.filesystem.exists(normalized) and self.filesystem.is_file(normalized):
|
|
68
68
|
self._read_versions[normalized] = self._content_digest(self.filesystem.read_text(normalized))
|
|
69
69
|
|
|
70
|
+
def _write_file(self, path: str, content: str) -> None:
|
|
71
|
+
"""Write ``content`` to ``path`` (creating parents) and record it as read-equivalent.
|
|
72
|
+
|
|
73
|
+
A successful whole-file write leaves the file's current contents known,
|
|
74
|
+
so the result is recorded through the same mechanism a model-facing
|
|
75
|
+
read uses (``observe_read``): the edit guard then accepts the file
|
|
76
|
+
exactly as it would accept a freshly read one, and still rejects it
|
|
77
|
+
once the file changes on disk. This is the single write path for every
|
|
78
|
+
edit protocol's write handler.
|
|
79
|
+
"""
|
|
80
|
+
parent = self.filesystem.get_parent(path)
|
|
81
|
+
if parent and parent != "." and not self.filesystem.exists(parent):
|
|
82
|
+
self.filesystem.create_directory(parent)
|
|
83
|
+
self.filesystem.write_text(path, content)
|
|
84
|
+
self.observe_read(path)
|
|
85
|
+
|
|
70
86
|
async def claude_edit(
|
|
71
87
|
self,
|
|
72
88
|
file_path: str,
|
|
@@ -119,10 +135,7 @@ class EditTool(BaseTool):
|
|
|
119
135
|
return blocked_msg
|
|
120
136
|
|
|
121
137
|
def _write() -> None:
|
|
122
|
-
|
|
123
|
-
if parent and parent != "." and not self.filesystem.exists(parent):
|
|
124
|
-
self.filesystem.create_directory(parent)
|
|
125
|
-
self.filesystem.write_text(path, updated_content)
|
|
138
|
+
self._write_file(path, updated_content)
|
|
126
139
|
|
|
127
140
|
self._mutate_with_optional_snapshot(
|
|
128
141
|
tool_name="edit",
|
|
@@ -140,7 +153,6 @@ class EditTool(BaseTool):
|
|
|
140
153
|
tool_call_id=getattr(self.caller, "current_tool_execution_id", None),
|
|
141
154
|
tool_name="edit",
|
|
142
155
|
)
|
|
143
|
-
self._read_versions[path] = self._content_digest(self.filesystem.read_text(path))
|
|
144
156
|
result = f"Edited {path}" if exists else f"Created {path}"
|
|
145
157
|
diagnostics = await self._maybe_append_lsp_diagnostics(path)
|
|
146
158
|
return result + diagnostics
|
|
@@ -169,10 +181,7 @@ class EditTool(BaseTool):
|
|
|
169
181
|
return blocked_msg
|
|
170
182
|
|
|
171
183
|
def _write() -> None:
|
|
172
|
-
|
|
173
|
-
if parent and parent != "." and not self.filesystem.exists(parent):
|
|
174
|
-
self.filesystem.create_directory(parent)
|
|
175
|
-
self.filesystem.write_text(path, content)
|
|
184
|
+
self._write_file(path, content)
|
|
176
185
|
|
|
177
186
|
self._mutate_with_optional_snapshot(
|
|
178
187
|
tool_name="write",
|
|
@@ -190,7 +199,6 @@ class EditTool(BaseTool):
|
|
|
190
199
|
tool_call_id=getattr(self.caller, "current_tool_execution_id", None),
|
|
191
200
|
tool_name="write",
|
|
192
201
|
)
|
|
193
|
-
self._read_versions[path] = self._content_digest(self.filesystem.read_text(path))
|
|
194
202
|
result = f"Wrote {path}"
|
|
195
203
|
diagnostics = await self._maybe_append_lsp_diagnostics(path)
|
|
196
204
|
return result + diagnostics
|
|
@@ -262,8 +270,6 @@ class EditTool(BaseTool):
|
|
|
262
270
|
except Exception:
|
|
263
271
|
old_content = None
|
|
264
272
|
|
|
265
|
-
parent_dir = self.filesystem.get_parent(path)
|
|
266
|
-
|
|
267
273
|
# Preserve the file's dominant line ending on overwrite; new files
|
|
268
274
|
# keep the line endings the caller provided (typically LF).
|
|
269
275
|
if exists and old_content is not None:
|
|
@@ -271,9 +277,7 @@ class EditTool(BaseTool):
|
|
|
271
277
|
content = self._normalize_line_endings(content, line_ending)
|
|
272
278
|
|
|
273
279
|
def _write() -> None:
|
|
274
|
-
|
|
275
|
-
self.filesystem.create_directory(parent_dir)
|
|
276
|
-
self.filesystem.write_text(path, content)
|
|
280
|
+
self._write_file(path, content)
|
|
277
281
|
|
|
278
282
|
self._mutate_with_optional_snapshot(
|
|
279
283
|
tool_name="write",
|
|
@@ -404,10 +408,7 @@ class EditTool(BaseTool):
|
|
|
404
408
|
snapshot_paths = list(dict.fromkeys(snapshot_paths))
|
|
405
409
|
|
|
406
410
|
def _write() -> None:
|
|
407
|
-
|
|
408
|
-
if parent and parent != "." and not self.filesystem.exists(parent):
|
|
409
|
-
self.filesystem.create_directory(parent)
|
|
410
|
-
self.filesystem.write_text(target, updated)
|
|
411
|
+
self._write_file(target, updated)
|
|
411
412
|
if destination is not None and self.filesystem.exists(source):
|
|
412
413
|
self.filesystem.remove(source, missing_ok=True)
|
|
413
414
|
|
|
@@ -540,10 +541,7 @@ class EditTool(BaseTool):
|
|
|
540
541
|
for path in sorted(
|
|
541
542
|
(item for item in changed if working[item] is not None), key=lambda item: len(Path(item).parts)
|
|
542
543
|
):
|
|
543
|
-
|
|
544
|
-
if parent and parent != "." and not self.filesystem.exists(parent):
|
|
545
|
-
self.filesystem.create_directory(parent)
|
|
546
|
-
self.filesystem.write_text(path, working[path] or "")
|
|
544
|
+
self._write_file(path, working[path] or "")
|
|
547
545
|
|
|
548
546
|
self._mutate_with_optional_snapshot(
|
|
549
547
|
tool_name="apply_patch",
|
|
@@ -661,7 +659,7 @@ class EditTool(BaseTool):
|
|
|
661
659
|
tool_name=tool_name,
|
|
662
660
|
reason=f"{tool_name} {path}",
|
|
663
661
|
paths=[path],
|
|
664
|
-
mutate=lambda: self.
|
|
662
|
+
mutate=lambda: self._write_file(path, normalized_updated),
|
|
665
663
|
)
|
|
666
664
|
|
|
667
665
|
await self.send_edit_preview(
|