Commit Graph

10 Commits

Author SHA1 Message Date
EJClaw
b0ab23909e docs(readme): refocus on voice loop first, defer screen share
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-08-11 00:07:50 +09:00
EJClaw
2b6059141e feat(voice): run pipeline eyes-free (STT -> Brain -> TTS), defer screen share
Make source/vision optional so the conversation loop runs with no screen
capture. Add Settings.voice() preset and `python -m wsai --voice` demo.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-08-11 00:05:02 +09:00
EJClaw
b0780988a2 docs(readme): rewrite as implementation blueprint (latency budget, dual eye tracks, milestones)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-08-09 22:00:44 +09:00
EJClaw
932e1b76b2 docs(readme): fix run commands to use workspace venv (python/pytest not on PATH)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-08-09 21:53:09 +09:00
EJClaw
d756ea4cf5 docs(readme): rewrite as accurate project summary (selfbot receive + DAVE gate 1)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-08-09 21:51:42 +09:00
EJClaw
375e1e5539 feat(dave): pass arbiter gate 1 — selfbot joins DAVE/MLS E2EE voice group
Fail-fast checkpoint the arbiter mandated before committing to option A
(protocol-level selfbot stream receive). dave/gate.mjs proves, live against
Discord, that a user token can pass the voice DAVE/MLS handshake:

- voice GW v8 IDENTIFY with max_dave_protocol_version=1 -> NO close 4017
- dave_protocol_version=1 negotiated (E2EE active on the channel)
- @snazzah/davey drives full MLS membership: op25 external_sender -> op26
  key_package -> op27 proposals -> op28 commit_welcome -> op29 announce_commit
  -> MLS session ready=true, stable 5s, voicePrivacyCode derived

Confirms option A is viable: the selfbot can join the E2EE group as a full
member, which is the prerequisite for receiving+decrypting the video RTP.
PLAN.md updated with gate result, exact binary framing, and next A steps.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-08-09 21:33:55 +09:00
claude-owner
07e773a5ac docs(plan): switch decision #1 to selfbot protocol-level stream receive
User rejected browser/screenshot capture: they want to actually receive the
real-time screen-share stream like a real client. Research confirms this needs a
selfbot (user token) via discord.js-selfbot-v13 (werift-rtp) exposing incoming
video RTP (receiverData/hasVideo, VoiceReceiver, StreamConnection); decode via
libsodium decrypt + depayload + ffmpeg. Records ToS/ban risk and that no
turnkey receive->frames library exists. Xvfb browser PoC demoted to fallback.
2026-08-09 20:57:48 +09:00
claude-owner
7d20a40a84 feat(capture): lock decision #1 and prove Xvfb+Chromium frame capture
Decision #1: watch the real Discord screen share by running a real web client
under a virtual display (Xvfb) and capturing rendered frames — not bot/selfbot
protocol receive. PLAN.md records all locked decisions and the step list.

PoC (poc/capture_xvfb.py + test_page.html) launches system Chrome non-headless
under Xvfb via Playwright and captures 6 changing, non-blank frames -> de-risks
the display+capture chain on the .9 host.
2026-08-09 20:52:57 +09:00
claude-owner
4eeddc4b1f feat: scaffold watch-screen AI pipeline (mock-runnable skeleton)
Modular async pipeline: FrameSource->Vision->context and STT/text->Brain->TTS.
All stages are Protocols; mock backends run end-to-end with no deps/keys.
Real backends included: mss screen capture, Claude vision+brain (guarded imports).
2026-08-09 02:16:14 +09:00
EJClaw
0c90856282 chore: initialize paired workspace 2026-08-08 22:08:35 +09:00