Skip to content

chore(deps): re-resolve bodhi lock to ffec0cd (PR #579 follow-up) - #593

Merged
sonichi merged 1 commit into
sonichi:mainfrom
VasiliyRad:fix/bodhi-lock-resolution
May 5, 2026
Merged

sonichi merged 1 commit into
sonichi:mainfrom
VasiliyRad:fix/bodhi-lock-resolution

Conversation

@VasiliyRad

Copy link
Copy Markdown
Contributor

Summary

PR #579 bumped package.json to bodhi-realtime-agent#ffec0cd and updated the shorthand dep ref in package-lock.json, but left the actual resolved field at the older ee58489a SHA. npm install is 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:

  • Comparing dist/index.cjs content before and after a forced reinstall
  • Old version (ee58489): "... Do not repeat or acknowledge this — just continue naturally when the user speaks next."
  • New version (ffec0cd): "... 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.json resolved field, produced by:

rm -rf node_modules/bodhi-realtime-agent
npm install github:sonichi/bodhi_realtime_agent#ffec0cd

Test plan

  • After merge: pull, run npm install, then launchctl kickstart -k gui/$(id -u)/com.sutando.voice-agent to load new bodhi
  • Watch one full Gemini Live GoAway → reconnect cycle (every ~9 min) and confirm no spurious assistant turns
  • If voice still produces unprompted output, the local fix/voice-reconnect-replay-suppression branch is the next layer of defense (3 commits ready)

🤖 Generated with Claude Code

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 sonichi left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.json on this branch has bodhi-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).

@sonichi
sonichi merged commit 8887537 into sonichi:main May 5, 2026
1 check passed
sonichi added a commit that referenced this pull request May 5, 2026
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>
sonichi added a commit that referenced this pull request May 5, 2026
…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>
liususan091219 pushed a commit to liususan091219/sutando-fork that referenced this pull request May 28, 2026
…#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>
liususan091219 pushed a commit to liususan091219/sutando-fork that referenced this pull request May 28, 2026
…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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants