Releases: benclawbot/Zeus
Release list
v0.1.0 — Refactor + Contract Tests
v0.1.0 — Refactor + Contract Tests
First tagged release. The 10-step cleanup plan from the previous development cycle is complete; this release ships the result plus the new contract tests that lock the wire shape between the Rust agent runtime and the React UI.
Installers
- Windows MSI (
Zeus_0.1.0_x64_en-US.msi) — system-wide Windows Installer bundle. - Windows NSIS (
Zeus_0.1.0_x64-setup.exe) — per-user installer, no admin required.
The ddgs search sidecar is not bundled in this release.
webSearchwill auto-detect apip install ddgson PATH first, then SearXNG (ifZEUS_SEARXNG_URLis set), then fall back to the raw DuckDuckGo HTML scrape. To bundle the sidecar instead, setZEUS_BUNDLE_DDGS=1beforenpm run tauri:build.
What's in this release
View extraction
App.tsx dropped from 2505 → 2299 lines. Five new view components pulled out as pure props-in JSX: HomeView, ProjectsView, MemoryView, HarnessEvolutionView, InspectorPanel (plus the previously-extracted SkillsView and SettingsView).
CSS Modules
View-specific styles now live in HomeView.module.css and ProjectsView.module.css. Shared chat-bubble chrome (used by AgentProgressBubble) stays in the global styles.css and is reached from the module via :global(.chat-body) where descendants cross the boundary. Memory / Harness Evolution / Inspector are pure shared chrome and were deliberately left on global — the cost-benefit of a module with re-exports is zero.
Registry split
src/providers/registry.ts (540 lines) is now a 36-line barrel re-exporting from four focused modules: chatTypes.ts, toolBlockParser.ts, toolDispatch.ts, providerRegistry.ts. All existing imports keep working.
Contract tests
typeDrift.test.ts(4 tests) — locks the Rust↔TS wire shape forProviderInfoandSkillSummaryvia JSON fixtures + a regex check on#[serde(rename_all = "camelCase")]. A drift on either side fails CI.bridge.test.ts(10 tests) — walks everyinvoke<...>("name", ...)call in TS and asserts it resolves to a name in the declared Tauri command list. Renaming a command without updating the list fails CI.bridge_integration.rs— does the inverse on the Rust side, asserts every name in the declared list has a matching#[tauri::command]declaration.
Test count: 250 passing (was 236, +14 from the new contract suites).
Opt-ins
ZEUS_BUNDLE_DDGS=1—scripts/build-ddgs-sidecar.{sh,ps1}now no-op unless this is set. Sidecar is no longer part of the default install path.ZEUS_BUNDLED_SKILLS=id1,id2,…— comma-separated allowlist for the Skills picker. Off-list skills still load on demand viaload_skill(id).
Planner polish
summarizeSessionTitle()— low-temp LLM probe that shortens session labels to 2–4 words.tightenStep()— clamps plan labels to ≤5 words / ≤40 chars so the plan panel never ships prose-length bullets.
CI
contract.yml— new fast workflow:tsc --noEmit+npm teston every push tomainand every PR. 250 tests, ~25s.package.yml— now uploads MSI / NSIS / raw exe / ddgs sidecar as workflow artifacts (skipped for PRs, 30-day retention).
Known gaps
- Visual regression: I have not run the built installer in a real browser session to eyeball the chat after the CSS module split. The contract tests verify the structural rules; the module-vs-global
:global()boundary deserves a manual pass before tagging v0.2. src/styles.cssis unchanged but the rules now duplicate the view-owned ones in the two new.module.cssfiles. A follow-up could prune the global duplicates. Kept for now so a missed rule in a module still renders something via the global fallback.