fix(docker+brain): make container Chrome search work, harden, improve toggle

Addresses review findings on the dockerized stack:
- Container Chrome search was dead: add --remote-debugging-port + a non-default
  --user-data-dir (Chrome 136+ refuses CDP on the default profile), add the
  playwright dep (browse-search.mjs connectOverCDP) with browser download
  skipped, and connect to 127.0.0.1 not "localhost" (container localhost -> ::1
  while Chrome binds IPv4). Verified: browse-search returns real results.
- Broadcast toggle reliability: always offer setBroadcast in screen-share mode
  (the embedding/keyword router dropped it for non-English utterances) and make
  its description force a tool call. "방송 꺼줘"->stop now 5/5; no false triggers.
- Stop the broadcast on voice leave (no orphaned stream).
- Security: bind VNC/noVNC to loopback by default (VNC_BIND override) and the
  bridge to the container loopback (BRIDGE_HOST=127.0.0.1), not published.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
javis-bot
2026-06-11 10:44:56 +09:00
parent ca86390407
commit 03375a77d0
10 changed files with 56 additions and 14 deletions

View File

@@ -110,6 +110,16 @@ async function handleJoin(i: ChatInputCommandInteraction) {
async function handleLeave(i: ChatInputCommandInteraction) {
const left = leaveGuild(i.guildId!);
// Leaving voice also ends the broadcast — don't leave a stream live with no
// session driving it.
const streamer = streamers.get(i.guildId!);
if (streamer?.isActive()) {
try {
await streamer.stop();
} catch (e) {
console.error("[leave] stopping broadcast failed:", e);
}
}
await i.reply({ content: left ? "음성 채널에서 나갔습니다." : "접속 중인 세션이 없습니다.", ...eph });
}