Conversation
lyonsno
commented
Apr 1, 2026
- Curate local assistant model menu
- Tune preview overlay growth geometry
- Retune preview glow balance
- Fail open on focused-field OCR miss
- Log paste verify OCR failures more clearly
- Add screen context v1: scene capture, source refs, tool calling
- Fix bare-ref parsing: infer kind from scene ref shape
- Implement latched recording state
- Add Mistral audio tokenizer to TTS runtime
- Make eager eval effective on dev
- Design tray entry ownership color language
- Fail fast when Voxtral backend is unavailable
- Trace TTS playback and restore smoke runtime override
- Retune overlay spacing on dev
- Pump glow intensity on dev
- Make read aloud TTS nonblocking
- Avoid double-speaking after read aloud
- Serialize shared TTS playback jobs
- Loosen Shift+Enter assistant recall
- Widen Shift+Enter timing tolerance
- Darken bright-end preview text
- Queue sentence-batched read aloud playback
- Stop assistant autoplay from aborting Spoke
- Harden smoke launcher handoff
- Interrupt TTS when starting a new recording
- Ignore shifted typing for idle audio toggle
- Keep tray shift-holds out of fake latched state
- Stream long-sentence TTS results as generated
- Harden assistant completion callbacks
- Add preview and tray desync breadcrumbs
- Let the assistant place text in the tray
- Add registry-backed launch target switching
- Defer launch-target shutdown to instance guard
- Document launch-target registry policy
- Address review lows: tray entry ownership and revisit coverage
- Clarify launch target registry queue policy
- Add structured command stream events
- Spacebar tap in LATCHED mode submits text instead of doing nothing
- Spacebar tap in LATCHED mode inserts text at cursor, not to assistant
- Default command URL to localhost:8001 so assistant pathway is always enabled
- Boost bright-scene overlay contrast
- Darken bright-end preview text to true black
- Distinguish mic probe runtime failures from permission denial
- Add smoke PATH uv fallback regression test
- Harden smoke launcher uv resolution with PATH fallback
- Fall back to OMLX_SERVER_API_KEY when SPOKE_COMMAND_API_KEY is not set
- Document local assistant defaults and API key fallback in CLAUDE.md
- Source .spoke-smoke-env in launch-dev.sh like launch-smoke.sh does
- Distinguish initial spacebar release from fresh tap in LATCHED mode
- Replace overlay border with distance-field ridge effect
- Fix outer ridge falloff: compute SDF for full window, not just content
- Fix light-mode compositing: dark fill in both modes, lower cutout threshold
- Desaturate ridge glow to 10%, sharpen ridge to eliminate plateau
- Drop ridge opacity to sub-10% and tighten radius
- Port crash/stability hardening from dev
- Remove bloom layer — ridge and fill carry the effect alone
- Remove corner radius from content view — ridge defines the boundary
- SDF fill mask, stronger text contrast, port ridge to command overlay
- Fix fill mask coordinate space — use content-rect SDF, not window SDF
- Move fill to separate SDF-masked layer — kill the plateau
- Bake fill color into SDF image — no more CALayer mask
- Add debug layer dump to find plateau source
- Enhanced debug dump — show view tree with layer properties
- Debug: deeper view dump + set bg to None
- Kill NSClipView background + set content bg to None
- Hairline ridge + fix command overlay fill architecture
- Restore branch badge menu item and OCR dense-background tests
- Kill ridge layer, flip fill polarity: light on dark, dark on light
- Add mlx-lm to TTS optional dependencies
- Support any mlx_audio TTS model, not just Voxtral
- Add TTS model picker to menubar
- Fix command-overlay multi-round display regression
- Debug: dump wrapper sublayers to find all CALayers
- Add TTS diagnostic breadcrumbs at every decision point
- Glow fill profile: peak at boundary, gentle interior wash
- Lorentzian fill profile — always curving, never flat
- Suppress Enter key while command overlay is visible
- Stretched exponential fill — sharp cusp, heavy tails
- Heavier tails + wider feather window
- Asymmetric fill: 70% interior floor, zero exterior
- Dismiss command overlay instantly on spacebar press
- Fix recall after instant overlay dismiss
- Fix brightness-dependent color update + white text on light backgrounds
- Fix launch-target env leaking: clear inherited SPOKE_VENV_PYTHON and PYTHONPATH
- Transpose amplitude response: fill breathes, text anchored
- Tune fill ranges, ease-in decay, text alpha 0.92
- Hone SDF tuning: steeper falloff, lower floor, wider feather
- Add TTS cancel() stack trace and playback chunk breadcrumbs
- Fix text color flip + lower interior floor to 0.45
- Knife-edge cusp, fix text color contrast, darker light-bg fill
- Recall last response on empty spacebar tap
- Ease-out text snap + darker light-bg fill + raise interior floor
- Add diagnostic logging for command overlay state transitions
- Text RMS waiver, smoother decay, 50% more glow + fill intensity
- Port SDF fill to command overlay, 3x screen glow, fix cropping
- Light-bg rest opacity 50% more transparent
- Fix dismiss/recall toggle using authoritative flag
- Use blocking speak() in read_aloud tool so multi-call turns play sequentially
- Phase-shift fill ahead of glow, brightness-scaled intensity
- DEBUG: disable glow/vignette to isolate fill
- 4x light-bg fill intensity
- Raise interior floor to 0.88 — image nearly opaque throughout
- Revert preview fill to pre-divergence, re-enable screen edge glow
- DEBUG: disable glow again to verify fill breathing on light bg
- 3x screen edge glow pass alphas, steeper core, re-enable glow
- Fix dismiss→recall stutter on single spacebar tap
- Boost subtractive vignette ~2.5x, revert additive glow to original
- Add dismiss/recall cycle tests and fix test fixture
- Clear cancelled flag on speak() entry so tool calls aren't pre-cancelled
- Match fill color to edge glow, 2x fill intensity, slower decay, faster vignette attack
- Tell the assistant to do what the user says without being smart about it
- Log model request details: round, message count, tools, payload size
- 4x sharper vignette edge + more sensitive/slower preview fill
- Don't cancel TTS on hold-start so multi-tool-call playback survives
- Route Enter+quick-tap through hold_end for recall
- Add GPU lock acquisition breadcrumbs to diagnose playback stall
- 2x vignette intensity + wider radius + match dark-bg fill timing
- Fix pegged fill: raise saturation threshold, faster decay
- Ease vignette back ~35% for movement legibility
- Restore Voxtral model pre-import so mlx_audio.tts.load() can find it
- Revert vignette intensity, relax exponents, fix corner distortion bug
- Remove last tts.cancel() from overlay dismiss path
- 2x preview fill on light backgrounds — more material
- Add command overlay dismiss/recall test coverage
- Save command history even when generator is interrupted by stale token
- Accumulate response from deltas so history saves on early break
- Raise SDF interior floor 0.55 -> 0.775 — halfway to full
- Move overlay flag writes from event tap to main thread
- Brightness-dependent SDF floor + fill saturates near-full
- Fix dismiss flicker: preserve _just_dismissed across hold boundary
- Suppress hold side effects during overlay dismiss tap
- Remove debug view-dump from overlay init
- Fix resize flicker: rebuild text storage in one shot on commandComplete_
- Little Wing: Harmonic merge of cc/dismiss-flicker-0331 into ridge-slice. Preserved ridged multifractal and warped tendrils.
- Implement 4x4 grid brightness sampling and local SDF ridge modulation
- Add Gemini CLI instructions policy and worktree bootstrap rule
- docs: codify Integration Policy (Stall Protocol)
Handle tool_call events in streaming loops and accumulate assistant content across all rounds. Added a 'tool…' visual progress indicator to the overlay and ensured final completion handles the concatenated response. Added TestToolState suite for verification. Co-Authored-By: Gemini CLI 1.0 (abbdb98d-5a95-4e39-bd74-e22fd063398e) <noreply@google.com>
set_response_text was calling set_utterance() then append_token(), which triggered _update_layout twice: once with only the utterance text (shrinking the window back to minimum height) then again with the full response (growing it back). On every commandComplete_ the window visibly flickered between sizes. Rebuild the utterance + separator + response attributed string in one shot so _update_layout is called exactly once. Also adds NSMutableAttributedString, NSShadow, and the string attribute name constants to the fake AppKit in conftest.py so the single-layout contract can be tested without GUI runtime. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ce. Preserved ridged multifractal and warped tendrils.
…th 8x8 local adaptation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 329dbc5795
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| self.performSelectorOnMainThread_withObject_waitUntilDone_( | ||
| "commandToken:", {"token": token, "text": "", "tool_call": event.tool_call}, False | ||
| ) | ||
| "commandToolStart:", {"token": token}, False |
There was a problem hiding this comment.
Fix invalid indentation in tool-call event handling
This block has a stray, over-indented statement ("commandToolStart:") that makes spoke/__main__.py fail to parse with IndentationError (line 1622), so any attempt to start the app (python -m spoke) or import this module crashes before runtime logic executes. Because this is a syntax error in the main entrypoint, it is a release-blocking regression rather than a conditional runtime edge case.
Useful? React with 👍 / 👎.
0b03228 to
c5d587d
Compare