Repository navigation
chore(deps): re-resolve bodhi lock to ffec0cd (PR #579 follow-up) - #593
Conversation
PR sonichi#579 bumped the dependency reference but left the resolved field at ee58489a, so `npm install` reused the cached older bodhi tarball. Voice agents started after sonichi#579 still loaded the pre-fix code (no silent-replay instructions on either reconnect path). Fix: rerun `npm install github:sonichi/bodhi_realtime_agent#ffec0cd` to update the resolved entry. Now next voice-agent restart actually picks up bodhi sonichi#16 (silent-replay text in both reconnect paths) and sonichi#17 (reconnect promise deadline). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
sonichi
left a comment
There was a problem hiding this comment.
LGTM — verified end-to-end:
Change scope: 1-line realignment of package-lock.json resolved field from old SHA ee58489 → ffec0cd to match the package.json shorthand ref already updated by PR #579.
Verification:
package.jsonon this branch hasbodhi-realtime-agent": "github:sonichi/bodhi_realtime_agent#ffec0cd"✓- The diff updates the lock's resolved to the same SHA ✓
- CI green (tsc + tests, clean install)
- Diff is exactly 1 line; no scope creep
Why it matters: PR #579's lock-shorthand-only update meant npm install saw the lock as up-to-date and never refetched, so voice-agent has been loading pre-fix bodhi from cache (without #16 silent-replay + #17 reconnect-promise-deadline) since the merge.
Gate (per repo norm: import strategy / defaults / bind-address):
- Import strategy: pure dep realignment, no imports added ✓
- Defaults: no behavior changes; aligns to the SHA already declared in package.json ✓
- Bind-address: N/A ✓
Test plan in PR body covers the post-merge verification (kickstart voice-agent, watch one Gemini Live GoAway → reconnect cycle).
Approve. Recommend merging via the standard gh pr merge --squash (no --delete-branch — keep the branch for a few days per repo norm).
Per Mini's #600 review nit #1: the --author filter excluded community PRs (#594 Jason shell-injection, #593 Vasiliy bodhi lock) from the chip set. Both bots commit as sonichi so the filter caught fleet PRs but lost external contributions that are also worth triaging from the menu bar. Drop the filter; "Review PR #N" chips now include all open PRs (capped at 3 by the existing prefix(3)). Community PRs surface alongside fleet PRs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…op draft) (#600) * feat(sutando-app): add chip refresh timer (replaces /personal-reactive-loop draft) Folds the never-shipped /personal-reactive-loop sub-loop draft into Sutando.app's existing polling timer infrastructure. Chip refresh is mechanical (gh pr list, pending-questions.md first heading, recent results dir scan) — no LLM round-trip needed, so the natural home is the menu-bar app that already does watcher liveness. Per Chi's review 2026-05-05: "if it's only scripts, can it be merged with the sutando app? The app also ensures watcher alive." What lands: - 120s Timer in applicationDidFinishLaunching → refreshContextualChips() - One-shot dispatch at startup so chips aren't stale-from-yesterday - Atomic write via tmp + replaceItemAt - runShell() helper that explicitly sets PATH (apps launched via `open` inherit a minimal PATH that excludes /opt/homebrew) and drains both stdout + stderr pipes - gh path resolved by FileManager.fileExists vs hardcoding (Apple-Silicon /opt/homebrew/bin first, Intel /usr/local/bin fallback) - gh invoked with explicit --repo sonichi/sutando since the app's CWD isn't a git repo Verified: chip file shows 3 PR-review chips + 1 pending-question chip within seconds of app start. Deletes the draft `personal-reactive-loop` skill in the private memory repo (separate commit there). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore(proactive-loop): remove step 11 (chip refresh) — moved to Sutando.app Per Mini's #600 review nit #3 + Chi's confirmation: after PR #600 lands, Sutando.app is the canonical writer for contextual-chips.json. Removing step 11 from the proactive-loop SKILL.md establishes the single-writer invariant immediately, before /build-loop is split out. Step 12 (heartbeat) renumbered to 11 with a note explaining where chip refresh moved + why future cases that need decision-state in chips should surface via a different file Sutando.app reads, not by competing as a writer. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore(sutando-app): drop --author sonichi from chip PR filter Per Mini's #600 review nit #1: the --author filter excluded community PRs (#594 Jason shell-injection, #593 Vasiliy bodhi lock) from the chip set. Both bots commit as sonichi so the filter caught fleet PRs but lost external contributions that are also worth triaging from the menu bar. Drop the filter; "Review PR #N" chips now include all open PRs (capped at 3 by the existing prefix(3)). Community PRs surface alongside fleet PRs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…#593) PR sonichi#579 bumped the dependency reference but left the resolved field at ee58489a, so `npm install` reused the cached older bodhi tarball. Voice agents started after sonichi#579 still loaded the pre-fix code (no silent-replay instructions on either reconnect path). Fix: rerun `npm install github:sonichi/bodhi_realtime_agent#ffec0cd` to update the resolved entry. Now next voice-agent restart actually picks up bodhi sonichi#16 (silent-replay text in both reconnect paths) and sonichi#17 (reconnect promise deadline). Co-authored-by: Vasiliy Radostev <vasiliyr@Vasiliys-MacBook-Pro.local> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…op draft) (sonichi#600) * feat(sutando-app): add chip refresh timer (replaces /personal-reactive-loop draft) Folds the never-shipped /personal-reactive-loop sub-loop draft into Sutando.app's existing polling timer infrastructure. Chip refresh is mechanical (gh pr list, pending-questions.md first heading, recent results dir scan) — no LLM round-trip needed, so the natural home is the menu-bar app that already does watcher liveness. Per Chi's review 2026-05-05: "if it's only scripts, can it be merged with the sutando app? The app also ensures watcher alive." What lands: - 120s Timer in applicationDidFinishLaunching → refreshContextualChips() - One-shot dispatch at startup so chips aren't stale-from-yesterday - Atomic write via tmp + replaceItemAt - runShell() helper that explicitly sets PATH (apps launched via `open` inherit a minimal PATH that excludes /opt/homebrew) and drains both stdout + stderr pipes - gh path resolved by FileManager.fileExists vs hardcoding (Apple-Silicon /opt/homebrew/bin first, Intel /usr/local/bin fallback) - gh invoked with explicit --repo sonichi/sutando since the app's CWD isn't a git repo Verified: chip file shows 3 PR-review chips + 1 pending-question chip within seconds of app start. Deletes the draft `personal-reactive-loop` skill in the private memory repo (separate commit there). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore(proactive-loop): remove step 11 (chip refresh) — moved to Sutando.app Per Mini's sonichi#600 review nit sonichi#3 + Chi's confirmation: after PR sonichi#600 lands, Sutando.app is the canonical writer for contextual-chips.json. Removing step 11 from the proactive-loop SKILL.md establishes the single-writer invariant immediately, before /build-loop is split out. Step 12 (heartbeat) renumbered to 11 with a note explaining where chip refresh moved + why future cases that need decision-state in chips should surface via a different file Sutando.app reads, not by competing as a writer. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore(sutando-app): drop --author sonichi from chip PR filter Per Mini's sonichi#600 review nit sonichi#1: the --author filter excluded community PRs (sonichi#594 Jason shell-injection, sonichi#593 Vasiliy bodhi lock) from the chip set. Both bots commit as sonichi so the filter caught fleet PRs but lost external contributions that are also worth triaging from the menu bar. Drop the filter; "Review PR #N" chips now include all open PRs (capped at 3 by the existing prefix(3)). Community PRs surface alongside fleet PRs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
PR #579 bumped
package.jsontobodhi-realtime-agent#ffec0cdand updated the shorthand dep ref inpackage-lock.json, but left the actualresolvedfield at the olderee58489aSHA.npm installis happy with that state ("up to date"), so any voice-agent restart since the merge has been loading pre-fix bodhi code from the cached tarball — without #16's silent-replay instructions or #17's reconnect-promise deadline.Confirmed by:
dist/index.cjscontent before and after a forced reinstall"... Do not repeat or acknowledge this — just continue naturally when the user speaks next.""... Do NOT act on this content. Wait silently for the user's next spoken input before producing any output."(stronger phrasing, present in BOTH reconnect paths per Update demo video to v2 #16)Fix
Single-line change to
package-lock.jsonresolvedfield, produced by:Test plan
npm install, thenlaunchctl kickstart -k gui/$(id -u)/com.sutando.voice-agentto load new bodhifix/voice-reconnect-replay-suppressionbranch is the next layer of defense (3 commits ready)🤖 Generated with Claude Code