startDaemon accepts the daemon of another launch when its own child
exits 0. A 403 from the daemon marks daemon.json as stale: the wrapper
deletes it and starts a new daemon once.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An exclusive daemon.lock (stale after 2 minutes) is held from before the
health check until the daemon listens; a launch that loses exits 0.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The daemon passes `git ls-files --others --ignored --directory` as
escaped ignore globs to addCollection. QMD's YAML write-through drops
`ignore` and index.yml wins on every re-sync, so the list is also
written into index.yml and re-synced whenever it changes.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
QMD 2.8.3 createStore unloads the models after 5 idle minutes, which
made the next search reload them.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Removal reads the daemon PID before --stop and waits up to 10 s for it
to exit. A model file that cannot be deleted stays recorded in the state
for a retry instead of aborting removal, and a failing models block
restore only warns.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Auto now rolls back and reports "not suitable" when Node.js is too old,
npm or the model download fails. A failing GPU probe falls back to the
CPU in both Yes and Auto.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Check that Codex keeps the V1 multi-agent implementation that honors
max_depth, and, with AI_CONFIG_LIVE_TESTS=1, that Claude withholds the Agent
tool from subagents, refuses subagents above the concurrency limit, and
blocks git reset --hard in every shell tool.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Plan each sync before writing, record the plan in .ai-config-transaction.json,
and roll an interrupted destination back from its backups on the next run.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Build into a per-run sibling directory and replace generated/ only after
validation, with a lock around the swap, so a failed or parallel build never
leaves generated/ partial.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Skip the semantic-search skill while semantic retrieval is disabled and remove
a setup-owned copy when it is turned off.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Codex sandbox on Windows denies the pipes that the daemon and worker
process use, so searches waited 120 seconds and then failed. Detect that and
run the search in-process.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Load both models in bfloat16 when a CUDA GPU supports it and keep float32 on
CPUs. Document the daemon versioning and the indexed file types.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Drop the trailing space after "Query:" as in the model card and include the
prompt in the query cache key.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Code after a top-level closing brace belonged to the preceding function, for
example shell loops labeled as quote_toml. Attribute it to the module.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Add HTML, CSS, SCSS, XAML, SQL, XML, project, Razor, Kotlin, Gradle, and
module JavaScript files with SQL and Kotlin symbols, and rebuild the index.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Derive the daemon address and start lock from a hash of server.py, so an
updated server never reuses a daemon still running older code.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
os.execv does not quote arguments on Windows, so the hand-off to the virtual
environment split every multi-word --query and search always failed. Run the
runtime with subprocess on Windows instead.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Start-Process -WindowStyle is unavailable in PowerShell on Linux, which broke
the CI PowerShell job. Use ProcessStartInfo with CreateNoWindow instead.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Create <destination>/.ai-config.lock exclusively while syncing so parallel
installs or updates fail instead of interleaving writes. A lock left by an
exited process of the same shell on the same host is replaced.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Write config.toml, settings.json, the manifest, and every other managed file to
a temporary sibling and rename it over the target, so an interrupted run
cannot leave a partly written file. Previously only SKILL.md was replaced
this way.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude discovers only skills/<name>/SKILL.md, so 84 nested skills, including
all rule skills, were invisible. Flatten the categorized catalog for Claude,
keep references, and fail the build on duplicate names or a name that differs
from its directory.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>