kolega-code 0.27.0__tar.gz → 0.28.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.27.0 → kolega_code-0.28.0}/CHANGELOG.md +179 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/PKG-INFO +5 -1
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/__init__.py +25 -3
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/manifest.json +7 -7
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/deep-research/references/gigacode-workflow.md +1 -1
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/deep-research/scripts/deep-research.workflow +4 -3
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pptx/references/operations.md +16 -9
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pptx/scripts/pptx_tool.py +164 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pptx/scripts/smoke_test.py +146 -1
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/__init__.py +1 -1
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/baseagent.py +419 -164
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/browseragent.py +2 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/coder.py +2 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/compression.py +27 -12
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/context.py +11 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/custom_agents.py +2 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/generalagent.py +2 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/investigationagent.py +2 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/planningagent.py +17 -12
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/system/includes/terminal_tools.md +1 -1
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/apply_patch.md +1 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/ask_user_choice.md +10 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_click.md +7 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_close.md +1 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_console_messages.md +5 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_drag.md +1 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_drop.md +1 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_evaluate.md +1 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_file_upload.md +1 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_fill_form.md +1 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_find.md +8 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_handle_dialog.md +1 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_hover.md +1 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_navigate.md +1 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_navigate_back.md +1 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_network_request.md +5 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_network_requests.md +1 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_press_key.md +6 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_resize.md +1 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_scroll.md +5 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_select_option.md +1 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_snapshot.md +9 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_tabs.md +11 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_take_screenshot.md +9 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_type.md +1 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/browser_wait_for.md +1 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/build_backend.md +12 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/build_frontend.md +12 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/claude_edit.md +8 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/claude_write.md +6 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/dispatch_agent.md +18 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/edit.md +53 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/eval.md +14 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/exec_command.md +27 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/get_host.md +2 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/get_task_list.md +6 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/get_task_list_readonly.md +8 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/hashline_edit.md +22 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/hashline_write.md +7 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/kill_command.md +8 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/list_sessions.md +9 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/list_subagent_models.md +9 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/list_workflow_runs.md +10 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/lsp.md +19 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/lsp_edit.md +7 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/multi_edit.md +24 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/read.md +4 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/read_image.md +4 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/resolve.md +8 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/run_workflow.md +17 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/set_goal.md +21 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/skill.md +8 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/snapshot.md +9 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/switch_worktree.md +22 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/update_task_list.md +8 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/web_fetch.md +11 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/web_search.md +9 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/write.md +7 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/write_plan.md +7 -0
- kolega_code-0.28.0/kolega_code/agent/prompt_templates/tools/write_stdin.md +17 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/agent_tool.py +124 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/terminal_tool.py +170 -33
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/web_fetch_tool.py +1 -0
- kolega_code-0.28.0/kolega_code/agent/tool_definitions.py +767 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tools.py +175 -1132
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/utils/commands.py +5 -4
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/volatile_context.py +2 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/app.py +65 -21
- kolega_code-0.28.0/kolega_code/cli/ask_output.py +24 -0
- kolega_code-0.28.0/kolega_code/cli/atif_export.py +1076 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/config.py +241 -8
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/diagnostics.py +21 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/main.py +757 -370
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/messages.py +4 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/model_catalog.py +104 -38
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/model_connection.py +4 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/provider_registry.py +26 -2
- kolega_code-0.28.0/kolega_code/cli/session_event_protocol.py +295 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/session_journal.py +538 -54
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/session_store.py +118 -3
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/session_usage.py +19 -2
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/settings.py +38 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/skills.py +14 -13
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/slash_commands.py +18 -5
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/theme.py +2 -12
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/agent_runtime.py +226 -125
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/app_base.py +13 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/changes_screen.py +5 -1
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/command_handlers.py +4 -1
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/custom_model.py +9 -6
- kolega_code-0.28.0/kolega_code/cli/tui/pacing.py +58 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/prompt_flows.py +23 -46
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/settings_panel.py +144 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/settings_screen.py +44 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/status_dashboard.py +4 -3
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/sub_agent_screen.py +5 -1
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/terminal_display.py +22 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/transcript.py +11 -7
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/config.py +45 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/events.py +6 -1
- kolega_code-0.28.0/kolega_code/extensions.py +182 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/client.py +127 -3
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/exceptions.py +31 -1
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/instrumented_client.py +48 -5
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/ledger.py +33 -2
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/models.py +16 -3
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/providers/anthropic.py +4 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/providers/responses_common.py +80 -11
- kolega_code-0.28.0/kolega_code/llm/providers/tinker.py +585 -0
- kolega_code-0.28.0/kolega_code/llm/providers/tinker_trace.py +37 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/specs/__init__.py +7 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/specs/accessors.py +71 -7
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/specs/catalog/__init__.py +12 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/specs/catalog/anthropic.py +10 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/specs/catalog/dashscope.py +2 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/specs/catalog/deepseek.py +2 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/specs/catalog/fireworks.py +8 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/specs/catalog/google.py +4 -0
- kolega_code-0.28.0/kolega_code/llm/specs/catalog/kimi_coding.py +73 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/specs/catalog/moonshot.py +9 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/specs/catalog/ollama_cloud.py +53 -154
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/specs/catalog/openai.py +7 -1
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/specs/catalog/openai_chatgpt.py +13 -5
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/specs/catalog/openrouter.py +1174 -886
- kolega_code-0.28.0/kolega_code/llm/specs/catalog/thinking_machines.py +36 -0
- kolega_code-0.28.0/kolega_code/llm/specs/catalog/tinker.py +244 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/specs/catalog/together.py +2 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/specs/catalog/xai.py +3 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/specs/catalog/zai.py +2 -0
- kolega_code-0.28.0/kolega_code/llm/specs/ollama_cloud_catalog.py +364 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/specs/openrouter_catalog.py +8 -1
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/specs/thinking.py +18 -0
- kolega_code-0.28.0/kolega_code/llm/specs/tinker_catalog.py +240 -0
- kolega_code-0.28.0/kolega_code/llm/specs/validation.py +17 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/usage.py +1 -1
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/mcp/tools.py +3 -2
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/sandbox/serializer.py +3 -1
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/sandbox/terminal.py +216 -29
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/scratchpad.py +21 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/services/base.py +26 -5
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/services/terminal.py +321 -47
- kolega_code-0.28.0/kolega_code/services/terminal_buffer.py +587 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/tools/__init__.py +0 -4
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/tools/core.py +26 -0
- kolega_code-0.28.0/kolega_code/tools/definitions.py +68 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/pyproject.toml +16 -2
- kolega_code-0.27.0/kolega_code/cli/ask_output.py +0 -104
- kolega_code-0.27.0/kolega_code/llm/specs/catalog/kimi_coding.py +0 -41
- kolega_code-0.27.0/kolega_code/services/terminal_buffer.py +0 -135
- kolega_code-0.27.0/kolega_code/tools/definitions.py +0 -194
- {kolega_code-0.27.0 → kolega_code-0.28.0}/.gitignore +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/CONTRIBUTING.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/LICENSE +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/MIGRATION.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/README.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/RELEASING.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/LICENSE +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/deep-research/SKILL.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/deep-research/references/evidence-and-reporting.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/deep-research/scripts/materialize_report.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/docx/LICENSE +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/docx/SKILL.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/docx/references/examples.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/docx/references/limitations.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/docx/references/operations.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/docx/references/quality.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/docx/requirements.txt +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/docx/scripts/docx_tool.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/docx/scripts/smoke_test.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/humanizer/LICENSE +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/humanizer/SKILL.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pdf/LICENSE +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pdf/SKILL.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pdf/references/examples.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pdf/references/limitations.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pdf/references/ocr.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pdf/references/operations.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pdf/references/quality.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pdf/references/redaction.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-paddle.txt +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pdf/requirements-ocr-surya.txt +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pdf/requirements.txt +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pdf/scripts/pdf_tool.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pdf/scripts/smoke_test.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pptx/LICENSE +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pptx/SKILL.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pptx/references/examples.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pptx/references/limitations.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/pptx/requirements.txt +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/review/SKILL.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/review/references/github-publishing.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/skill-authoring/SKILL.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/skill-authoring/references/review-checklist.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/xlsx/LICENSE +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/xlsx/SKILL.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/xlsx/references/examples.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/xlsx/references/limitations.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/xlsx/references/operations.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/xlsx/references/quality.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/xlsx/requirements.txt +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/xlsx/scripts/smoke_test.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/_bundled_skills/skills/xlsx/scripts/xlsx_tool.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/common.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/conversation.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/edit_protocols.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/errors.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/eval/__init__.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/eval/bridge.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/eval/bundle-requirements.in +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/eval/bundle-requirements.txt +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/eval/env.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/eval/js_kernel.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/eval/kernel.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/eval/prelude.js +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/eval/prelude.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/eval/protocol.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/eval/py_kernel.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/eval/runner.js +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/eval/runner.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/goal.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/model_routing.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/orchestration/__init__.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/orchestration/accounting.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/orchestration/budget.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/orchestration/context.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/orchestration/errors.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/orchestration/executor.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/orchestration/guide.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/orchestration/journal.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/orchestration/runtime.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/orchestration/types.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_dump.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_overrides.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_provider.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_exhausted.user.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/silent_turn_nudge.user.md.j2 +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/auxiliary/agent_loop/truncated_turn_nudge.user.md.j2 +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/extensions/cli/build_questions.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/extensions/cli/current_plan_artifact.md.j2 +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/extensions/cli/mode_switch_notice.md.j2 +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/extensions/cli/scratchpad.md.j2 +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list_readonly.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/extensions/cli/worktree_control.md.j2 +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/system/agents/coder_ask.md.j2 +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/system/agents/coder_base.md.j2 +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/system/includes/context_updates.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/prompts.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/base_tool.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/browser_tool.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/build_tool.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/codex_patch.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/edit_tool.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/eval_tool.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/hashline_v2.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/lsp_tool.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/network_status.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/read_file_tool.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/read_image_tool.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/search_backends/__init__.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/search_backends/tavily.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/snapshot_tool.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/web_fetch/__init__.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/web_fetch/answering.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/web_fetch/documents.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/web_fetch/extractors.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/web_fetch/pipeline.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/web_fetch/retrieval.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/web_search_tool.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/auth/__init__.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/auth/_jwt.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/auth/chatgpt_oauth.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/auth/constants.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/auth/tokens.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/browser_extension/__init__.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/browser_extension/framing.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/browser_extension/installer.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/browser_extension/manager.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/browser_extension/multiplex.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/browser_extension/native_host.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/browser_extension/protocol.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/browser_extension/registry.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/browser_extension/runtime.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/__init__.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/browser_backend.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/clipboard_image.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/connection.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/cron.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/file_index.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/goal.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/loop.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/mentions.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/plan_artifacts.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/session_event_store.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/__init__.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/constants.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/loop_runtime.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/memory_screen.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/onboarding_screen.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/session_diff.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/state.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/styles.tcss +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/tui/widgets.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/cli/updater.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/git_env.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/hooks/__init__.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/hooks/backends.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/hooks/config.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/hooks/dispatcher.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/hooks/events.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/hooks/matcher.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/hooks/outcome.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/providers/__init__.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/providers/_token_encoding.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/providers/base.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/providers/deepseek_responses.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/providers/google.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/providers/models.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/providers/openai.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/providers/openai_responses.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/ratelimit.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/specs/types.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/timeouts.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/llm/tool_execution_ids.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/local_state.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/mcp/__init__.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/mcp/config.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/mcp/oauth.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/mcp/service.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/mcp/state.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/mcp/transport.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/memory/__init__.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/memory/identity.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/memory/manager.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/memory/manifest.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/memory/markdown.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/memory/models.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/memory/protocol.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/memory/registry.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/models/__init__.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/models/sandbox_terminal_state.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/permissions.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/runtime.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/sandbox/README.md +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/sandbox/__init__.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/sandbox/async_filesystem.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/sandbox/base.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/sandbox/browser.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/sandbox/event_loop.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/sandbox/filesystem.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/sandbox/local.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/sandbox/utils.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/security/__init__.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/security/secrets.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/services/browser.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/services/file_system.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/services/html.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/services/lsp/__init__.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/services/lsp/client.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/services/lsp/config.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/services/lsp/detector.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/services/lsp/diagnostics.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/services/lsp/edits.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/services/lsp/manager.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/services/lsp/registry.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/services/lsp/registry.yaml +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/services/snapshots.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/services/workspace_scan.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/session/__init__.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/session/control.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/session/inmemory.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/session/projection.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/session/recording.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/session/runtime.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/session/store.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/testing/__init__.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/testing/store_conformance.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/tools/param_aliases.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/tools/registry.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/utils/__init__.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/utils/images.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/web/__init__.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/web/assets/fold.js +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/web/assets/player.css +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/web/assets/player.html +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/web/assets/player.js +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/web/bundle.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/web/hosting.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/web/redaction.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/web/server.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/web/singlefile.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/web/theme_css.py +0 -0
- {kolega_code-0.27.0 → kolega_code-0.28.0}/kolega_code/worktrees.py +0 -0
|
@@ -6,6 +6,185 @@ This project uses GitHub Releases for detailed generated release notes. This fil
|
|
|
6
6
|
|
|
7
7
|
## Unreleased
|
|
8
8
|
|
|
9
|
+
## 0.28.0 - 2026-08-11
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- ATIF v1.7 trajectory export: `sessions export --format atif` converts any
|
|
14
|
+
session (including pre-upgrade v1 sessions, with explicit conversion
|
|
15
|
+
warnings) into a validated [ATIF](https://github.com/harbor-framework/harbor/blob/main/rfcs/0001-trajectory-format.md)
|
|
16
|
+
document, and `ask --atif-output FILE` writes one directly when a run ends —
|
|
17
|
+
completed, failed, or cancelled, with or without `--save`. Embedded subagent
|
|
18
|
+
trajectories, per-step token metrics, hydrated oversized tool results, and
|
|
19
|
+
atomic file+assets output; image trajectories require `--output`/a file
|
|
20
|
+
destination for portable relative asset paths.
|
|
21
|
+
|
|
22
|
+
- The interactive CLI and `ask` can now load one installed Python extension at
|
|
23
|
+
launch with `--extension MODULE:FACTORY` and an optional opaque
|
|
24
|
+
`--extension-config PATH`. An extension contributes ordinary prompt and tool
|
|
25
|
+
extensions, binds to each top-level agent generation before its first model
|
|
26
|
+
request, may observe structured LLM trace records (forwarded to every LLM
|
|
27
|
+
client like the usage ledger), and is cleaned up exactly once per generation,
|
|
28
|
+
including on interactive agent rebuilds. Extension contracts are exported
|
|
29
|
+
from the package root, alongside `llm_call_origin`/`helper_origin` and
|
|
30
|
+
`TinkerTraceRecord`; a minimal example package lives in `examples/extension`.
|
|
31
|
+
|
|
32
|
+
- Agent Skills can now be enabled or disabled from Settings,
|
|
33
|
+
`settings.json`, `KOLEGA_CODE_SKILLS`, or `--skills on|off`.
|
|
34
|
+
|
|
35
|
+
- The TUI status usage panel now shows the provider cache hit percentage
|
|
36
|
+
alongside the other usage figures.
|
|
37
|
+
|
|
38
|
+
- After quitting, the CLI prints the exact
|
|
39
|
+
`kolega-code . --resume <id>` command to resume the session that was just
|
|
40
|
+
saved.
|
|
41
|
+
|
|
42
|
+
- Hosts can now continue a restored conversation without inserting a user
|
|
43
|
+
message: `BaseAgent.continue_from_history_stream()` runs the ordinary agent
|
|
44
|
+
loop (compaction, tool execution, usage accounting, and cancellation
|
|
45
|
+
included) and yields the same chunk format. Sessions containing such a
|
|
46
|
+
continuation turn are not loadable by older kolega-code versions.
|
|
47
|
+
|
|
48
|
+
- Oversized terminal command output is now spilled to a file instead of being
|
|
49
|
+
lost: the tool result keeps the bounded head/tail preview plus a path to
|
|
50
|
+
the full output, and the PTY is drained before detaching so a killed
|
|
51
|
+
command keeps its final output.
|
|
52
|
+
|
|
53
|
+
### Changed
|
|
54
|
+
|
|
55
|
+
- Automatic compaction now gets one recovery attempt when the ordinary pass —
|
|
56
|
+
which keeps the six most recent messages verbatim — still leaves a request
|
|
57
|
+
above the model's resolved input budget: a second pass with no retained tail
|
|
58
|
+
(`keep_recent=0`, journaled with trigger `auto_tail_fallback`) folds
|
|
59
|
+
everything before the safe boundary into the summary, still without touching
|
|
60
|
+
the raw history or splitting a tool call from its result. A pass that failed
|
|
61
|
+
at the model or hit the minimum-history guard is not retried. When the paired
|
|
62
|
+
`--context-window-tokens` + `--max-output-tokens` cap is active and the
|
|
63
|
+
request still does not fit, the run now fails closed with
|
|
64
|
+
`LLMContextWindowExceededError` before the primary model is called (recorded
|
|
65
|
+
as the `run.failed` error code) instead of dispatching the oversized request;
|
|
66
|
+
uncapped runs keep the legacy provider-accept-or-reject behavior.
|
|
67
|
+
|
|
68
|
+
- **Breaking:** `kolega-code ask --json` now streams the semantic session-event
|
|
69
|
+
protocol — one v2 event envelope per line (`schema: "kolega.session.event"`,
|
|
70
|
+
stable `id`/`seq`/`timestamp`, agent lineage, typed `payload`) — replacing
|
|
71
|
+
the former `{"kind": "message"|"event"|"summary"}` records with no
|
|
72
|
+
compatibility flag. Live output and the new
|
|
73
|
+
`sessions export --format events-jsonl` return the same records. Every run
|
|
74
|
+
records the full journal (LLM call ids, subagent turns and tool results,
|
|
75
|
+
`context.system`, compaction/rewind provenance, and `run.completed`/
|
|
76
|
+
`run.failed`/`run.cancelled` terminals on every exit path); unsaved runs use
|
|
77
|
+
an in-memory journal and leave no session state. Plain (non-JSON) `ask`
|
|
78
|
+
output is unchanged. Session journals now write schema v2 events (v1
|
|
79
|
+
sessions remain readable; resumed v1 sessions append v2 lines — older
|
|
80
|
+
kolega-code versions will refuse to read those journals rather than
|
|
81
|
+
mis-replaying them).
|
|
82
|
+
|
|
83
|
+
- Tool definitions are now explicit, checked-in artifacts. Every built-in
|
|
84
|
+
tool's model-visible description lives as data beside the prompt assets
|
|
85
|
+
(`kolega_code/agent/prompt_templates/tools/`) and its input schema as a
|
|
86
|
+
literal dict in `kolega_code/agent/tool_definitions.py`; nothing about what
|
|
87
|
+
the model sees is derived from signatures or docstrings anymore, and the
|
|
88
|
+
migration is byte-identical on the wire. `ToolExtension` tools (including
|
|
89
|
+
CLI extensions loaded with `--extension` and MCP tools) now declare an
|
|
90
|
+
explicit `tool_descriptions` entry alongside `tool_schemas`; a tool missing
|
|
91
|
+
either fails at registration with a clear error before any model request.
|
|
92
|
+
|
|
93
|
+
- TUI responsiveness for long sessions is improved: the transcript scrollback
|
|
94
|
+
window is capped at 120 mounted entries (scroll-up still walks the full
|
|
95
|
+
history), flush cadences are unified and paced by event-loop lateness,
|
|
96
|
+
modal inspectors stay on the unpaced base cadence, and the native Tinker
|
|
97
|
+
stack no longer loads at package import time — faster startup and fewer
|
|
98
|
+
event-loop stalls.
|
|
99
|
+
|
|
100
|
+
### Removed
|
|
101
|
+
|
|
102
|
+
- The `tool_definition_from_callable` helper (and the `Args:`-block
|
|
103
|
+
strip/keep rules behind it) is gone, including its `kolega_code` package
|
|
104
|
+
root export: definitions are declared, not derived.
|
|
105
|
+
|
|
106
|
+
### Fixed
|
|
107
|
+
|
|
108
|
+
- A session could be opened in two kolega-code instances at once, interleaving
|
|
109
|
+
duplicate event sequence numbers into the session journal until it became
|
|
110
|
+
unreadable (and `switch_worktree`/`save` failed with "Session event sequence
|
|
111
|
+
gap"). Resuming a session that is already open in another instance is now
|
|
112
|
+
refused with a clear error, journal appends allocate sequence numbers under
|
|
113
|
+
a cross-process lock, and `kolega-code sessions repair <id>` renumbers a
|
|
114
|
+
corrupted journal back into a contiguous sequence.
|
|
115
|
+
|
|
116
|
+
- File tools (`read`, `write`, `edit`, `multi_edit`, `read_image`) now expand
|
|
117
|
+
a `$KOLEGA_SCRATCHPAD` (or `${KOLEGA_SCRATCHPAD}`) reference in path
|
|
118
|
+
arguments to the session scratchpad at the tool-dispatch choke point, so
|
|
119
|
+
the shell spelling no longer creates a literal `$KOLEGA_SCRATCHPAD`
|
|
120
|
+
directory in the workspace.
|
|
121
|
+
|
|
122
|
+
- Runtime model-catalog caches created before input-budget conventions were
|
|
123
|
+
introduced are now ignored safely instead of injecting incomplete model
|
|
124
|
+
specs that fail later with `KeyError: 'input_budget'`. Refreshing a catalog
|
|
125
|
+
rewrites it in the current schema.
|
|
126
|
+
|
|
127
|
+
- Kimi Coding Plan model IDs now match the provider's real wire IDs:
|
|
128
|
+
`k3-256k` (fixed 256K K3 route) and `kimi-for-coding-highspeed` are
|
|
129
|
+
recognized, and the fabricated `k3[1m]` ID is gone (Kimi's 1M context is
|
|
130
|
+
the same `k3` ID, tier-gated). Kimi and Moonshot input budgets treat output
|
|
131
|
+
as a separate allowance (verified by live probes), so the full context
|
|
132
|
+
window is usable as input instead of being cut down by the output cap.
|
|
133
|
+
|
|
134
|
+
- OpenAI and ChatGPT gpt-5.x requests that reproduced reserved Harmony
|
|
135
|
+
control-token spellings as data (for example after a tool result read a
|
|
136
|
+
file containing `<|channel|>`-style tokens) were rejected with
|
|
137
|
+
`APIError: Request blocked`, permanently poisoning the session. The
|
|
138
|
+
spellings are now escaped on the transport copy only — the persisted
|
|
139
|
+
transcript is unchanged — and already-poisoned sessions heal on the next
|
|
140
|
+
request.
|
|
141
|
+
|
|
142
|
+
- Responses-based providers (OpenAI, ChatGPT, DeepSeek) now return multiple
|
|
143
|
+
tool calls per model round instead of one at a time.
|
|
144
|
+
|
|
145
|
+
- After history compaction (automatic or `/compact`) the approved plan and
|
|
146
|
+
the shared task list are re-injected into the model's context as system
|
|
147
|
+
reminders, so the model no longer loses track of them mid-run.
|
|
148
|
+
|
|
149
|
+
- Terminal sessions that end while a backgrounded `&` job still holds the PTY
|
|
150
|
+
are now reported as exited instead of spinning through the whole yield
|
|
151
|
+
window, and naturally exited sessions are hidden from the session listing
|
|
152
|
+
instead of lingering as stale entries.
|
|
153
|
+
|
|
154
|
+
- The shared terminal-tools guidance now warns that `rg -r` means
|
|
155
|
+
`--replace` (recursion is the default), which previously made `rg -rn`
|
|
156
|
+
output look like a redaction layer.
|
|
157
|
+
|
|
158
|
+
## 0.27.1 - 2026-08-10
|
|
159
|
+
|
|
160
|
+
### Added
|
|
161
|
+
|
|
162
|
+
- Thinking Machines models can now be used through either the hosted API or
|
|
163
|
+
the native Tinker `SamplingClient`, with model discovery, settings, usage
|
|
164
|
+
tracking, and connection testing integrated across the CLI and TUI.
|
|
165
|
+
- History compression thresholds can now be configured from Settings,
|
|
166
|
+
`settings.json`, `KOLEGA_CODE_COMPRESSION_THRESHOLD`, or
|
|
167
|
+
`--compression-threshold`.
|
|
168
|
+
- Sub-agent dispatch can now be enabled or disabled for a session from
|
|
169
|
+
Settings, `settings.json`, `KOLEGA_CODE_SUBAGENTS`, or `--subagents on|off`.
|
|
170
|
+
|
|
171
|
+
### Changed
|
|
172
|
+
|
|
173
|
+
- Compression summaries can use up to 8,192 tokens, reducing the risk that
|
|
174
|
+
important context is lost in longer sessions.
|
|
175
|
+
- The bundled OpenRouter catalogue was refreshed from the 2026-08-10 model
|
|
176
|
+
list and weekly rankings. It now includes 260 tool-capable models, including
|
|
177
|
+
featured `deepseek/deepseek-v4-flash-0731`.
|
|
178
|
+
|
|
179
|
+
### Fixed
|
|
180
|
+
|
|
181
|
+
- Provider connection tests now send a system message, improving compatibility
|
|
182
|
+
with models that reject probes containing only a user message.
|
|
183
|
+
|
|
184
|
+
### Security
|
|
185
|
+
|
|
186
|
+
- Updated `h2` to `4.4.1` to address `GHSA-6hr6-w5qg-qmwg`.
|
|
187
|
+
|
|
9
188
|
## 0.27.0 - 2026-08-06
|
|
10
189
|
|
|
11
190
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kolega-code
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.28.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/
|
|
@@ -229,6 +229,7 @@ Classifier: Topic :: Software Development
|
|
|
229
229
|
Classifier: Topic :: Utilities
|
|
230
230
|
Requires-Python: >=3.11
|
|
231
231
|
Requires-Dist: anthropic==0.101.0
|
|
232
|
+
Requires-Dist: atif==1.7.0
|
|
232
233
|
Requires-Dist: beautifulsoup4==4.14.3
|
|
233
234
|
Requires-Dist: cryptography==48.0.1; sys_platform == 'darwin' and platform_machine == 'x86_64'
|
|
234
235
|
Requires-Dist: cryptography==50.0.0; sys_platform != 'darwin' or platform_machine != 'x86_64'
|
|
@@ -276,6 +277,9 @@ Requires-Dist: pytest-xdist==3.8.0; extra == 'dev'
|
|
|
276
277
|
Requires-Dist: pytest==9.0.3; extra == 'dev'
|
|
277
278
|
Requires-Dist: ruff==0.15.12; extra == 'dev'
|
|
278
279
|
Requires-Dist: twine==6.2.0; extra == 'dev'
|
|
280
|
+
Provides-Extra: tinker
|
|
281
|
+
Requires-Dist: tinker-cookbook==0.5.3; extra == 'tinker'
|
|
282
|
+
Requires-Dist: tml-renderers==0.1.0; extra == 'tinker'
|
|
279
283
|
Description-Content-Type: text/markdown
|
|
280
284
|
|
|
281
285
|
# Kolega Code
|
|
@@ -28,9 +28,22 @@ from .config import AgentConfig, ModelConfig, ModelProvider, RateLimitConfig
|
|
|
28
28
|
from .events import AgentConnectionManager
|
|
29
29
|
from .events import AgentEvent, AgentStatus
|
|
30
30
|
|
|
31
|
+
# CLI-selected extensions
|
|
32
|
+
from .extensions import (
|
|
33
|
+
KolegaExtensionBundle,
|
|
34
|
+
KolegaExtensionFactory,
|
|
35
|
+
KolegaExtensionHost,
|
|
36
|
+
KolegaExtensionLoadError,
|
|
37
|
+
)
|
|
38
|
+
|
|
31
39
|
# LLM clients and message models
|
|
32
40
|
from .llm.client import LLMClient
|
|
33
41
|
from .llm.instrumented_client import InstrumentedLLMClient
|
|
42
|
+
from .llm.ledger import LlmCallOrigin, current_llm_call_origin, helper_origin, llm_call_origin
|
|
43
|
+
|
|
44
|
+
# From the dependency-free leaf module: importing .llm.providers.tinker itself
|
|
45
|
+
# loads the optional native stack (tinker-cookbook -> torch) when installed.
|
|
46
|
+
from .llm.providers.tinker_trace import TinkerTraceRecord
|
|
34
47
|
from .llm.models import (
|
|
35
48
|
ImageBlock,
|
|
36
49
|
Message,
|
|
@@ -56,7 +69,7 @@ from .agent.prompt_provider import (
|
|
|
56
69
|
# Tools
|
|
57
70
|
from .agent.tool_backend.base_tool import BaseTool
|
|
58
71
|
from .agent.tools import ToolCollection, ToolCollectionConfig, ToolExtension
|
|
59
|
-
from .tools import Tool, ToolError, ToolPolicy, ToolRegistry
|
|
72
|
+
from .tools import Tool, ToolError, ToolPolicy, ToolRegistry
|
|
60
73
|
|
|
61
74
|
# Host environment services
|
|
62
75
|
from .agent.common import LogMixin
|
|
@@ -102,9 +115,19 @@ __all__ = [
|
|
|
102
115
|
"AgentConnectionManager",
|
|
103
116
|
"AgentEvent",
|
|
104
117
|
"AgentStatus",
|
|
118
|
+
# CLI-selected extensions
|
|
119
|
+
"KolegaExtensionBundle",
|
|
120
|
+
"KolegaExtensionFactory",
|
|
121
|
+
"KolegaExtensionHost",
|
|
122
|
+
"KolegaExtensionLoadError",
|
|
105
123
|
# LLM
|
|
106
124
|
"LLMClient",
|
|
107
125
|
"InstrumentedLLMClient",
|
|
126
|
+
"LlmCallOrigin",
|
|
127
|
+
"current_llm_call_origin",
|
|
128
|
+
"helper_origin",
|
|
129
|
+
"llm_call_origin",
|
|
130
|
+
"TinkerTraceRecord",
|
|
108
131
|
"ImageBlock",
|
|
109
132
|
"Message",
|
|
110
133
|
"MessageHistory",
|
|
@@ -130,7 +153,6 @@ __all__ = [
|
|
|
130
153
|
"ToolError",
|
|
131
154
|
"ToolPolicy",
|
|
132
155
|
"ToolRegistry",
|
|
133
|
-
"tool_definition_from_callable",
|
|
134
156
|
# Services
|
|
135
157
|
"LogMixin",
|
|
136
158
|
"BrowserManager",
|
|
@@ -151,4 +173,4 @@ __all__ = [
|
|
|
151
173
|
"parse_git_status_output",
|
|
152
174
|
]
|
|
153
175
|
|
|
154
|
-
__version__ = "0.
|
|
176
|
+
__version__ = "0.28.0"
|
|
@@ -14,11 +14,11 @@
|
|
|
14
14
|
},
|
|
15
15
|
{
|
|
16
16
|
"path": "skills/deep-research/references/gigacode-workflow.md",
|
|
17
|
-
"sha256": "
|
|
17
|
+
"sha256": "dbbe41f577bd96e2d6658f353b2cffd1e7971fbba255b803f781e86c3a6d5f1b"
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
20
|
"path": "skills/deep-research/scripts/deep-research.workflow",
|
|
21
|
-
"sha256": "
|
|
21
|
+
"sha256": "3928a54b360fbee4a942f2b0172ad7607a7350500f9ea5ad413a9c2dcbce2ed7"
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
24
|
"path": "skills/deep-research/scripts/materialize_report.py",
|
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
},
|
|
139
139
|
{
|
|
140
140
|
"path": "skills/pptx/references/operations.md",
|
|
141
|
-
"sha256": "
|
|
141
|
+
"sha256": "7e65b53b63b25d6c0a84598946fcbf98c341f2d32ce356801a011ffa408b01bf"
|
|
142
142
|
},
|
|
143
143
|
{
|
|
144
144
|
"path": "skills/pptx/requirements.txt",
|
|
@@ -146,11 +146,11 @@
|
|
|
146
146
|
},
|
|
147
147
|
{
|
|
148
148
|
"path": "skills/pptx/scripts/pptx_tool.py",
|
|
149
|
-
"sha256": "
|
|
149
|
+
"sha256": "71a90eb26a581e0d7f06e5b1765b4ab26cc494085d2b8ed4a8ec219a3282799e"
|
|
150
150
|
},
|
|
151
151
|
{
|
|
152
152
|
"path": "skills/pptx/scripts/smoke_test.py",
|
|
153
|
-
"sha256": "
|
|
153
|
+
"sha256": "6b52cc0be763dcf3b7d1ab5e4418f56549d858cc6415fce041b1692d078bc26d"
|
|
154
154
|
},
|
|
155
155
|
{
|
|
156
156
|
"path": "skills/review/SKILL.md",
|
|
@@ -217,8 +217,8 @@
|
|
|
217
217
|
"xlsx"
|
|
218
218
|
],
|
|
219
219
|
"source": {
|
|
220
|
-
"commit": "
|
|
220
|
+
"commit": "2de7491964d92e3dc78f13290d875c800ac6e22d",
|
|
221
221
|
"repository": "https://github.com/kolega-ai/kolega-skills",
|
|
222
|
-
"tag": "v0.3.
|
|
222
|
+
"tag": "v0.3.2"
|
|
223
223
|
}
|
|
224
224
|
}
|
|
@@ -192,7 +192,7 @@ The workflow derives every path deterministically:
|
|
|
192
192
|
|
|
193
193
|
Scouts write their dossier with `exec_command` and return only a compact record
|
|
194
194
|
plus `dossier_path`. Verification, coverage, drafting, and audit receive paths and
|
|
195
|
-
read the depth they need with `
|
|
195
|
+
read the depth they need with `read` (offset/limit for sections). This is what keeps the
|
|
196
196
|
handoffs compact without starving later stages of evidence.
|
|
197
197
|
|
|
198
198
|
The scratchpad is additive and best-effort. When `workspace` is omitted, a worker
|
|
@@ -1335,9 +1335,10 @@ WRITE_INSTRUCTIONS = (
|
|
|
1335
1335
|
)
|
|
1336
1336
|
|
|
1337
1337
|
READ_INSTRUCTIONS = (
|
|
1338
|
-
"Read the referenced files with
|
|
1339
|
-
"using the absolute paths given. If a file is missing or
|
|
1340
|
-
"the inline records below and note the
|
|
1338
|
+
"Read the referenced files with the read tool (using offset/limit for "
|
|
1339
|
+
"sections) using the absolute paths given. If a file is missing or "
|
|
1340
|
+
"unreadable, continue from the inline records below and note the "
|
|
1341
|
+
"degradation in your gaps."
|
|
1341
1342
|
)
|
|
1342
1343
|
|
|
1343
1344
|
|
|
@@ -149,10 +149,12 @@ A create job has this top-level shape:
|
|
|
149
149
|
}
|
|
150
150
|
```
|
|
151
151
|
|
|
152
|
-
`template` is optional. Without one, `python-pptx`'s
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
152
|
+
`template` is optional. Without one, `python-pptx`'s 10 × 7.5-inch (4:3) default presentation is
|
|
153
|
+
used. The schema does not resize a presentation; use a template with the required slide size
|
|
154
|
+
before authoring absolute-inch geometry for another aspect ratio. With a template, its masters,
|
|
155
|
+
layouts, and slide size are retained. Existing template slides are removed by default; set
|
|
156
|
+
`keep_template_slides` to `true` to retain them. Template removal uses the same version-aware,
|
|
157
|
+
reopen-verified relationship adapter as edit operations.
|
|
156
158
|
|
|
157
159
|
A slide may select a `layout` with either `{"name": "Exact Layout Name"}` or `{"index": 1}`.
|
|
158
160
|
If `layout` is omitted, layout index 1 is used and must exist. Duplicate layout names are
|
|
@@ -198,7 +200,9 @@ Supported actions:
|
|
|
198
200
|
- `replace_image`: select one picture and provide `path`. The replacement must use the same media
|
|
199
201
|
content type. Geometry/crop and unselected picture relationships remain unchanged; the selected
|
|
200
202
|
picture receives a relationship to the validated replacement image.
|
|
201
|
-
- `set_notes`: select a slide and provide plain `text`.
|
|
203
|
+
- `set_notes`: select a slide and provide plain `text`. Written decks include and verify the
|
|
204
|
+
presentation-level notes-master owner reference required for PowerPoint and Keynote
|
|
205
|
+
interoperability.
|
|
202
206
|
- `remove_slide`: select exactly one slide.
|
|
203
207
|
- `reorder_slides`: provide `slide_ids` containing every current slide ID exactly once.
|
|
204
208
|
|
|
@@ -263,10 +267,13 @@ Elements:
|
|
|
263
267
|
|
|
264
268
|
Chart types are `column`, `bar`, `line`, `line_markers`, `pie`, `doughnut`, `area`, `scatter`,
|
|
265
269
|
and `scatter_lines`. Add `title` and `has_legend` as needed. Tables and charts remain editable.
|
|
266
|
-
Notes are plain text only.
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
+
Notes are plain text only. The tool repairs and validates the notes-master relationship graph that
|
|
271
|
+
`python-pptx` 1.x can otherwise serialize without its presentation-level owner reference, which
|
|
272
|
+
some consumers including Keynote reject. Resource files are bounded and validated before use.
|
|
273
|
+
Images are limited to 50 MiB compressed, 20,000 pixels per dimension, 50 million pixels, one
|
|
274
|
+
frame, and an estimated 200 MiB decoded raster. Each image path is read once into a bounded
|
|
275
|
+
immutable byte snapshot; Pillow validation, full decode, and `python-pptx` ingestion all consume
|
|
276
|
+
that same snapshot.
|
|
270
277
|
|
|
271
278
|
## LibreOffice prerequisite
|
|
272
279
|
|
|
@@ -95,6 +95,7 @@ P_NS = "http://schemas.openxmlformats.org/presentationml/2006/main"
|
|
|
95
95
|
A_NS = "http://schemas.openxmlformats.org/drawingml/2006/main"
|
|
96
96
|
R_NS = "http://schemas.openxmlformats.org/officeDocument/2006/relationships"
|
|
97
97
|
NOTES_REL = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide"
|
|
98
|
+
NOTES_MASTER_REL = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesMaster"
|
|
98
99
|
SLIDE_REL = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide"
|
|
99
100
|
OFFICE_DOCUMENT_REL = (
|
|
100
101
|
"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"
|
|
@@ -814,6 +815,92 @@ class OoxmlAdapter:
|
|
|
814
815
|
for slide_id in ordered_ids:
|
|
815
816
|
slide_id_list.append(by_id[slide_id])
|
|
816
817
|
|
|
818
|
+
@classmethod
|
|
819
|
+
def ensure_notes_master_reference(cls, presentation: Any) -> None:
|
|
820
|
+
"""Repair python-pptx's missing presentation-level notes-master owner reference."""
|
|
821
|
+
|
|
822
|
+
cls.require_supported_version()
|
|
823
|
+
relationships = [
|
|
824
|
+
(rel_id, relationship)
|
|
825
|
+
for rel_id, relationship in presentation.part.rels.items()
|
|
826
|
+
if relationship.reltype == NOTES_MASTER_REL
|
|
827
|
+
]
|
|
828
|
+
root = presentation.part._element
|
|
829
|
+
master_lists = root.findall(f"{{{P_NS}}}notesMasterIdLst")
|
|
830
|
+
if not relationships:
|
|
831
|
+
if master_lists:
|
|
832
|
+
raise ToolError(
|
|
833
|
+
"post_write_validation",
|
|
834
|
+
"presentation has a notes-master owner reference without a relationship",
|
|
835
|
+
)
|
|
836
|
+
return
|
|
837
|
+
if len(relationships) != 1 or relationships[0][1].is_external:
|
|
838
|
+
raise ToolError(
|
|
839
|
+
"post_write_validation",
|
|
840
|
+
"presentation must contain exactly one internal notes-master relationship",
|
|
841
|
+
{"relationships": len(relationships)},
|
|
842
|
+
)
|
|
843
|
+
relationship_id = relationships[0][0]
|
|
844
|
+
if len(master_lists) > 1:
|
|
845
|
+
raise ToolError(
|
|
846
|
+
"post_write_validation",
|
|
847
|
+
"presentation contains duplicate notes-master owner-reference lists",
|
|
848
|
+
)
|
|
849
|
+
if master_lists:
|
|
850
|
+
master_ids = master_lists[0].findall(f"{{{P_NS}}}notesMasterId")
|
|
851
|
+
if (
|
|
852
|
+
len(master_ids) != 1
|
|
853
|
+
or len(master_lists[0]) != 1
|
|
854
|
+
or master_ids[0].get(f"{{{R_NS}}}id") != relationship_id
|
|
855
|
+
):
|
|
856
|
+
raise ToolError(
|
|
857
|
+
"post_write_validation",
|
|
858
|
+
"presentation notes-master owner reference conflicts with its relationship",
|
|
859
|
+
{"relationship": relationship_id},
|
|
860
|
+
)
|
|
861
|
+
return
|
|
862
|
+
|
|
863
|
+
master_list = etree.Element(f"{{{P_NS}}}notesMasterIdLst")
|
|
864
|
+
master_id = etree.SubElement(master_list, f"{{{P_NS}}}notesMasterId")
|
|
865
|
+
master_id.set(f"{{{R_NS}}}id", relationship_id)
|
|
866
|
+
children = list(root)
|
|
867
|
+
slide_master_tag = f"{{{P_NS}}}sldMasterIdLst"
|
|
868
|
+
successor_tags = {
|
|
869
|
+
f"{{{P_NS}}}handoutMasterIdLst",
|
|
870
|
+
f"{{{P_NS}}}sldIdLst",
|
|
871
|
+
f"{{{P_NS}}}sldSz",
|
|
872
|
+
f"{{{P_NS}}}notesSz",
|
|
873
|
+
f"{{{P_NS}}}smartTags",
|
|
874
|
+
f"{{{P_NS}}}embeddedFontLst",
|
|
875
|
+
f"{{{P_NS}}}custShowLst",
|
|
876
|
+
f"{{{P_NS}}}photoAlbum",
|
|
877
|
+
f"{{{P_NS}}}custDataLst",
|
|
878
|
+
f"{{{P_NS}}}kinsoku",
|
|
879
|
+
f"{{{P_NS}}}defaultTextStyle",
|
|
880
|
+
f"{{{P_NS}}}modifyVerifier",
|
|
881
|
+
f"{{{P_NS}}}extLst",
|
|
882
|
+
}
|
|
883
|
+
slide_master_indexes = [
|
|
884
|
+
index for index, child in enumerate(children) if child.tag == slide_master_tag
|
|
885
|
+
]
|
|
886
|
+
if len(slide_master_indexes) > 1:
|
|
887
|
+
raise ToolError(
|
|
888
|
+
"post_write_validation",
|
|
889
|
+
"presentation contains duplicate slide-master ID lists",
|
|
890
|
+
)
|
|
891
|
+
insert_at = slide_master_indexes[0] + 1 if slide_master_indexes else 0
|
|
892
|
+
successor_indexes = [
|
|
893
|
+
index for index, child in enumerate(children) if child.tag in successor_tags
|
|
894
|
+
]
|
|
895
|
+
if successor_indexes and min(successor_indexes) < insert_at:
|
|
896
|
+
raise ToolError(
|
|
897
|
+
"post_write_validation",
|
|
898
|
+
"presentation child order cannot accept a notes-master owner reference",
|
|
899
|
+
)
|
|
900
|
+
if not slide_master_indexes and successor_indexes:
|
|
901
|
+
insert_at = min(successor_indexes)
|
|
902
|
+
root.insert(insert_at, master_list)
|
|
903
|
+
|
|
817
904
|
@classmethod
|
|
818
905
|
def paragraph_has_field(cls, paragraph: Any) -> bool:
|
|
819
906
|
cls.require_supported_version()
|
|
@@ -944,9 +1031,84 @@ def _open_presentation(path: Path, category: str = "bad_input") -> Any:
|
|
|
944
1031
|
raise ToolError(category, "python-pptx could not reopen the presentation") from exc
|
|
945
1032
|
|
|
946
1033
|
|
|
1034
|
+
def _validate_notes_master_reference(path: Path) -> None:
|
|
1035
|
+
try:
|
|
1036
|
+
with zipfile.ZipFile(path) as archive:
|
|
1037
|
+
presentation = _safe_xml(archive.read(PRESENTATION_PART), PRESENTATION_PART)
|
|
1038
|
+
relationships_root = _safe_xml(
|
|
1039
|
+
archive.read(PRESENTATION_RELS),
|
|
1040
|
+
PRESENTATION_RELS,
|
|
1041
|
+
)
|
|
1042
|
+
except (OSError, RuntimeError, zipfile.BadZipFile, KeyError) as exc:
|
|
1043
|
+
raise ToolError(
|
|
1044
|
+
"post_write_validation",
|
|
1045
|
+
"written PPTX notes-master graph could not be inspected",
|
|
1046
|
+
) from exc
|
|
1047
|
+
|
|
1048
|
+
relationships = [
|
|
1049
|
+
relationship
|
|
1050
|
+
for relationship in relationships_root.findall(f"{{{REL_NS}}}Relationship")
|
|
1051
|
+
if relationship.get("Type") == NOTES_MASTER_REL
|
|
1052
|
+
]
|
|
1053
|
+
master_lists = presentation.findall(f"{{{P_NS}}}notesMasterIdLst")
|
|
1054
|
+
if not relationships:
|
|
1055
|
+
if master_lists:
|
|
1056
|
+
raise ToolError(
|
|
1057
|
+
"post_write_validation",
|
|
1058
|
+
"written PPTX has a notes-master owner reference without a relationship",
|
|
1059
|
+
)
|
|
1060
|
+
return
|
|
1061
|
+
if len(relationships) != 1 or relationships[0].get("TargetMode") == "External":
|
|
1062
|
+
raise ToolError(
|
|
1063
|
+
"post_write_validation",
|
|
1064
|
+
"written PPTX must contain exactly one internal notes-master relationship",
|
|
1065
|
+
{"relationships": len(relationships)},
|
|
1066
|
+
)
|
|
1067
|
+
if len(master_lists) != 1:
|
|
1068
|
+
raise ToolError(
|
|
1069
|
+
"post_write_validation",
|
|
1070
|
+
"written PPTX is missing its notes-master owner reference",
|
|
1071
|
+
{"owner_reference_lists": len(master_lists)},
|
|
1072
|
+
)
|
|
1073
|
+
master_ids = master_lists[0].findall(f"{{{P_NS}}}notesMasterId")
|
|
1074
|
+
relationship_id = relationships[0].get("Id")
|
|
1075
|
+
if (
|
|
1076
|
+
len(master_ids) != 1
|
|
1077
|
+
or len(master_lists[0]) != 1
|
|
1078
|
+
or master_ids[0].get(f"{{{R_NS}}}id") != relationship_id
|
|
1079
|
+
):
|
|
1080
|
+
raise ToolError(
|
|
1081
|
+
"post_write_validation",
|
|
1082
|
+
"written PPTX notes-master owner reference does not match its relationship",
|
|
1083
|
+
{"relationship": relationship_id},
|
|
1084
|
+
)
|
|
1085
|
+
|
|
1086
|
+
children = list(presentation)
|
|
1087
|
+
notes_index = children.index(master_lists[0])
|
|
1088
|
+
slide_master_indexes = [
|
|
1089
|
+
index for index, child in enumerate(children) if child.tag == f"{{{P_NS}}}sldMasterIdLst"
|
|
1090
|
+
]
|
|
1091
|
+
successor_indexes = [
|
|
1092
|
+
index
|
|
1093
|
+
for index, child in enumerate(children)
|
|
1094
|
+
if child.tag in {f"{{{P_NS}}}handoutMasterIdLst", f"{{{P_NS}}}sldIdLst"}
|
|
1095
|
+
]
|
|
1096
|
+
if (
|
|
1097
|
+
slide_master_indexes
|
|
1098
|
+
and notes_index <= max(slide_master_indexes)
|
|
1099
|
+
or successor_indexes
|
|
1100
|
+
and notes_index >= min(successor_indexes)
|
|
1101
|
+
):
|
|
1102
|
+
raise ToolError(
|
|
1103
|
+
"post_write_validation",
|
|
1104
|
+
"written PPTX notes-master owner reference is in an invalid presentation order",
|
|
1105
|
+
)
|
|
1106
|
+
|
|
1107
|
+
|
|
947
1108
|
def _validate_pptx_output(path: Path, expected_ids: list[int]) -> PackageReport:
|
|
948
1109
|
try:
|
|
949
1110
|
report = preflight_pptx(path)
|
|
1111
|
+
_validate_notes_master_reference(path)
|
|
950
1112
|
reopened = _open_presentation(path, "post_write_validation")
|
|
951
1113
|
except ToolError as exc:
|
|
952
1114
|
if exc.category in {"bad_input", "resource_limit", "unsupported_operation"}:
|
|
@@ -979,6 +1141,7 @@ def _checkpoint_graph_mutation(
|
|
|
979
1141
|
if set(retained) != set(before_ids) & set(expected_ids):
|
|
980
1142
|
raise ToolError("post_write_validation", "retained slide ID calculation failed")
|
|
981
1143
|
path = checkpoint_dir / f"graph-{ordinal}.pptx"
|
|
1144
|
+
OoxmlAdapter.ensure_notes_master_reference(presentation)
|
|
982
1145
|
try:
|
|
983
1146
|
presentation.save(str(path))
|
|
984
1147
|
except Exception as exc:
|
|
@@ -2341,6 +2504,7 @@ def _save_atomic_presentation(
|
|
|
2341
2504
|
temporary = _temporary_sibling(destination, ".pptx")
|
|
2342
2505
|
try:
|
|
2343
2506
|
_enforce_presentation_limits(presentation)
|
|
2507
|
+
OoxmlAdapter.ensure_notes_master_reference(presentation)
|
|
2344
2508
|
try:
|
|
2345
2509
|
presentation.save(str(temporary))
|
|
2346
2510
|
except Exception as exc:
|