kon-coding-agent 0.3.11__tar.gz → 0.4.1__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.
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/.agents/skills/kon-release-publish/SKILL.md +1 -1
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/.agents/skills/kon-tmux-test/SKILL.md +5 -5
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/.agents/skills/kon-tmux-test/run-e2e-tests.sh +8 -8
- kon_coding_agent-0.4.1/.claude/settings.local.json +36 -0
- kon_coding_agent-0.4.1/.github/workflows/publish.yml +39 -0
- kon_coding_agent-0.4.1/.github/workflows/test.yml +40 -0
- kon_coding_agent-0.4.1/.pre-commit-config.yaml +7 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/AGENTS.md +1 -1
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/CHANGELOG.md +58 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/PKG-INFO +76 -28
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/README.md +74 -27
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/docs/e2e-test-coverage-review.md +6 -6
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/docs/local-models.md +6 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/pyproject.toml +3 -2
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/__init__.py +6 -0
- kon_coding_agent-0.4.1/src/kon/builtin_skills/review/SKILL.md +72 -0
- kon_coding_agent-0.4.1/src/kon/cli.py +98 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/config.py +66 -1
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/context/agent_mds.py +9 -11
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/context/skills.py +52 -10
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/core/__init__.py +2 -0
- kon_coding_agent-0.4.1/src/kon/core/errors.py +17 -0
- kon_coding_agent-0.4.1/src/kon/diff_display.py +12 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/events.py +1 -0
- kon_coding_agent-0.4.1/src/kon/gh_cli.py +82 -0
- kon_coding_agent-0.4.1/src/kon/headless.py +127 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/llm/models.py +1 -47
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/llm/providers/anthropic.py +6 -2
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/llm/providers/mock.py +19 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/llm/providers/openai_completions.py +6 -2
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/llm/providers/openai_responses.py +6 -2
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/loop.py +6 -3
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/notify.py +13 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/themes.py +27 -1
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/tools/bash.py +35 -10
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/tools/edit.py +81 -34
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/tools/write.py +7 -2
- kon_coding_agent-0.4.1/src/kon/turn.py +768 -0
- kon_coding_agent-0.4.1/src/kon/ui/agent_runner.py +417 -0
- kon_coding_agent-0.4.1/src/kon/ui/app.py +658 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/ui/autocomplete.py +63 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/ui/blocks.py +124 -22
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/ui/chat.py +1 -1
- kon_coding_agent-0.4.1/src/kon/ui/commands/__init__.py +100 -0
- kon_coding_agent-0.4.1/src/kon/ui/commands/auth.py +149 -0
- kon_coding_agent-0.4.1/src/kon/ui/commands/base.py +121 -0
- kon_coding_agent-0.4.1/src/kon/ui/commands/models.py +50 -0
- kon_coding_agent-0.4.1/src/kon/ui/commands/sessions.py +390 -0
- kon_coding_agent-0.4.1/src/kon/ui/commands/settings.py +286 -0
- kon_coding_agent-0.4.1/src/kon/ui/completion_ui.py +310 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/ui/export.py +10 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/ui/formatting.py +40 -2
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/ui/input.py +17 -6
- kon_coding_agent-0.4.1/src/kon/ui/launch.py +102 -0
- kon_coding_agent-0.4.1/src/kon/ui/queue_ui.py +141 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/ui/selection_mode.py +2 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/ui/session_ui.py +10 -0
- kon_coding_agent-0.4.1/src/kon/ui/startup.py +116 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/ui/styles.py +19 -15
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/ui/widgets.py +5 -2
- kon_coding_agent-0.4.1/src/kon/version.py +22 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/context/test_agents.py +12 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/context/test_skills.py +179 -2
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/llm/test_openai_codex_provider_errors.py +18 -18
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_agentic_loop.py +25 -1
- kon_coding_agent-0.4.1/tests/test_cli.py +35 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_cli_auth_flags.py +1 -9
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_config_binaries.py +3 -1
- kon_coding_agent-0.4.1/tests/test_errors.py +17 -0
- kon_coding_agent-0.4.1/tests/test_headless.py +207 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_llm_lazy_imports.py +7 -1
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_model_provider_resolution.py +6 -6
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_notify.py +15 -1
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_openai_compat.py +2 -2
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_runtime_switch_model.py +2 -2
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_tools_manager.py +1 -0
- kon_coding_agent-0.4.1/tests/tools/test_bash_shell.py +92 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/tools/test_bash_truncation.py +1 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/tools/test_diff.py +35 -20
- kon_coding_agent-0.4.1/tests/tools/test_edit_display.py +45 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/tools/test_read.py +3 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/tools/test_subprocess_cancellation.py +1 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_completion_chrome.py +19 -3
- kon_coding_agent-0.4.1/tests/ui/test_export.py +101 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_login_command.py +1 -1
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_shell_command_detection.py +35 -0
- kon_coding_agent-0.4.1/tests/ui/test_streaming_blocks.py +198 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_tool_output_expansion.py +36 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/uv.lock +3 -1
- kon_coding_agent-0.3.11/.github/workflows/test.yml +0 -33
- kon_coding_agent-0.3.11/src/kon/turn.py +0 -630
- kon_coding_agent-0.3.11/src/kon/ui/app.py +0 -1571
- kon_coding_agent-0.3.11/src/kon/ui/commands.py +0 -943
- kon_coding_agent-0.3.11/tests/tools/test_edit_display.py +0 -38
- kon_coding_agent-0.3.11/tests/ui/test_streaming_blocks.py +0 -69
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/.agents/skills/kon-tmux-test/setup-test-project.sh +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/.gitignore +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/.python-version +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/LICENSE +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/docs/images/kon-screenshot.png +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/scripts/show_themes.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/async_utils.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/builtin_skills/init/SKILL.md +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/context/__init__.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/context/_xml.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/context/git.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/context/loader.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/core/compaction.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/core/handoff.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/core/types.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/defaults/__init__.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/defaults/config.toml +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/git_branch.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/llm/__init__.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/llm/base.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/llm/oauth/__init__.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/llm/oauth/copilot.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/llm/oauth/openai.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/llm/providers/__init__.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/llm/providers/anthropic_capabilities.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/llm/providers/azure_ai_foundry.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/llm/providers/copilot.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/llm/providers/copilot_anthropic.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/llm/providers/github_copilot_headers.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/llm/providers/openai_codex_responses.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/llm/providers/openai_compat.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/llm/providers/sanitize.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/permissions.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/py.typed +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/runtime.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/session.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/sounds/completion.wav +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/sounds/error.wav +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/sounds/permission.wav +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/tools/__init__.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/tools/_read_image.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/tools/_tool_utils.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/tools/base.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/tools/find.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/tools/grep.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/tools/read.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/tools/web_fetch.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/tools/web_search.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/tools_manager.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/ui/__init__.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/ui/app_protocol.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/ui/clipboard.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/ui/floating_list.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/ui/latex.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/ui/path_complete.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/ui/prompt_history.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/ui/tool_output.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/ui/tree.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/ui/welcome.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/src/kon/update_check.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/conftest.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/llm/__init__.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/llm/test_anthropic_provider.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/llm/test_azure_ai_foundry_provider.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/llm/test_mock_provider.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/llm/test_openai_oauth.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/llm/test_tls_verify.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_cli_provider_resolution.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_compaction.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_config_error_fallback.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_config_injection.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_config_migration.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_git_branch.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_handoff.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_handoff_link_interrupt.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_launch_warnings.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_local_auth_config.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_notifications_config.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_permissions.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_session_persistence.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_session_queries.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_session_resume.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_session_tree.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_system_prompt.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_system_prompt_git_context.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_themes.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_ui_notifications.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_update_check.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/test_update_notice_behavior.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/tools/test_edit.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/tools/test_read_image.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/tools/test_read_image_integration.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/tools/test_read_image_resize.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/tools/test_web_fetch.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/tools/test_write.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_app_approval_keys.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_autocomplete.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_floating_list.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_info_bar_clicks.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_info_bar_permissions.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_input_approval_submit.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_input_cursor_theme.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_input_handoff.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_input_paste.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_input_shell_style.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_keybindings.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_latex.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_permission_selection_status.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_permissions_command.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_prompt_history.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_queue_editing.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_status_line.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_styles.py +0 -0
- {kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/tests/ui/test_thinking_notifications_commands.py +0 -0
{kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/.agents/skills/kon-release-publish/SKILL.md
RENAMED
|
@@ -24,7 +24,7 @@ Use this skill when the user asks to cut a new Kon version, tag it, publish to P
|
|
|
24
24
|
## Files to bump
|
|
25
25
|
|
|
26
26
|
- `pyproject.toml` → `[project].version`
|
|
27
|
-
- `src/kon/
|
|
27
|
+
- `src/kon/version.py` → fallback `VERSION = "..."`
|
|
28
28
|
- `uv.lock` → local package version block
|
|
29
29
|
|
|
30
30
|
## Release workflow
|
|
@@ -29,14 +29,14 @@ Kon is a TUI (Textual-based) app. Running tests programmatically is hard. Tmux p
|
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
31
|
# Run all e2e tests from the repo root
|
|
32
|
-
bash .
|
|
32
|
+
bash .agents/skills/kon-tmux-test/run-e2e-tests.sh
|
|
33
33
|
|
|
34
34
|
# Optional: keep the temporary HOME for debugging
|
|
35
|
-
KEEP_E2E_HOME=1 bash .
|
|
35
|
+
KEEP_E2E_HOME=1 bash .agents/skills/kon-tmux-test/run-e2e-tests.sh
|
|
36
36
|
|
|
37
37
|
# Optional: override launch command/provider/model
|
|
38
38
|
KON_CMD='uv run kon --model gpt-5.5' \
|
|
39
|
-
bash .
|
|
39
|
+
bash .agents/skills/kon-tmux-test/run-e2e-tests.sh
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
After running, read `/tmp/kon-test-*.txt` and evaluate the captured pane/config/filesystem outputs.
|
|
@@ -48,7 +48,7 @@ After running, read `/tmp/kon-test-*.txt` and evaluate the captured pane/config/
|
|
|
48
48
|
Creates a deterministic test project structure at `/tmp/kon-test-project/`.
|
|
49
49
|
|
|
50
50
|
```bash
|
|
51
|
-
bash .
|
|
51
|
+
bash .agents/skills/kon-tmux-test/setup-test-project.sh
|
|
52
52
|
```
|
|
53
53
|
|
|
54
54
|
### Main Test Script: `run-e2e-tests.sh`
|
|
@@ -56,7 +56,7 @@ bash .kon/skills/kon-tmux-test/setup-test-project.sh
|
|
|
56
56
|
Runs comprehensive e2e tests including UI triggers, runtime controls, tab completion, and tool execution.
|
|
57
57
|
|
|
58
58
|
```bash
|
|
59
|
-
bash .
|
|
59
|
+
bash .agents/skills/kon-tmux-test/run-e2e-tests.sh
|
|
60
60
|
```
|
|
61
61
|
|
|
62
62
|
## Test Categories
|
{kon_coding_agent-0.3.11 → kon_coding_agent-0.4.1}/.agents/skills/kon-tmux-test/run-e2e-tests.sh
RENAMED
|
@@ -29,8 +29,8 @@ capture() {
|
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
capture_config() {
|
|
32
|
-
if [ -f "$TEST_HOME/.kon/config.toml" ]; then
|
|
33
|
-
cp "$TEST_HOME/.kon/config.toml" "$1"
|
|
32
|
+
if [ -f "$TEST_HOME/.config/kon/config.toml" ]; then
|
|
33
|
+
cp "$TEST_HOME/.config/kon/config.toml" "$1"
|
|
34
34
|
else
|
|
35
35
|
echo "CONFIG_NOT_FOUND" > "$1"
|
|
36
36
|
fi
|
|
@@ -74,12 +74,12 @@ trap cleanup EXIT
|
|
|
74
74
|
echo "Setting up isolated e2e environment..."
|
|
75
75
|
cleanup
|
|
76
76
|
rm -rf "$TEST_DIR" "$TEST_HOME"
|
|
77
|
-
mkdir -p "$TEST_DIR" "$TEST_HOME/.kon"
|
|
78
|
-
if [ -f "$HOME/.kon/openai_auth.json" ]; then
|
|
79
|
-
cp "$HOME/.kon/openai_auth.json" "$TEST_HOME/.kon/openai_auth.json"
|
|
77
|
+
mkdir -p "$TEST_DIR" "$TEST_HOME/.config/kon"
|
|
78
|
+
if [ -f "$HOME/.config/kon/openai_auth.json" ]; then
|
|
79
|
+
cp "$HOME/.config/kon/openai_auth.json" "$TEST_HOME/.config/kon/openai_auth.json"
|
|
80
80
|
fi
|
|
81
|
-
if [ -f "$HOME/.kon/copilot_auth.json" ]; then
|
|
82
|
-
cp "$HOME/.kon/copilot_auth.json" "$TEST_HOME/.kon/copilot_auth.json"
|
|
81
|
+
if [ -f "$HOME/.config/kon/copilot_auth.json" ]; then
|
|
82
|
+
cp "$HOME/.config/kon/copilot_auth.json" "$TEST_HOME/.config/kon/copilot_auth.json"
|
|
83
83
|
fi
|
|
84
84
|
cd "$TEST_DIR" || exit 1
|
|
85
85
|
printf '# Test Project\n' > README.md
|
|
@@ -288,7 +288,7 @@ clear_input
|
|
|
288
288
|
# =============================================================================
|
|
289
289
|
echo "Capturing file system and persisted state..."
|
|
290
290
|
ls -la "$TEST_DIR" > /tmp/kon-test-files.txt 2>/dev/null
|
|
291
|
-
find "$TEST_HOME/.kon/sessions" -type f -name '*.jsonl' -print > /tmp/kon-test-session-files.txt 2>/dev/null || true
|
|
291
|
+
find "$TEST_HOME/.config/kon/sessions" -type f -name '*.jsonl' -print > /tmp/kon-test-session-files.txt 2>/dev/null || true
|
|
292
292
|
capture_config /tmp/kon-test-final-config.txt
|
|
293
293
|
|
|
294
294
|
# Retry a few times in case the LLM is still finishing file writes
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Bash(uv run *)",
|
|
5
|
+
"Bash(gh api *)",
|
|
6
|
+
"Bash(echo \"exit=$?\")",
|
|
7
|
+
"Bash(git -C /Users/utsav/Workspaces/kon status --short)",
|
|
8
|
+
"Bash(git -C /Users/utsav/Workspaces/kon diff --stat)",
|
|
9
|
+
"Bash(git add *)",
|
|
10
|
+
"Bash(git commit -m ' *)",
|
|
11
|
+
"Bash(git push *)",
|
|
12
|
+
"Bash(gh run *)",
|
|
13
|
+
"Bash(python3 -c ' *)",
|
|
14
|
+
"Bash(awk -F: '{print $1\": \"$3}')",
|
|
15
|
+
"Bash(awk -F: '{print $3}')",
|
|
16
|
+
"Bash(awk -F: '{print $1, $2}')",
|
|
17
|
+
"Bash(git -C /Users/utsav/Workspaces/kon log --oneline origin/main..HEAD)",
|
|
18
|
+
"Bash(git -C /Users/utsav/Workspaces/kon log --oneline -10)",
|
|
19
|
+
"Bash(git -C /Users/utsav/Workspaces/kon show f987ebf --stat=220)",
|
|
20
|
+
"Bash(git -C /Users/utsav/Workspaces/kon show f987ebf -- src/kon/turn.py)",
|
|
21
|
+
"Bash(git -C /Users/utsav/Workspaces/kon show fa6b029 --stat)",
|
|
22
|
+
"Bash(git -C /Users/utsav/Workspaces/kon show fa6b029)",
|
|
23
|
+
"Bash(git -C /Users/utsav/Workspaces/kon show f987ebf~1:src/kon/turn.py)",
|
|
24
|
+
"Bash(awk '/^async def run_single_turn/,0')",
|
|
25
|
+
"Bash(awk '{print length\\($0\\)/4}')",
|
|
26
|
+
"Bash(git -C /Users/utsav/Workspaces/kon show f987ebf -- tests/)",
|
|
27
|
+
"Bash(git -C /Users/utsav/Workspaces/kon show 31815a4 --stat)",
|
|
28
|
+
"Bash(git -C /Users/utsav/Workspaces/kon show 705fb8f --stat)",
|
|
29
|
+
"Bash(git -C /Users/utsav/Workspaces/kon diff --stat src/kon/ui/app.py)",
|
|
30
|
+
"Bash(gh issue *)",
|
|
31
|
+
"Bash(git *)",
|
|
32
|
+
"Bash(sed -n 250-270p /Users/utsav/Workspaces/kon/src/kon/llm/providers/openai_completions.py)",
|
|
33
|
+
"Bash(sed -n 200-220p /Users/utsav/Workspaces/kon/src/kon/llm/providers/anthropic.py)"
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
build:
|
|
12
|
+
runs-on: ubuntu-latest
|
|
13
|
+
steps:
|
|
14
|
+
- uses: actions/checkout@v6
|
|
15
|
+
- name: Install uv
|
|
16
|
+
uses: astral-sh/setup-uv@v8.2.0
|
|
17
|
+
with:
|
|
18
|
+
python-version: "3.13"
|
|
19
|
+
- name: Build sdist and wheel
|
|
20
|
+
run: uv build
|
|
21
|
+
- uses: actions/upload-artifact@v7
|
|
22
|
+
with:
|
|
23
|
+
name: dist
|
|
24
|
+
path: dist/
|
|
25
|
+
|
|
26
|
+
publish:
|
|
27
|
+
needs: build
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
environment: pypi
|
|
30
|
+
permissions:
|
|
31
|
+
# Required for PyPI trusted publishing (OIDC).
|
|
32
|
+
id-token: write
|
|
33
|
+
steps:
|
|
34
|
+
- uses: actions/download-artifact@v8
|
|
35
|
+
with:
|
|
36
|
+
name: dist
|
|
37
|
+
path: dist/
|
|
38
|
+
- name: Publish to PyPI
|
|
39
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
name: Test
|
|
2
|
+
|
|
3
|
+
on: [push, pull_request]
|
|
4
|
+
|
|
5
|
+
permissions:
|
|
6
|
+
contents: read
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
lint:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
steps:
|
|
12
|
+
- uses: actions/checkout@v6
|
|
13
|
+
- name: Install uv
|
|
14
|
+
uses: astral-sh/setup-uv@v8.2.0
|
|
15
|
+
with:
|
|
16
|
+
python-version: "3.13"
|
|
17
|
+
- name: Install dependencies
|
|
18
|
+
run: uv sync --group dev
|
|
19
|
+
- name: Ruff format
|
|
20
|
+
run: uv run ruff format --check .
|
|
21
|
+
- name: Ruff check
|
|
22
|
+
run: uv run ruff check .
|
|
23
|
+
- name: Pyright
|
|
24
|
+
run: uv run python -m pyright .
|
|
25
|
+
|
|
26
|
+
test:
|
|
27
|
+
runs-on: ubuntu-latest
|
|
28
|
+
strategy:
|
|
29
|
+
matrix:
|
|
30
|
+
python-version: ["3.12", "3.13", "3.14"]
|
|
31
|
+
steps:
|
|
32
|
+
- uses: actions/checkout@v6
|
|
33
|
+
- name: Install uv
|
|
34
|
+
uses: astral-sh/setup-uv@v8.2.0
|
|
35
|
+
with:
|
|
36
|
+
python-version: ${{ matrix.python-version }}
|
|
37
|
+
- name: Install dependencies
|
|
38
|
+
run: uv sync --group dev
|
|
39
|
+
- name: Run tests
|
|
40
|
+
run: uv run python -m pytest -s
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
## Committing code
|
|
19
19
|
|
|
20
|
-
- If the user tells you to commit code, look at all the changes and create
|
|
20
|
+
- If the user tells you to commit code, look at all the changes and create multiple commits if needed based on logical groupings
|
|
21
21
|
- Follow commit message conventions: `docs:`, `feat:`, `fix:`, `build:`, etc. for the commit prefix
|
|
22
22
|
|
|
23
23
|
## Pushing
|
|
@@ -6,6 +6,64 @@ All notable changes to this project will be documented in this file.
|
|
|
6
6
|
|
|
7
7
|
- No changes yet.
|
|
8
8
|
|
|
9
|
+
## 0.4.1 - 2026-06-13
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Added Windows audio notification support without volume control - @clach04.
|
|
14
|
+
- Added slash-only skills support.
|
|
15
|
+
- Added skill-relative path resolution against each skill directory.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- Split UI monoliths and restructured the turn streaming loop.
|
|
20
|
+
- Improved markdown streaming performance with cached rendered blocks.
|
|
21
|
+
- Kept blocking I/O off the UI event loop.
|
|
22
|
+
- Updated CI, PyPI publishing, and pre-commit workflows.
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
26
|
+
- Skipped mkfifo-dependent tests on Windows - @clach04.
|
|
27
|
+
- Fixed slash-command args for skills without `$ARGUMENTS` placeholders.
|
|
28
|
+
- Updated e2e auth/config/session paths to `~/.config/kon`.
|
|
29
|
+
- Persisted manual shell commands for export and resume.
|
|
30
|
+
- Improved Windows Git Bash path handling.
|
|
31
|
+
- Fixed manually triggered custom skill body expansion.
|
|
32
|
+
- Skipped tool calls with stream-stalled truncated arguments.
|
|
33
|
+
- Preserved error context and retried transient network failures.
|
|
34
|
+
- Fixed skill frontmatter inline comment parsing.
|
|
35
|
+
- Buffered partial streaming markdown lines.
|
|
36
|
+
|
|
37
|
+
### Docs / Tests
|
|
38
|
+
|
|
39
|
+
- Aligned web tools docs with default config.
|
|
40
|
+
- Updated stale `.kon/skills` references to `.agents/skills`.
|
|
41
|
+
- Added testing guide, local model guidance, and permission clarifications.
|
|
42
|
+
- Improved Windows path and notification test coverage.
|
|
43
|
+
|
|
44
|
+
## 0.4.0 - 2026-05-31
|
|
45
|
+
|
|
46
|
+
### Added
|
|
47
|
+
|
|
48
|
+
- Added non-interactive `-p`/`--prompt` headless mode - @Meltedd.
|
|
49
|
+
- Added pull request autocomplete.
|
|
50
|
+
- Added review slash skill and updated review rubric.
|
|
51
|
+
- Added thinking display settings.
|
|
52
|
+
- Added diff rendering improvements.
|
|
53
|
+
- Added git context toggle to settings UI and exported `set_git_context`.
|
|
54
|
+
|
|
55
|
+
### Changed
|
|
56
|
+
|
|
57
|
+
- Extracted Textual-free CLI entry point.
|
|
58
|
+
|
|
59
|
+
### Fixed
|
|
60
|
+
|
|
61
|
+
- Aligned agent context paths.
|
|
62
|
+
- Clipped diff output lines.
|
|
63
|
+
- Used warning symbol for chat notices.
|
|
64
|
+
- Replaced `math.fma` for Python 3.12 compatibility.
|
|
65
|
+
- Removed unsupported GLM-4.7 and GPT models below 5.5 from Copilot and Codex providers.
|
|
66
|
+
|
|
9
67
|
## 0.3.11 - 2026-05-29
|
|
10
68
|
|
|
11
69
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kon-coding-agent
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.1
|
|
4
4
|
Summary: Minimal coding agent
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Requires-Python: >=3.12
|
|
@@ -10,6 +10,7 @@ Requires-Dist: anthropic>=0.79.0
|
|
|
10
10
|
Requires-Dist: curl-cffi>=0.15.0
|
|
11
11
|
Requires-Dist: ddgs>=9.0.0
|
|
12
12
|
Requires-Dist: html-to-markdown<3.4.0,>=3.3.0
|
|
13
|
+
Requires-Dist: lxml-html-clean>=0.4.3
|
|
13
14
|
Requires-Dist: openai>=2.21.0
|
|
14
15
|
Requires-Dist: pillow>=12.1.1
|
|
15
16
|
Requires-Dist: pydantic>=2.12.5
|
|
@@ -34,7 +35,7 @@ Description-Content-Type: text/markdown
|
|
|
34
35
|
<img src="docs/images/kon-screenshot.png" alt="Kon terminal UI screenshot" width="700" />
|
|
35
36
|
</p>
|
|
36
37
|
|
|
37
|
-
Kon is a minimal coding agent focused on a tiny core prompt, a small built-in toolset, and project-specific context layered on top only when you want it. The default system prompt stays **under 270 tokens**, and even including the built-in tool descriptions and parameter schemas, the fixed harness stays at about **~1,000 tokens**. The core experience is built around
|
|
38
|
+
Kon is a minimal coding agent focused on a tiny core prompt, a small built-in toolset, and project-specific context layered on top only when you want it. The default system prompt stays **under 270 tokens**, and even including the built-in tool descriptions and parameter schemas, the fixed harness stays at about **~1,000 tokens**. The core experience is built around **6 default tools** plus **2 extra web tools** included by the shipped config.
|
|
38
39
|
|
|
39
40
|
[Kon](https://bleach.fandom.com/wiki/Kon) is named after the artificial soul from *Bleach*.
|
|
40
41
|
|
|
@@ -89,34 +90,48 @@ kon
|
|
|
89
90
|
```text
|
|
90
91
|
usage: kon [-h] [--model MODEL]
|
|
91
92
|
[--provider {azure-ai-foundry,deepseek,github-copilot,openai,openai-codex,openai-responses,zhipu}]
|
|
92
|
-
[--api-key API_KEY] [--base-url BASE_URL]
|
|
93
|
-
[--
|
|
94
|
-
[--
|
|
93
|
+
[--prompt [PROMPT]] [--api-key API_KEY] [--base-url BASE_URL]
|
|
94
|
+
[--openai-compat-auth {auto,required,none}]
|
|
95
|
+
[--anthropic-compat-auth {auto,required,none}]
|
|
96
|
+
[--insecure-skip-verify] [--continue] [--resume RESUME_SESSION]
|
|
97
|
+
[--version] [--extra-tools EXTRA_TOOLS]
|
|
95
98
|
|
|
96
|
-
Kon
|
|
99
|
+
Kon
|
|
97
100
|
|
|
98
101
|
options:
|
|
99
102
|
-h, --help show this help message and exit
|
|
100
103
|
--model, -m MODEL Model to use
|
|
101
|
-
--provider
|
|
104
|
+
--provider {azure-ai-foundry,deepseek,github-copilot,openai,openai-codex,openai-responses,zhipu}
|
|
102
105
|
Provider to use
|
|
106
|
+
--prompt, -p [PROMPT]
|
|
107
|
+
Run a single prompt non-interactively, then exit (omit
|
|
108
|
+
the value or pipe stdin to read the prompt from stdin)
|
|
103
109
|
--api-key, -k API_KEY
|
|
104
110
|
API key
|
|
105
111
|
--base-url, -u BASE_URL
|
|
106
112
|
Base URL for API
|
|
113
|
+
--openai-compat-auth {auto,required,none}
|
|
114
|
+
Auth mode for OpenAI-compatible endpoints
|
|
115
|
+
--anthropic-compat-auth {auto,required,none}
|
|
116
|
+
Auth mode for Anthropic-compatible endpoints
|
|
117
|
+
--insecure-skip-verify
|
|
118
|
+
Skip TLS verification (e.g. self-signed certs on local
|
|
119
|
+
providers)
|
|
107
120
|
--continue, -c Resume the most recent session
|
|
108
121
|
--resume, -r RESUME_SESSION
|
|
109
|
-
Resume a specific session by ID (full or unique
|
|
122
|
+
Resume a specific session by ID (full or unique
|
|
123
|
+
prefix)
|
|
110
124
|
--version show program's version number and exit
|
|
111
125
|
--extra-tools EXTRA_TOOLS
|
|
112
|
-
Comma-separated extra tools to enable (e.g.
|
|
126
|
+
Comma-separated extra tools to enable (e.g.
|
|
127
|
+
web_search,web_fetch)
|
|
113
128
|
```
|
|
114
129
|
|
|
115
130
|
### Common examples
|
|
116
131
|
|
|
117
132
|
```bash
|
|
118
|
-
# choose a model explicitly
|
|
119
|
-
kon
|
|
133
|
+
# choose a provider and model explicitly
|
|
134
|
+
kon --provider openai-codex -m gpt-5.4
|
|
120
135
|
|
|
121
136
|
# continue your latest session
|
|
122
137
|
kon -c
|
|
@@ -124,7 +139,7 @@ kon -c
|
|
|
124
139
|
# resume a specific session by id or unique prefix
|
|
125
140
|
kon -r 3f2a8c1b-...
|
|
126
141
|
|
|
127
|
-
# enable
|
|
142
|
+
# enable extra web tools for this run
|
|
128
143
|
kon --extra-tools web_search,web_fetch
|
|
129
144
|
```
|
|
130
145
|
|
|
@@ -140,6 +155,23 @@ kon --extra-tools web_search,web_fetch
|
|
|
140
155
|
!!find . -name "*.py" | head -20
|
|
141
156
|
```
|
|
142
157
|
|
|
158
|
+
### Non-interactive
|
|
159
|
+
|
|
160
|
+
Run a single prompt headlessly with `-p`/`--prompt`, then exit:
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
# pass the prompt inline
|
|
164
|
+
kon -p "fix the failing test"
|
|
165
|
+
|
|
166
|
+
# read the prompt from stdin
|
|
167
|
+
cat task.md | kon -p
|
|
168
|
+
|
|
169
|
+
# capture the final response
|
|
170
|
+
kon -p "summarize this module" > out.txt
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
In this mode tools run **auto-approved** (no confirmation prompts). The final assistant response is printed to stdout on a clean finish; errors go to stderr. Exit codes: `0` completed, `1` error, `2` startup error (empty prompt or provider/init failure), `3` hit the max-turn limit. Session flags (`-c`/`--continue`, `-r`/`--resume`) aren't supported in this mode.
|
|
174
|
+
|
|
143
175
|
### Install from source
|
|
144
176
|
|
|
145
177
|
```bash
|
|
@@ -151,6 +183,19 @@ uv tool install .
|
|
|
151
183
|
> [!WARNING]
|
|
152
184
|
> Kon currently targets macOS and Linux. Windows is not tested yet.
|
|
153
185
|
|
|
186
|
+
### Development and testing
|
|
187
|
+
|
|
188
|
+
Run the test suite through `uv` so the dev dependencies are active — `pytest-asyncio` comes from the dev group, and a bare `pytest` without it fails every async test:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
git clone https://github.com/kuutsav/kon
|
|
192
|
+
cd kon
|
|
193
|
+
uv sync --dev
|
|
194
|
+
uv run python -m pytest
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Windows note:** if you see many failures like `async def functions are not natively supported`, you are running a pytest without `pytest-asyncio` — re-run with `uv run python -m pytest` as above. Remaining Windows-specific failures are worth reporting as issues.
|
|
198
|
+
|
|
154
199
|
---
|
|
155
200
|
|
|
156
201
|
## Why Kon
|
|
@@ -161,7 +206,7 @@ Kon tries to stay small in the places that matter most:
|
|
|
161
206
|
|
|
162
207
|
- **System prompt under 270 tokens** by default
|
|
163
208
|
- **6 core tools** for everyday coding work
|
|
164
|
-
- **2
|
|
209
|
+
- **2 extra web tools** for web lookup and content extraction in the shipped config
|
|
165
210
|
- **Project instructions are externalized** through `AGENTS.md`
|
|
166
211
|
- **Heavily configurable** defaults that you can tune around model, prompt, permissions, compaction, tools, and UI
|
|
167
212
|
- **Useful features are borrowed selectively** from other agents, like `/handoff` inspired by Amp
|
|
@@ -175,7 +220,7 @@ If you want a coding agent you can read, understand, fork, and adapt without inh
|
|
|
175
220
|
Kon stores config at:
|
|
176
221
|
|
|
177
222
|
```text
|
|
178
|
-
~/.kon/config.toml
|
|
223
|
+
~/.config/kon/config.toml
|
|
179
224
|
```
|
|
180
225
|
|
|
181
226
|
It is created automatically on first run, and old schemas are migrated forward automatically when needed.
|
|
@@ -243,24 +288,24 @@ This is the core experience: small, predictable, and enough for most coding task
|
|
|
243
288
|
|
|
244
289
|
### Extra tools
|
|
245
290
|
|
|
246
|
-
Kon also ships
|
|
291
|
+
Kon also ships extra built-in tools beyond the 6 core tools. The shipped config enables these web tools by default:
|
|
247
292
|
|
|
248
|
-
| Tool | Purpose |
|
|
293
|
+
| Tool | Purpose | Config |
|
|
249
294
|
| --- | --- | --- |
|
|
250
|
-
| `web_search` | Search the web with DuckDuckGo |
|
|
295
|
+
| `web_search` | Search the web with DuckDuckGo | `extra = ["web_search", "web_fetch"]` |
|
|
251
296
|
| `web_fetch` | Fetch and extract clean page content | Usually paired with `web_search` |
|
|
252
297
|
|
|
253
|
-
|
|
298
|
+
You can also add extra tools for a single run from the CLI:
|
|
254
299
|
|
|
255
300
|
```bash
|
|
256
301
|
kon --extra-tools web_search,web_fetch
|
|
257
302
|
```
|
|
258
303
|
|
|
259
|
-
|
|
304
|
+
To disable web tools, remove them from `~/.config/kon/config.toml`:
|
|
260
305
|
|
|
261
306
|
```toml
|
|
262
307
|
[tools]
|
|
263
|
-
extra = [
|
|
308
|
+
extra = []
|
|
264
309
|
```
|
|
265
310
|
|
|
266
311
|
---
|
|
@@ -369,7 +414,7 @@ Kon supports direct shell command execution from the input box using two prefixe
|
|
|
369
414
|
Kon stores sessions as append-only **JSONL** files in:
|
|
370
415
|
|
|
371
416
|
```text
|
|
372
|
-
~/.kon/sessions/
|
|
417
|
+
~/.config/kon/sessions/
|
|
373
418
|
```
|
|
374
419
|
|
|
375
420
|
That keeps sessions easy to inspect, archive, and move around.
|
|
@@ -429,8 +474,8 @@ Kon loads project guidance from `AGENTS.md` or `CLAUDE.md` files into the system
|
|
|
429
474
|
|
|
430
475
|
Load order:
|
|
431
476
|
|
|
432
|
-
1. `~/.kon/AGENTS.md`
|
|
433
|
-
2. matching ancestor directories from git root (or home) down to the current working directory
|
|
477
|
+
1. `~/.config/kon/AGENTS.md`
|
|
478
|
+
2. matching `AGENTS.md` or `CLAUDE.md` files in ancestor directories from git root (or home) down to the current working directory
|
|
434
479
|
|
|
435
480
|
Use these files for repo conventions, test commands, code style notes, deployment steps, or anything else you want loaded automatically.
|
|
436
481
|
|
|
@@ -438,8 +483,8 @@ Use these files for repo conventions, test commands, code style notes, deploymen
|
|
|
438
483
|
|
|
439
484
|
Skills are reusable instruction packs discovered from:
|
|
440
485
|
|
|
441
|
-
- project: `.
|
|
442
|
-
- global: `~/.
|
|
486
|
+
- project: `.agents/skills/`
|
|
487
|
+
- global: `~/.agents/skills/`
|
|
443
488
|
|
|
444
489
|
Each skill lives in its own directory with a `SKILL.md` file.
|
|
445
490
|
|
|
@@ -462,9 +507,12 @@ Important fields:
|
|
|
462
507
|
|
|
463
508
|
- `name` - skill identifier
|
|
464
509
|
- `description` - used for discovery and prompt context
|
|
465
|
-
- `register_cmd` - if `true`, exposes the skill as a slash command and includes it in the `/cmd` popup for manual triggering
|
|
510
|
+
- `register_cmd` - if `true`, exposes the skill as a slash command and includes it in the `/cmd` popup for manual triggering; use `only` to register it as a slash command without including it in the system prompt
|
|
466
511
|
- `cmd_info` - short help text for the slash menu
|
|
467
512
|
|
|
513
|
+
> [!NOTE]
|
|
514
|
+
> Installed skills do **not** appear as slash commands by default — without `register_cmd` they are only described to the model, which invokes them on its own when relevant. Add `register_cmd: true` to a skill's frontmatter to trigger it manually as `/<skill-name>`.
|
|
515
|
+
|
|
468
516
|
Validation highlights:
|
|
469
517
|
|
|
470
518
|
- lowercase letters, numbers, and `-` only
|
|
@@ -512,7 +560,7 @@ kon --provider deepseek --model deepseek-v4-flash
|
|
|
512
560
|
|
|
513
561
|
### Local models
|
|
514
562
|
|
|
515
|
-
Kon works well with local models served through an OpenAI-compatible endpoint. For one-off launches, you can force unauthenticated local behavior with `--openai-compat-auth none` or `--anthropic-compat-auth none`. To make that persistent across sessions, set `[llm.auth] openai_compat = "auto"|"none"` and/or `anthropic_compat = "auto"|"none"` in `~/.kon/config.toml`.
|
|
563
|
+
Kon works well with local models served through an OpenAI-compatible endpoint. For one-off launches, you can force unauthenticated local behavior with `--openai-compat-auth none` or `--anthropic-compat-auth none`. To make that persistent across sessions, set `[llm.auth] openai_compat = "auto"|"none"` and/or `anthropic_compat = "auto"|"none"` in `~/.config/kon/config.toml`.
|
|
516
564
|
|
|
517
565
|
More notes, tested models, and examples live in [docs/local-models.md](docs/local-models.md).
|
|
518
566
|
|
|
@@ -527,7 +575,7 @@ Kon supports two permission modes:
|
|
|
527
575
|
| `prompt` | Ask before mutating tool calls |
|
|
528
576
|
| `auto` | Skip approval prompts |
|
|
529
577
|
|
|
530
|
-
In `prompt` mode, non-mutating tools are allowed automatically, and some clearly read-only shell commands are also allowed.
|
|
578
|
+
In `prompt` mode, non-mutating tools are allowed automatically, and some clearly read-only shell commands are also allowed. This includes web tools: `web_search` and `web_fetch` are read-only, so they run **without an approval prompt** even in `prompt` mode. If you don't want the agent reaching the network at all, remove them from the `[tools] extra` config.
|
|
531
579
|
|
|
532
580
|
Use `/permissions` to switch modes for the current session and persist the change to config.
|
|
533
581
|
|