Releases: PlayForm/Aphrodite
Aphrodite/v1.0.4
Summary
Documentation overhaul + Unicode normalization sweep + CI fix. All four READMEs rewritten with install instructions, post-install fs trees, and crate-level API docs. 41 files normalized (em dashes → ASCII hyphens). Pyright CI passing.
Changes
- Rewrite monorepo README — add install section, modern Under the Hood (dylib-based), fix stale versions
- Rewrite plugin README — add post-install ~/.hermes tree, config reference, verify/uninstall steps
- New: crates/aphrodite/README.md — C ABI reference (17 functions), pipeline architecture
- New: crates/aphrodite-hermes/README.md — bridge architecture, tool dispatch table
- Restructure .hermes/ — 56→17 files into audits/ plans/ reports/ scripts/
- Normalize all Unicode dashes → ASCII hyphens (41 files, 241 replacements)
- Fix pyright: _read_str handle c_char_p.value possibly None (CI: 0 errors)
- Remove headroom-core from workspace + Publish (vendored bundled dep)
Infrastructure
- Build: cargo build --release ✅
- Tests: cargo test --workspace ✅ (all suites, 0 failures)
- Pyright: 0 errors, 0 warnings ✅
Aphrodite/v1.0.3
Summary
Fix crates.io publish workflow — all three crates (headroom-core → aphrodite → aphrodite-hermes) now publish sequentially with proper version requirements on every path dependency.
Changes
- Add headroom-core to workspace members (needed for crates.io publish)
- Add version to aphrodite dep on headroom-core (0.1.0), aphrodite-hermes dep on aphrodite (1.0.3)
- Split Publish.yml matrix into sequential: Publish-Headroom → Publish-Aphrodite → Publish-Hermes
- Bump crate + hermes: 1.0.1 → 1.0.3
- Update README badge + AGENTS.md binary version
Infrastructure
- Build: cargo build --release ✅
- Tests: cargo test --workspace ✅ (all 17 suites, 0 failures)
Aphrodite/v1.0.2
Full Changelog: Aphrodite/v1.0.1...Aphrodite/v1.0.2
Full Changelog: Aphrodite/v1.0.1...Aphrodite/v1.0.2
Aphrodite/v1.0.1
Full Changelog: Aphrodite/v1.0.0...Aphrodite/v1.0.1
Aphrodite/v1.0.0
Aphrodite v1.0.0 💋 Plugin v2.0.0
Summary
Milestone release — 33/33 release audit claims verified ✅. Fixes the sole regression from the Python→Rust migration (dylib hot-reload), adds cargo install aphrodite bootstrap, crates.io Publish workflow, and a 10-point version audit skill.
Changes
- Dylib hot-reload restored — v0.9.0 claimed hot-reload but
headroom_ffi.pywas deleted during migration. Fixed:_dylib_mtimeglobal tracks file mtime,_load_dylib()reloads on change. Logs"dylib mtime changed — hot-reloading". aphrodite setupsubcommand — 10-step bootstrap aftercargo install aphrodite. Self-hash (BLAKE3), verify hermes, copy binary + dylibs, write config + manifest from templates, symlink plugin, register with hermes.- Template-driven config —
templates/aphrodite.toml+templates/__init__.pyembedded viainclude_str!. Placeholder replacement for{api_url}/{model}. - Publish.yml — GitHub Actions workflow publishes
aphrodite+aphrodite-hermesto crates.io onAphrodite/v*tags. - Version audit skill — 10-point checklist covers every version location in the repo.
- Release audit — 33 claims across 9 releases (v0.9.0–v0.9.8) verified against current code. Full report at
.hermes/audits/release-verification.md. - Security hardening — Binary
chmod 700, configchmod 600, dylibschmod 755. BLAKE3 self-hash. No secrets in CLI args. - ccr_db_path fix —
PathBuf→Option<PathBuf>(clap subcommand compatibility).
Infrastructure
- Build:
cargo build --release✅ - Tests:
cargo test --workspace✅ (990 passed, 0 failed) - Release audit: 33/33 claims verified ✅
- Submodule hashes: match ✅
- Version audit: 10/10 points match ✅
Links
- Full Changelog: Aphrodite/v0.9.8...Aphrodite/v1.0.0
- crates.io: https://crates.io/crates/aphrodite
Full Changelog: Aphrodite/v0.9.8...Aphrodite/v1.0.0
Full Changelog: Aphrodite/v0.9.8...Aphrodite/v1.0.0
Full Changelog: Aphrodite/v0.9.8...Aphrodite/v1.0.0
Aphrodite/v0.9.8
Aphrodite v0.9.8 💋 Plugin v1.62.66
Summary
cargo install aphrodite bootstrap — single-command setup that deploys the proxy binary + dylibs + config + plugin manifest under ~/.hermes/aphrodite/. Adds aphrodite setup subcommand, crates.io Publish.yml workflow, template-driven config, and a 10-point version audit skill.
Changes
aphrodite setupsubcommand — 10-step bootstrap: self-hash (BLAKE3), verify hermes, copy binary + dylibs to~/.hermes/aphrodite/binaries/, writeaphrodite.tomlfrom template, writeplugin.yaml+__init__.py, symlink plugin, register with hermes. Run aftercargo install aphrodite.- Template-driven config —
templates/aphrodite.toml+templates/__init__.pyembedded viainclude_str!. Placeholder replacement for{api_url}/{model}. No inliner#"..."#strings. - Publish.yml — GitHub Actions workflow publishes
aphrodite+aphrodite-hermesto crates.io onAphrodite/v*tags. Runscargo testfirst, thencargo publish --no-verify. RequiresCARGO_REGISTRY_TOKENinReleaseenvironment. - Security hardening — Binary
chmod 700, configchmod 600, dylibschmod 755. BLAKE3 self-hash displayed on every setup. No secrets in CLI args. - ccr_db_path fix —
PathBuf→Option<PathBuf>. Empty default broke clap subcommand recognition (aphrodite setupwas rejected). - Dependencies — Add
blake3 = "1.7", makedirsnon-optional. - Parallel smoke test —
Maintain/scripts/smoke-dispatch.shdispatches 6 poll workers for concurrent proxy testing. - Version audit skill — 10-point checklist covers every version location: Cargo.toml ×2, plugin.yaml ×2, README badges ×3, AGENTS.md ×2,
__init__.pydocstring. Includes one-command audit script. - Stale version fixes — Plugin README badge
v1.62.62→v1.62.66, AGENTS.md pluginv1.62.62→v1.62.66, AGENTS.md binaryv0.9.4→v0.9.8.
Infrastructure
- Build:
cargo build --release✅ - Tests:
cargo test --workspace✅ (990 passed, 0 failed) - Parallel: 6× poll_worker.py smoke test ✅ (0 errors)
- Version audit: 10/10 points match ✅
- Submodule hashes: match ✅
Links
- Full Changelog: Aphrodite/v0.9.7...Aphrodite/v0.9.8
- crates.io: https://crates.io/crates/aphrodite
Aphrodite v0.9.7
Aphrodite v0.9.7 💋 Plugin v1.62.65
Summary
Synced vendor/headroom fork with upstream/main — merged 10+ commits including
v0.27.0 release, Cortex Code provider, ONNX embedder, tokenizer fix, tree-sitter pin,
Anthropic tool forwarding, and Windows encoding fix.
Changes
- vendor/headroom: merged upstream/main (95b2333) — v0.26.0 → v0.27.0
- feat(providers): Cortex Code (Snowflake CoCo) support
- fix(memory): ONNX embedder for wrap --memory sync
- fix(tokenizers): literal special-token strings as plain text
- fix(proxy): Anthropic byte-faithful tool forwarding
- fix(code): tree-sitter-language-pack <1.0 pin
- fix(e2e): Codex wrap alignment, Windows UTF-8 encoding
- 8 conflicts resolved (all upstream Python/docs/config — no Rust changes)
Infrastructure
- Build: ✅ cargo build --release
- Tests: ✅ 6/6 aphrodite-hermes
- Headroom-core: ✅ cargo check clean
Links
- Full Changelog: Aphrodite/v0.9.6...Aphrodite/v0.9.7
Full Changelog: Aphrodite/v0.9.6...Aphrodite/v0.9.7
Aphrodite/v0.9.6
Aphrodite v0.9.6 💋 Plugin v1.62.64
Summary
Skill system sync — fixed 10 phantom skills in dylib registry, added missing
skill registration to Python shim, bumped stale profile skill versions.
Changes
- fix(skills.rs): Replaced 14-skill list (10 phantoms with no SKILL.md) with
the 9 actual skills on disk. Removed: center-testing, coding-defaults,
compression-architecture, context-efficiency, dev-workflow, iterate-release,
output-formatting, presentation, session-patterns, tool-guide. Added:
auto-expand-testing, cargo-upgrade, development-lessons, operations,
v0.8.6-patterns. - fix(init.py): Skill registration was completely missing — Hermes
never loaded aphrodite skills. Addedctx.register_skill()loop reading from
monoreposkills/directory, plus ctypes signature for
aphrodite_hermes_list_skills. - fix(plugin.yaml): Updated skill list comment to match actual 9 skills.
- chore(skills): Bumped stale version references in profile skills:
rebuild-chain (v0.8.43→v0.9.5), docs-conventions badges (v0.8.43→v0.9.5,
v1.62.50→v1.62.63).
Infrastructure
- Build: ✅ cargo build --release
- Tests: ✅ 6/6 aphrodite-hermes
- Skills on disk: 9 ✅ — all registered + all have SKILL.md
Links
- Full Changelog: Aphrodite/v0.9.5...Aphrodite/v0.9.6
Aphrodite/v0.9.5
Aphrodite v0.9.5 💋 Plugin v1.62.63
Summary
Critical bug fixes from Python→Rust migration audit — hooks were no-ops,
context engine was broken, download.sh used wrong version, test assertion failed.
Changes
- fix(hooks): Hook dispatch was no-op — all 5 hooks registered as
lambda: None.
Now dispatch to Rust dylib viaaphrodite_hermes_call_hookwith ctypes setup. - fix(context-engine):
context_engine_pre_llmdispatched to tool registry
but was missing fromtools.rs→ returned{"error": "unknown tool"}silently.
Added handler that callsaphrodite::hooks::pre_llm_call. - fix(download.sh): Auto-detected version from
plugin.yaml(1.62.62) but
GitHub releases use crate version (0.9.4) → download 404. Now reads from
crates/aphrodite/Cargo.tomlfirst. - fix(test):
test_version_is_semverfailed —aphrodite_hermes_version()
returns JSON{"version":"0.1.1"}but test checkedstarts_with("0.").
Now parses JSON before assertion. - docs: Restored comprehensive README (867→847 lines) — deduped Migration
section into Architecture.
Infrastructure
- Build: ✅ cargo build --release
- Tests: ✅ 6/6 aphrodite-hermes
- Audit methodology: 9-step systematic approach documented in
aphrodite-dev-workflow/references/codebase-audit-methodology.md
Methodology
Discovered via systematic 9-step audit:
- Git history scan (50 commits)
- Deleted file audit (git diff --diff-filter=D)
- Reference cross-check (rg for dangling refs)
- C ABI surface comparison (before/after extern fn list)
- Test execution (cargo test)
- Runtime code path analysis (trace hook→handler→dispatch)
- Cross-system version sync (Cargo.toml vs plugin.yaml vs badges)
- Script dry-run testing (bash download.sh)
- Dead code / orphan path detection (dispatch target existence)
Links
- Full Changelog: Aphrodite/v0.9.4...Aphrodite/v0.9.5
Aphrodite/v0.9.4
Full Changelog: Aphrodite/v0.9.3...Aphrodite/v0.9.4