-
v2.3.0 Stable
released this
2026-07-29 13:13:06 -07:00 | 3 commits to main since this releaseKaimon v2.3.0
Kaimon 2.3.0
Custom system images for managed sessions, a fix for restarts losing the gate
when Julia was launched with a separated--sysimageflag, and two silent-data
bugs: per-project launch config and session preferences were being dropped on
load, and a clean shutdown ended in a stack trace.Requires Tachikoma 2.5 and bundles KaimonGate 1.2.
Custom system images and launch config (#69)
A project with a custom sysimage can now declare it, so a session Kaimon spawns
boots the same way you start the project by hand instead of paying full
compilation cost.LaunchConfiggainssysimage,julia_bin(a Julia binary,
or a wrapper script that forwards its arguments to one), andstartup_file
(~/.julia/config/startup.jlwas previously suppressed unconditionally).There are two places to set it. Per user, in
projects.json— editable from the
TUI Config tab, select a project and presse:"launch_config": { "sysimage": "MyProject-image.so", "heap_size_hint": "8G" }Or per project, checked into the repo, in the project's own
kaimon.toml, so
everyone working on it gets the same launch recipe with no local setup:[launch] sysimage = "MyProject-image.so" # relative → resolved against the project root threads = "auto"The user's entry is overlaid field-wise on the project's, so a single field can
be overridden locally while the rest is inherited. A configured sysimage that
isn't on disk is logged and skipped — the session still starts, on the default
image. Thanks to @ufechner7 for the report.Fix: restarting a REPL launched with
--sysimage <path>(#69)Restarting a REPL you started yourself replays its original launch flags, so a
custom sysimage, thread count, and heap hint survive. But the check for "was
this launched with a script?" didn't know which flags take a value as a separate
token, so the path injulia --sysimage /path/sys.solooked like a script
argument. The restart then took the verbatim-replay branch and re-exec'd a plain
interactive REPL that never calledserve()— the session didn't come back at
all. The attached forms (-J/path,--sysimage=/path) were unaffected.Value-taking flags are now recognized as a shared set, and
-e/-E/-Lare
explicit user-code triggers rather than a side effect of the path check.Fix: launch config and session preferences were silently discarded
Nested JSON objects parse as
JSON.Object, which is anAbstractDictbut not a
Dict— and bothprojects.jsonreaders guarded onisa Dict. Every
per-projectlaunch_config(threads, GC threads, heap hint, extra flags) and
every persistedmirror_repl/allow_restartpreference was dropped on load
and silently replaced with defaults.Fix: clean shutdown no longer ends in a stack trace
The managed-Qdrant
atexitreaper read its child's pid after terminating it,
to decide whether the PID file was its own.getpidthrowsESRCHon a handle
whose process has exited and been reaped — the expected state at that point — so
the error escapedatexiton every clean exit.Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)