Releases: hizkifw/kon
Release list
v0.1.5: Speak Anthropic and OpenAI natively, and run long work in the background
Speak Anthropic and OpenAI natively, and run long work in the background
kon now speaks Anthropic's Messages API and OpenAI's Responses API in their
own wire formats, instead of only through an OpenAI-compatible endpoint. The
OpenAI backend runs stateless and replays each model's output items verbatim
so reasoning carries across turns; /login openai uses it, and the wire table,
login, and docs follow.
Long shell commands now run as background jobs. timeout is required on every
command, and a timeout of 0 runs the command in the background instead of
blocking, so the model does not leave a job behind without asking for one.
The agent can also hand a self-contained subtask to a subagent, which runs
kon run in its own session in the same directory and returns its answer whole
in the job's exit notice. Subagent sessions are recorded in the job directory,
so /jobs lists every job and previews a subagent's conversation, and /kill
stops a running one. Subagent sessions stay out of --resume and /resume, which
belong to the sessions you started.
You can steer a run that is already working or queue the next prompt. kon run
gains an explicit --stdin flag: stdin is now the message only when there are
no words, so a message given as words never touches stdin, and a caller that
leaves stdin open no longer stalls the run.
Bumping go-runewidth to v0.0.30 removed a per-code-point width table built in
package init, cutting process start to about 21 ms. make bench and make
loadtest measure the hot paths and the binary under load, with a tui-burst
scenario that sends deltas the way a network read actually delivers them.
# v0.1.4
v0.1.4
New
kon runsends a single prompt without the full-screen UI, for scripts and pipelines. Assistant messages stream to stdout as they are written; tool calls and the resume hint go to stderr only on a terminal, so pipes and logs get just the conversation.--format jsonemits one event per line, and--model/--effortapply to that run only and never writeconfig.json.- Resuming a session that another kon holds now opens it read-only instead of failing: the transcript updates live, and the status line says so. Sending a prompt or
/compacttakes the session over throughTakeOveronce the writer lets go, and the last poll's missed entries are replayed so the transcript is whole before this kon writes.
More robust
- Runs are cancelled when kon exits on SIGINT or SIGTERM, instead of leaving a blocked shell reporter that could hang
Runtime.Close. - A missing or unreadable image sends a fixed text placeholder instead of failing every later request in the session, and a switch to a model without vision no longer keeps sending images an earlier model read.
- History loads survive a line longer than the 2 MiB scanner limit (one huge paste), and a torn session write truncates back to the last whole record instead of corrupting the next append.
- Each session has a single writer: opening takes an exclusive lock and a held session is refused, so two processes can no longer fork the conversation.
- Provider usage is trusted only where its report actually covers the turns, so tool-loop iterations no longer fall back to a bytes/4 estimate, and a summary that would spend its whole token budget is refused before anything is written.
Sessions & models
- Resuming a session restores the model that answered it and replays any later
/modelswitches as "Model changed to …". The system prompt no longer names the model, so it never goes stale. - A fresh config now ships with no default model and an empty model list (the placeholder "default" profile could never run), and the runtime reports how to configure one. The full config schema is documented in the product docs.
UI
- The viewport re-anchors to the bottom on resize, so shrinking the window or growing the prompt no longer hides the newest lines under the input.
For kon developers
make tag [BUMP=…]andmake commithand the job to kon itself.make tagpicks the next version that does not collide with a local or remote tag, writes the changes since the last tag as the tag message, and creates it; it never pushes, since pushing publishes the release.- Wire formats now live in one table (
internal/provider/wire), login entries ininternal/login, and tool specs beside their calls insession. Config and the backends read from the same table, and the runners are built in one place and close without a gap.
v0.1.3
v0.1.2
v0.1.1
v0.1.0
Full Changelog: https://github.com/hizkifw/kon/commits/v0.1.0