Sweep for stale naming/defaults left over from the pi-only era (the same
class of bug as the pi_binary compile break):
- socket.rs: non-local spawn defaulted the binary to `hermes-agent` (a binary
that does not exist) and hardcoded `--mode json` (invalid for zot) — a
reachable latent bug via `colibri spawn-agent <provider>`. Default to zot and
derive argv from a single default_agent_args() helper, shared with autospawn
(removes the duplicated zot-vs-pi arg logic).
- glasspane/tui/client/daemon: rename the stale wire field `pi_session_id` →
`session_id` (zot agents have session ids too). `#[serde(alias =
"pi_session_id")]` keeps deserializing legacy/persisted snapshots.
- contracts + runtime_inventory: record `zot` version alongside `pi` for
complete agent provenance (detect_zot_version()).
- Harness-neutral stale comments ("Pi agent", "hermes-agent" example,
COLIBRI_PI_BINARY in a test doc).
- cmd_spawn_agent: #[allow(clippy::too_many_arguments)] — this lint was already
failing `clippy -D warnings`, i.e. the CI gate was red on main and thus
unenforceable. The gate (scripts/ci-checks.sh) now passes green.
- AGENTS.md: document that ci-checks.sh passing is mandatory before merge while
no Actions runner enforces .forgejo/workflows/ci.yml.
Validated: ./scripts/ci-checks.sh green (fmt, clippy -D warnings, tests, md).
Stacks on #157 (zot-rpc driver) and #156 (0.12 build fix).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
colibri-probe now calls dotenvy::dotenv() at startup, so a DEEPSEEK_API_KEY pasted into a local .env is picked up automatically — no manual sourcing. .env is gitignored (a committed/pushed key is permanently compromised); .env.example is the committed template. No key value passes through the repo.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
First operator-approved slice. crates/colibri-deepseek owns the DeepSeek client + prefix-cache accounting, depends on colibri-contracts, and produces the pipeline: DeepSeek request -> byte-stable prefix -> provider-smoke.result.v1 -> run-manifest.v1 -> local JSONL event log (tmp/, gitignored). The colibri-probe binary is now a thin entrypoint over the crate; reqwest/chrono moved out of the root package.
Validated on Linux: cargo build --workspace --release PASS; colibri-contracts golden tests 5 passed; probe (skipped, no key) emits the smoke result and writes both schema lines to the JSONL log. No TS production paths touched. Live cache values await DEEPSEEK_API_KEY (proof gate #2).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
My 094b98f accidentally committed unresolved conflict markers when a stash pop collided with Codex's 6269030 (which independently fixed Linux Pi detection by canonicalizing the pi bin and walking ancestors for the package.json — covers nvm). Restoring 6269030's clean version; my npm-root-based variant was redundant and is dropped.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
pi --version has no stable stdout and the ~/.npm-global path does not match nvm layouts, so Pi went undetected on Linux. Now also resolve the active node's global modules via 'npm root -g' and read pi's package.json. Additive — the FreeBSD/.npm-global paths Codex hardened are unchanged.
Verified on domedog (login shell, node v24.16.0): inventory now reports pi 0.75.5.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Prefer user and PATH candidates before system defaults, fall back to package.json discovery, and accept version output from stderr for shims.
---
Build: pass — cargo build --release
Tests: pass — cargo test (0 tests)
Expose COLIBRI_AGENT for lane attribution and add a runtime inventory binary matching the Clawdie runtime schema.
---
Build: pass — cargo build --release
Tests: pass — cargo test (0 tests)
Greenfield cross-platform (FreeBSD/Linux) Rust crate per clawdie-ai doc/COLIBRI-CONTROLPLANE-PLAN.md. colibri-probe sends a byte-stable DeepSeek prefix twice and reports prompt_cache_hit_tokens as a clawdie.provider-smoke.result.v1 manifest; build-only/skipped without DEEPSEEK_API_KEY.
Stack: tokio + reqwest(rustls-tls, no OpenSSL) + serde + chrono. Builds clean on Linux (cargo build --release, 1m16s); rust-toolchain pinned to 1.95.0. FreeBSD (osa) build is the next lane.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>