kon-coding-agent 0.4.0__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.4.0 → kon_coding_agent-0.4.1}/.agents/skills/kon-tmux-test/SKILL.md +5 -5
- {kon_coding_agent-0.4.0 → 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.4.0 → kon_coding_agent-0.4.1}/AGENTS.md +1 -1
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/CHANGELOG.md +35 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/PKG-INFO +29 -12
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/README.md +27 -11
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/docs/e2e-test-coverage-review.md +6 -6
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/docs/local-models.md +6 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/pyproject.toml +2 -1
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/cli.py +1 -1
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/context/skills.py +52 -10
- {kon_coding_agent-0.4.0 → 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.0 → kon_coding_agent-0.4.1}/src/kon/events.py +1 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/anthropic.py +6 -2
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/mock.py +19 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/openai_completions.py +6 -2
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/openai_responses.py +6 -2
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/loop.py +6 -3
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/notify.py +13 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/bash.py +35 -10
- 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.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/blocks.py +49 -16
- 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.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/export.py +10 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/formatting.py +40 -2
- 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.4.0 → 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.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/widgets.py +5 -2
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/version.py +1 -1
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/context/test_skills.py +157 -3
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_agentic_loop.py +25 -1
- kon_coding_agent-0.4.1/tests/test_errors.py +17 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_notify.py +15 -1
- {kon_coding_agent-0.4.0 → 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.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_bash_truncation.py +1 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_read.py +3 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_subprocess_cancellation.py +1 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_completion_chrome.py +5 -0
- kon_coding_agent-0.4.1/tests/ui/test_export.py +101 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_login_command.py +1 -1
- {kon_coding_agent-0.4.0 → 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.4.0 → kon_coding_agent-0.4.1}/uv.lock +3 -1
- kon_coding_agent-0.4.0/.github/workflows/test.yml +0 -33
- kon_coding_agent-0.4.0/src/kon/turn.py +0 -630
- kon_coding_agent-0.4.0/src/kon/ui/app.py +0 -1511
- kon_coding_agent-0.4.0/src/kon/ui/commands.py +0 -1014
- kon_coding_agent-0.4.0/tests/ui/test_streaming_blocks.py +0 -69
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/.agents/skills/kon-release-publish/SKILL.md +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/.agents/skills/kon-tmux-test/setup-test-project.sh +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/.gitignore +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/.python-version +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/LICENSE +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/docs/images/kon-screenshot.png +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/scripts/show_themes.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/__init__.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/async_utils.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/builtin_skills/init/SKILL.md +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/builtin_skills/review/SKILL.md +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/config.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/context/__init__.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/context/_xml.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/context/agent_mds.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/context/git.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/context/loader.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/core/compaction.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/core/handoff.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/core/types.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/defaults/__init__.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/defaults/config.toml +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/diff_display.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/gh_cli.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/git_branch.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/headless.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/__init__.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/base.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/models.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/oauth/__init__.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/oauth/copilot.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/oauth/openai.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/__init__.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/anthropic_capabilities.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/azure_ai_foundry.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/copilot.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/copilot_anthropic.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/github_copilot_headers.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/openai_codex_responses.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/openai_compat.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/llm/providers/sanitize.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/permissions.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/py.typed +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/runtime.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/session.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/sounds/completion.wav +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/sounds/error.wav +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/sounds/permission.wav +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/themes.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/__init__.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/_read_image.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/_tool_utils.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/base.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/edit.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/find.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/grep.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/read.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/web_fetch.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/web_search.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools/write.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/tools_manager.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/__init__.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/app_protocol.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/autocomplete.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/chat.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/clipboard.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/floating_list.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/input.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/latex.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/path_complete.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/prompt_history.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/selection_mode.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/styles.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/tool_output.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/tree.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/ui/welcome.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/src/kon/update_check.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/conftest.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/context/test_agents.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/llm/__init__.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/llm/test_anthropic_provider.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/llm/test_azure_ai_foundry_provider.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/llm/test_mock_provider.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/llm/test_openai_codex_provider_errors.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/llm/test_openai_oauth.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/llm/test_tls_verify.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_cli.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_cli_auth_flags.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_cli_provider_resolution.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_compaction.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_config_binaries.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_config_error_fallback.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_config_injection.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_config_migration.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_git_branch.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_handoff.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_handoff_link_interrupt.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_headless.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_launch_warnings.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_llm_lazy_imports.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_local_auth_config.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_model_provider_resolution.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_notifications_config.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_openai_compat.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_permissions.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_runtime_switch_model.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_session_persistence.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_session_queries.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_session_resume.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_session_tree.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_system_prompt.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_system_prompt_git_context.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_themes.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_ui_notifications.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_update_check.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/test_update_notice_behavior.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_diff.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_edit.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_edit_display.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_read_image.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_read_image_integration.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_read_image_resize.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_web_fetch.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/tools/test_write.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_app_approval_keys.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_autocomplete.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_floating_list.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_info_bar_clicks.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_info_bar_permissions.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_input_approval_submit.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_input_cursor_theme.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_input_handoff.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_input_paste.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_input_shell_style.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_keybindings.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_latex.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_permission_selection_status.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_permissions_command.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_prompt_history.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_queue_editing.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_status_line.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_styles.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_thinking_notifications_commands.py +0 -0
- {kon_coding_agent-0.4.0 → kon_coding_agent-0.4.1}/tests/ui/test_tool_output_expansion.py +0 -0
|
@@ -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.4.0 → 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,41 @@ 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
|
+
|
|
9
44
|
## 0.4.0 - 2026-05-31
|
|
10
45
|
|
|
11
46
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kon-coding-agent
|
|
3
|
-
Version: 0.4.
|
|
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
|
|
|
@@ -138,7 +139,7 @@ kon -c
|
|
|
138
139
|
# resume a specific session by id or unique prefix
|
|
139
140
|
kon -r 3f2a8c1b-...
|
|
140
141
|
|
|
141
|
-
# enable
|
|
142
|
+
# enable extra web tools for this run
|
|
142
143
|
kon --extra-tools web_search,web_fetch
|
|
143
144
|
```
|
|
144
145
|
|
|
@@ -182,6 +183,19 @@ uv tool install .
|
|
|
182
183
|
> [!WARNING]
|
|
183
184
|
> Kon currently targets macOS and Linux. Windows is not tested yet.
|
|
184
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
|
+
|
|
185
199
|
---
|
|
186
200
|
|
|
187
201
|
## Why Kon
|
|
@@ -192,7 +206,7 @@ Kon tries to stay small in the places that matter most:
|
|
|
192
206
|
|
|
193
207
|
- **System prompt under 270 tokens** by default
|
|
194
208
|
- **6 core tools** for everyday coding work
|
|
195
|
-
- **2
|
|
209
|
+
- **2 extra web tools** for web lookup and content extraction in the shipped config
|
|
196
210
|
- **Project instructions are externalized** through `AGENTS.md`
|
|
197
211
|
- **Heavily configurable** defaults that you can tune around model, prompt, permissions, compaction, tools, and UI
|
|
198
212
|
- **Useful features are borrowed selectively** from other agents, like `/handoff` inspired by Amp
|
|
@@ -274,24 +288,24 @@ This is the core experience: small, predictable, and enough for most coding task
|
|
|
274
288
|
|
|
275
289
|
### Extra tools
|
|
276
290
|
|
|
277
|
-
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:
|
|
278
292
|
|
|
279
|
-
| Tool | Purpose |
|
|
293
|
+
| Tool | Purpose | Config |
|
|
280
294
|
| --- | --- | --- |
|
|
281
|
-
| `web_search` | Search the web with DuckDuckGo |
|
|
295
|
+
| `web_search` | Search the web with DuckDuckGo | `extra = ["web_search", "web_fetch"]` |
|
|
282
296
|
| `web_fetch` | Fetch and extract clean page content | Usually paired with `web_search` |
|
|
283
297
|
|
|
284
|
-
|
|
298
|
+
You can also add extra tools for a single run from the CLI:
|
|
285
299
|
|
|
286
300
|
```bash
|
|
287
301
|
kon --extra-tools web_search,web_fetch
|
|
288
302
|
```
|
|
289
303
|
|
|
290
|
-
|
|
304
|
+
To disable web tools, remove them from `~/.config/kon/config.toml`:
|
|
291
305
|
|
|
292
306
|
```toml
|
|
293
307
|
[tools]
|
|
294
|
-
extra = [
|
|
308
|
+
extra = []
|
|
295
309
|
```
|
|
296
310
|
|
|
297
311
|
---
|
|
@@ -493,9 +507,12 @@ Important fields:
|
|
|
493
507
|
|
|
494
508
|
- `name` - skill identifier
|
|
495
509
|
- `description` - used for discovery and prompt context
|
|
496
|
-
- `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
|
|
497
511
|
- `cmd_info` - short help text for the slash menu
|
|
498
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
|
+
|
|
499
516
|
Validation highlights:
|
|
500
517
|
|
|
501
518
|
- lowercase letters, numbers, and `-` only
|
|
@@ -558,7 +575,7 @@ Kon supports two permission modes:
|
|
|
558
575
|
| `prompt` | Ask before mutating tool calls |
|
|
559
576
|
| `auto` | Skip approval prompts |
|
|
560
577
|
|
|
561
|
-
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.
|
|
562
579
|
|
|
563
580
|
Use `/permissions` to switch modes for the current session and persist the change to config.
|
|
564
581
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
<img src="docs/images/kon-screenshot.png" alt="Kon terminal UI screenshot" width="700" />
|
|
15
15
|
</p>
|
|
16
16
|
|
|
17
|
-
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
|
|
17
|
+
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.
|
|
18
18
|
|
|
19
19
|
[Kon](https://bleach.fandom.com/wiki/Kon) is named after the artificial soul from *Bleach*.
|
|
20
20
|
|
|
@@ -118,7 +118,7 @@ kon -c
|
|
|
118
118
|
# resume a specific session by id or unique prefix
|
|
119
119
|
kon -r 3f2a8c1b-...
|
|
120
120
|
|
|
121
|
-
# enable
|
|
121
|
+
# enable extra web tools for this run
|
|
122
122
|
kon --extra-tools web_search,web_fetch
|
|
123
123
|
```
|
|
124
124
|
|
|
@@ -162,6 +162,19 @@ uv tool install .
|
|
|
162
162
|
> [!WARNING]
|
|
163
163
|
> Kon currently targets macOS and Linux. Windows is not tested yet.
|
|
164
164
|
|
|
165
|
+
### Development and testing
|
|
166
|
+
|
|
167
|
+
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:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
git clone https://github.com/kuutsav/kon
|
|
171
|
+
cd kon
|
|
172
|
+
uv sync --dev
|
|
173
|
+
uv run python -m pytest
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
**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.
|
|
177
|
+
|
|
165
178
|
---
|
|
166
179
|
|
|
167
180
|
## Why Kon
|
|
@@ -172,7 +185,7 @@ Kon tries to stay small in the places that matter most:
|
|
|
172
185
|
|
|
173
186
|
- **System prompt under 270 tokens** by default
|
|
174
187
|
- **6 core tools** for everyday coding work
|
|
175
|
-
- **2
|
|
188
|
+
- **2 extra web tools** for web lookup and content extraction in the shipped config
|
|
176
189
|
- **Project instructions are externalized** through `AGENTS.md`
|
|
177
190
|
- **Heavily configurable** defaults that you can tune around model, prompt, permissions, compaction, tools, and UI
|
|
178
191
|
- **Useful features are borrowed selectively** from other agents, like `/handoff` inspired by Amp
|
|
@@ -254,24 +267,24 @@ This is the core experience: small, predictable, and enough for most coding task
|
|
|
254
267
|
|
|
255
268
|
### Extra tools
|
|
256
269
|
|
|
257
|
-
Kon also ships
|
|
270
|
+
Kon also ships extra built-in tools beyond the 6 core tools. The shipped config enables these web tools by default:
|
|
258
271
|
|
|
259
|
-
| Tool | Purpose |
|
|
272
|
+
| Tool | Purpose | Config |
|
|
260
273
|
| --- | --- | --- |
|
|
261
|
-
| `web_search` | Search the web with DuckDuckGo |
|
|
274
|
+
| `web_search` | Search the web with DuckDuckGo | `extra = ["web_search", "web_fetch"]` |
|
|
262
275
|
| `web_fetch` | Fetch and extract clean page content | Usually paired with `web_search` |
|
|
263
276
|
|
|
264
|
-
|
|
277
|
+
You can also add extra tools for a single run from the CLI:
|
|
265
278
|
|
|
266
279
|
```bash
|
|
267
280
|
kon --extra-tools web_search,web_fetch
|
|
268
281
|
```
|
|
269
282
|
|
|
270
|
-
|
|
283
|
+
To disable web tools, remove them from `~/.config/kon/config.toml`:
|
|
271
284
|
|
|
272
285
|
```toml
|
|
273
286
|
[tools]
|
|
274
|
-
extra = [
|
|
287
|
+
extra = []
|
|
275
288
|
```
|
|
276
289
|
|
|
277
290
|
---
|
|
@@ -473,9 +486,12 @@ Important fields:
|
|
|
473
486
|
|
|
474
487
|
- `name` - skill identifier
|
|
475
488
|
- `description` - used for discovery and prompt context
|
|
476
|
-
- `register_cmd` - if `true`, exposes the skill as a slash command and includes it in the `/cmd` popup for manual triggering
|
|
489
|
+
- `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
|
|
477
490
|
- `cmd_info` - short help text for the slash menu
|
|
478
491
|
|
|
492
|
+
> [!NOTE]
|
|
493
|
+
> 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>`.
|
|
494
|
+
|
|
479
495
|
Validation highlights:
|
|
480
496
|
|
|
481
497
|
- lowercase letters, numbers, and `-` only
|
|
@@ -538,7 +554,7 @@ Kon supports two permission modes:
|
|
|
538
554
|
| `prompt` | Ask before mutating tool calls |
|
|
539
555
|
| `auto` | Skip approval prompts |
|
|
540
556
|
|
|
541
|
-
In `prompt` mode, non-mutating tools are allowed automatically, and some clearly read-only shell commands are also allowed.
|
|
557
|
+
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.
|
|
542
558
|
|
|
543
559
|
Use `/permissions` to switch modes for the current session and persist the change to config.
|
|
544
560
|
|
|
@@ -6,14 +6,14 @@ This note captures the current tmux E2E coverage, when it was last materially up
|
|
|
6
6
|
|
|
7
7
|
The current tmux E2E harness lives in the repo-local Kon skill:
|
|
8
8
|
|
|
9
|
-
- `.
|
|
10
|
-
- `.
|
|
9
|
+
- `.agents/skills/kon-tmux-test/SKILL.md`
|
|
10
|
+
- `.agents/skills/kon-tmux-test/run-e2e-tests.sh`
|
|
11
11
|
|
|
12
12
|
The main script launches Kon in a detached tmux session, drives keyboard input with `tmux send-keys`, captures pane output to `/tmp/kon-test-*.txt`, and relies on the reviewing agent/user to evaluate those captured outputs.
|
|
13
13
|
|
|
14
14
|
## Last material update
|
|
15
15
|
|
|
16
|
-
Git history for `.
|
|
16
|
+
Git history for `.agents/skills/kon-tmux-test` shows the last material test update was:
|
|
17
17
|
|
|
18
18
|
```text
|
|
19
19
|
ae88aae 2026-03-18 21:18:04 +0530 test: make tmux e2e tab completion cases repo-deterministic
|
|
@@ -44,7 +44,7 @@ The coverage is strongest for basic UI triggers and tab completion. It is weaker
|
|
|
44
44
|
|
|
45
45
|
## Current documentation drift
|
|
46
46
|
|
|
47
|
-
`.
|
|
47
|
+
`.agents/skills/kon-tmux-test/SKILL.md` is partially stale compared with `run-e2e-tests.sh`.
|
|
48
48
|
|
|
49
49
|
Examples:
|
|
50
50
|
|
|
@@ -165,7 +165,7 @@ Several of these can be covered with deterministic negative-state tests, even be
|
|
|
165
165
|
| --- | --- |
|
|
166
166
|
| Built-in `/init` appears | Slash menu includes `/init` with its guided setup description |
|
|
167
167
|
| `/init` selection behavior | Selecting `/init` inserts/submits the skill trigger path correctly without breaking normal slash-command handling |
|
|
168
|
-
| Custom registered skill | Seed a temp project `.
|
|
168
|
+
| Custom registered skill | Seed a temp project `.agents/skills/<name>/SKILL.md` with `register_cmd: true`, launch Kon, verify command appears in slash menu |
|
|
169
169
|
| Skill preview in resume list | If a skill-triggered session is persisted, `/resume` preview shows `/skill-name ...` instead of raw internal prompt scaffolding |
|
|
170
170
|
|
|
171
171
|
### P1: Queue and steer behavior
|
|
@@ -196,7 +196,7 @@ Several of these can be covered with deterministic negative-state tests, even be
|
|
|
196
196
|
## Suggested implementation order
|
|
197
197
|
|
|
198
198
|
1. Isolate `HOME` and test config/session directories in the tmux harness.
|
|
199
|
-
2. Update `.
|
|
199
|
+
2. Update `.agents/skills/kon-tmux-test/SKILL.md` to match the current script.
|
|
200
200
|
3. Add P0 runtime-mode and info-bar tests.
|
|
201
201
|
4. Add deterministic command negative-state tests for `/compact`, `/handoff`, `/copy`, and `/export`.
|
|
202
202
|
5. Add session resume/continue/delete tests using seeded fixtures.
|
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
This document provides detailed information about running and configuring local models with Kon.
|
|
4
4
|
|
|
5
|
+
## Choosing a model
|
|
6
|
+
|
|
7
|
+
Kon leans heavily on tool calling: every file read, edit, search, and skill invocation is a structured tool call. Very small models (roughly 8B and below, or aggressive quantizations) often produce malformed tool calls, ignore tools entirely, or fail to follow skill instructions — which looks like Kon "not working" when it's the model that can't drive the harness. If a tiny model keeps narrating instead of acting, or tool calls fail to parse, try a larger model before filing a bug.
|
|
8
|
+
|
|
9
|
+
The combinations in the table below are known to work and are a good baseline; among them, prefer the largest one your hardware can serve at a usable speed.
|
|
10
|
+
|
|
5
11
|
## Tested Models
|
|
6
12
|
|
|
7
13
|
> Tested on llama server build b8740
|
|
@@ -14,7 +14,7 @@ default = true
|
|
|
14
14
|
|
|
15
15
|
[project]
|
|
16
16
|
name = "kon-coding-agent"
|
|
17
|
-
version = "0.4.
|
|
17
|
+
version = "0.4.1"
|
|
18
18
|
description = "Minimal coding agent"
|
|
19
19
|
readme = "README.md"
|
|
20
20
|
requires-python = ">=3.12"
|
|
@@ -25,6 +25,7 @@ dependencies = [
|
|
|
25
25
|
"curl-cffi>=0.15.0",
|
|
26
26
|
"ddgs>=9.0.0",
|
|
27
27
|
"html-to-markdown>=3.3.0,<3.4.0",
|
|
28
|
+
"lxml-html-clean>=0.4.3",
|
|
28
29
|
"openai>=2.21.0",
|
|
29
30
|
"pillow>=12.1.1",
|
|
30
31
|
"pydantic>=2.12.5",
|