kolega-code 0.34.0__tar.gz → 0.35.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.34.0 → kolega_code-0.35.0}/CHANGELOG.md +28 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/PKG-INFO +1 -1
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/__init__.py +1 -1
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/__init__.py +1 -1
- kolega_code-0.35.0/kolega_code/agent/session_metadata.py +165 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/app.py +22 -3
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/gateway.py +20 -1
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/main.py +19 -11
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/peer_messaging.py +1 -1
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/provider_registry.py +2 -1
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/session_store.py +33 -4
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/slash_commands.py +3 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/agent_runtime.py +70 -1
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/app_base.py +2 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/command_handlers.py +54 -6
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/status_dashboard.py +15 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/updater.py +14 -1
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/service.py +86 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/google.py +13 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/openrouter.py +698 -659
- {kolega_code-0.34.0 → kolega_code-0.35.0}/pyproject.toml +1 -1
- {kolega_code-0.34.0 → kolega_code-0.35.0}/.gitignore +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/CONTRIBUTING.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/LICENSE +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/MIGRATION.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/README.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/RELEASING.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/LICENSE +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/manifest.json +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/deep-research/SKILL.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/deep-research/references/evidence-and-reporting.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/deep-research/references/gigacode-workflow.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/deep-research/scripts/deep-research.workflow +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/deep-research/scripts/materialize_report.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/docx/LICENSE +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/docx/SKILL.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/docx/references/examples.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/docx/references/limitations.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/docx/references/operations.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/docx/references/quality.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/docx/requirements.txt +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/docx/scripts/docx_tool.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/docx/scripts/smoke_test.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/humanizer/LICENSE +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/humanizer/SKILL.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/LICENSE +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/SKILL.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/references/examples.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/references/limitations.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/references/ocr.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/references/operations.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/references/quality.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/references/redaction.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-paddle.txt +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-surya.txt +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/requirements.txt +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/scripts/pdf_tool.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pdf/scripts/smoke_test.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pptx/LICENSE +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pptx/SKILL.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pptx/references/examples.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pptx/references/limitations.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pptx/references/operations.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pptx/requirements.txt +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pptx/scripts/pptx_tool.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/pptx/scripts/smoke_test.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/review/SKILL.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/review/references/github-publishing.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/skill-authoring/SKILL.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/skill-authoring/references/review-checklist.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/xlsx/LICENSE +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/xlsx/SKILL.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/xlsx/references/examples.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/xlsx/references/limitations.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/xlsx/references/operations.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/xlsx/references/quality.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/xlsx/requirements.txt +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/xlsx/scripts/smoke_test.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/_bundled_skills/skills/xlsx/scripts/xlsx_tool.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/acp/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/acp/agent_factory.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/acp/bridge.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/acp/diffs.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/acp/permissions.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/acp/plans.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/acp/questions.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/acp/server.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/acp/session.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/acp/usage.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/baseagent.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/browseragent.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/coder.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/common.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/compression.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/context.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/conversation.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/custom_agents.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/edit_protocols.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/errors.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/bridge.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/bundle-requirements.in +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/bundle-requirements.txt +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/env.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/js_kernel.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/kernel.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/prelude.js +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/prelude.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/protocol.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/py_kernel.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/runner.js +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/eval/runner.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/generalagent.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/goal.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/handoff.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/investigationagent.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/model_routing.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/orchestration/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/orchestration/accounting.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/orchestration/budget.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/orchestration/context.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/orchestration/errors.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/orchestration/executor.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/orchestration/guide.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/orchestration/journal.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/orchestration/runtime.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/orchestration/types.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/planningagent.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_dump.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_overrides.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_provider.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_exhausted.user.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_nudge.user.md.j2 +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/truncated_turn_nudge.user.md.j2 +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/auxiliary/handoff/document.system.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/auxiliary/handoff/document.user.md.j2 +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/extensions/cli/build_questions.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/extensions/cli/current_plan_artifact.md.j2 +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/extensions/cli/mode_switch_notice.md.j2 +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/extensions/cli/scratchpad.md.j2 +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list_readonly.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/extensions/cli/worktree_control.md.j2 +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/agents/coder_ask.md.j2 +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/agents/coder_base.md.j2 +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/includes/context_updates.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/system/includes/terminal_tools.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/apply_patch.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/ask_user_choice.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_click.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_close.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_console_messages.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_drag.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_drop.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_evaluate.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_file_upload.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_fill_form.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_find.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_handle_dialog.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_hover.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_navigate.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_navigate_back.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_network_request.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_network_requests.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_press_key.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_resize.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_scroll.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_select_option.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_snapshot.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_tabs.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_take_screenshot.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_type.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/browser_wait_for.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/build_backend.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/build_frontend.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/claude_edit.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/claude_write.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/dispatch_agent.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/edit.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/eval.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/exec_command.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/get_host.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/get_task_list.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/get_task_list_readonly.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/hashline_edit.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/hashline_write.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/kill_command.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/list_agents.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/list_sessions.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/list_subagent_models.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/list_workflow_runs.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/lsp.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/lsp_edit.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/multi_edit.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/read.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/read_image.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/resolve.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/run_workflow.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/send_message.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/set_goal.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/skill.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/snapshot.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/switch_worktree.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/update_task_list.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/web_fetch.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/web_search.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/write.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/write_plan.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/tools/write_stdin.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/prompts.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/agent_tool.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/base_tool.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/browser_tool.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/build_tool.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/codex_patch.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/edit_tool.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/eval_tool.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/hashline_v2.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/lsp_tool.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/network_status.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/read_file_tool.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/read_image_tool.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/search_backends/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/search_backends/tavily.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/snapshot_tool.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/terminal_tool.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/web_fetch/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/web_fetch/answering.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/web_fetch/documents.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/web_fetch/extractors.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/web_fetch/pipeline.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/web_fetch/retrieval.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/web_fetch_tool.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/web_search_tool.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tool_definitions.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/tools.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/utils/commands.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/agent/volatile_context.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/auth/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/auth/_jwt.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/auth/chatgpt_oauth.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/auth/constants.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/auth/tokens.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/browser_extension/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/browser_extension/framing.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/browser_extension/installer.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/browser_extension/manager.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/browser_extension/multiplex.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/browser_extension/native_host.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/browser_extension/protocol.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/browser_extension/registry.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/browser_extension/runtime.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/acp.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/ask_output.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/atif_export.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/browser_backend.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/clipboard_image.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/config.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/connection.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/cron.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/diagnostics.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/file_index.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/goal.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/loop.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/mentions.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/messages.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/model_catalog.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/model_connection.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/plan_artifacts.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/prompt_history.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/session_event_protocol.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/session_event_store.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/session_journal.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/session_usage.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/settings.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/skills.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/theme.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/changes_screen.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/constants.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/custom_model.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/loop_runtime.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/memory_screen.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/onboarding_screen.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/pacing.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/prompt_flows.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/session_diff.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/settings_panel.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/settings_screen.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/state.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/styles.tcss +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/sub_agent_screen.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/terminal_display.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/transcript.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/cli/tui/widgets.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/config.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/events.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/extensions.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/access.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/adapters/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/adapters/base.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/adapters/echo.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/adapters/telegram/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/adapters/telegram/adapter.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/adapters/telegram/formatting.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/bridge.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/commands.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/config.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/control_relay.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/daemon.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/event_router.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/questions.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/redaction.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/router.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/sessions.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/gateway/stt.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/git_env.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/hooks/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/hooks/backends.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/hooks/config.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/hooks/dispatcher.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/hooks/events.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/hooks/matcher.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/hooks/outcome.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/client.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/exceptions.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/instrumented_client.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/ledger.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/models.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/_token_encoding.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/anthropic.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/base.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/deepseek_responses.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/google.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/models.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/openai.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/openai_responses.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/perplexity_responses.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/responses_common.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/tinker.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/providers/tinker_trace.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/ratelimit.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/accessors.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/anthropic.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/dashscope.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/deepseek.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/fireworks.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/groq.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/kimi_coding.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/moonshot.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/ollama_cloud.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/openai.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/openai_chatgpt.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/perplexity_agent.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/thinking_machines.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/tinker.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/together.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/xai.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/catalog/zai.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/custom_endpoints.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/ollama_cloud_catalog.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/openrouter_catalog.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/perplexity_catalog.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/thinking.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/tinker_catalog.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/types.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/specs/validation.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/timeouts.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/tool_execution_ids.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/llm/usage.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/local_state.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/mcp/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/mcp/config.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/mcp/oauth.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/mcp/service.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/mcp/state.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/mcp/tools.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/mcp/transport.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/memory/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/memory/identity.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/memory/manager.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/memory/manifest.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/memory/markdown.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/memory/models.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/memory/protocol.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/memory/registry.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/models/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/models/sandbox_terminal_state.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/permissions.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/runtime.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/README.md +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/async_filesystem.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/base.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/browser.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/event_loop.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/filesystem.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/local.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/serializer.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/terminal.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/sandbox/utils.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/scratchpad.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/security/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/security/secrets.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/base.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/browser.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/file_system.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/html.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/lsp/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/lsp/client.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/lsp/config.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/lsp/detector.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/lsp/diagnostics.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/lsp/edits.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/lsp/manager.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/lsp/registry.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/lsp/registry.yaml +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/snapshots.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/terminal.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/terminal_buffer.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/services/workspace_scan.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/session/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/session/control.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/session/inbox.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/session/inmemory.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/session/projection.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/session/recording.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/session/runtime.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/session/store.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/testing/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/testing/store_conformance.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/tools/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/tools/ask_user.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/tools/core.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/tools/definitions.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/tools/param_aliases.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/tools/registry.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/utils/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/utils/images.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/__init__.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/assets/fold.js +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/assets/player.css +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/assets/player.html +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/assets/player.js +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/bundle.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/hosting.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/redaction.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/server.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/singlefile.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/web/theme_css.py +0 -0
- {kolega_code-0.34.0 → kolega_code-0.35.0}/kolega_code/worktrees.py +0 -0
|
@@ -6,6 +6,34 @@ This project uses GitHub Releases for detailed generated release notes. This fil
|
|
|
6
6
|
|
|
7
7
|
## Unreleased
|
|
8
8
|
|
|
9
|
+
## 0.35.0 - 2026-09-03
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Added Google Gemini 3.8 Flash (`gemini-3.8-flash`): 1M-token context, 64K
|
|
14
|
+
output, vision and function calling, and `low`/`medium`/`high` thinking
|
|
15
|
+
levels. It omits Google's deprecated temperature parameter and is now the
|
|
16
|
+
default Google model.
|
|
17
|
+
- **Descriptive session titles.** Sessions now get a natural-language title
|
|
18
|
+
and a short description generated in the background by the active LLM after
|
|
19
|
+
substantive turns, while the stable session name keeps its role as the
|
|
20
|
+
peer-addressing handle. `/retitle` regenerates them on demand, a dedicated
|
|
21
|
+
Session card in the sidebar shows them, and the header, status dashboard,
|
|
22
|
+
startup banner, and `sessions` CLI output all display the title.
|
|
23
|
+
- **`kolega-code gateway restart` and auto-restart on update.** The new
|
|
24
|
+
subcommand restarts an installed gateway service in place (systemd user
|
|
25
|
+
unit on Linux, launchd agent on macOS). `kolega-code update`, the `/update`
|
|
26
|
+
TUI command, and the shell installer now restart the gateway automatically
|
|
27
|
+
when the service is installed, so an update picks up the new build without
|
|
28
|
+
a manual daemon restart.
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
|
|
32
|
+
- OpenRouter catalog refreshed from the live endpoint (2026-09-03 snapshot):
|
|
33
|
+
277 tool-capable models (20 featured), adding `google/gemini-3.8-flash` and
|
|
34
|
+
the `meta/muse-spark-1.3` pair, with featured order re-ranked by the latest
|
|
35
|
+
weekly token volume.
|
|
36
|
+
|
|
9
37
|
## 0.34.0 - 2026-09-02
|
|
10
38
|
|
|
11
39
|
### Added
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"""Generate descriptive session title and description via the active LLM."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import asyncio
|
|
6
|
+
import json
|
|
7
|
+
import logging
|
|
8
|
+
import re
|
|
9
|
+
from dataclasses import dataclass
|
|
10
|
+
from typing import Any, List, Optional, Sequence
|
|
11
|
+
|
|
12
|
+
from kolega_code.gateway.redaction import scrub
|
|
13
|
+
from kolega_code.llm.ledger import helper_origin, llm_call_origin
|
|
14
|
+
from kolega_code.llm.models import Message, MessageHistory, TextBlock
|
|
15
|
+
|
|
16
|
+
from .compression import render_transcript
|
|
17
|
+
from .conversation import replace_image_blocks_with_placeholders
|
|
18
|
+
|
|
19
|
+
logger = logging.getLogger(__name__)
|
|
20
|
+
|
|
21
|
+
SESSION_METADATA_MIN_MESSAGES = 2
|
|
22
|
+
SESSION_METADATA_MAX_TOKENS = 256
|
|
23
|
+
SESSION_METADATA_HEAD_CHARS = 2000
|
|
24
|
+
SESSION_METADATA_TAIL_CHARS = 6000
|
|
25
|
+
|
|
26
|
+
TITLE_MAX_CHARS = 60
|
|
27
|
+
DESCRIPTION_MAX_CHARS = 200
|
|
28
|
+
|
|
29
|
+
SESSION_METADATA_SYSTEM_PROMPT = """\
|
|
30
|
+
You are an assistant that summarizes developer coding sessions.
|
|
31
|
+
Analyze the provided conversation transcript and generate:
|
|
32
|
+
1. title: A concise, descriptive title in Natural Title Case (e.g. "Fix Authentication Middleware", "Add PostgreSQL Connection Pool", "Investigate Bug 662"). Maximum 60 characters. No surrounding quotes or Markdown formatting.
|
|
33
|
+
2. description: A clear 1 to 2 sentence summary of what the session is working on, goals, and key progress or findings so far. Maximum 200 characters.
|
|
34
|
+
|
|
35
|
+
Respond ONLY with valid JSON in this exact structure:
|
|
36
|
+
{
|
|
37
|
+
"title": "Natural Title Case Title",
|
|
38
|
+
"description": "One or two sentences describing the session."
|
|
39
|
+
}
|
|
40
|
+
"""
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
@dataclass(frozen=True)
|
|
44
|
+
class SessionMetadata:
|
|
45
|
+
"""The generated descriptive metadata for a session."""
|
|
46
|
+
|
|
47
|
+
title: str
|
|
48
|
+
description: str
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class SessionMetadataCancelledError(Exception):
|
|
52
|
+
"""Raised when metadata generation is cancelled."""
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _truncate_transcript(transcript: str) -> str:
|
|
56
|
+
"""Bound the transcript sent to the metadata generator."""
|
|
57
|
+
total_budget = SESSION_METADATA_HEAD_CHARS + SESSION_METADATA_TAIL_CHARS
|
|
58
|
+
if len(transcript) <= total_budget:
|
|
59
|
+
return transcript
|
|
60
|
+
head = transcript[:SESSION_METADATA_HEAD_CHARS]
|
|
61
|
+
tail = transcript[-SESSION_METADATA_TAIL_CHARS:]
|
|
62
|
+
return f"{head}\n\n[... middle conversation omitted ...]\n\n{tail}"
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def parse_session_metadata_json(raw_text: str) -> Optional[SessionMetadata]:
|
|
66
|
+
"""Parse and sanitize the JSON returned by the model."""
|
|
67
|
+
text = raw_text.strip()
|
|
68
|
+
if not text:
|
|
69
|
+
return None
|
|
70
|
+
|
|
71
|
+
# Strip code fences if present
|
|
72
|
+
fence_match = re.search(r"```(?:json)?\s*([\s\S]*?)\s*```", text)
|
|
73
|
+
if fence_match:
|
|
74
|
+
text = fence_match.group(1).strip()
|
|
75
|
+
|
|
76
|
+
data: Optional[dict[str, Any]] = None
|
|
77
|
+
try:
|
|
78
|
+
parsed = json.loads(text)
|
|
79
|
+
if isinstance(parsed, dict):
|
|
80
|
+
data = parsed
|
|
81
|
+
except Exception:
|
|
82
|
+
# Fallback regex extraction for title and description
|
|
83
|
+
title_match = re.search(r'"title"\s*:\s*"([^"]+)"', text)
|
|
84
|
+
desc_match = re.search(r'"description"\s*:\s*"([^"]+)"', text)
|
|
85
|
+
if title_match:
|
|
86
|
+
data = {
|
|
87
|
+
"title": title_match.group(1),
|
|
88
|
+
"description": desc_match.group(1) if desc_match else "",
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if not data or not isinstance(data.get("title"), str):
|
|
92
|
+
return None
|
|
93
|
+
|
|
94
|
+
raw_title = data["title"].strip().strip("\"'")
|
|
95
|
+
# Clean control characters and normalize spaces
|
|
96
|
+
cleaned_title = " ".join(raw_title.split())
|
|
97
|
+
if not cleaned_title:
|
|
98
|
+
return None
|
|
99
|
+
|
|
100
|
+
if len(cleaned_title) > TITLE_MAX_CHARS:
|
|
101
|
+
cleaned_title = cleaned_title[:TITLE_MAX_CHARS].rstrip()
|
|
102
|
+
|
|
103
|
+
raw_description = str(data.get("description") or "").strip()
|
|
104
|
+
cleaned_description = " ".join(raw_description.split())
|
|
105
|
+
if len(cleaned_description) > DESCRIPTION_MAX_CHARS:
|
|
106
|
+
cleaned_description = cleaned_description[:DESCRIPTION_MAX_CHARS].rstrip()
|
|
107
|
+
|
|
108
|
+
return SessionMetadata(title=cleaned_title, description=cleaned_description)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
async def generate_session_metadata(
|
|
112
|
+
messages: List[Message],
|
|
113
|
+
*,
|
|
114
|
+
llm: Any,
|
|
115
|
+
model: str,
|
|
116
|
+
temperature: float = 0.2,
|
|
117
|
+
cancel_event: Optional[asyncio.Event] = None,
|
|
118
|
+
secret_values: Sequence[str] = (),
|
|
119
|
+
) -> Optional[SessionMetadata]:
|
|
120
|
+
"""Summarize ``messages`` into a title and description via the active LLM.
|
|
121
|
+
|
|
122
|
+
Returns ``None`` if generation fails or is cancelled. Never raises.
|
|
123
|
+
"""
|
|
124
|
+
if len(messages) < SESSION_METADATA_MIN_MESSAGES:
|
|
125
|
+
return None
|
|
126
|
+
|
|
127
|
+
if cancel_event is None:
|
|
128
|
+
cancel_event = asyncio.Event()
|
|
129
|
+
|
|
130
|
+
try:
|
|
131
|
+
stripped = replace_image_blocks_with_placeholders(list(messages), model)
|
|
132
|
+
transcript = render_transcript(stripped)
|
|
133
|
+
bounded_transcript = _truncate_transcript(transcript)
|
|
134
|
+
scrubbed_transcript = scrub(bounded_transcript, secret_values)
|
|
135
|
+
|
|
136
|
+
user_content = f"Conversation transcript:\n\n{scrubbed_transcript}"
|
|
137
|
+
request_messages = MessageHistory([Message(role="user", content=[TextBlock(text=user_content)])])
|
|
138
|
+
system_message = Message(role="system", content=[TextBlock(text=SESSION_METADATA_SYSTEM_PROMPT)])
|
|
139
|
+
|
|
140
|
+
if cancel_event.is_set():
|
|
141
|
+
return None
|
|
142
|
+
|
|
143
|
+
with llm_call_origin(helper_origin("session_metadata")):
|
|
144
|
+
stream_cm = await llm.stream(
|
|
145
|
+
messages=request_messages,
|
|
146
|
+
system=system_message,
|
|
147
|
+
temperature=temperature,
|
|
148
|
+
model=model,
|
|
149
|
+
max_completion_tokens=SESSION_METADATA_MAX_TOKENS,
|
|
150
|
+
thinking=None,
|
|
151
|
+
)
|
|
152
|
+
async with stream_cm as stream:
|
|
153
|
+
async for _event in stream:
|
|
154
|
+
if cancel_event.is_set():
|
|
155
|
+
return None
|
|
156
|
+
|
|
157
|
+
if cancel_event.is_set():
|
|
158
|
+
return None
|
|
159
|
+
|
|
160
|
+
response = await stream.get_final_message()
|
|
161
|
+
raw_output = response.get_text_content()
|
|
162
|
+
return parse_session_metadata_json(raw_output)
|
|
163
|
+
except Exception as exc:
|
|
164
|
+
logger.warning("Failed to generate session metadata: %s", exc)
|
|
165
|
+
return None
|
|
@@ -436,6 +436,9 @@ class KolegaCodeApp(
|
|
|
436
436
|
with TabbedContent(id="events"):
|
|
437
437
|
with TabPane("Status", id="status_pane"):
|
|
438
438
|
with VerticalScroll(id="status_form"):
|
|
439
|
+
with Vertical(classes="status-section", id="status_session_section") as session_section:
|
|
440
|
+
session_section.border_title = "Session"
|
|
441
|
+
yield Static("", id="status_session", markup=True)
|
|
439
442
|
with Vertical(classes="status-section", id="status_summary_section") as status_section:
|
|
440
443
|
status_section.border_title = "Status"
|
|
441
444
|
yield Static("", id="status_dashboard", markup=True)
|
|
@@ -527,7 +530,7 @@ class KolegaCodeApp(
|
|
|
527
530
|
self.inbox_registry.register(
|
|
528
531
|
InboxRegistration(
|
|
529
532
|
session_id=self.session.session_id,
|
|
530
|
-
describe_title=lambda: self.session.
|
|
533
|
+
describe_title=lambda: self.session.name,
|
|
531
534
|
describe_project_path=lambda: str(self.active_project_path),
|
|
532
535
|
describe_status=self._peer_status,
|
|
533
536
|
deliver_message=self._deliver_peer_message,
|
|
@@ -953,7 +956,9 @@ class KolegaCodeApp(
|
|
|
953
956
|
workspace_id=record.workspace_id,
|
|
954
957
|
thread_id=record.thread_id,
|
|
955
958
|
mode=record.mode,
|
|
959
|
+
name=record.name,
|
|
956
960
|
title=record.title,
|
|
961
|
+
description=record.description,
|
|
957
962
|
created_at=record.created_at,
|
|
958
963
|
updated_at=record.updated_at,
|
|
959
964
|
config=dict(record.config),
|
|
@@ -2645,8 +2650,16 @@ class KolegaCodeApp(
|
|
|
2645
2650
|
|
|
2646
2651
|
def _meta_content(self) -> str:
|
|
2647
2652
|
gigacode = "on" if self._gigacode_enabled else "off"
|
|
2653
|
+
short_id = self.session.session_id[:8]
|
|
2654
|
+
if self.session.title and self.session.title != self.session.name:
|
|
2655
|
+
title = self.session.title
|
|
2656
|
+
if len(title) > 36:
|
|
2657
|
+
title = f"{title[:35]}…"
|
|
2658
|
+
session_segment = f"{title} · {self.session.name} ({short_id})"
|
|
2659
|
+
else:
|
|
2660
|
+
session_segment = f"{self.session.name} ({short_id})"
|
|
2648
2661
|
return (
|
|
2649
|
-
f"{self.active_project_path} |
|
|
2662
|
+
f"{self.active_project_path} | {session_segment} | "
|
|
2650
2663
|
f"agent {self.mode} | {self.interaction_mode} | permissions {self.permission_mode.value} | "
|
|
2651
2664
|
f"gigacode {gigacode}"
|
|
2652
2665
|
)
|
|
@@ -3044,10 +3057,16 @@ class KolegaCodeApp(
|
|
|
3044
3057
|
project_lines = [f"Project: {self.active_project_path}"]
|
|
3045
3058
|
if self.active_project_path != self.project_path:
|
|
3046
3059
|
project_lines.append(f"Launch project: {self.project_path}")
|
|
3060
|
+
if self.session.title and self.session.title != self.session.name:
|
|
3061
|
+
session_display = f"{session_id} · {self.session.title} ({self.session.name})"
|
|
3062
|
+
elif self.session.name:
|
|
3063
|
+
session_display = f"{session_id} ({self.session.name})"
|
|
3064
|
+
else:
|
|
3065
|
+
session_display = f"{session_id}"
|
|
3047
3066
|
startup_lines.extend(
|
|
3048
3067
|
[
|
|
3049
3068
|
*project_lines,
|
|
3050
|
-
f"Session: {
|
|
3069
|
+
f"Session: {session_display}",
|
|
3051
3070
|
f"Mode: {self.mode}",
|
|
3052
3071
|
f"Interaction: {self.interaction_mode}",
|
|
3053
3072
|
f"Permissions: {self.permission_mode.value}",
|
|
@@ -31,6 +31,8 @@ from kolega_code.gateway.service import (
|
|
|
31
31
|
LAUNCHD_LABEL,
|
|
32
32
|
SERVICE_NAME,
|
|
33
33
|
install_service,
|
|
34
|
+
is_service_installed,
|
|
35
|
+
restart_service,
|
|
34
36
|
uninstall_service,
|
|
35
37
|
)
|
|
36
38
|
|
|
@@ -76,6 +78,9 @@ def add_gateway_parser(subparsers: argparse._SubParsersAction[argparse.ArgumentP
|
|
|
76
78
|
uninstall = gateway_sub.add_parser("uninstall", help="Remove the gateway background service.")
|
|
77
79
|
uninstall.add_argument("--state-dir", type=Path, default=None, help="Override the state directory.")
|
|
78
80
|
|
|
81
|
+
restart = gateway_sub.add_parser("restart", help="Restart the gateway background service.")
|
|
82
|
+
restart.add_argument("--state-dir", type=Path, default=None, help="Override the state directory.")
|
|
83
|
+
|
|
79
84
|
telegram = gateway_sub.add_parser("telegram", help="Telegram adapter setup.")
|
|
80
85
|
telegram_sub = telegram.add_subparsers(dest="telegram_command", required=True)
|
|
81
86
|
setup = telegram_sub.add_parser("setup", help="Save the @BotFather bot token (stored in settings.json).")
|
|
@@ -112,7 +117,7 @@ async def _run_gateway(args: argparse.Namespace) -> int:
|
|
|
112
117
|
return _gateway_pairing(args, config)
|
|
113
118
|
if args.gateway_command == "telegram":
|
|
114
119
|
return await _gateway_telegram(args, config)
|
|
115
|
-
if args.gateway_command in ("install", "uninstall"):
|
|
120
|
+
if args.gateway_command in ("install", "uninstall", "restart"):
|
|
116
121
|
return _gateway_service(args, config)
|
|
117
122
|
return await _gateway_run(config, args)
|
|
118
123
|
|
|
@@ -189,6 +194,20 @@ def _gateway_service(args: argparse.Namespace, config: GatewayConfig) -> int:
|
|
|
189
194
|
for note in _activate_service(args.gateway_command, result.unit_path):
|
|
190
195
|
print(f"gateway: {note}")
|
|
191
196
|
return 0
|
|
197
|
+
if args.gateway_command == "restart":
|
|
198
|
+
if not is_service_installed():
|
|
199
|
+
print(
|
|
200
|
+
"gateway: background service is not installed (run 'kolega-code gateway install' to set it up)",
|
|
201
|
+
file=sys.stderr,
|
|
202
|
+
)
|
|
203
|
+
return 1
|
|
204
|
+
success, notes = restart_service()
|
|
205
|
+
for note in notes:
|
|
206
|
+
if success:
|
|
207
|
+
print(f"gateway: {note}")
|
|
208
|
+
else:
|
|
209
|
+
print(f"gateway: {note}", file=sys.stderr)
|
|
210
|
+
return 0 if success else 1
|
|
192
211
|
for note in _activate_service("uninstall", None):
|
|
193
212
|
print(f"gateway: {note}")
|
|
194
213
|
for note in uninstall_service(config):
|
|
@@ -1015,6 +1015,8 @@ def _run_update() -> int:
|
|
|
1015
1015
|
_print_styled(result.error, style="error", stderr=True)
|
|
1016
1016
|
if result.returncode == 0:
|
|
1017
1017
|
print("Kolega Code update completed. Run `kolega-code --version` to confirm.")
|
|
1018
|
+
for note in result.gateway_restart_notes:
|
|
1019
|
+
print(f"gateway: {note}")
|
|
1018
1020
|
elif not result.error:
|
|
1019
1021
|
_print_styled("Kolega Code update failed.", style="error", stderr=True)
|
|
1020
1022
|
return result.returncode
|
|
@@ -1492,7 +1494,7 @@ def _apply_launch_name(
|
|
|
1492
1494
|
*,
|
|
1493
1495
|
persistable: bool = True,
|
|
1494
1496
|
) -> None:
|
|
1495
|
-
"""Apply --name at launch. The persisted
|
|
1497
|
+
"""Apply --name at launch. The persisted name is a peer's address for the
|
|
1496
1498
|
session, so invalid names fail loudly instead of being silently mangled."""
|
|
1497
1499
|
from .peer_messaging import PEER_NAME_MAX_CHARS
|
|
1498
1500
|
|
|
@@ -1501,6 +1503,7 @@ def _apply_launch_name(
|
|
|
1501
1503
|
name = str(raw_name).strip()
|
|
1502
1504
|
if not name or len(name) > PEER_NAME_MAX_CHARS:
|
|
1503
1505
|
raise SystemExit(f"Error: --name must be 1-{PEER_NAME_MAX_CHARS} characters.")
|
|
1506
|
+
session.name = name
|
|
1504
1507
|
session.title = name
|
|
1505
1508
|
if persistable:
|
|
1506
1509
|
store.save(session)
|
|
@@ -2377,17 +2380,22 @@ def _run_sessions(args: argparse.Namespace) -> int:
|
|
|
2377
2380
|
return 0
|
|
2378
2381
|
entries = []
|
|
2379
2382
|
for record in reversed(records):
|
|
2380
|
-
|
|
2381
|
-
"
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
|
|
2386
|
-
|
|
2387
|
-
|
|
2388
|
-
|
|
2389
|
-
|
|
2383
|
+
item_lines = [
|
|
2384
|
+
f"Updated: {record.updated_at}",
|
|
2385
|
+
f"Title: {record.title or record.name}",
|
|
2386
|
+
]
|
|
2387
|
+
if record.name and record.name != record.title:
|
|
2388
|
+
item_lines.append(f"Name: {record.name}")
|
|
2389
|
+
if record.description:
|
|
2390
|
+
item_lines.append(f"Description: {record.description}")
|
|
2391
|
+
item_lines.extend(
|
|
2392
|
+
[
|
|
2393
|
+
f"Mode: {record.mode}",
|
|
2394
|
+
f"Project: {record.project_path}",
|
|
2395
|
+
f"Resume ID: {record.session_id}",
|
|
2396
|
+
]
|
|
2390
2397
|
)
|
|
2398
|
+
entries.append("\n".join(item_lines))
|
|
2391
2399
|
print("\n\n".join(entries))
|
|
2392
2400
|
return 0
|
|
2393
2401
|
if args.sessions_command == "delete":
|
|
@@ -184,7 +184,7 @@ async def start_headless_peer_inbox(
|
|
|
184
184
|
|
|
185
185
|
def store_title_lookup(store: Any) -> Any:
|
|
186
186
|
"""A discovery ``title_lookup`` backed by the shared session store."""
|
|
187
|
-
titles_by_id = {record.session_id: record.
|
|
187
|
+
titles_by_id = {record.session_id: record.name for record in store.list()}
|
|
188
188
|
return titles_by_id.get
|
|
189
189
|
|
|
190
190
|
|
|
@@ -98,6 +98,7 @@ MODEL_LABELS: dict[str, str] = {
|
|
|
98
98
|
"gpt-5.4-mini": "GPT-5.4 Mini",
|
|
99
99
|
"gpt-5.3-codex-spark": "GPT-5.3 Codex Spark",
|
|
100
100
|
# Google
|
|
101
|
+
"gemini-3.8-flash": "Gemini 3.8 Flash",
|
|
101
102
|
"gemini-3.7-flash": "Gemini 3.7 Flash",
|
|
102
103
|
"gemini-3.6-flash": "Gemini 3.6 Flash",
|
|
103
104
|
"gemini-3.5-flash-lite": "Gemini 3.5 Flash-Lite",
|
|
@@ -167,7 +168,7 @@ PROVIDER_DEFAULT_MODEL: dict[ModelProvider, str] = {
|
|
|
167
168
|
ModelProvider.ANTHROPIC: "claude-opus-5",
|
|
168
169
|
ModelProvider.OPENAI: "gpt-5.6-sol",
|
|
169
170
|
ModelProvider.OPENAI_CHATGPT: "gpt-5.6-sol",
|
|
170
|
-
ModelProvider.GOOGLE: "gemini-3.
|
|
171
|
+
ModelProvider.GOOGLE: "gemini-3.8-flash",
|
|
171
172
|
ModelProvider.XAI: "grok-4.5",
|
|
172
173
|
ModelProvider.FIREWORKS: "accounts/fireworks/models/glm-5p2",
|
|
173
174
|
ModelProvider.TOGETHER: "moonshotai/Kimi-K2.7-Code",
|
|
@@ -139,9 +139,11 @@ class SessionRecord:
|
|
|
139
139
|
workspace_id: str
|
|
140
140
|
thread_id: str
|
|
141
141
|
mode: str
|
|
142
|
-
title: str
|
|
143
142
|
created_at: str
|
|
144
143
|
updated_at: str
|
|
144
|
+
title: str = ""
|
|
145
|
+
name: str = ""
|
|
146
|
+
description: str = ""
|
|
145
147
|
config: dict[str, Any] = field(default_factory=dict)
|
|
146
148
|
history: list[dict[str, Any]] = field(default_factory=list)
|
|
147
149
|
compaction: dict[str, Any] = field(default_factory=dict)
|
|
@@ -175,12 +177,16 @@ class SessionRecord:
|
|
|
175
177
|
mode: str,
|
|
176
178
|
config: dict[str, Any],
|
|
177
179
|
session_id: Optional[str] = None,
|
|
180
|
+
name: Optional[str] = None,
|
|
178
181
|
title: Optional[str] = None,
|
|
182
|
+
description: Optional[str] = None,
|
|
179
183
|
parent_session_id: Optional[str] = None,
|
|
180
184
|
) -> "SessionRecord":
|
|
181
185
|
now = _now()
|
|
182
186
|
resolved_project = str(project_path.resolve())
|
|
183
187
|
session_id = session_id or uuid.uuid4().hex
|
|
188
|
+
assigned_name = name or (title if title else generate_session_name())
|
|
189
|
+
assigned_title = title if title else (name if name else assigned_name)
|
|
184
190
|
return cls(
|
|
185
191
|
schema_version=SCHEMA_VERSION,
|
|
186
192
|
session_id=session_id,
|
|
@@ -188,7 +194,9 @@ class SessionRecord:
|
|
|
188
194
|
workspace_id=f"cli-{uuid.uuid4().hex}",
|
|
189
195
|
thread_id=uuid.uuid4().hex,
|
|
190
196
|
mode=mode,
|
|
191
|
-
|
|
197
|
+
name=assigned_name,
|
|
198
|
+
title=assigned_title,
|
|
199
|
+
description=description or "",
|
|
192
200
|
created_at=now,
|
|
193
201
|
updated_at=now,
|
|
194
202
|
config=config,
|
|
@@ -202,6 +210,14 @@ class SessionRecord:
|
|
|
202
210
|
raise SessionStoreError(f"Unsupported session schema version: {data.get('schema_version')}")
|
|
203
211
|
latest_plan_markdown = data.get("latest_plan_markdown") or ""
|
|
204
212
|
plan_pending = bool(latest_plan_markdown and data.get("plan_pending", False))
|
|
213
|
+
raw_name = data.get("name")
|
|
214
|
+
raw_title = data.get("title") or ""
|
|
215
|
+
if raw_name:
|
|
216
|
+
name = raw_name
|
|
217
|
+
title = raw_title or raw_name
|
|
218
|
+
else:
|
|
219
|
+
name = raw_title or generate_session_name()
|
|
220
|
+
title = raw_title or name
|
|
205
221
|
return cls(
|
|
206
222
|
schema_version=data["schema_version"],
|
|
207
223
|
session_id=data["session_id"],
|
|
@@ -209,7 +225,9 @@ class SessionRecord:
|
|
|
209
225
|
workspace_id=data["workspace_id"],
|
|
210
226
|
thread_id=data["thread_id"],
|
|
211
227
|
mode=data["mode"],
|
|
212
|
-
|
|
228
|
+
name=name,
|
|
229
|
+
title=title,
|
|
230
|
+
description=data.get("description") or "",
|
|
213
231
|
created_at=data["created_at"],
|
|
214
232
|
updated_at=data["updated_at"],
|
|
215
233
|
config=data.get("config") or {},
|
|
@@ -238,7 +256,9 @@ class SessionRecord:
|
|
|
238
256
|
"workspace_id": self.workspace_id,
|
|
239
257
|
"thread_id": self.thread_id,
|
|
240
258
|
"mode": self.mode,
|
|
259
|
+
"name": self.name,
|
|
241
260
|
"title": self.title,
|
|
261
|
+
"description": self.description,
|
|
242
262
|
"created_at": self.created_at,
|
|
243
263
|
"updated_at": self.updated_at,
|
|
244
264
|
"config": self.config,
|
|
@@ -334,11 +354,20 @@ class SessionStore:
|
|
|
334
354
|
mode: str,
|
|
335
355
|
config: dict[str, Any],
|
|
336
356
|
session_id: Optional[str] = None,
|
|
357
|
+
name: Optional[str] = None,
|
|
337
358
|
title: Optional[str] = None,
|
|
359
|
+
description: Optional[str] = None,
|
|
338
360
|
parent_session_id: Optional[str] = None,
|
|
339
361
|
) -> SessionRecord:
|
|
340
362
|
record = SessionRecord.create(
|
|
341
|
-
project_path,
|
|
363
|
+
project_path,
|
|
364
|
+
mode,
|
|
365
|
+
config,
|
|
366
|
+
session_id=session_id,
|
|
367
|
+
name=name,
|
|
368
|
+
title=title,
|
|
369
|
+
description=description,
|
|
370
|
+
parent_session_id=parent_session_id,
|
|
342
371
|
)
|
|
343
372
|
self.ensure_dirs()
|
|
344
373
|
session_dir = self.session_dir_for(record.session_id)
|
|
@@ -68,6 +68,9 @@ TUI_COMMAND_ENTRIES: tuple[SlashCommandEntry, ...] = (
|
|
|
68
68
|
SlashCommandEntry("tasks", "Show the shared task list", CommandScope.TUI),
|
|
69
69
|
SlashCommandEntry("peers", "List reachable agent sessions you can message", CommandScope.TUI),
|
|
70
70
|
SlashCommandEntry("rename", "Rename this session (/rename <name>)", CommandScope.TUI),
|
|
71
|
+
SlashCommandEntry(
|
|
72
|
+
"retitle", "Set or regenerate session title and description (/retitle [title])", CommandScope.TUI
|
|
73
|
+
),
|
|
71
74
|
SlashCommandEntry("gigacode", "Toggle gigacode workflow orchestration on or off", CommandScope.TUI),
|
|
72
75
|
SlashCommandEntry("prompts", "Dump, list, or validate project prompt override files", CommandScope.TUI),
|
|
73
76
|
SlashCommandEntry("queue-clear", "Clear queued follow-up messages", CommandScope.TUI),
|
|
@@ -273,6 +273,7 @@ class AgentRuntimeMixin(tui_app_base.KolegaAppBase):
|
|
|
273
273
|
await self._save_session_history_async()
|
|
274
274
|
await self._capture_completed_plan()
|
|
275
275
|
self._log_status(messages.FINISHED, "ok")
|
|
276
|
+
self._maybe_trigger_session_metadata()
|
|
276
277
|
except asyncio.CancelledError:
|
|
277
278
|
cancelled_by_user = True
|
|
278
279
|
# When the app is quitting, action_quit already settled open
|
|
@@ -313,6 +314,74 @@ class AgentRuntimeMixin(tui_app_base.KolegaAppBase):
|
|
|
313
314
|
self._schedule_primary_focus_restore()
|
|
314
315
|
return cancelled_by_user
|
|
315
316
|
|
|
317
|
+
def _maybe_trigger_session_metadata(self) -> None:
|
|
318
|
+
"""Trigger background session title and description generation if turn meets depth."""
|
|
319
|
+
if self._exit or self.agent is None or not self.agent.history:
|
|
320
|
+
return
|
|
321
|
+
if len(self.agent.history) < 2:
|
|
322
|
+
return
|
|
323
|
+
self.run_worker(
|
|
324
|
+
self._update_session_metadata_worker(),
|
|
325
|
+
name="kolega-session-metadata",
|
|
326
|
+
group="metadata",
|
|
327
|
+
exclusive=True,
|
|
328
|
+
)
|
|
329
|
+
|
|
330
|
+
async def _update_session_metadata_worker(self, *, force_notify: bool = False) -> None:
|
|
331
|
+
"""Generate descriptive session title and description in the background."""
|
|
332
|
+
if self.agent is None or not getattr(self.agent, "llm", None):
|
|
333
|
+
if force_notify:
|
|
334
|
+
self._notify_user("Cannot generate metadata: agent not ready.", severity="warning")
|
|
335
|
+
return
|
|
336
|
+
messages = list(self.agent.history)
|
|
337
|
+
if len(messages) < 2:
|
|
338
|
+
if force_notify:
|
|
339
|
+
self._notify_user("Not enough conversation history to generate title.", severity="warning")
|
|
340
|
+
return
|
|
341
|
+
|
|
342
|
+
from kolega_code.agent.session_metadata import generate_session_metadata
|
|
343
|
+
from ..main import known_secret_values
|
|
344
|
+
|
|
345
|
+
secret_values: list[str] = []
|
|
346
|
+
try:
|
|
347
|
+
secret_values = known_secret_values(self.settings, self.settings_store, project_path=self.project_path)
|
|
348
|
+
except Exception:
|
|
349
|
+
pass
|
|
350
|
+
|
|
351
|
+
model_cfg = getattr(self.agent, "primary_model_config", None)
|
|
352
|
+
model = model_cfg.model if model_cfg is not None else "fast"
|
|
353
|
+
metadata = await generate_session_metadata(
|
|
354
|
+
messages,
|
|
355
|
+
llm=self.agent.llm,
|
|
356
|
+
model=model,
|
|
357
|
+
secret_values=secret_values,
|
|
358
|
+
)
|
|
359
|
+
if metadata is None:
|
|
360
|
+
if force_notify:
|
|
361
|
+
self._notify_user("Could not generate session title.", severity="warning")
|
|
362
|
+
return
|
|
363
|
+
|
|
364
|
+
changed = False
|
|
365
|
+
if metadata.title and self.session.title != metadata.title:
|
|
366
|
+
self.session.title = metadata.title
|
|
367
|
+
changed = True
|
|
368
|
+
if metadata.description and self.session.description != metadata.description:
|
|
369
|
+
self.session.description = metadata.description
|
|
370
|
+
changed = True
|
|
371
|
+
|
|
372
|
+
if changed:
|
|
373
|
+
await self._save_session_async()
|
|
374
|
+
self._update_mode_chrome()
|
|
375
|
+
|
|
376
|
+
if force_notify:
|
|
377
|
+
self._add_conversation_entry(
|
|
378
|
+
tui_state.ConversationEntry(
|
|
379
|
+
kind="system",
|
|
380
|
+
content=f"Session retitled: **{self.session.title}**"
|
|
381
|
+
+ (f"\n{self.session.description}" if self.session.description else ""),
|
|
382
|
+
)
|
|
383
|
+
)
|
|
384
|
+
|
|
316
385
|
async def _process_message(
|
|
317
386
|
self, message: str, attachments: list[dict] | None = None, *, turn_label: str | None = None
|
|
318
387
|
) -> bool:
|
|
@@ -515,7 +584,7 @@ class AgentRuntimeMixin(tui_app_base.KolegaAppBase):
|
|
|
515
584
|
|
|
516
585
|
message = PeerMessage.create(
|
|
517
586
|
sender_session_id=self.session.session_id,
|
|
518
|
-
sender_title=self.session.
|
|
587
|
+
sender_title=self.session.name,
|
|
519
588
|
text=cleaned_text,
|
|
520
589
|
)
|
|
521
590
|
|
|
@@ -292,6 +292,8 @@ class KolegaAppBase(App):
|
|
|
292
292
|
async def _refresh_agent_memory(self) -> None: ...
|
|
293
293
|
async def _save_session_history_async(self) -> None: ...
|
|
294
294
|
async def _capture_completed_plan(self) -> None: ...
|
|
295
|
+
def _maybe_trigger_session_metadata(self) -> None: ...
|
|
296
|
+
async def _update_session_metadata_worker(self, *, force_notify: bool = False) -> None: ...
|
|
295
297
|
def _schedule_primary_focus_restore(self) -> None: ...
|
|
296
298
|
def _set_chat_enabled(self, enabled: bool) -> None: ...
|
|
297
299
|
def _set_composer_status(self, status: str) -> None: ...
|