Skip to content

AMBER (ENGRAM) v1.5.12

Choose a tag to compare

@JJHbrams JJHbrams released this 06 Sep 16:11
· 5 commits to master since this release

Install with AMBER_1.5.12.661_x64-setup.exe (199,920,978 bytes, SHA-256 6f40260fb31de9c21281808157b43f7614f0205405f98f7b5b0693994592e50d). This release folds in v1.5.9 through v1.5.12.

Offline machines: the optional FP32 ModelPack is unchanged since v1.5.8 — core/install/model_manifest.py and resource/embedding-model/ are byte-identical — so download AMBER_1.5.8.552_FP32_ModelPack.zip from the v1.5.8 release and import it with --role model-cache --import-pack <zip>. It is not duplicated here.

AMBER (ENGRAM) v1.5.12 makes the overlay's bubble chat usable with an externally started renderer. Engram now hosts an authenticated loopback Event API that renderers connect to on their own, and it never launches, terminates, or inspects a renderer process.

External overlay Event API v2

  • Token-authenticated JSONL on 127.0.0.1. Renderers read ~/.engram/overlay-event-api-v2.json, register, and reconnect with bounded backoff after a host restart rotates credentials.
  • One connection may advertise several logical renderers as a catalog; Engram promotes a replace owner only after the matching renderer.ready.
  • Published policy is metadata-only. Prompts, thinking, tool I/O, file paths, and memory contents are never sent.
  • Engram stores only a renderer's logical ID and mode — never executables, arguments, working directories, manifests, or asset paths. Legacy command-based configuration is diagnosed but never executed.

The bubble chat no longer stalls

Two blocking calls sat on the Tk main thread and only fired on the external-renderer path, which is why this never showed with the bundled character.

  • Persisting renderer geometry ran a synchronous yaml round trip and fsync — 49 ms on the measured machine (p95 72 ms), once per reported geometry change. It is now queued and coalesced on a writer thread, while reads replay unflushed updates so a caller still observes its own write. A one-second drag reporting 20 updates went from roughly 980 ms of frozen UI and 20 disk writes to 1.209 ms and a single write.
  • Publishing an event ran a blocking sendall. A renderer that paused reading filled the socket buffer and froze the host for a full second before the renderer was dropped. Outbound is now a bounded per-client queue with its own thread; only semantic events are shed under pressure, never position, visibility, or handshake messages.
  • Renderer input is drained every 10 ms instead of every 50 ms.

Bubble z-order follows what the user actually does

The answer bubble stays in front while the reply is written and after it completes, wherever the user happens to be working. It steps behind the window the user clicks, and returns when the overlay is clicked again. The input bar follows the same rule — under a replace renderer the host never wins the OS foreground, so its previous focus-scoped rule could never fire and the input bar opened underneath other windows.

Also in this release

  • Restarting returns to the presentation the user was in, without the renderer playing an exit animation and immediately reappearing. The click is answered in about 176 ms instead of leaving a dead window painted for roughly ten seconds.
  • Declarative bundled sprite timelines: first-cell hold substitution, loop and one-shot completion, layered frames, deterministic ranged holds, bucket rotation.
  • The speech bubble's tail tip can be dragged apart from the body; the direction persists with existing bubble position state.
  • Bash is classified as execute in tool_category. PowerShell matched shell while bash contains none of the generic verbs, so it had been falling through to other.
  • Subagent definitions moved from config/skills/ to config/agents/<provider>/, deployed by installer/deploy_agent_definitions.ps1.
  • Console windows no longer flash when guards and policy hooks invoke git from console-less GUI processes.

Validation

  • AMBER release source: 755 tests passed. The remaining failures are outside this change and reproduce identically on the unchanged development baseline — most need the optional kuzu package, some assert manual prose, two read the developer's own overlay.user.yaml (they pass under an isolated profile), and one is a pre-existing tunnel mock.
  • Measured against a live host with a real external replace renderer: input-to-reaction round trip p50 10.8 ms / p95 15.4 ms, and 1,049 broadcasts pushed at a peer that had stopped reading left that round trip unchanged with no loss.
  • Z-order was confirmed on screen rather than by assertion alone: the answer bubble sits above the active window while answering, is occluded by an application the user clicks, and returns to the front when the character is clicked again.

Design notes, sequence and timing diagrams, and the measurements are in docs/dev/external-overlay-bubble-flow.md.