kolega-code 0.42.0__tar.gz → 0.44.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.42.0 → kolega_code-0.44.0}/CHANGELOG.md +58 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/PKG-INFO +2 -2
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/__init__.py +1 -1
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/acp/agent_factory.py +27 -3
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/acp/bridge.py +6 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/acp/server.py +156 -25
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/acp/session.py +10 -9
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/__init__.py +1 -1
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/baseagent.py +246 -17
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/system/agents/coder_base.md.j2 +1 -1
- kolega_code-0.44.0/kolega_code/agent/prompt_templates/tools/agent_job.md +8 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/dispatch_agent.md +10 -1
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/agent_tool.py +306 -95
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_definitions.py +28 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tools.py +30 -9
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/acp.py +9 -1
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/app.py +113 -8
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/main.py +133 -24
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/provider_registry.py +2 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/session_journal.py +509 -89
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/session_store.py +8 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/session_usage.py +52 -6
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/agent_runtime.py +395 -42
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/app_base.py +30 -3
- kolega_code-0.44.0/kolega_code/cli/tui/background_status.py +116 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/shortcut_bar.py +2 -1
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/startup.py +1 -1
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/state.py +1 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/status_dashboard.py +111 -1
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/sub_agent_screen.py +36 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/transcript.py +85 -15
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/turn_status.py +29 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/widgets.py +17 -6
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/router.py +9 -3
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/sessions.py +166 -18
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/models.py +12 -1
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/providers/deepseek_responses.py +5 -4
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/providers/responses_common.py +9 -8
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/catalog/google.py +15 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/catalog/xai.py +16 -0
- kolega_code-0.44.0/kolega_code/session/background.py +455 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/pyproject.toml +3 -2
- {kolega_code-0.42.0 → kolega_code-0.44.0}/.gitignore +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/CONTRIBUTING.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/LICENSE +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/MIGRATION.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/README.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/RELEASING.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/LICENSE +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/manifest.json +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/deep-research/SKILL.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/deep-research/references/evidence-and-reporting.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/deep-research/references/gigacode-workflow.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/deep-research/scripts/deep-research.workflow +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/deep-research/scripts/materialize_report.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/docx/LICENSE +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/docx/SKILL.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/docx/references/examples.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/docx/references/limitations.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/docx/references/operations.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/docx/references/quality.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/docx/requirements.txt +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/docx/scripts/docx_tool.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/docx/scripts/smoke_test.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/humanizer/LICENSE +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/humanizer/SKILL.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pdf/LICENSE +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pdf/SKILL.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pdf/references/examples.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pdf/references/limitations.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pdf/references/ocr.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pdf/references/operations.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pdf/references/quality.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pdf/references/redaction.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-paddle.txt +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-surya.txt +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pdf/requirements.txt +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pdf/scripts/pdf_tool.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pdf/scripts/smoke_test.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pptx/LICENSE +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pptx/SKILL.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pptx/references/examples.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pptx/references/limitations.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pptx/references/operations.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pptx/requirements.txt +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pptx/scripts/pptx_tool.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/pptx/scripts/smoke_test.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/review/SKILL.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/review/references/github-publishing.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/skill-authoring/SKILL.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/skill-authoring/references/review-checklist.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/xlsx/LICENSE +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/xlsx/SKILL.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/xlsx/references/examples.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/xlsx/references/limitations.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/xlsx/references/operations.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/xlsx/references/quality.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/xlsx/requirements.txt +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/xlsx/scripts/smoke_test.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/_bundled_skills/skills/xlsx/scripts/xlsx_tool.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/acp/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/acp/diffs.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/acp/permissions.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/acp/plans.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/acp/questions.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/acp/usage.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/browseragent.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/coder.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/common.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/compression.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/context.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/conversation.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/custom_agents.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/edit_protocols.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/errors.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/eval/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/eval/bridge.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/eval/bundle-requirements.in +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/eval/bundle-requirements.txt +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/eval/env.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/eval/js_kernel.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/eval/kernel.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/eval/prelude.js +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/eval/prelude.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/eval/protocol.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/eval/py_kernel.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/eval/runner.js +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/eval/runner.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/generalagent.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/goal.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/handoff.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/investigationagent.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/model_routing.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/orchestration/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/orchestration/accounting.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/orchestration/budget.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/orchestration/context.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/orchestration/errors.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/orchestration/executor.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/orchestration/guide.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/orchestration/journal.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/orchestration/runtime.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/orchestration/types.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/planningagent.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_dump.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_overrides.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_provider.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_exhausted.user.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_nudge.user.md.j2 +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/truncated_turn_nudge.user.md.j2 +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/auxiliary/handoff/document.system.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/auxiliary/handoff/document.user.md.j2 +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/extensions/cli/build_questions.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/extensions/cli/current_plan_artifact.md.j2 +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/extensions/cli/mode_switch_notice.md.j2 +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/extensions/cli/scratchpad.md.j2 +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list_readonly.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/extensions/cli/worktree_control.md.j2 +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/system/agents/coder_ask.md.j2 +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/system/includes/context_updates.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/system/includes/terminal_tools.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/apply_patch.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/ask_user_choice.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_click.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_close.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_console_messages.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_drag.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_drop.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_evaluate.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_file_upload.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_fill_form.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_find.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_handle_dialog.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_hover.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_navigate.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_navigate_back.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_network_request.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_network_requests.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_press_key.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_resize.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_scroll.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_select_option.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_snapshot.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_tabs.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_take_screenshot.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_type.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/browser_wait_for.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/build_backend.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/build_frontend.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/claude_edit.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/claude_write.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/edit.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/eval.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/exec_command.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/get_host.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/get_task_list.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/get_task_list_readonly.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/hashline_edit.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/hashline_write.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/kill_command.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/list_agents.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/list_sessions.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/list_subagent_models.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/list_workflow_runs.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/lsp.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/lsp_edit.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/multi_edit.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/read.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/read_image.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/resolve.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/run_workflow.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/send_message.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/set_goal.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/skill.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/snapshot.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/switch_worktree.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/update_task_list.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/web_fetch.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/web_search.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/write.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/write_plan.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/tools/write_stdin.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/prompts.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/session_metadata.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/base_tool.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/browser_tool.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/build_tool.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/codex_patch.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/edit_tool.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/eval_tool.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/hashline_v2.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/lsp_tool.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/network_status.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/read_file_tool.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/read_image_tool.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/search_backends/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/search_backends/tavily.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/snapshot_tool.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/terminal_tool.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/web_fetch/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/web_fetch/answering.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/web_fetch/documents.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/web_fetch/extractors.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/web_fetch/pipeline.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/web_fetch/retrieval.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/web_fetch_tool.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/web_search_tool.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/utils/commands.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/agent/volatile_context.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/auth/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/auth/_jwt.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/auth/chatgpt_oauth.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/auth/constants.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/auth/tokens.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/browser_extension/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/browser_extension/framing.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/browser_extension/installer.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/browser_extension/manager.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/browser_extension/multiplex.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/browser_extension/native_host.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/browser_extension/protocol.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/browser_extension/registry.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/browser_extension/runtime.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/ask_output.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/atif_export.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/browser_backend.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/clipboard_image.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/config.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/connection.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/cron.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/diagnostics.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/file_index.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/gateway.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/goal.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/loop.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/mentions.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/messages.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/model_catalog.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/model_connection.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/peer_messaging.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/plan_artifacts.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/prompt_history.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/session_event_protocol.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/session_event_store.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/settings.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/skills.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/slash_commands.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/theme.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/boot_splash.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/changes_screen.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/command_handlers.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/constants.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/custom_model.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/discovery.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/loop_runtime.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/memory_screen.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/metadata.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/onboarding_screen.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/pacing.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/prompt_flows.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/session_diff.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/settings_panel.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/settings_screen.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/settings_widgets.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/styles.tcss +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/task_list.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/terminal_display.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/tui/tool_presentation.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/cli/updater.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/config.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/events.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/extensions.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/access.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/access_settings.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/adapters/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/adapters/base.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/adapters/echo.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/adapters/telegram/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/adapters/telegram/adapter.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/adapters/telegram/formatting.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/bridge.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/commands.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/config.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/control_relay.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/daemon.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/event_router.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/questions.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/redaction.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/service.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/gateway/stt.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/git_env.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/hooks/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/hooks/backends.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/hooks/config.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/hooks/dispatcher.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/hooks/events.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/hooks/matcher.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/hooks/outcome.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/client.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/exceptions.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/instrumented_client.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/ledger.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/providers/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/providers/_token_encoding.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/providers/anthropic.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/providers/base.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/providers/google.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/providers/mistral.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/providers/models.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/providers/openai.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/providers/openai_responses.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/providers/perplexity_responses.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/providers/tinker.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/providers/tinker_trace.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/ratelimit.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/accessors.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/catalog/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/catalog/anthropic.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/catalog/dashscope.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/catalog/deepseek.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/catalog/fireworks.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/catalog/groq.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/catalog/kimi_coding.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/catalog/mistral.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/catalog/moonshot.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/catalog/ollama_cloud.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/catalog/openai.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/catalog/openai_chatgpt.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/catalog/openrouter.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/catalog/perplexity_agent.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/catalog/thinking_machines.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/catalog/tinker.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/catalog/together.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/catalog/zai.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/custom_endpoints.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/ollama_cloud_catalog.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/openrouter_catalog.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/perplexity_catalog.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/thinking.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/tinker_catalog.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/types.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/specs/validation.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/timeouts.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/tool_execution_ids.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/llm/usage.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/local_state.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/mcp/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/mcp/config.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/mcp/oauth.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/mcp/service.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/mcp/state.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/mcp/tools.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/mcp/transport.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/memory/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/memory/identity.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/memory/manager.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/memory/manifest.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/memory/markdown.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/memory/models.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/memory/protocol.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/memory/registry.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/models/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/models/sandbox_terminal_state.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/permissions.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/runtime.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/sandbox/README.md +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/sandbox/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/sandbox/async_filesystem.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/sandbox/base.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/sandbox/browser.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/sandbox/event_loop.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/sandbox/filesystem.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/sandbox/local.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/sandbox/serializer.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/sandbox/terminal.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/sandbox/utils.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/scratchpad.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/security/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/security/secrets.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/services/base.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/services/browser.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/services/file_system.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/services/html.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/services/lsp/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/services/lsp/client.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/services/lsp/config.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/services/lsp/detector.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/services/lsp/diagnostics.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/services/lsp/edits.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/services/lsp/manager.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/services/lsp/registry.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/services/lsp/registry.yaml +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/services/snapshots.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/services/terminal.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/services/terminal_buffer.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/services/workspace_scan.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/session/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/session/control.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/session/inbox.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/session/inmemory.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/session/projection.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/session/recording.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/session/runtime.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/session/store.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/testing/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/testing/store_conformance.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/tool_subjects.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/tools/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/tools/ask_user.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/tools/core.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/tools/definitions.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/tools/param_aliases.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/tools/registry.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/utils/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/utils/images.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/web/__init__.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/web/assets/fold.js +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/web/assets/player.css +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/web/assets/player.html +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/web/assets/player.js +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/web/bundle.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/web/hosting.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/web/redaction.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/web/server.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/web/singlefile.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/web/theme_css.py +0 -0
- {kolega_code-0.42.0 → kolega_code-0.44.0}/kolega_code/worktrees.py +0 -0
|
@@ -6,6 +6,64 @@ This project uses GitHub Releases for detailed generated release notes. This fil
|
|
|
6
6
|
|
|
7
7
|
## Unreleased
|
|
8
8
|
|
|
9
|
+
## 0.44.0 - 2026-10-19
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **Background sub-agents.** The agent can delegate with
|
|
14
|
+
`dispatch_agent(..., background=True)` and keep working while the child runs;
|
|
15
|
+
foreground dispatch remains the default. Jobs belong to the session in the
|
|
16
|
+
TUI, `ask`, `--loop`, goal runs, editor (ACP) sessions, and gateway chats.
|
|
17
|
+
Completion reports arrive automatically and normally start a continuation
|
|
18
|
+
instead of becoming extra prompts. The new `agent_job` tool lists, inspects,
|
|
19
|
+
or cancels jobs, with reports retained after completion, failure, or
|
|
20
|
+
cancellation. Persisted outcomes can be recovered when a session resumes, and
|
|
21
|
+
reported background usage is attributed to the session. Jobs survive turns,
|
|
22
|
+
not process exit; cancelling a main turn does not discard child results.
|
|
23
|
+
- The TUI shows a persistent background-agent indicator above the composer,
|
|
24
|
+
distinguishing running, queued, undelivered, and failed work, and lists
|
|
25
|
+
retained jobs in the `Ctrl+G` sub-agent inspector. Delivered reports appear as
|
|
26
|
+
collapsed rows that expand on click or `Enter`, including after a session is
|
|
27
|
+
restored.
|
|
28
|
+
- Added native Google Gemini 4 Argon (`gemini-4-argon`) and xAI Grok 4.7
|
|
29
|
+
(`grok-4.7`) support, including model selectors, image input, streaming, tool
|
|
30
|
+
calling, and named reasoning efforts. Argon uses a shared 1,048,576-token
|
|
31
|
+
input/thinking/output window; Grok 4.7 uses 500,000 tokens and supports `xhigh`
|
|
32
|
+
effort. Existing provider defaults remain unchanged.
|
|
33
|
+
|
|
34
|
+
### Fixed
|
|
35
|
+
|
|
36
|
+
- Late transcript updates during screen teardown no longer raise while the
|
|
37
|
+
conversation is being pruned, so exiting or switching sessions can no longer
|
|
38
|
+
fail on a stale render.
|
|
39
|
+
|
|
40
|
+
### Security
|
|
41
|
+
|
|
42
|
+
- Updated mcp to 1.30.0, closing CVE-2026-59951 (GHSA-84m7-p3x7-pcfv), a
|
|
43
|
+
streamable-HTTP session exhaustion issue in the MCP client.
|
|
44
|
+
|
|
45
|
+
## 0.43.0 - 2026-10-13
|
|
46
|
+
|
|
47
|
+
### Added
|
|
48
|
+
|
|
49
|
+
- **Strict tool schemas.** Code that drives Kolega's LLM client directly can
|
|
50
|
+
mark a tool definition `strict=True`. The Responses providers then ask the
|
|
51
|
+
provider to hold the tool call to the schema exactly — every required field
|
|
52
|
+
present and nothing extra. Tools that are not marked strict behave as before.
|
|
53
|
+
|
|
54
|
+
### Changed
|
|
55
|
+
|
|
56
|
+
- DeepSeek requests now use `https://api.deepseek.com/beta`. DeepSeek enforces
|
|
57
|
+
strict tool schemas only on that endpoint and silently ignores the flag on the
|
|
58
|
+
bare host, so models that required a field could previously return a tool call
|
|
59
|
+
without it.
|
|
60
|
+
|
|
61
|
+
### Fixed
|
|
62
|
+
|
|
63
|
+
- A tool call whose arguments contain a raw control character — an unescaped tab
|
|
64
|
+
or newline copied into a JSON string — is now kept instead of degrading to an
|
|
65
|
+
empty call. Observed live with `deepseek-flash`.
|
|
66
|
+
|
|
9
67
|
## 0.42.0 - 2026-10-07
|
|
10
68
|
|
|
11
69
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kolega-code
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.44.0
|
|
4
4
|
Summary: Multi-agent coding in the terminal
|
|
5
5
|
Project-URL: Homepage, https://kolega-ai.github.io/kolega-code/
|
|
6
6
|
Project-URL: Documentation, https://kolega-ai.github.io/kolega-code/
|
|
@@ -45,7 +45,7 @@ Requires-Dist: langfuse==3.14.5
|
|
|
45
45
|
Requires-Dist: lxml-html-clean==0.4.5
|
|
46
46
|
Requires-Dist: markdownify==1.2.3
|
|
47
47
|
Requires-Dist: markitdown[docx,pdf,pptx,xls,xlsx]==0.1.6
|
|
48
|
-
Requires-Dist: mcp==1.
|
|
48
|
+
Requires-Dist: mcp==1.30.0
|
|
49
49
|
Requires-Dist: nest-asyncio==1.6.0
|
|
50
50
|
Requires-Dist: onnxruntime==1.19.2; sys_platform == 'darwin' and platform_machine == 'x86_64' and python_version < '3.13'
|
|
51
51
|
Requires-Dist: onnxruntime==1.27.0; python_version >= '3.14' and sys_platform != 'win32'
|
|
@@ -139,6 +139,15 @@ class AgentFactory:
|
|
|
139
139
|
return
|
|
140
140
|
self.persist(session)
|
|
141
141
|
try:
|
|
142
|
+
jobs = getattr(session.agent, "background_jobs", None)
|
|
143
|
+
if jobs is not None:
|
|
144
|
+
jobs.set_callbacks(on_ready=None, on_delivered=None)
|
|
145
|
+
await jobs.close()
|
|
146
|
+
await jobs.deliver(session.agent)
|
|
147
|
+
self.persist(session)
|
|
148
|
+
for old in session.retired_agents:
|
|
149
|
+
await old.cleanup()
|
|
150
|
+
session.retired_agents.clear()
|
|
142
151
|
await session.agent.cleanup()
|
|
143
152
|
except Exception: # noqa: BLE001 — closing must not mask the primary outcome
|
|
144
153
|
logger.exception("acp session close: agent cleanup failed (session=%s)", session_id)
|
|
@@ -315,10 +324,24 @@ class AgentFactory:
|
|
|
315
324
|
permission_mode=old.permission_mode,
|
|
316
325
|
question_state=session.question_state,
|
|
317
326
|
)
|
|
327
|
+
# New generations must keep publishing into the session-lifetime event
|
|
328
|
+
# consumer, including children still using the previous generation.
|
|
329
|
+
if manager is not session.manager:
|
|
330
|
+
raise RuntimeError("ACP rebuild must preserve the session connection manager")
|
|
318
331
|
session.agent = agent
|
|
319
|
-
|
|
332
|
+
jobs = getattr(old, "background_jobs", None)
|
|
333
|
+
if jobs is not None and agent is not old:
|
|
334
|
+
agent.background_jobs = jobs
|
|
335
|
+
agent.background_needs_turn = getattr(old, "background_needs_turn", False)
|
|
336
|
+
old.background_jobs = None
|
|
337
|
+
if jobs is not None and jobs.active_count and agent is not old:
|
|
338
|
+
# Children borrow this generation's terminal/browser/extensions.
|
|
339
|
+
# Keep it alive until the supervisor has joined them.
|
|
340
|
+
session.retired_agents.append(old)
|
|
341
|
+
return
|
|
320
342
|
try:
|
|
321
|
-
|
|
343
|
+
if agent is not old:
|
|
344
|
+
await old.cleanup()
|
|
322
345
|
except Exception: # noqa: BLE001
|
|
323
346
|
logger.exception("acp model switch: old agent cleanup failed (session=%s)", session.session_id)
|
|
324
347
|
|
|
@@ -369,7 +392,8 @@ class AgentFactory:
|
|
|
369
392
|
) -> tuple[CoderAgent, CliConnectionManager]:
|
|
370
393
|
journal = self._store.journal(record.session_id)
|
|
371
394
|
recorder = self._store.recorder(record.session_id)
|
|
372
|
-
|
|
395
|
+
existing = self._acp_sessions.get(record.session_id)
|
|
396
|
+
manager = existing.manager if existing is not None else CliConnectionManager()
|
|
373
397
|
recording = RecordingConnectionManager(
|
|
374
398
|
manager,
|
|
375
399
|
FileSessionEventStore(journal),
|
|
@@ -111,6 +111,12 @@ class AcpBridge:
|
|
|
111
111
|
#: label the dispatching card's title.
|
|
112
112
|
self._dispatch_labels: dict[str, str] = {}
|
|
113
113
|
|
|
114
|
+
def begin_turn(self, agent: Any, diff_provider: AcpDiffProvider) -> None:
|
|
115
|
+
"""Reset turn-only projections, retaining session-lifetime tool maps."""
|
|
116
|
+
self._agent = agent
|
|
117
|
+
self._diffs = diff_provider
|
|
118
|
+
self._turn_response_parts.clear()
|
|
119
|
+
|
|
114
120
|
async def send(self, session_id: str, update: Any) -> None:
|
|
115
121
|
if logger.isEnabledFor(logging.DEBUG):
|
|
116
122
|
logger.debug(
|
|
@@ -188,6 +188,7 @@ class AcpAgent(Agent):
|
|
|
188
188
|
return await self._load_sub_session(session_id)
|
|
189
189
|
if session_id in self._sessions:
|
|
190
190
|
existing = self._sessions[session_id]
|
|
191
|
+
self._start_session_tasks(existing)
|
|
191
192
|
return LoadSessionResponse(config_options=self._factory.config_options_for(existing))
|
|
192
193
|
try:
|
|
193
194
|
session = await self._factory.load_session(
|
|
@@ -204,6 +205,7 @@ class AcpAgent(Agent):
|
|
|
204
205
|
await self._emit_initial_usage(session)
|
|
205
206
|
await self._send_available_commands(session)
|
|
206
207
|
await self._replay_transcript(session)
|
|
208
|
+
self._start_session_tasks(session)
|
|
207
209
|
return LoadSessionResponse(config_options=self._factory.config_options_for(session))
|
|
208
210
|
|
|
209
211
|
async def _load_sub_session(self, session_id: str) -> LoadSessionResponse:
|
|
@@ -254,11 +256,33 @@ class AcpAgent(Agent):
|
|
|
254
256
|
|
|
255
257
|
async def close_session(self, session_id: str, **kwargs: Any) -> None:
|
|
256
258
|
logger.info("acp session/close (session=%s)", session_id)
|
|
257
|
-
self._sessions.pop(session_id, None)
|
|
259
|
+
session = self._sessions.pop(session_id, None)
|
|
260
|
+
if session is not None:
|
|
261
|
+
session.closed = True
|
|
262
|
+
session.auto_continue_paused = True
|
|
263
|
+
if session.turn_task is not None:
|
|
264
|
+
session.turn_task.cancel()
|
|
265
|
+
await asyncio.gather(session.turn_task, return_exceptions=True)
|
|
266
|
+
if session.background_task is not None:
|
|
267
|
+
session.background_task.cancel()
|
|
268
|
+
await asyncio.gather(session.background_task, return_exceptions=True)
|
|
258
269
|
self._brokers.pop(session_id, None)
|
|
259
|
-
|
|
270
|
+
if session is not None:
|
|
271
|
+
async with session.execution_lock:
|
|
272
|
+
await self._factory.close_session(session_id)
|
|
273
|
+
else:
|
|
274
|
+
await self._factory.close_session(session_id)
|
|
275
|
+
if session is not None and session.event_task is not None:
|
|
276
|
+
session.event_task.cancel()
|
|
277
|
+
await asyncio.gather(session.event_task, return_exceptions=True)
|
|
278
|
+
await self._drain_residual(session, session.bridge)
|
|
260
279
|
return None
|
|
261
280
|
|
|
281
|
+
async def shutdown(self) -> None:
|
|
282
|
+
"""Join session work before the ACP transport and shared services close."""
|
|
283
|
+
for session_id in list(self._sessions):
|
|
284
|
+
await self.close_session(session_id)
|
|
285
|
+
|
|
262
286
|
# -- turns ------------------------------------------------------------
|
|
263
287
|
|
|
264
288
|
async def prompt(self, session_id: str, prompt: list[_PromptBlock], **kwargs: Any) -> PromptResponse:
|
|
@@ -270,13 +294,19 @@ class AcpAgent(Agent):
|
|
|
270
294
|
text = self._extract_text(prompt)
|
|
271
295
|
if not text:
|
|
272
296
|
raise RequestError.invalid_request({"message": "prompt contains no text"})
|
|
273
|
-
|
|
274
|
-
|
|
297
|
+
self._start_session_tasks(session)
|
|
298
|
+
async with session.execution_lock:
|
|
299
|
+
session.auto_continue_paused = False
|
|
300
|
+
stop_reason = await self._run_turn(session, text)
|
|
301
|
+
self._factory.persist(session)
|
|
275
302
|
return PromptResponse(stop_reason=stop_reason)
|
|
276
303
|
|
|
277
304
|
async def cancel(self, session_id: str, **kwargs: Any) -> None:
|
|
278
305
|
session = self._sessions.get(session_id)
|
|
279
|
-
if session is None
|
|
306
|
+
if session is None:
|
|
307
|
+
return
|
|
308
|
+
session.auto_continue_paused = True
|
|
309
|
+
if session.turn_task is None:
|
|
280
310
|
logger.debug("acp session/cancel: nothing to cancel (session=%s)", session_id)
|
|
281
311
|
return
|
|
282
312
|
logger.info("acp session/cancel (session=%s)", session_id)
|
|
@@ -314,7 +344,8 @@ class AcpAgent(Agent):
|
|
|
314
344
|
raise RequestError.invalid_params({"message": f"unknown mode {mode_id!r}; available: build, plan"})
|
|
315
345
|
if not session.idle():
|
|
316
346
|
raise RequestError.invalid_request({"message": "modes apply between turns only"})
|
|
317
|
-
|
|
347
|
+
async with session.execution_lock:
|
|
348
|
+
await self._factory.set_interaction_mode(session, mode_id)
|
|
318
349
|
logger.info("acp session mode -> %s (session=%s)", mode_id, session_id)
|
|
319
350
|
await self._emit_current_mode(session)
|
|
320
351
|
return SetSessionModeResponse()
|
|
@@ -342,14 +373,16 @@ class AcpAgent(Agent):
|
|
|
342
373
|
raise RequestError.invalid_params({"message": "model option expects 'provider/model'"})
|
|
343
374
|
provider, model = value.split("/", 1)
|
|
344
375
|
try:
|
|
345
|
-
|
|
376
|
+
async with session.execution_lock:
|
|
377
|
+
await self._factory.apply_model(session, provider, model)
|
|
346
378
|
except _HANDLED_CONFIG_ERRORS as exc:
|
|
347
379
|
raise AgentFactory.protocol_error(exc) from exc
|
|
348
380
|
logger.info("acp session config: model -> %s/%s (session=%s)", provider, model, session_id)
|
|
349
381
|
elif config_id == CONFIG_MODE:
|
|
350
382
|
if value not in INTERACTION_MODES:
|
|
351
383
|
raise RequestError.invalid_params({"message": f"unknown mode {value!r}; available: build, plan"})
|
|
352
|
-
|
|
384
|
+
async with session.execution_lock:
|
|
385
|
+
await self._factory.set_interaction_mode(session, str(value))
|
|
353
386
|
logger.info("acp session config: mode -> %s (session=%s)", value, session_id)
|
|
354
387
|
await self._emit_current_mode(session)
|
|
355
388
|
else:
|
|
@@ -438,6 +471,7 @@ class AcpAgent(Agent):
|
|
|
438
471
|
return
|
|
439
472
|
await self._emit_initial_usage(session)
|
|
440
473
|
await self._send_available_commands(session)
|
|
474
|
+
self._start_session_tasks(session)
|
|
441
475
|
|
|
442
476
|
async def _send_available_commands(self, session: AcpSession) -> None:
|
|
443
477
|
"""Advertise the agent's slash commands for the client's command UI.
|
|
@@ -525,29 +559,107 @@ class AcpAgent(Agent):
|
|
|
525
559
|
|
|
526
560
|
# -- turn machinery ----------------------------------------------------
|
|
527
561
|
|
|
528
|
-
|
|
562
|
+
def _start_session_tasks(self, session: AcpSession) -> None:
|
|
563
|
+
if session.closed:
|
|
564
|
+
return
|
|
565
|
+
if session.event_task is None:
|
|
566
|
+
session.bridge = AcpBridge(
|
|
567
|
+
self._conn, diff_provider=AcpDiffProvider.for_session(session), agent=session.agent
|
|
568
|
+
)
|
|
569
|
+
session.event_task = asyncio.create_task(
|
|
570
|
+
self._pump_events(session, session.bridge), name=f"acp-events-{session.session_id}"
|
|
571
|
+
)
|
|
572
|
+
# Explicit session activity rearms retained presentation work, including
|
|
573
|
+
# after a transport failure. The worker must not retry itself on failure.
|
|
574
|
+
if session.completions:
|
|
575
|
+
session.background_wake.set()
|
|
576
|
+
if session.background_task is not None and not session.background_task.done():
|
|
577
|
+
return
|
|
578
|
+
get_jobs = getattr(session.agent, "get_background_jobs", None)
|
|
579
|
+
if callable(get_jobs):
|
|
580
|
+
jobs: Any = get_jobs()
|
|
581
|
+
|
|
582
|
+
def delivered(completion: dict[str, Any]) -> None:
|
|
583
|
+
session.completions.append(completion)
|
|
584
|
+
session.background_wake.set()
|
|
585
|
+
|
|
586
|
+
jobs.set_callbacks(on_ready=session.background_wake.set, on_delivered=delivered)
|
|
587
|
+
session.background_task = asyncio.create_task(
|
|
588
|
+
self._background_worker(session, jobs), name=f"acp-background-{session.session_id}"
|
|
589
|
+
)
|
|
590
|
+
|
|
591
|
+
async def _background_worker(self, session: AcpSession, jobs: Any) -> None:
|
|
592
|
+
await jobs.recover()
|
|
593
|
+
if jobs.pending_count:
|
|
594
|
+
session.background_wake.set()
|
|
595
|
+
while not session.closed:
|
|
596
|
+
await session.background_wake.wait()
|
|
597
|
+
session.background_wake.clear()
|
|
598
|
+
async with session.execution_lock:
|
|
599
|
+
if session.closed:
|
|
600
|
+
return
|
|
601
|
+
try:
|
|
602
|
+
await jobs.deliver(session.agent)
|
|
603
|
+
# Delivery callbacks also wake the worker for reports
|
|
604
|
+
# inserted by the running agent. Consume those wakeups now,
|
|
605
|
+
# not after sending: a failed send must wait for new activity,
|
|
606
|
+
# while readiness arriving during presentation must survive.
|
|
607
|
+
session.background_wake.clear()
|
|
608
|
+
if jobs.pending_count:
|
|
609
|
+
session.background_wake.set()
|
|
610
|
+
completions = bool(session.completions)
|
|
611
|
+
try:
|
|
612
|
+
while session.completions:
|
|
613
|
+
completion = session.completions[0]
|
|
614
|
+
await session.bridge.send(
|
|
615
|
+
session.session_id, update_agent_thought_text(str(completion["text"]))
|
|
616
|
+
)
|
|
617
|
+
# History insertion is already durable. Acknowledge
|
|
618
|
+
# presentation separately, only after this send
|
|
619
|
+
# succeeds; failure/cancellation retains the suffix.
|
|
620
|
+
session.completions.pop(0)
|
|
621
|
+
except Exception:
|
|
622
|
+
logger.exception("acp background presentation failed (session=%s)", session.session_id)
|
|
623
|
+
continue
|
|
624
|
+
if (
|
|
625
|
+
completions
|
|
626
|
+
and not session.auto_continue_paused
|
|
627
|
+
and getattr(session.agent, "background_needs_turn", True)
|
|
628
|
+
):
|
|
629
|
+
await self._run_turn(session, None)
|
|
630
|
+
self._factory.persist(session)
|
|
631
|
+
if jobs is not getattr(session.agent, "background_jobs", None):
|
|
632
|
+
return # a context reset installed another epoch's owner
|
|
633
|
+
if not jobs.active_count:
|
|
634
|
+
for old in session.retired_agents:
|
|
635
|
+
await old.cleanup()
|
|
636
|
+
session.retired_agents.clear()
|
|
637
|
+
except asyncio.CancelledError:
|
|
638
|
+
raise
|
|
639
|
+
except Exception:
|
|
640
|
+
# A failed automatic turn must not spin or silently kill
|
|
641
|
+
# the prompt owner. Explicit input can resume it.
|
|
642
|
+
session.auto_continue_paused = True
|
|
643
|
+
logger.exception("acp background delivery failed (session=%s)", session.session_id)
|
|
644
|
+
|
|
645
|
+
async def _run_turn(self, session: AcpSession, text: str | None) -> StopReason:
|
|
529
646
|
"""Drive one agent turn, mapping its output to ACP updates.
|
|
530
647
|
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
results still render.
|
|
648
|
+
The event pump belongs to the session, not this request. It keeps
|
|
649
|
+
rendering child activity after a prompt's response has been returned.
|
|
534
650
|
"""
|
|
535
|
-
|
|
536
|
-
bridge =
|
|
651
|
+
self._start_session_tasks(session)
|
|
652
|
+
bridge = session.bridge
|
|
653
|
+
bridge.begin_turn(session.agent, AcpDiffProvider.for_session(session))
|
|
537
654
|
session.turn_task = asyncio.create_task(self._drive_turn(session, bridge, text))
|
|
538
|
-
|
|
655
|
+
reason: StopReason = "cancelled"
|
|
539
656
|
try:
|
|
540
|
-
|
|
657
|
+
reason = await session.turn_task
|
|
658
|
+
return reason
|
|
541
659
|
finally:
|
|
542
|
-
pump.cancel()
|
|
543
|
-
try:
|
|
544
|
-
await pump
|
|
545
|
-
except asyncio.CancelledError:
|
|
546
|
-
pass
|
|
547
|
-
await self._drain_residual(session, bridge)
|
|
548
660
|
session.turn_task = None
|
|
549
661
|
await bridge.emit_usage(session.session_id)
|
|
550
|
-
plan = self._consume_plan(session, bridge)
|
|
662
|
+
plan = self._consume_plan(session, bridge) if reason != "cancelled" and not session.closed else None
|
|
551
663
|
if plan:
|
|
552
664
|
session.record.latest_plan_markdown = plan
|
|
553
665
|
session.record.plan_pending = True
|
|
@@ -606,6 +718,20 @@ class AcpAgent(Agent):
|
|
|
606
718
|
session.record.plan_pending = False
|
|
607
719
|
session.record.plan_reofferable = False
|
|
608
720
|
if option_id == "implement_plan_clear":
|
|
721
|
+
jobs = getattr(session.agent, "background_jobs", None)
|
|
722
|
+
if jobs is not None:
|
|
723
|
+
# The reset starts another epoch. Settle old-context work
|
|
724
|
+
# before clearing its history and creating a new owner.
|
|
725
|
+
jobs.set_callbacks(on_ready=None, on_delivered=None)
|
|
726
|
+
await jobs.close()
|
|
727
|
+
await jobs.deliver(session.agent)
|
|
728
|
+
session.agent.background_jobs = None
|
|
729
|
+
if session.background_task is not None and session.background_task is not asyncio.current_task():
|
|
730
|
+
session.background_task.cancel()
|
|
731
|
+
await asyncio.gather(session.background_task, return_exceptions=True)
|
|
732
|
+
session.background_task = None
|
|
733
|
+
session.completions.clear()
|
|
734
|
+
session.background_wake.clear()
|
|
609
735
|
self._clear_agent_context(session)
|
|
610
736
|
await self._factory.set_interaction_mode(session, MODE_BUILD)
|
|
611
737
|
await self._emit_current_mode(session)
|
|
@@ -630,9 +756,14 @@ class AcpAgent(Agent):
|
|
|
630
756
|
session.record.history = []
|
|
631
757
|
session.record.compaction = {}
|
|
632
758
|
|
|
633
|
-
async def _drive_turn(self, session: AcpSession, bridge: AcpBridge, text: str) ->
|
|
759
|
+
async def _drive_turn(self, session: AcpSession, bridge: AcpBridge, text: str | None) -> StopReason:
|
|
634
760
|
try:
|
|
635
|
-
|
|
761
|
+
stream = (
|
|
762
|
+
session.agent.process_message_stream(text)
|
|
763
|
+
if text is not None
|
|
764
|
+
else session.agent.continue_from_history_stream()
|
|
765
|
+
)
|
|
766
|
+
async for chunk in stream:
|
|
636
767
|
await bridge.emit_chunk(session.session_id, chunk)
|
|
637
768
|
return "end_turn"
|
|
638
769
|
except asyncio.CancelledError:
|
|
@@ -33,14 +33,15 @@ class AcpSession:
|
|
|
33
33
|
question_state: dict[str, Any] = field(default_factory=dict)
|
|
34
34
|
#: In-flight turn task; None when the session is idle. Set and cleared by the server.
|
|
35
35
|
turn_task: asyncio.Task | None = field(default=None, repr=False)
|
|
36
|
+
execution_lock: asyncio.Lock = field(default_factory=asyncio.Lock, repr=False)
|
|
37
|
+
event_task: asyncio.Task[None] | None = field(default=None, repr=False)
|
|
38
|
+
background_task: asyncio.Task[None] | None = field(default=None, repr=False)
|
|
39
|
+
bridge: Any = field(default=None, repr=False)
|
|
40
|
+
background_wake: asyncio.Event = field(default_factory=asyncio.Event, repr=False)
|
|
41
|
+
completions: list[dict[str, Any]] = field(default_factory=list)
|
|
42
|
+
auto_continue_paused: bool = False
|
|
43
|
+
closed: bool = False
|
|
44
|
+
retired_agents: list[Any] = field(default_factory=list, repr=False)
|
|
36
45
|
|
|
37
46
|
def idle(self) -> bool:
|
|
38
|
-
return self.turn_task is None or self.turn_task.done()
|
|
39
|
-
|
|
40
|
-
def drain_events(self) -> None:
|
|
41
|
-
"""Drop any events left over from a previous turn (stale mapping inputs)."""
|
|
42
|
-
while not self.manager.events.empty():
|
|
43
|
-
try:
|
|
44
|
-
self.manager.events.get_nowait()
|
|
45
|
-
except asyncio.QueueEmpty:
|
|
46
|
-
break
|
|
47
|
+
return not self.execution_lock.locked() and (self.turn_task is None or self.turn_task.done())
|