kolega-code 0.8.2__tar.gz → 0.8.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- kolega_code-0.8.4/.githooks/pre-commit +4 -0
- kolega_code-0.8.4/.github/ISSUE_TEMPLATE/bug_report.yml +84 -0
- kolega_code-0.8.4/.github/ISSUE_TEMPLATE/config.yml +8 -0
- kolega_code-0.8.4/.github/ISSUE_TEMPLATE/feature_request.yml +46 -0
- kolega_code-0.8.4/.github/workflows/ci.yml +131 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/.github/workflows/docs.yml +5 -4
- kolega_code-0.8.4/.github/workflows/release.yml +205 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/.gitignore +3 -0
- kolega_code-0.8.4/.pre-commit-config.yaml +17 -0
- kolega_code-0.8.4/CHANGELOG.md +77 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/CONTRIBUTING.md +43 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4}/PKG-INFO +20 -1
- {kolega_code-0.8.2 → kolega_code-0.8.4}/README.md +11 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/RELEASING.md +38 -6
- kolega_code-0.8.4/docs/src/assets/coverage.svg +1 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/tui/composer.md +9 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/tui/slash-commands.md +2 -2
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/__init__.py +1 -1
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/__init__.py +1 -1
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/baseagent.py +2 -5
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/conversation.py +2 -5
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/orchestration/budget.py +1 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/orchestration/executor.py +61 -10
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/planningagent.py +1 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/system/agents/browser.md.j2 +2 -2
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/system/agents/investigation.md.j2 +1 -1
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/system/includes/frontend_guidance.md +0 -1
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/system/includes/starter_templates/expo.md +4 -4
- kolega_code-0.8.4/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +3 -0
- kolega_code-0.8.4/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +3 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/system/includes/starter_templates/react_vite_shadcdn.md +3 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompts.py +1 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/agent_tool.py +1 -2
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/base_tool.py +0 -1
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/browser_tool.py +3 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/create_file_tool.py +1 -1
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/glob_tool.py +3 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/list_directory_tool.py +7 -8
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/read_image_tool.py +1 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/replace_entire_file_tool.py +1 -1
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/search_and_replace_tool.py +2 -2
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/search_backends/__init__.py +2 -5
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/search_backends/duckduckgo.py +1 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/search_backends/firecrawl.py +1 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/search_backends/tavily.py +1 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/search_codebase_tool.py +26 -19
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/terminal_tool.py +0 -1
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/web_fetch_tool.py +1 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/web_search_tool.py +1 -2
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/auth/chatgpt_oauth.py +1 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/app.py +158 -41
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/clipboard_image.py +1 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/config.py +4 -12
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/main.py +36 -7
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/messages.py +2 -7
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/session_store.py +5 -5
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/settings.py +20 -14
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/skills.py +1 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/slash_commands.py +11 -5
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/tui/agent_runtime.py +11 -4
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/tui/command_handlers.py +11 -17
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/tui/settings_panel.py +3 -1
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/tui/state.py +2 -0
- kolega_code-0.8.4/kolega_code/cli/tui/styles.tcss +342 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/tui/sub_agent_screen.py +2 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/tui/transcript.py +15 -11
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/tui/widgets.py +111 -10
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/updater.py +1 -4
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/events.py +3 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/llm/client.py +9 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/llm/exceptions.py +10 -31
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/llm/models.py +0 -1
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/llm/providers/anthropic.py +2 -2
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/llm/providers/openai.py +0 -1
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/llm/providers/responses_common.py +1 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/llm/specs.py +49 -8
- kolega_code-0.8.4/kolega_code/local_state.py +38 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/models/sandbox_terminal_state.py +1 -2
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/permissions.py +4 -4
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/sandbox/async_filesystem.py +7 -10
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/sandbox/base.py +3 -1
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/sandbox/event_loop.py +0 -1
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/sandbox/filesystem.py +6 -8
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/sandbox/local.py +3 -1
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/sandbox/serializer.py +1 -1
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/sandbox/utils.py +17 -13
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/services/browser.py +0 -1
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/services/terminal.py +1 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/utils/images.py +2 -6
- {kolega_code-0.8.2 → kolega_code-0.8.4}/pyproject.toml +10 -1
- {kolega_code-0.8.2 → kolega_code-0.8.4}/run_tests.sh +13 -0
- kolega_code-0.8.4/scripts/check-dev-hooks.sh +18 -0
- kolega_code-0.8.4/scripts/setup-dev.sh +7 -0
- kolega_code-0.8.4/tests/agent/conftest.py +50 -0
- kolega_code-0.8.4/tests/agent/llm/_token_counting_utils.py +71 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/llm/test_anthropic_token_counting.py +64 -119
- kolega_code-0.8.4/tests/agent/llm/test_billing_openai_cache.py +74 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/llm/test_chatgpt_live.py +1 -1
- kolega_code-0.8.4/tests/agent/llm/test_chatgpt_oauth_auth_config.py +86 -0
- kolega_code-0.8.4/tests/agent/llm/test_chatgpt_oauth_conversion.py +200 -0
- kolega_code-0.8.4/tests/agent/llm/test_chatgpt_oauth_provider.py +2 -0
- kolega_code-0.8.4/tests/agent/llm/test_chatgpt_oauth_provider_generate.py +135 -0
- kolega_code-0.8.4/tests/agent/llm/test_chatgpt_oauth_streaming.py +273 -0
- kolega_code-0.8.4/tests/agent/llm/test_client.py +2 -0
- kolega_code-0.8.4/tests/agent/llm/test_client_live.py +338 -0
- kolega_code-0.8.4/tests/agent/llm/test_client_runtime.py +171 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/llm/test_dashscope_mapping.py +8 -8
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/llm/test_google_tool_signature_live.py +28 -8
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/llm/test_instrumented_client.py +2 -151
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/llm/test_instrumented_client_integration.py +6 -6
- kolega_code-0.8.4/tests/agent/llm/test_instrumented_client_stream.py +165 -0
- kolega_code-0.8.4/tests/agent/llm/test_langfuse_normalization.py +73 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/llm/test_live_providers.py +4 -2
- kolega_code-0.8.4/tests/agent/llm/test_message_conversion.py +187 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/llm/test_openai_cached_tokens.py +9 -12
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/llm/test_openai_cached_tokens_stream.py +9 -12
- kolega_code-0.8.4/tests/agent/llm/test_openai_message_conversion.py +151 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/llm/test_openai_responses_provider.py +3 -1
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/llm/test_openai_token_counting.py +35 -88
- kolega_code-0.8.4/tests/agent/llm/test_provider_usage_mapping.py +284 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/llm/test_thinking_effort.py +10 -2
- {kolega_code-0.8.2/kolega_code/agent/orchestration/tests → kolega_code-0.8.4/tests/agent/orchestration}/test_orchestration.py +3 -16
- kolega_code-0.8.4/tests/agent/services/test_browser.py +2 -0
- kolega_code-0.8.2/kolega_code/agent/tests/services/test_browser.py → kolega_code-0.8.4/tests/agent/services/test_browser_console_logs.py +13 -146
- kolega_code-0.8.4/tests/agent/services/test_browser_content.py +94 -0
- kolega_code-0.8.4/tests/agent/services/test_browser_integration.py +120 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/services/test_browser_parity.py +1 -1
- kolega_code-0.8.4/tests/agent/services/test_file_system.py +2 -0
- kolega_code-0.8.4/tests/agent/services/test_file_system_integration.py +127 -0
- kolega_code-0.8.4/tests/agent/services/test_file_system_path.py +206 -0
- kolega_code-0.8.2/kolega_code/agent/tests/services/test_file_system.py → kolega_code-0.8.4/tests/agent/services/test_local_file_system.py +1 -321
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/services/test_terminal_state_serializer.py +1 -2
- kolega_code-0.8.4/tests/agent/test_base_agent.py +2 -0
- kolega_code-0.8.4/tests/agent/test_base_agent_anthropic_history_validation.py +119 -0
- kolega_code-0.8.4/tests/agent/test_base_agent_compaction.py +215 -0
- kolega_code-0.8.4/tests/agent/test_base_agent_effective_history.py +173 -0
- kolega_code-0.8.4/tests/agent/test_base_agent_history_serialization.py +238 -0
- kolega_code-0.8.4/tests/agent/test_base_agent_prompt_context.py +78 -0
- kolega_code-0.8.4/tests/agent/test_base_agent_role_overrides.py +91 -0
- kolega_code-0.8.4/tests/agent/test_base_agent_runtime.py +205 -0
- kolega_code-0.8.4/tests/agent/test_base_agent_tool_call_repair.py +861 -0
- kolega_code-0.8.4/tests/agent/test_base_agent_tool_call_repair_integration.py +527 -0
- kolega_code-0.8.4/tests/agent/test_base_agent_tool_execution.py +84 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_coder_attachments.py +5 -14
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_commands.py +1 -1
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_compaction_tui_events.py +1 -3
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_duplicate_tool_results.py +10 -14
- kolega_code-0.8.2/kolega_code/agent/tests/test_image_compat.py → kolega_code-0.8.4/tests/agent/test_history_adapter_thinking.py +1 -200
- kolega_code-0.8.4/tests/agent/test_history_image_blocks.py +220 -0
- kolega_code-0.8.4/tests/agent/test_image_compat.py +2 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_permissions.py +21 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_planning_agent.py +4 -13
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_prompt_provider.py +1 -1
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_read_image_tool.py +3 -9
- kolega_code-0.8.4/tests/agent/test_tool_collection_builtin_dispatch.py +229 -0
- kolega_code-0.8.4/tests/agent/test_tool_collection_config.py +243 -0
- kolega_code-0.8.4/tests/agent/test_tool_collection_extensions.py +161 -0
- kolega_code-0.8.4/tests/agent/test_tool_collection_initialization.py +186 -0
- kolega_code-0.8.4/tests/agent/test_tool_collection_memory.py +193 -0
- kolega_code-0.8.4/tests/agent/test_tools.py +2 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/tool_backend/test_agent_tool.py +5 -4
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/tool_backend/test_base_tool.py +4 -1
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/tool_backend/test_browser_tool.py +1 -1
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/tool_backend/test_build_tool.py +0 -2
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/tool_backend/test_create_file_tool.py +4 -1
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/tool_backend/test_glob_tool.py +4 -1
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/tool_backend/test_glob_tool_sandbox_parity.py +7 -6
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/tool_backend/test_read_file_tool.py +4 -1
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/tool_backend/test_replace_entire_file_tool.py +4 -1
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/tool_backend/test_replace_lines_tool.py +4 -1
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/tool_backend/test_search_codebase_tool.py +4 -2
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/tool_backend/test_terminal_tool.py +5 -4
- kolega_code-0.8.4/tests/agent/tool_backend/test_think_hard_streaming.py +2 -0
- kolega_code-0.8.2/kolega_code/agent/tests/tool_backend/test_think_hard_streaming.py → kolega_code-0.8.4/tests/agent/tool_backend/test_think_hard_streaming_content.py +1 -197
- kolega_code-0.8.4/tests/agent/tool_backend/test_think_hard_streaming_errors.py +165 -0
- kolega_code-0.8.4/tests/agent/tool_backend/test_think_hard_streaming_updates.py +238 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/tool_backend/test_web_fetch_tool.py +82 -62
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/tool_backend/test_workflow_tool.py +4 -7
- {kolega_code-0.8.2/kolega_code/auth/tests → kolega_code-0.8.4/tests/auth}/test_chatgpt_oauth.py +1 -1
- {kolega_code-0.8.2/kolega_code/auth/tests → kolega_code-0.8.4/tests/auth}/test_tokens.py +1 -3
- kolega_code-0.8.4/tests/cli/_app_test_utils.py +227 -0
- kolega_code-0.8.4/tests/cli/test_app.py +2 -0
- kolega_code-0.8.4/tests/cli/test_app_agent_wiring.py +190 -0
- kolega_code-0.8.4/tests/cli/test_app_bootstrap_settings.py +798 -0
- {kolega_code-0.8.2/kolega_code/cli/tests → kolega_code-0.8.4/tests/cli}/test_app_compaction_restore.py +5 -11
- kolega_code-0.8.4/tests/cli/test_app_composer_commands.py +1 -0
- kolega_code-0.8.4/tests/cli/test_app_composer_input.py +494 -0
- kolega_code-0.8.4/tests/cli/test_app_conversation_rendering.py +1 -0
- kolega_code-0.8.4/tests/cli/test_app_focus_behavior.py +298 -0
- {kolega_code-0.8.2/kolega_code/cli/tests → kolega_code-0.8.4/tests/cli}/test_app_image_vision_warning.py +4 -12
- kolega_code-0.8.4/tests/cli/test_app_mention_dropdown.py +196 -0
- kolega_code-0.8.4/tests/cli/test_app_misc_commands.py +321 -0
- kolega_code-0.8.4/tests/cli/test_app_model_effort_commands.py +601 -0
- {kolega_code-0.8.2/kolega_code/cli/tests → kolega_code-0.8.4/tests/cli}/test_app_model_switch_vision.py +5 -9
- kolega_code-0.8.4/tests/cli/test_app_modes_planning.py +1 -0
- kolega_code-0.8.4/tests/cli/test_app_navigation_commands.py +251 -0
- kolega_code-0.8.4/tests/cli/test_app_permission_prompts.py +262 -0
- kolega_code-0.8.4/tests/cli/test_app_persistence_history.py +681 -0
- kolega_code-0.8.4/tests/cli/test_app_plan_lifecycle.py +529 -0
- kolega_code-0.8.4/tests/cli/test_app_planning_questions.py +442 -0
- kolega_code-0.8.4/tests/cli/test_app_planning_restore.py +210 -0
- kolega_code-0.8.4/tests/cli/test_app_rendering_entries.py +376 -0
- kolega_code-0.8.4/tests/cli/test_app_rendering_errors.py +298 -0
- kolega_code-0.8.4/tests/cli/test_app_rendering_scroll.py +277 -0
- kolega_code-0.8.4/tests/cli/test_app_rendering_selection.py +556 -0
- kolega_code-0.8.4/tests/cli/test_app_rendering_status.py +449 -0
- kolega_code-0.8.4/tests/cli/test_app_rendering_streaming.py +311 -0
- kolega_code-0.8.4/tests/cli/test_app_rendering_terminal_logs.py +456 -0
- kolega_code-0.8.4/tests/cli/test_app_rendering_tools.py +587 -0
- kolega_code-0.8.4/tests/cli/test_app_skill_commands.py +168 -0
- kolega_code-0.8.4/tests/cli/test_app_slash_dropdown.py +166 -0
- kolega_code-0.8.4/tests/cli/test_app_status_modes.py +627 -0
- kolega_code-0.8.4/tests/cli/test_app_sub_agents_workflows.py +761 -0
- {kolega_code-0.8.2/kolega_code/cli/tests → kolega_code-0.8.4/tests/cli}/test_cli_config.py +3 -9
- {kolega_code-0.8.2/kolega_code/cli/tests → kolega_code-0.8.4/tests/cli}/test_clipboard_image.py +2 -4
- {kolega_code-0.8.2/kolega_code/cli/tests → kolega_code-0.8.4/tests/cli}/test_main.py +62 -11
- {kolega_code-0.8.2/kolega_code/cli/tests → kolega_code-0.8.4/tests/cli}/test_mentions.py +3 -1
- {kolega_code-0.8.2/kolega_code/cli/tests → kolega_code-0.8.4/tests/cli}/test_session_store.py +19 -0
- {kolega_code-0.8.2/kolega_code/cli/tests → kolega_code-0.8.4/tests/cli}/test_settings.py +29 -0
- {kolega_code-0.8.2/kolega_code/cli/tests → kolega_code-0.8.4/tests/cli}/test_skills.py +3 -1
- {kolega_code-0.8.2/kolega_code/cli/tests → kolega_code-0.8.4/tests/cli}/test_slash_commands.py +2 -2
- {kolega_code-0.8.2/kolega_code/cli/tests → kolega_code-0.8.4/tests/cli}/test_themes.py +2 -1
- kolega_code-0.8.4/tests/cli/test_tui_stylesheet.py +81 -0
- {kolega_code-0.8.2/kolega_code/cli/tests → kolega_code-0.8.4/tests/cli}/test_updater.py +9 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4/tests}/conftest.py +1 -1
- kolega_code-0.8.4/tests/utils/__init__.py +0 -0
- {kolega_code-0.8.2/kolega_code/utils/tests → kolega_code-0.8.4/tests/utils}/test_images_ascii.py +1 -3
- {kolega_code-0.8.2 → kolega_code-0.8.4}/uv.lock +525 -5
- kolega_code-0.8.2/.github/workflows/ci.yml +0 -46
- kolega_code-0.8.2/.github/workflows/release.yml +0 -121
- kolega_code-0.8.2/kolega_code/agent/prompt_templates/system/includes/starter_templates/html_website.md +0 -3
- kolega_code-0.8.2/kolega_code/agent/prompt_templates/system/includes/starter_templates/mern_stack.md +0 -3
- kolega_code-0.8.2/kolega_code/agent/tests/llm/test_billing_openai_cache.py +0 -74
- kolega_code-0.8.2/kolega_code/agent/tests/llm/test_chatgpt_oauth_provider.py +0 -561
- kolega_code-0.8.2/kolega_code/agent/tests/llm/test_client.py +0 -919
- kolega_code-0.8.2/kolega_code/agent/tests/llm/test_langfuse_normalization.py +0 -56
- kolega_code-0.8.2/kolega_code/agent/tests/llm/test_openai_message_conversion.py +0 -140
- kolega_code-0.8.2/kolega_code/agent/tests/test_base_agent.py +0 -2303
- kolega_code-0.8.2/kolega_code/agent/tests/test_tools.py +0 -670
- kolega_code-0.8.2/kolega_code/cli/tests/test_app.py +0 -8764
- kolega_code-0.8.2/kolega_code/cli/tui/styles.py +0 -339
- {kolega_code-0.8.2 → kolega_code-0.8.4}/.env.example +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/LICENSE +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/SECURITY.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/.gitignore +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/README.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/astro.config.mjs +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/package-lock.json +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/package.json +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/public/favicon.svg +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/assets/demo.gif +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/assets/kolega-dark.svg +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/assets/kolega-light.svg +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/cli/ask.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/cli/doctor.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/cli/overview.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/cli/sessions.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/concepts/agents.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/concepts/how-it-works.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/concepts/tools.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/configuration/environment-variables.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/configuration/providers-and-models.mdx +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/configuration/settings-and-api-keys.mdx +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/configuration/sign-in-with-chatgpt.mdx +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/getting-started/installation.mdx +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/getting-started/quick-start.mdx +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/gigacode.mdx +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/hooks.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/index.mdx +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/skills.mdx +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/tui/interface.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/tui/modes.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content/docs/tui/sessions-and-resume.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/content.config.ts +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/src/styles/brand.css +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/docs/tsconfig.json +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/browseragent.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/coder.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/common.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/compression.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/context.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/errors.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/generalagent.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/investigationagent.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/orchestration/__init__.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/orchestration/errors.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/orchestration/guide.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/orchestration/journal.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/orchestration/runtime.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/orchestration/types.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_provider.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.system.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/auxiliary/compression/summary.user.md.j2 +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/auxiliary/terminal/output_summary.system.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/auxiliary/terminal/safety.system.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/auxiliary/tools/think_hard.system.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/extensions/cli/planning_questions.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/extensions/cli/shared_task_list.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/extensions/skills/catalog.md.j2 +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/system/agents/coder_cli.md.j2 +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/system/agents/general.md.j2 +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/system/agents/planning.md.j2 +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/system/includes/agents_md_instructions.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/system/includes/environment_variables/workspace_env_vars.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/user_tasks/cli/implement_plan.md.j2 +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/prompt_templates/user_tasks/cli/init_agents.md.j2 +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/build_tool.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/edit_preview.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/memory_tool.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/read_file_tool.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/replace_lines_tool.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/search_backends/base.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/search_backends/errors.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/search_backends/models.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/search_backends/searxng.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/streaming_tool.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/think_hard_tool.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tool_backend/workflow_tool.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/tools.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/agent/utils/commands.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/auth/__init__.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/auth/_jwt.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/auth/constants.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/auth/tokens.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/__init__.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/connection.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/file_index.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/mentions.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/provider_registry.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/theme.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/tui/__init__.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/tui/constants.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/tui/prompt_flows.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/cli/tui/status_dashboard.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/config.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/hooks/__init__.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/hooks/backends.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/hooks/config.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/hooks/dispatcher.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/hooks/events.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/hooks/matcher.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/hooks/outcome.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/llm/instrumented_client.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/orchestration/tests → kolega_code-0.8.4/kolega_code/llm/providers}/__init__.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/llm/providers/base.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/llm/providers/chatgpt_oauth.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/llm/providers/google.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/llm/providers/models.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/llm/providers/openai_responses.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/llm/ratelimit.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/llm/tool_execution_ids.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/models/__init__.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/runtime.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/sandbox/README.md +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/sandbox/__init__.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/sandbox/browser.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/sandbox/terminal.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/services/base.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/services/file_system.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/services/html.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/services/terminal_buffer.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/tools/__init__.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/tools/core.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/tools/definitions.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/tools/registry.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/kolega_code/utils/__init__.py +0 -0
- {kolega_code-0.8.2 → kolega_code-0.8.4}/scripts/install-kolega-code.sh +0 -0
- {kolega_code-0.8.2/kolega_code/agent → kolega_code-0.8.4}/tests/__init__.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests/llm → kolega_code-0.8.4/tests/agent}/__init__.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/compaction_helpers.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests/tool_backend → kolega_code-0.8.4/tests/agent/llm}/__init__.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/llm/test_error_boundary.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/llm/test_exceptions.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/llm/test_google_thought_signature.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/llm/test_model_specs.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/llm/test_supports_vision.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/llm/test_tool_execution_ids.py +0 -0
- {kolega_code-0.8.2/kolega_code/auth/tests → kolega_code-0.8.4/tests/agent/orchestration}/__init__.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/services/__init__.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/services/test_sandbox_terminal_input.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/services/test_terminal.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/services/test_terminal_buffer.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_agent_tools_inventory.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_coder_prompt_extensions.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_compaction_integration.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_compaction_persistence.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_compaction_subagent.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_compress_command.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_compression.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_conversation_compaction.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_empty_message_handling.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_event_emitter.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_general_agent.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_gigacode_gating.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_hooks_integration.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_html.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_parallel_tool_calls.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_prompts.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/test_tool_registry.py +0 -0
- {kolega_code-0.8.2/kolega_code/hooks/tests → kolega_code-0.8.4/tests/agent/tool_backend}/__init__.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/tool_backend/test_edit_preview.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/tool_backend/test_list_directory_tool.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/tool_backend/test_search_and_replace_tool.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/tool_backend/test_think_hard_integration.py +0 -0
- {kolega_code-0.8.2/kolega_code/agent/tests → kolega_code-0.8.4/tests/agent}/tool_backend/test_web_search_tool.py +0 -0
- {kolega_code-0.8.2/kolega_code/llm/providers → kolega_code-0.8.4/tests/auth}/__init__.py +0 -0
- {kolega_code-0.8.2/kolega_code/cli/tests → kolega_code-0.8.4/tests/cli}/__init__.py +0 -0
- {kolega_code-0.8.2/kolega_code/cli/tests → kolega_code-0.8.4/tests/cli}/test_connection.py +0 -0
- {kolega_code-0.8.2/kolega_code/cli/tests → kolega_code-0.8.4/tests/cli}/test_file_index.py +0 -0
- {kolega_code-0.8.2/kolega_code/cli/tests → kolega_code-0.8.4/tests/cli}/test_provider_registry.py +0 -0
- {kolega_code-0.8.2/kolega_code/tools/tests → kolega_code-0.8.4/tests/hooks}/__init__.py +0 -0
- {kolega_code-0.8.2/kolega_code/hooks/tests → kolega_code-0.8.4/tests/hooks}/test_hooks.py +0 -0
- {kolega_code-0.8.2/kolega_code/utils/tests → kolega_code-0.8.4/tests/tools}/__init__.py +0 -0
- {kolega_code-0.8.2/kolega_code/tools/tests → kolega_code-0.8.4/tests/tools}/test_definitions.py +0 -0
- {kolega_code-0.8.2/kolega_code/utils/tests → kolega_code-0.8.4/tests/utils}/test_images.py +0 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
name: Bug report
|
|
2
|
+
description: Report a reproducible problem with Kolega Code
|
|
3
|
+
title: "bug: "
|
|
4
|
+
labels: ["bug"]
|
|
5
|
+
body:
|
|
6
|
+
- type: textarea
|
|
7
|
+
id: summary
|
|
8
|
+
attributes:
|
|
9
|
+
label: Summary
|
|
10
|
+
description: What went wrong?
|
|
11
|
+
placeholder: "Kolega Code ..."
|
|
12
|
+
validations:
|
|
13
|
+
required: true
|
|
14
|
+
|
|
15
|
+
- type: input
|
|
16
|
+
id: version
|
|
17
|
+
attributes:
|
|
18
|
+
label: Kolega Code version
|
|
19
|
+
description: Run `kolega-code --version`.
|
|
20
|
+
placeholder: "kolega-code 0.8.3"
|
|
21
|
+
validations:
|
|
22
|
+
required: true
|
|
23
|
+
|
|
24
|
+
- type: input
|
|
25
|
+
id: os
|
|
26
|
+
attributes:
|
|
27
|
+
label: Operating system
|
|
28
|
+
placeholder: "macOS 15.5, Ubuntu 24.04, Fedora 42, etc."
|
|
29
|
+
validations:
|
|
30
|
+
required: true
|
|
31
|
+
|
|
32
|
+
- type: input
|
|
33
|
+
id: terminal
|
|
34
|
+
attributes:
|
|
35
|
+
label: Terminal
|
|
36
|
+
description: Include terminal app and shell if relevant.
|
|
37
|
+
placeholder: "Ghostty + zsh, Terminal.app + zsh, iTerm2 + fish, GNOME Terminal + bash"
|
|
38
|
+
validations:
|
|
39
|
+
required: true
|
|
40
|
+
|
|
41
|
+
- type: input
|
|
42
|
+
id: install-method
|
|
43
|
+
attributes:
|
|
44
|
+
label: Install method
|
|
45
|
+
placeholder: "install script, uv tool install, pipx, pip"
|
|
46
|
+
validations:
|
|
47
|
+
required: true
|
|
48
|
+
|
|
49
|
+
- type: textarea
|
|
50
|
+
id: repro
|
|
51
|
+
attributes:
|
|
52
|
+
label: Reproduction steps
|
|
53
|
+
description: Keep this as small and specific as possible.
|
|
54
|
+
placeholder: |
|
|
55
|
+
1. Run `kolega-code .`
|
|
56
|
+
2. ...
|
|
57
|
+
3. ...
|
|
58
|
+
validations:
|
|
59
|
+
required: true
|
|
60
|
+
|
|
61
|
+
- type: textarea
|
|
62
|
+
id: expected
|
|
63
|
+
attributes:
|
|
64
|
+
label: Expected behavior
|
|
65
|
+
placeholder: "I expected ..."
|
|
66
|
+
validations:
|
|
67
|
+
required: true
|
|
68
|
+
|
|
69
|
+
- type: textarea
|
|
70
|
+
id: actual
|
|
71
|
+
attributes:
|
|
72
|
+
label: Actual behavior
|
|
73
|
+
placeholder: "Instead ..."
|
|
74
|
+
validations:
|
|
75
|
+
required: true
|
|
76
|
+
|
|
77
|
+
- type: textarea
|
|
78
|
+
id: logs
|
|
79
|
+
attributes:
|
|
80
|
+
label: Logs or screenshots
|
|
81
|
+
description: Paste relevant output. Please remove API keys, tokens, project-private code, and other secrets.
|
|
82
|
+
render: shell
|
|
83
|
+
validations:
|
|
84
|
+
required: false
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
blank_issues_enabled: true
|
|
2
|
+
contact_links:
|
|
3
|
+
- name: Security vulnerability
|
|
4
|
+
url: https://github.com/kolega-ai/kolega-code/security/policy
|
|
5
|
+
about: Please report security issues privately.
|
|
6
|
+
- name: Documentation
|
|
7
|
+
url: https://kolega-ai.github.io/kolega-code/
|
|
8
|
+
about: Check the docs for setup, configuration, and usage guidance.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
name: Feature request
|
|
2
|
+
description: Suggest an improvement or new capability
|
|
3
|
+
title: "feat: "
|
|
4
|
+
labels: ["enhancement"]
|
|
5
|
+
body:
|
|
6
|
+
- type: textarea
|
|
7
|
+
id: problem
|
|
8
|
+
attributes:
|
|
9
|
+
label: Problem
|
|
10
|
+
description: What are you trying to do, and what makes it hard today?
|
|
11
|
+
placeholder: "I want to ..."
|
|
12
|
+
validations:
|
|
13
|
+
required: true
|
|
14
|
+
|
|
15
|
+
- type: textarea
|
|
16
|
+
id: proposal
|
|
17
|
+
attributes:
|
|
18
|
+
label: Proposed solution
|
|
19
|
+
description: What would you like Kolega Code to do?
|
|
20
|
+
placeholder: "It would be useful if ..."
|
|
21
|
+
validations:
|
|
22
|
+
required: true
|
|
23
|
+
|
|
24
|
+
- type: input
|
|
25
|
+
id: os
|
|
26
|
+
attributes:
|
|
27
|
+
label: Operating system
|
|
28
|
+
placeholder: "macOS 15.5, Ubuntu 24.04, Fedora 42, etc."
|
|
29
|
+
validations:
|
|
30
|
+
required: false
|
|
31
|
+
|
|
32
|
+
- type: input
|
|
33
|
+
id: terminal
|
|
34
|
+
attributes:
|
|
35
|
+
label: Terminal
|
|
36
|
+
placeholder: "Ghostty + zsh, Terminal.app + zsh, iTerm2 + fish, GNOME Terminal + bash"
|
|
37
|
+
validations:
|
|
38
|
+
required: false
|
|
39
|
+
|
|
40
|
+
- type: textarea
|
|
41
|
+
id: context
|
|
42
|
+
attributes:
|
|
43
|
+
label: Additional context
|
|
44
|
+
description: Add examples, alternatives considered, screenshots, or links if useful.
|
|
45
|
+
validations:
|
|
46
|
+
required: false
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
branches: [main]
|
|
6
|
+
types: [opened, synchronize, reopened, ready_for_review]
|
|
7
|
+
push:
|
|
8
|
+
branches: [main]
|
|
9
|
+
workflow_dispatch:
|
|
10
|
+
|
|
11
|
+
permissions:
|
|
12
|
+
contents: read
|
|
13
|
+
|
|
14
|
+
concurrency:
|
|
15
|
+
group: ci-${{ github.workflow }}-${{ github.ref }}
|
|
16
|
+
cancel-in-progress: true
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
tests:
|
|
20
|
+
name: Python ${{ matrix.python-version }}
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
strategy:
|
|
23
|
+
fail-fast: false
|
|
24
|
+
matrix:
|
|
25
|
+
python-version: ["3.11", "3.12"]
|
|
26
|
+
|
|
27
|
+
steps:
|
|
28
|
+
- name: Checkout
|
|
29
|
+
uses: actions/checkout@v5
|
|
30
|
+
|
|
31
|
+
- name: Setup Python
|
|
32
|
+
uses: actions/setup-python@v6
|
|
33
|
+
with:
|
|
34
|
+
python-version: ${{ matrix.python-version }}
|
|
35
|
+
|
|
36
|
+
- name: Setup uv
|
|
37
|
+
uses: astral-sh/setup-uv@v7
|
|
38
|
+
with:
|
|
39
|
+
enable-cache: true
|
|
40
|
+
cache-dependency-glob: uv.lock
|
|
41
|
+
|
|
42
|
+
- name: Install dependencies
|
|
43
|
+
run: uv sync --extra dev --frozen
|
|
44
|
+
|
|
45
|
+
- name: Run pre-commit hooks
|
|
46
|
+
run: uv run pre-commit run --all-files --show-diff-on-failure
|
|
47
|
+
|
|
48
|
+
- name: Run fast tests with coverage
|
|
49
|
+
run: ./run_tests.sh --coverage
|
|
50
|
+
|
|
51
|
+
- name: Upload coverage report
|
|
52
|
+
uses: actions/upload-artifact@v6
|
|
53
|
+
with:
|
|
54
|
+
name: coverage-xml-python-${{ matrix.python-version }}
|
|
55
|
+
path: coverage.xml
|
|
56
|
+
if-no-files-found: error
|
|
57
|
+
|
|
58
|
+
coverage-badge:
|
|
59
|
+
name: Update coverage badge
|
|
60
|
+
needs: tests
|
|
61
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
62
|
+
runs-on: ubuntu-latest
|
|
63
|
+
permissions:
|
|
64
|
+
contents: write
|
|
65
|
+
steps:
|
|
66
|
+
- name: Checkout
|
|
67
|
+
uses: actions/checkout@v5
|
|
68
|
+
|
|
69
|
+
- name: Setup Python
|
|
70
|
+
uses: actions/setup-python@v6
|
|
71
|
+
with:
|
|
72
|
+
python-version: "3.11"
|
|
73
|
+
|
|
74
|
+
- name: Setup uv
|
|
75
|
+
uses: astral-sh/setup-uv@v7
|
|
76
|
+
with:
|
|
77
|
+
enable-cache: true
|
|
78
|
+
cache-dependency-glob: uv.lock
|
|
79
|
+
|
|
80
|
+
- name: Install dependencies
|
|
81
|
+
run: uv sync --extra dev --frozen
|
|
82
|
+
|
|
83
|
+
- name: Download Python 3.11 coverage report
|
|
84
|
+
uses: actions/download-artifact@v6
|
|
85
|
+
with:
|
|
86
|
+
name: coverage-xml-python-3.11
|
|
87
|
+
path: coverage-artifact
|
|
88
|
+
|
|
89
|
+
- name: Generate coverage badge
|
|
90
|
+
run: |
|
|
91
|
+
uv run genbadge coverage -i coverage-artifact/coverage.xml -o docs/src/assets/coverage.svg
|
|
92
|
+
python - <<'PY'
|
|
93
|
+
from pathlib import Path
|
|
94
|
+
|
|
95
|
+
badge = Path("docs/src/assets/coverage.svg")
|
|
96
|
+
badge.write_text(badge.read_text().rstrip("\n") + "\n")
|
|
97
|
+
PY
|
|
98
|
+
|
|
99
|
+
- name: Commit coverage badge
|
|
100
|
+
run: |
|
|
101
|
+
if [ -z "$(git status --porcelain -- docs/src/assets/coverage.svg)" ]; then
|
|
102
|
+
echo "Coverage badge is already up to date."
|
|
103
|
+
exit 0
|
|
104
|
+
fi
|
|
105
|
+
|
|
106
|
+
git config user.name "github-actions[bot]"
|
|
107
|
+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
108
|
+
git add docs/src/assets/coverage.svg
|
|
109
|
+
git commit -m "chore: update coverage badge [skip ci]"
|
|
110
|
+
git push
|
|
111
|
+
|
|
112
|
+
dependency-audit:
|
|
113
|
+
name: Dependency audit
|
|
114
|
+
runs-on: ubuntu-latest
|
|
115
|
+
steps:
|
|
116
|
+
- name: Checkout
|
|
117
|
+
uses: actions/checkout@v5
|
|
118
|
+
|
|
119
|
+
- name: Setup Python
|
|
120
|
+
uses: actions/setup-python@v6
|
|
121
|
+
with:
|
|
122
|
+
python-version: "3.11"
|
|
123
|
+
|
|
124
|
+
- name: Setup uv
|
|
125
|
+
uses: astral-sh/setup-uv@v7
|
|
126
|
+
with:
|
|
127
|
+
enable-cache: true
|
|
128
|
+
cache-dependency-glob: uv.lock
|
|
129
|
+
|
|
130
|
+
- name: Audit locked dependencies
|
|
131
|
+
run: uv audit --locked
|
|
@@ -29,10 +29,10 @@ jobs:
|
|
|
29
29
|
working-directory: docs
|
|
30
30
|
steps:
|
|
31
31
|
- name: Checkout
|
|
32
|
-
uses: actions/checkout@
|
|
32
|
+
uses: actions/checkout@v5
|
|
33
33
|
|
|
34
34
|
- name: Setup Node
|
|
35
|
-
uses: actions/setup-node@
|
|
35
|
+
uses: actions/setup-node@v5
|
|
36
36
|
with:
|
|
37
37
|
node-version: "22.12.0"
|
|
38
38
|
cache: npm
|
|
@@ -46,9 +46,10 @@ jobs:
|
|
|
46
46
|
|
|
47
47
|
- name: Upload Pages artifact
|
|
48
48
|
if: github.event_name != 'pull_request'
|
|
49
|
-
uses: actions/upload-pages-artifact@
|
|
49
|
+
uses: actions/upload-pages-artifact@v5
|
|
50
50
|
with:
|
|
51
51
|
path: docs/dist
|
|
52
|
+
include-hidden-files: true
|
|
52
53
|
|
|
53
54
|
deploy:
|
|
54
55
|
if: github.event_name != 'pull_request'
|
|
@@ -63,4 +64,4 @@ jobs:
|
|
|
63
64
|
steps:
|
|
64
65
|
- name: Deploy to GitHub Pages
|
|
65
66
|
id: deployment
|
|
66
|
-
uses: actions/deploy-pages@
|
|
67
|
+
uses: actions/deploy-pages@v5
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
build:
|
|
13
|
+
name: Build and test package
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
permissions:
|
|
16
|
+
contents: read
|
|
17
|
+
attestations: write
|
|
18
|
+
id-token: write
|
|
19
|
+
steps:
|
|
20
|
+
- name: Checkout
|
|
21
|
+
uses: actions/checkout@v5
|
|
22
|
+
|
|
23
|
+
- name: Setup Python
|
|
24
|
+
uses: actions/setup-python@v6
|
|
25
|
+
with:
|
|
26
|
+
python-version: "3.11"
|
|
27
|
+
|
|
28
|
+
- name: Setup uv
|
|
29
|
+
uses: astral-sh/setup-uv@v7
|
|
30
|
+
with:
|
|
31
|
+
enable-cache: true
|
|
32
|
+
cache-dependency-glob: uv.lock
|
|
33
|
+
|
|
34
|
+
- name: Install dependencies
|
|
35
|
+
run: uv sync --extra dev --frozen
|
|
36
|
+
|
|
37
|
+
- name: Verify release version metadata
|
|
38
|
+
run: |
|
|
39
|
+
uv run python - <<'PY'
|
|
40
|
+
import ast
|
|
41
|
+
import os
|
|
42
|
+
import sys
|
|
43
|
+
import tomllib
|
|
44
|
+
from pathlib import Path
|
|
45
|
+
|
|
46
|
+
def module_version(path: str) -> str:
|
|
47
|
+
tree = ast.parse(Path(path).read_text(encoding="utf-8"), filename=path)
|
|
48
|
+
for node in tree.body:
|
|
49
|
+
if isinstance(node, ast.Assign):
|
|
50
|
+
for target in node.targets:
|
|
51
|
+
if isinstance(target, ast.Name) and target.id == "__version__":
|
|
52
|
+
if isinstance(node.value, ast.Constant) and isinstance(node.value.value, str):
|
|
53
|
+
return node.value.value
|
|
54
|
+
raise RuntimeError(f"Could not find string __version__ assignment in {path}")
|
|
55
|
+
|
|
56
|
+
tag = os.environ["GITHUB_REF_NAME"]
|
|
57
|
+
with open("pyproject.toml", "rb") as fh:
|
|
58
|
+
version = tomllib.load(fh)["project"]["version"]
|
|
59
|
+
expected_tag = f"v{version}"
|
|
60
|
+
if tag != expected_tag:
|
|
61
|
+
print(f"Release tag {tag!r} does not match pyproject.toml version {version!r}; expected {expected_tag!r}.")
|
|
62
|
+
sys.exit(1)
|
|
63
|
+
|
|
64
|
+
module_versions = {
|
|
65
|
+
"kolega_code/__init__.py": module_version("kolega_code/__init__.py"),
|
|
66
|
+
"kolega_code/agent/__init__.py": module_version("kolega_code/agent/__init__.py"),
|
|
67
|
+
}
|
|
68
|
+
mismatches = {path: value for path, value in module_versions.items() if value != version}
|
|
69
|
+
if mismatches:
|
|
70
|
+
print("Version metadata mismatch:")
|
|
71
|
+
print(f" pyproject.toml: {version}")
|
|
72
|
+
for path, value in mismatches.items():
|
|
73
|
+
print(f" {path}: {value}")
|
|
74
|
+
sys.exit(1)
|
|
75
|
+
PY
|
|
76
|
+
|
|
77
|
+
- name: Run tests
|
|
78
|
+
run: uv run pytest -ra --durations=50 --import-mode=importlib -m "not slow"
|
|
79
|
+
|
|
80
|
+
- name: Build distributions
|
|
81
|
+
run: uv build
|
|
82
|
+
|
|
83
|
+
- name: Check distributions
|
|
84
|
+
run: uv run twine check dist/*
|
|
85
|
+
|
|
86
|
+
- name: Prepare release asset directory
|
|
87
|
+
run: mkdir -p release-assets
|
|
88
|
+
|
|
89
|
+
- name: Generate SBOM
|
|
90
|
+
uses: anchore/sbom-action@v0
|
|
91
|
+
with:
|
|
92
|
+
path: .
|
|
93
|
+
format: spdx-json
|
|
94
|
+
output-file: release-assets/kolega-code-sbom.spdx.json
|
|
95
|
+
upload-artifact: false
|
|
96
|
+
|
|
97
|
+
- name: Attest release artifacts
|
|
98
|
+
uses: actions/attest-build-provenance@v3
|
|
99
|
+
with:
|
|
100
|
+
subject-path: "dist/*"
|
|
101
|
+
|
|
102
|
+
- name: Upload distributions
|
|
103
|
+
uses: actions/upload-artifact@v6
|
|
104
|
+
with:
|
|
105
|
+
name: python-distributions
|
|
106
|
+
path: dist/
|
|
107
|
+
if-no-files-found: error
|
|
108
|
+
|
|
109
|
+
- name: Upload SBOM
|
|
110
|
+
uses: actions/upload-artifact@v6
|
|
111
|
+
with:
|
|
112
|
+
name: release-sbom
|
|
113
|
+
path: release-assets/kolega-code-sbom.spdx.json
|
|
114
|
+
if-no-files-found: error
|
|
115
|
+
|
|
116
|
+
smoke:
|
|
117
|
+
name: Smoke-test artifacts on Python ${{ matrix.python-version }}
|
|
118
|
+
needs: build
|
|
119
|
+
runs-on: ubuntu-latest
|
|
120
|
+
strategy:
|
|
121
|
+
fail-fast: false
|
|
122
|
+
matrix:
|
|
123
|
+
python-version: ["3.11", "3.12"]
|
|
124
|
+
steps:
|
|
125
|
+
- name: Setup Python
|
|
126
|
+
uses: actions/setup-python@v6
|
|
127
|
+
with:
|
|
128
|
+
python-version: ${{ matrix.python-version }}
|
|
129
|
+
|
|
130
|
+
- name: Download distributions
|
|
131
|
+
uses: actions/download-artifact@v7
|
|
132
|
+
with:
|
|
133
|
+
name: python-distributions
|
|
134
|
+
path: dist/
|
|
135
|
+
|
|
136
|
+
- name: Smoke-test wheel
|
|
137
|
+
run: |
|
|
138
|
+
python -m venv /tmp/kolega-code-wheel-smoke
|
|
139
|
+
/tmp/kolega-code-wheel-smoke/bin/python -m pip install --upgrade pip
|
|
140
|
+
/tmp/kolega-code-wheel-smoke/bin/python -m pip install dist/*.whl
|
|
141
|
+
/tmp/kolega-code-wheel-smoke/bin/kolega-code --version
|
|
142
|
+
|
|
143
|
+
- name: Smoke-test sdist
|
|
144
|
+
run: |
|
|
145
|
+
python -m venv /tmp/kolega-code-sdist-smoke
|
|
146
|
+
/tmp/kolega-code-sdist-smoke/bin/python -m pip install --upgrade pip
|
|
147
|
+
/tmp/kolega-code-sdist-smoke/bin/python -m pip install dist/*.tar.gz
|
|
148
|
+
/tmp/kolega-code-sdist-smoke/bin/kolega-code --version
|
|
149
|
+
|
|
150
|
+
publish:
|
|
151
|
+
name: Publish to PyPI
|
|
152
|
+
needs: [build, smoke]
|
|
153
|
+
runs-on: ubuntu-latest
|
|
154
|
+
environment:
|
|
155
|
+
name: pypi
|
|
156
|
+
url: https://pypi.org/p/kolega-code
|
|
157
|
+
permissions:
|
|
158
|
+
contents: read
|
|
159
|
+
id-token: write
|
|
160
|
+
steps:
|
|
161
|
+
- name: Download distributions
|
|
162
|
+
uses: actions/download-artifact@v7
|
|
163
|
+
with:
|
|
164
|
+
name: python-distributions
|
|
165
|
+
path: dist/
|
|
166
|
+
|
|
167
|
+
- name: Publish distributions to PyPI
|
|
168
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
169
|
+
with:
|
|
170
|
+
packages-dir: dist/
|
|
171
|
+
skip-existing: false
|
|
172
|
+
|
|
173
|
+
github-release:
|
|
174
|
+
name: Create GitHub Release
|
|
175
|
+
needs: publish
|
|
176
|
+
runs-on: ubuntu-latest
|
|
177
|
+
permissions:
|
|
178
|
+
contents: write
|
|
179
|
+
env:
|
|
180
|
+
GH_TOKEN: ${{ github.token }}
|
|
181
|
+
steps:
|
|
182
|
+
- name: Create release
|
|
183
|
+
run: |
|
|
184
|
+
if gh release view "$GITHUB_REF_NAME" --repo "$GITHUB_REPOSITORY" >/dev/null 2>&1; then
|
|
185
|
+
echo "GitHub Release $GITHUB_REF_NAME already exists."
|
|
186
|
+
exit 0
|
|
187
|
+
fi
|
|
188
|
+
|
|
189
|
+
version="${GITHUB_REF_NAME#v}"
|
|
190
|
+
prelude=$(printf '%s\n\n%s\n\n%s\n%s\n%s\n\n%s\n' \
|
|
191
|
+
"PyPI: https://pypi.org/project/kolega-code/${version}/" \
|
|
192
|
+
"Update with:" \
|
|
193
|
+
'```bash' \
|
|
194
|
+
'uv tool install --force kolega-code' \
|
|
195
|
+
'```' \
|
|
196
|
+
"PyPI is the canonical package distribution. GitHub provides source archives for this release."
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
gh release create "$GITHUB_REF_NAME" \
|
|
200
|
+
--repo "$GITHUB_REPOSITORY" \
|
|
201
|
+
--verify-tag \
|
|
202
|
+
--title "$GITHUB_REF_NAME" \
|
|
203
|
+
--latest \
|
|
204
|
+
--generate-notes \
|
|
205
|
+
--notes "$prelude"
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
repos:
|
|
2
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
3
|
+
rev: v0.15.12
|
|
4
|
+
hooks:
|
|
5
|
+
- id: ruff-check
|
|
6
|
+
args: [--fix]
|
|
7
|
+
- id: ruff-format
|
|
8
|
+
|
|
9
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
10
|
+
rev: v6.0.0
|
|
11
|
+
hooks:
|
|
12
|
+
- id: trailing-whitespace
|
|
13
|
+
args: [--markdown-linebreak-ext=md]
|
|
14
|
+
- id: end-of-file-fixer
|
|
15
|
+
- id: check-yaml
|
|
16
|
+
- id: debug-statements
|
|
17
|
+
- id: detect-private-key
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to Kolega Code are documented here.
|
|
4
|
+
|
|
5
|
+
This project uses GitHub Releases for detailed generated release notes. This file provides a concise, human-maintained summary of user-visible changes.
|
|
6
|
+
|
|
7
|
+
## Unreleased
|
|
8
|
+
|
|
9
|
+
## 0.8.4 - 2026-06-24
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Added minimal GitHub issue templates for bug reports and feature requests.
|
|
14
|
+
- Added project links (homepage, documentation, changelog, security) to package metadata.
|
|
15
|
+
- Added pre-commit configuration and a repository coverage badge.
|
|
16
|
+
- Added Ruff lint/formatting checks and dependency vulnerability auditing to CI.
|
|
17
|
+
- Added coverage reporting and SBOM/provenance attestation to the release workflow.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Hardened local state file permissions for settings, sessions, and project permission files.
|
|
22
|
+
- Hardened the release workflow with lockfile-backed installs, version parity checks, and artifact smoke tests.
|
|
23
|
+
- Split and reformatted oversized test modules to keep the suite maintainable.
|
|
24
|
+
- Reduced the Logs and Terminal TUI scrollback caps to 2000 lines for better performance.
|
|
25
|
+
- Updated GitHub Actions to Node 24-compatible versions.
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
|
|
29
|
+
- Fixed the chat composer to auto-grow as text wraps across multiple lines.
|
|
30
|
+
- Fixed `ctrl-u` so it clears multiline composer drafts.
|
|
31
|
+
- Fixed composer select-all shortcuts.
|
|
32
|
+
- Fixed prompt-option focus handoff so focus returns from the composer correctly.
|
|
33
|
+
- Fixed chat focus restoration after the app resumes or a turn is cancelled.
|
|
34
|
+
- Fixed runtime output clearing when a planning thread is reset.
|
|
35
|
+
- Optimized planning sidebar markdown rendering to reduce lag.
|
|
36
|
+
|
|
37
|
+
## 0.8.3 - 2026-06-23
|
|
38
|
+
|
|
39
|
+
### Fixed
|
|
40
|
+
|
|
41
|
+
- Persisted TUI permission mode across sessions.
|
|
42
|
+
- Updated the `idna` dependency to a patched version.
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
|
|
46
|
+
- Externalized the TUI stylesheet.
|
|
47
|
+
- Moved tests into the top-level `tests/` directory.
|
|
48
|
+
|
|
49
|
+
## 0.8.2 - 2026-06-22
|
|
50
|
+
|
|
51
|
+
### Added
|
|
52
|
+
|
|
53
|
+
- Improved gigacode workflow transcript artifacts.
|
|
54
|
+
- Documented branch and pull request naming guidance.
|
|
55
|
+
- Documented the optional logs sidebar flag.
|
|
56
|
+
|
|
57
|
+
### Fixed
|
|
58
|
+
|
|
59
|
+
- Fixed long TUI approval prompt layout.
|
|
60
|
+
- Fixed transcript jump-to-bottom locking.
|
|
61
|
+
|
|
62
|
+
### Changed
|
|
63
|
+
|
|
64
|
+
- Optimized sidebar terminal/log rendering and streaming render updates.
|
|
65
|
+
- Moved TUI session persistence off the event loop.
|
|
66
|
+
- Refactored the CLI TUI package layout and controller mixins.
|
|
67
|
+
|
|
68
|
+
## 0.8.1 - 2026-06-21
|
|
69
|
+
|
|
70
|
+
### Added
|
|
71
|
+
|
|
72
|
+
- Added an optional agent iteration cap.
|
|
73
|
+
|
|
74
|
+
### Changed
|
|
75
|
+
|
|
76
|
+
- Migrated the API-key OpenAI provider to the Responses API.
|
|
77
|
+
- Preserved OpenAI Responses reasoning continuity.
|
|
@@ -4,12 +4,25 @@
|
|
|
4
4
|
|
|
5
5
|
Kolega Code requires Python 3.11 or newer.
|
|
6
6
|
|
|
7
|
-
Install the CLI
|
|
7
|
+
Install the CLI, development dependencies, and the tracked Git hooks with the setup script:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
./scripts/setup-dev.sh
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
If you prefer to run the steps manually:
|
|
8
14
|
|
|
9
15
|
```bash
|
|
10
16
|
uv sync --extra cli --extra dev
|
|
17
|
+
git config core.hooksPath .githooks
|
|
18
|
+
uv run pre-commit install-hooks
|
|
19
|
+
uv run pre-commit run --all-files --show-diff-on-failure
|
|
11
20
|
```
|
|
12
21
|
|
|
22
|
+
Installing the `pre-commit` Python package is not enough. This repository uses a tracked
|
|
23
|
+
`.githooks/pre-commit` wrapper that runs the exact same all-files command as CI. Run
|
|
24
|
+
`./scripts/setup-dev.sh` or `git config core.hooksPath .githooks` once per clone.
|
|
25
|
+
|
|
13
26
|
If you prefer `pip`, install the package in editable mode:
|
|
14
27
|
|
|
15
28
|
```bash
|
|
@@ -29,7 +42,34 @@ environment file only when you need those tests, and never commit real secrets:
|
|
|
29
42
|
cp .env.example .env
|
|
30
43
|
```
|
|
31
44
|
|
|
32
|
-
## Tests
|
|
45
|
+
## Tests and quality checks
|
|
46
|
+
|
|
47
|
+
Verify that Git is configured to use the tracked hooks:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
./scripts/check-dev-hooks.sh
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Local commits run the same all-files pre-commit command as CI when `core.hooksPath` points
|
|
54
|
+
to `.githooks`:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
uv run pre-commit run --all-files --show-diff-on-failure
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
CI runs Ruff through pre-commit. You can also run Ruff directly for one-off linting and
|
|
61
|
+
formatting checks:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
uv run ruff check .
|
|
65
|
+
uv run ruff format --check .
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
To apply formatting locally:
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
uv run ruff format .
|
|
72
|
+
```
|
|
33
73
|
|
|
34
74
|
Run the fast test suite before opening a pull request:
|
|
35
75
|
|
|
@@ -46,7 +86,7 @@ Run slow and integration tests only when you have the required credentials:
|
|
|
46
86
|
You can pass additional pytest arguments through the wrapper:
|
|
47
87
|
|
|
48
88
|
```bash
|
|
49
|
-
./run_tests.sh
|
|
89
|
+
./run_tests.sh tests/agent/llm/test_client.py -ra
|
|
50
90
|
```
|
|
51
91
|
|
|
52
92
|
## Documentation
|