Repository navigation
Windows: the Mac features Windows was missing, plus Windows improvements - #849
Open
umarjavaid4335 wants to merge 38 commits into
Open
umarjavaid4335 wants to merge 38 commits into
umarjavaid4335 wants to merge 38 commits into
Conversation
… chat, Spotify on Windows, pill-slot message Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # windows/src/i18n/extra.json
# Conflicts: # windows/src-tauri/Cargo.toml # windows/src-tauri/src/lib.rs # windows/src-tauri/src/spotify.rs # windows/src/core/pills.ts # windows/src/i18n/extra.json # windows/src/settings/main.ts # windows/src/style.css # windows/tests/pills.test.mjs
Rust reads CPU load and the busiest programs, memory load, the battery and the thermal zones every 3 s while Mochi is on screen (vitals.rs); the page eases them into Mochi's moods (mood.ts, port of MochiMood.swift): panicked hops and sweat at full load, a flush and heat waves when warm, puffed up when memory is short, tired then asleep on a low battery, a happy hop when plugged back in. Pointing at Mochi shows why. Settings > General > Mochi and your computer, on by default as on the Mac. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…sform) One Claude call cleans the dictation, shapes it as a structured prompt for an agent (goal, context, steps, constraints, done when) when Prompt mode is on, and writes it in the language picked in Translate into (73 languages and regional variants, with the Mac's hints). Any problem and the words are pasted as heard. Flow > Settings > Prompt and translation. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s, editable lines Port of the Mac's Notetaker 0.5.0 (NoteEcho.swift, NoteModels.swift): - the computer's sound is padded with the silence WASAPI's loopback skips, so both recordings share one clock; - the others' voice coming back into the microphone is removed by its energy, then word by word; - a voice heard only in short bits goes back to the nearest real voice; - Claude corrects misheard words before the summary (checked: a fix, never a rewrite; what was heard is kept) and names people the call names; - each line can be fixed, given to another person or deleted; corrected words are learnt for the next calls; renaming someone with another's name merges them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…u shortcut Port of the Mac's captureScreen and talkToCoucou actions: Ctrl+Alt+X opens the Windows snipping overlay, the capture lands on the island (paste, copy, annotate, ask Claude), and dictation pastes a pending capture first. Talk to Coucou has no key by default, as on the Mac. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Port of WhatsAppController, its gateway, GOWA installer and views: Coucou can install and start GOWA itself (checked against its published checksums), shows the QR to link the phone, lists new messages per conversation, opens one to read and reply (Enter sends, Shift+Enter new line, Escape back), mutes groups unless mentioned, stays quiet during Do not disturb, and keeps nothing on disk. The gateway's address and credential live in Windows Credential Manager. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… window, email, Cal.com calendar, more chat providers Ports of the Mac features Windows can have: - Crypto pill: Coinbase or OKX public prices, 24 h curve, optional move alert. - Portfolio pill: read-only exchange keys (Binance, OKX, Bybit, Kraken, Coinbase CDP) tested before they are stored in Credential Manager, and wallets on 16 networks by public address. - The chat's microphone, through Flow's on-device model. - Ctrl+Alt+F attaches the front window's app and title to the next question. - Send a dropped file by email through Resend, else the mail app opens. - Cal.com calendar: half-month view, a day's calls, a call's attendee. - DeepSeek, Qwen and Moonshot as chat providers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Not wanted on this machine: their Rust modules, cards, settings sections, strings, styles and credential-store keys go; nothing else changes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Room for WhatsApp without giving up another pill. The open island shows the fifth on a third row; the compact view keeps its 2×2 grid. The WhatsApp hint says the actual limit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The island's background is set transparent outright, and after a login it waits for Windows to settle (a minute of uptime) before showing: shown any earlier, the transparent window stayed a black rectangle. - The Claude and Codex plan pills only show once they have numbers; Codex is asked when the overview opens and, with no Codex installed, again ten minutes later rather than on every look. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ork view - Claude plan usage also comes from the Claude desktop app's own record (plan-usage-history.json), where Claude Code runs without a status line; its samples carry no reset times, so none is shown. - The vitals line shows the numbers: CPU %, memory used/total GB (%). - The overview grows tall while the focused agent works: Mochi and its last steps on the left, the file it changes on the right with line numbers; and for WhatsApp, room for the conversations. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Upstream's updater, German and Turkish, GitLab and Gitea, the island clock, Claude Desktop chats and fixes, with every feature of this branch kept. Strings this branch adds have German and Turkish now; the Mac's WhatsApp strings, which its catalog has without them, are carried in extra.json. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s window, WhatsApp pops up - Plan approval card (Mac #8d2632c): Claude Code's plan answered from the island with the plan sent back (Claude Code ignored a bare allow), Auto mode or Manual setting the session's mode, Change plan stopping Claude. - Open for every pill's alerts (Mac Louis-CFM#683), off by default; never over a browser in front, an approval or a card in use. - A finish or an error stays quiet while the session's own window is in front (Mac #9e95732): the badge only. - A WhatsApp message opens the island, tall, on that conversation, without taking the keyboard; not over an approval, a busy card or a reply being typed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The relay keeps the end of a test command's output; the island reads the verdict from the output itself (dotpals' testout parser) and shows "Tests passed / failed / unclear" on the agent's card. - Unclear runs can be double-checked by Laya (local, set up from Settings) or TypeSafe's Jev (cloud, own API key; output redacted first). - Optional fix loop: Claude Code finishing with failing tests is sent back, at most twice per request. Off by default. - All new strings translated in the 11 languages. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- The section's buttons changed the settings as they were when it was drawn: after any other save (the fix-loop switch) a click on Laya or Jev saved "Off" again. They now change the current settings. - "Laya folder": a Laya already on this computer (its .venv, and its own laya_serve.py when it has one) is started from there and never changed or removed. A Laya already running is used as it is. - One start at a time. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ffs caught - dotpals' rules (bridge/ui/story.js, recap.js) kept as they are; the decisions move from Rust to the island (island/loop.ts). - The relay waits for the island's word after a test run (Claude is told the tests failed), before a commit or push (denied while the tests fail or are out of date) and at Stop (sent back while they fail, weren't run after its changes, or were weakened to pass). At most twice per request. - Failures that were there before Claude changed anything are told, not forced. An unreadable run: Claude reruns it, then you're asked to look. - Git's view of the test files catches a test weakened by any means. - Claude Code in the Claude app (claude-desktop) is covered too: the old Stop check skipped it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Claude app writes its usage record now and then, sometimes hours apart, so the gauge lagged (14%/74% shown, 78%/82% used). Every minute, Coucou now asks Anthropic's usage endpoint with Claude Code's own sign-in (read only, never refreshed or written), with reset times; the app's record stays the fallback when there is no sign-in. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude Code's command line here runs on another provider (its API key wins over a /login), so its sign-in can't give the plan's numbers. Settings → Agents → Plan usage → Connect opens claude.ai in Coucou's own window, with its own session folder; once signed in, a hidden copy asks claude.ai for the usage every minute, from inside its page, and reports by a navigation it refuses. The gauge follows at once; Disconnect deletes the session. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- While you sign in, the page is never asked (the ask ends in a navigation that cut claude.ai's page off as it loaded: a blank window); signing in is seen from claude.ai's session cookie instead. - The watch for a sign-in no longer gives up on a window still being made. - "Continue with Google" / "with Apple" open their popup (and only those, and claude.ai's own); the sign-in failed with popups refused. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Installed in a folder of its own (D:\Coucou, an uninstaller beside it, or a folder marked coucou.portable): its data there, its preferences in Settings, its windows' browser data in WebView, nothing in AppData. The relay finds the folder from the bin it sits in; the uninstaller cleans its install folder, wherever that is. - Laya no longer loads at launch, where its model (a core for minutes, gigabytes of memory) stalled the machine with everything else starting: it starts when an agent is at work and goes after 20 idle minutes. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
At launch everything else is starting (the speech model, the windows); Laya's model on top stalled the machine. Its server also runs below normal priority, so it never takes the CPU from your apps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Laya loads only when an unclear test run needs it (or Start), and goes
after 15 unused minutes: loading its model in the background stalled a
laptop short of memory for minutes.
- It doesn't load without about 2.5 GB free, and says so.
- "Still loading" is said as such, not as an error; Test connection never
loads it ("isn't running: press Start").
- The fix loop's answers get more time on a busy machine (stop 5 s,
commit 3 s); one that comes too late is no longer logged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- An agent already at work no longer brings a hidden island back on every tool call: with a short hide delay the island flashed in and out all through a long request. It still shows when work starts, and for a question, an approval, the finish or an error. - Mochi panics only after half a minute at 85 % or more, not on a spike. - Attach the front window has no key by default: Ctrl+Alt+F belongs to other apps too, and taken globally it opened the island in their place. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… island - Mochi dropped on an app window attaches it to the next question and goes back where he came from (the Mac's drag-attach); empty desktop keeps him there, the island takes him home. - OK Coucou answers with Gemini through the Google AI key when there is no Claude key: the same tools as function declarations, the web through a Google-search call. - The computer's numbers show while the island is open on its home view, not only with the pointer on Mochi (who may be out on the desktop). - A question about a file just dropped waits for its copy in the inbox; pictures up to 14 MB go along instead of by name only. - A file dragged up from below wakes the island over a browser too, so it can be dropped; clicks and drags on the tab strip still don't. - A dictation that hears nothing says so on the pill, and in the log. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The first frame after a wake can be stamped before the moment the loop started. The negative dt ran the springs backwards in one big step, so Mochi's size and position shot to millions of pixels and his colours filled the whole island. dt is clamped at 0 in the island, hub and pill loops, and a spring ignores a non-positive step and snaps back if it ever leaves finite numbers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The island's page can load before Rust has set up Mochi's desktop window, and its one question (can he go out on the desktop?) then failed rather than answered. The island took the silence for "off": a press on Mochi never turned into a drag, so he could not be dropped on a window or the desktop until a restart that happened to win the race. A failed answer is now asked again in the background (every 250 ms, up to 10 s), and the launch flight to his spot still happens if the answer comes late. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The chat context's rename_all named the variants only, so Rust wanted `app_name` while the island sends `appName`: every question about a window (Mochi dropped on it, Ctrl+Alt+F) failed with "missing field app_name". The window variant renames its own fields now. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The rows sat straight against their dividers (the card's spacing did not reach inside the list) and every row had a filled delete box beside its menu. The list now spaces its rows, keeps the menus in one column, and shows the delete as a quiet icon that lights up on hover. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With the pointer resting on the island, every sync (several a second) threw away and redrew the header's gear and speaker icons, rewrote the Spotify buttons' tooltips, the plan pill's label and the vitals line's class. Each rewrite under the pointer makes the webview set the cursor again, and with an app behind the island setting its own (the Claude app's text cursor while an agent works) the pointer flickered between the two. They are written only when they change now. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The hidden window that reads the live plan usage sat in the middle of the screen. Hidden, its WebView2 still set the cursor for its page wherever its rectangle was, so over text in the settings window the I-beam blinked to an arrow twice a second. It now waits off the screen, and is centred only when shown to sign in. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Brings in the update: the blue Mochi while a new version waits, What's new after an update, the phone recap, Android 0.3.0 and the 0.5.3 versions. WhatsApp: both sides added it on their own. This branch keeps its own WhatsApp (the tall-view popups, quiet groups, the fifth pill slot, GOWA started with Coucou), so the update's WhatsApp files (archive, install, model, prefs, process, webhook, its test) and their wiring in lib.rs, bridge.ts, main.ts and settings/main.ts are left out, with miniz_oxide, which only its installer used. Strings: ours plus the update's new ones, minus those nothing shows any more. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Windows put the window made at -32000,-32000 back at its default spot, so the hidden window still sat over the screen until a sign-in moved it. It is moved off the screen once it exists instead. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tatuses Brings in keeping Mochi whole after a monitor change (Louis-CFM#892). The WhatsApp fix (Louis-CFM#901) was written for the update's own WhatsApp, which this branch leaves out; the same check is ported to this branch's WhatsApp instead: Status updates, broadcast lists and channels no longer become chats. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
In short
All of it is Windows-only (
windows/). The Mac app is untouched.Testing
npm test: 442 pass.cargo test --release --lib -p coucou: 522 pass.cargo test --release -p coucou-hook: 35 pass. Each feature has new tests.windows/THIRD_PARTY_NOTICES.md.Notes
windows/README.mdor the CHANGELOG yet. I'll add them in whatever form you prefer, and I'm happy to split this into per-topic PRs if that's easier to review.