|
2 | 2 |
|
3 | 3 | ## 0.2.0 - Unreleased |
4 | 4 |
|
| 5 | +- **Floating listener redesigned**: the macOS floating listener is no longer a |
| 6 | + window. It is a borderless, transparent, non-activating panel whose visible |
| 7 | + body is the listening-result box itself — the reading is always shown, with a |
| 8 | + small reactive waveform in its corner that animates only while listening. |
| 9 | + Every control floats just outside the box and fades in on hover: listening |
| 10 | + mode at the top-left, close at the top-right, and source / Listen / control |
| 11 | + center in a row below. The box and its type are larger than the prior card, |
| 12 | + and it drags from the box. The box stays empty until something is actually |
| 13 | + heard, and the mode (preset) control matches the size of the row below it. |
| 14 | + (An earlier take on this rebuild used a Metal shader orb; that was dropped in |
| 15 | + favor of the box-centric layout.) |
| 16 | +- **Dashboard restyled flat and grey, then re-laid-out**: one continuous |
| 17 | + surface instead of white cards (sections separated by hairlines, no shadows, |
| 18 | + flush to the width); no green anywhere. The Listen surface is now two lines — |
| 19 | + source + its config (capture / input / file) on one line with the Skills / |
| 20 | + Engine / Path controls as segmented tabs at the top-right (each toggling a |
| 21 | + panel), and the grey Listen button beside the route presets on the next line. |
| 22 | + Presets and the result actions (Ask, Remember, Wiki, JSON, and the germ |
| 23 | + handoff) are borderless icon+word buttons. The claim groups (Hypotheses, |
| 24 | + Heard, Interpreted, Measured, Undetermined, Memory) are tabs below the |
| 25 | + reading. Source descriptions, the preset hint, and the evidence-level chip |
| 26 | + were removed; the header is just the wordmark and the daemon address sits in |
| 27 | + the footer as `host:port`. Skills / Engine / Path open as **modal dialogs** |
| 28 | + (not inline). The source row is one line — source tabs plus their config; in |
| 29 | + System the buffer length reads `Buffer: 10sec` (no route text), and in Mic |
| 30 | + the input list loads by default (no Devices button) with a small icon monitor |
| 31 | + toggle. Selects use the app font, not a mono face. |
| 32 | +- **Native top bar**: the mac window is just the embedded dashboard with one |
| 33 | + top-right bar of icon buttons, split into two groups of three — Skills / |
| 34 | + Engine / Path (each opens its modal in the page via `evaluateJavaScript`) and |
| 35 | + the shell actions floating-listener / reload / browser (or Start daemon when |
| 36 | + offline). Icons get a subtle hover wash. The shell injects `window.__oidaNative` |
| 37 | + so the page hides its own browser-only panel icons. |
| 38 | +- **Dashboard reorganized into an Obsidian-style three-rail shell**: collapse |
| 39 | + toggles live in the top corners (state persists). The **left rail** carries |
| 40 | + the source tabs (System / Mic / File) and their config at its top, then |
| 41 | + Recent and Memory; the **right rail** carries the tool icons at its top — |
| 42 | + Skills / Engine / Path, plus (inside the native app) floating-listener / |
| 43 | + reload / browser — then the claim Breakdown as a vertical nav. The center is |
| 44 | + the reading, usable with either rail collapsed, and the rails stay rails at |
| 45 | + native-window widths instead of stacking full-width. The foot reads like an |
| 46 | + agent chatbox: Remember / Wiki / JSON / germ as icon+word actions at the |
| 47 | + bottom-left (germ opens a Sound / Prompt / Lineage menu), the listening mode |
| 48 | + as a quiet borderless selector, and **Listen as a round dark send-style |
| 49 | + button** at the bottom-right. The Ask button, page footer, and wordmark are |
| 50 | + gone — the daemon address, audio path, and API/health links moved into the |
| 51 | + Engine modal — and opening any panel modal closes whichever was open. |
| 52 | +- **Native shell is chrome-free**: the capsule top bar was removed; the page's |
| 53 | + right rail hosts the shell actions, which post back over a |
| 54 | + `oidaShell` script-message bridge (reload reloads the WebView directly). The |
| 55 | + only native overlay left is a Start-daemon card when the daemon is offline. |
| 56 | +- Floating listener: the status dot in the box footer was removed (the status |
| 57 | + word and corner waveform remain), and the listening-mode button is a |
| 58 | + rectangular frost tile with the same rounding and margins as the buttons |
| 59 | + under the box. |
| 60 | +- **Shell refinements**: the rails are drag-resizable (widths persist) with |
| 61 | + Obsidian-style panel toggles in the top corners; the sources are icons whose |
| 62 | + config always fits the rail (including the mic meter); memory search is an |
| 63 | + icon. The claim Breakdown is stacked collapsible sections, all expanded by |
| 64 | + default. The result actions condensed into one **export menu** at the box's |
| 65 | + bottom-right — Remember, Expand on Wiki, Export JSON, Generate derived sound, |
| 66 | + Convert listening to prompt (Lineage removed) — next to the Skills icon, the |
| 67 | + quiet mode selector, and Listen. Two corner buttons float over everything: |
| 68 | + a configuration menu bottom-left (Engine / Path / Reload / Open in browser) |
| 69 | + and, inside the native app, the floating-listener toggle bottom-right. |
| 70 | +- **App icon**: a minimal abstract listening mark — a single bold two-hump sine |
| 71 | + wave on a charcoal squircle, transparent corners. Sourced from |
| 72 | + `apps/macos/Resources/AppIcon.svg`, shipped as `AppIcon.icns`, and staged into |
| 73 | + the bundle by both packaging scripts. |
| 74 | +- **germ handoff fixed and surfaced**: `/germ/handoff` was unusable (with |
| 75 | + `from __future__ import annotations` FastAPI could not resolve the |
| 76 | + function-local request model and degraded the JSON body to a query param); |
| 77 | + the model is now module-scoped. The dashboard gained the three germ buttons |
| 78 | + (Sound / Prompt / Lineage) that persist an akousma to the shared store and |
| 79 | + deep-link germ; origins are normalized to the akousma vocabulary; opt-in |
| 80 | + song identification (`OIDA_SONGID=1`) now enriches handoff records. |
| 81 | +- Dashboard hardening: SSE events from other surfaces no longer stomp a local |
| 82 | + mic recording (orphaned hot mic); mic streams are released when MediaRecorder |
| 83 | + fails and on page hide; duplicate render/refresh after each listen removed; |
| 84 | + engine fold no longer rebuilds every 20 s (dropdown-closing); phase guards on |
| 85 | + drop/file/path during a running listen; capture-cancel sends the request id; |
| 86 | + the 15 s "no capture yet" hint verifies with the daemon before flipping to an |
| 87 | + error; SSE reconnects after a permanently closed stream; recording shows |
| 88 | + elapsed time; JSON view gained copy; Ask cannot double-submit via Enter. |
| 89 | +- Dashboard accessibility and polish: visible focus rings, AA-passing text |
| 90 | + tones, radio semantics + arrow-key navigation for source/preset groups, a |
| 91 | + live daemon status label, meter semantics, reduced-motion-aware scrolling, |
| 92 | + evidence-level chip colors for all levels, `dsp only` no longer styled as an |
| 93 | + error, dead CSS removed, tags overflow as `+n`. |
| 94 | +- Backend correctness: memory list/limit now ordered by `createdAt` (was |
| 95 | + filename-random); `OIDA_MOSS_PREWARM` precedence fixed (legacy `HMM_`/`AEAR_` |
| 96 | + could override it); `OIDA_REQUIRE_MODEL` accepts true/yes/on; per-listen DSP |
| 97 | + inspection memoized (a listen decoded and hashed the same file 2–3×); ffmpeg |
| 98 | + conversion gets a timeout; `/sonicfield/reveal` containment can no longer be |
| 99 | + bypassed by sibling directories; corrupt memory/generation/conversation |
| 100 | + records return 4xx instead of 500; `/health` `legacy_name` reports |
| 101 | + `hmm, aear`; `/api` lists the capture-request, engine-model, status, and germ |
| 102 | + routes; double prewarm race closed. |
| 103 | +- macOS shell: native capture filenames had a corrupted date pattern from the |
| 104 | + rename (`HOidassSSS`); the shell now reads `OIDA_AUTH_TOKEN` first; the |
| 105 | + managed daemon is stopped on app quit (its pipes died with the app and the |
| 106 | + orphan would crash on SIGPIPE); transient refresh errors keep recent/pinned |
| 107 | + history; hotkey signature renamed `HMMK` → `OIDA`. |
| 108 | +- MCP tools renamed to canonical `oida_*` with `hmm_*`/`aear_*`/`ear_*` aliases |
| 109 | + kept and the previously undeclared `aear_live_*` aliases declared. |
| 110 | +- Environment/docs unification: project scripts export `OIDA_*` names (legacy |
| 111 | + still honored), release smoke reads the `*_SERVER_URL` chain and cleans its |
| 112 | + prompt record from the daemon data dir, README/SECURITY/shell docs are |
| 113 | + rewritten OIDA-first and match current behavior, CI/local checks run the |
| 114 | + suite once via pytest, and the server-integration tests isolate ambient |
| 115 | + `OIDA_*`/`HMM_*`/`AEAR_*` variables. |
| 116 | + |
5 | 117 | - **Renamed the project `hmm` → `oída`** (part of the Sonic Field "sonic |
6 | 118 | evolution"). Python package `aear` → `oida`; primary CLI `oida` |
7 | 119 | (`oida-daemon`), with `hmm`/`aear` kept as aliases. Environment variables use |
|
0 commit comments