Skip to content
Merged
4 changes: 2 additions & 2 deletions HANDOFF.md
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ Every turn flows through **one** path — now the typed run state machine under
- **Memory-steered proof capture (#130):** `RORO_TRACE=1` can capture DECIDE prompt/task evidence, and
`npm run verify:memory-steered` proves recalled memory reaches both DECIDE and `args.task` under the synthetic-marker
proof path.
- **Floating default (#131):** Roro ships as the transparent 190x200 desktop pet by default; set
- **Floating default (#131):** Roro ships as the transparent 360x420 click-through desktop pet by default; set
`RORO_FLOATING_WINDOW=0` only for the legacy full dev window.
- **VoicePack catalog to shared (#137):** the voice-pack catalog moved to `src/shared/voicePacks.ts`; cosmetics no
longer imports from `renderer/voice`.
Expand Down Expand Up @@ -249,7 +249,7 @@ memory/embeddings). Add new expensive lessons there, not here.
- **Commit / PR attribution:** follow the active tool's requested attribution only when the user or workflow asks for it; do not paste stale tool-specific footers into public PRs.
- **Don't commit `.env`** (gitignored). Historical predecessor/demo checkouts are archived context only and must not be edited as part of Roro work.
- **Verify before claiming done** — "the types check" is not done; "I observed it working" is.
- **Key commands:** `npm test`, `npm run lint`, `npx tsc --noEmit -p tsconfig.json`, `npm run release:doctor` (CI-safe release/signing doctor), `npm run package` (.app), `npm run verify:floating-geometry` (default 190x200 transparent pet shell), `npm run package:release` + `npm run verify:release-channel` (release-channel deferred-flag refusal), `npm run verify:packaged-memory` (packaged write/relaunch/recall), `npm run verify:packaged-live-memory-turn` (packaged relaunch + live Ollama turn uses recalled memory), `npm run verify:packaged-natural-memory-turn` (packaged natural-language teach/relaunch/recall), `npm run verify:packaged-real-codex` (opt-in packaged first task with the user's real authenticated/configured Codex CLI), `npm run verify:memory-steered` (synthetic-marker DECIDE/args.task proof), `npm run verify:memory-panel-rendered` (opt-in local GUI smoke for rendered Memory panel keyboard/focus behavior), `npm run verify:signing-readiness` (strict Developer-ID env/cert/tool doctor), `npm run verify:signing-auth` (notarytool Apple credential auth check), `npm run make` (+ distributables + signing), `npm run verify:release-artifact:dmg` (post-make DMG verifier), `npm run verify:release-artifact:signed` (post-make signed/notarized artifact verifier), `npm start` (dev — memory works here), `OLLAMA_AVAILABLE=1 npx vitest run crosslaunch.live` (live magic-moment smoke), `npm run eval:brain` (scorecard), `EVAL_SET=behavioral npm run eval:brain`.
- **Key commands:** `npm test`, `npm run lint`, `npx tsc --noEmit -p tsconfig.json`, `npm run release:doctor` (CI-safe release/signing doctor), `npm run package` (.app), `npm run verify:floating-geometry` (default 360x420 transparent click-through pet shell), `npm run package:release` + `npm run verify:release-channel` (release-channel deferred-flag refusal), `npm run verify:packaged-memory` (packaged write/relaunch/recall), `npm run verify:packaged-live-memory-turn` (packaged relaunch + live Ollama turn uses recalled memory), `npm run verify:packaged-natural-memory-turn` (packaged natural-language teach/relaunch/recall), `npm run verify:packaged-real-codex` (opt-in packaged first task with the user's real authenticated/configured Codex CLI), `npm run verify:memory-steered` (synthetic-marker DECIDE/args.task proof), `npm run verify:memory-panel-rendered` (opt-in local GUI smoke for rendered Memory panel keyboard/focus behavior), `npm run verify:signing-readiness` (strict Developer-ID env/cert/tool doctor), `npm run verify:signing-auth` (notarytool Apple credential auth check), `npm run make` (+ distributables + signing), `npm run verify:release-artifact:dmg` (post-make DMG verifier), `npm run verify:release-artifact:signed` (post-make signed/notarized artifact verifier), `npm start` (dev — memory works here), `OLLAMA_AVAILABLE=1 npx vitest run crosslaunch.live` (live magic-moment smoke), `npm run eval:brain` (scorecard), `EVAL_SET=behavioral npm run eval:brain`.
- **State lives in:** memory + owner.json + packaged config → `app.getPath('userData')` (override `RORO_DB_DIR`). The agent's working repo resolves from explicit `RORO_WORKDIR`, then persisted `userData/config.json`, then the explicit `RORO_ALLOW_CWD=1` dev fallback.

---
Expand Down
4 changes: 2 additions & 2 deletions PUBLIC.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,8 +77,8 @@ required. The **two roles of the Developer-ID cert are now clear and separate:**
> later turn. This narrows the extraction-quality engineering risk; it still does not replace the signed/notarized
> clean-Mac gate or the non-founder "does this feel correct and useful?" test.
> First-task preflight: `npm run verify:packaged-first-task` launches the real packaged app with persisted project
> config, deterministic fake Ollama, a fake Codex override, and the product preload bridge. It proves the default typed
> surface exposes the executor-readiness check, then can complete a first coding task through public `turnRun` and Codex
> config, deterministic fake Ollama, a fake Codex override, and the product preload bridge. It proves the framed dev typed
> surface (it runs `RORO_FLOATING_WINDOW=0`, not the default floating pet) exposes the executor-readiness check, then can complete a first coding task through public `turnRun` and Codex
> events. It still does not replace real Codex auth, signed/notarized clean-Mac validation, or non-founder validation.
> Real-Codex preflight: `npm run verify:packaged-real-codex` keeps the deterministic fake Ollama brain but removes the
> fake Codex override, so the packaged app must discover and run the user's real authenticated/configured Codex CLI against a disposable
Expand Down
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -142,8 +142,9 @@ the cat resting bottom-left — the empty area passes clicks straight through to
whatever is underneath. At rest it is just the cat: the input, the working chip,
and error cards are transient reactions tethered beside the cat, summoned by
⌘⇧Space or a hover-revealed handle. Setup banners appear only when action is needed.
**Tap or hold the cat to pet it; drag to move it.** When an explicit voice dev
flag is enabled, right-click/M mute is available for the mic path. The cat's body
**Tap or hold the cat to pet it; drag to move it.** (The on-device voice stack —
including the mute/M/right-click path — now lives in `packages/voice`; there is no
mute control in the current app, and a future voice reintegration restores it.) The cat's body
carries only affection + move — talk and tasking live off the body (see the
current interaction contract at [`docs/INTERACTION.md`](docs/INTERACTION.md)).
The floating window stays above normal windows and across macOS Spaces,
Expand Down
22 changes: 16 additions & 6 deletions RUN.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,13 @@ the old optional model-avatar seam was deleted outright in #140 (see `HANDOFF.md

## 5. Voice (internal dev only, fully on-device — no keys)

> **Extracted:** the on-device voice stack now lives ENTIRELY in `packages/voice`,
> outside the app's dependency graph — the current root app has **no `RORO_*_VOICE`
> reader and no Voice/Mute control** (`window.ts` builds no voice keys by
> construction). The flags + pipeline below describe how voice runs/mounts back from
> `packages/voice`; a plain root `npm start` enables none of them. See
> `packages/voice/README.md` for the reintegration seam.

Voice runs entirely on-device — Silero VAD (ear-perk), whisper STT (transcribe), and
Kokoro TTS (speak) — behind dev flags, all default off and hidden from the v0
typed-only release. There is **no cloud and no key**.
Expand Down Expand Up @@ -113,11 +120,14 @@ Claude) outside Roro. If the CLI is in a nonstandard location, set `RORO_CODEX_B
npm start
```

Roro now launches as a transparent, frameless 190x200 desktop pet by default and
keeps Roro above normal windows across macOS Spaces. The cat remains the center of
the surface, with the compact Ask pill for tasks and first-run setup banners only
when action is needed. **Tap or hold to pet, drag to move.** Right-click/M mute is
available only in voice-dev launches, when the mic can actually be muted.
Roro now launches as a transparent, frameless 360x420 click-through desktop pet by
default and keeps Roro above normal windows across macOS Spaces. At rest it is just
the cat — the empty area passes clicks straight through; the input, working chip,
and error/speech cards are transient reactions tethered beside the cat, summoned by
⌘⇧Space or a hover-revealed Ask·Memory·Project menu, and first-run setup banners
appear only when action is needed. **Tap or hold to pet, drag to move.** (The
mute/mic path lives with the on-device voice stack in `packages/voice`; there is no
mute control in the current app.)

For the legacy full dev window with the larger prompt/timeline surface:

Expand All @@ -130,7 +140,7 @@ RORO_FLOATING_WINDOW=0 npm start
- `npx tsc --noEmit -p tsconfig.json` → 0 errors
- `npx vitest run --no-file-parallelism` → full deterministic suite
- `npm run verify:floating` → on-screen smoke for the floating Ask (needs a display)
- `npm run verify:floating-geometry` → default transparent 190x200 bottom-left floating shell
- `npm run verify:floating-geometry` → default transparent 360x420 click-through floating shell, cat bottom-left
- `npm run verify:packaged-model-setup` → packaged Ollama-down/Recheck through one-click core model pull
- `npm run verify:packaged-real-codex` → opt-in packaged first task using your real authenticated/configured Codex CLI
- `npm run verify:typed-live-turn` → default typed prompt through public `turnRun`
Expand Down
Loading
Loading