Repository navigation
Feat/model picker anthropic - #3
Closed
danilarff86 wants to merge 36 commits into
Closed
danilarff86 wants to merge 36 commits into
danilarff86 wants to merge 36 commits into
Conversation
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Ukrainian language support
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The trailing cue in buildExtractionUser is concatenated directly after EXTRACTION_SYSTEM, which now describes a dissertation defense, so asking for "the interviewer's current core question" contradicted it inside a single request. Also removes a duplicate Ukrainian answer-language test superseded by the target-language case, and corrects the design doc's claim that buildExtractionUser needed no change. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Academic answer style
Diagnoses why the Interviewer channel captures nothing on macOS: the getDisplayMedia loopback path needs two Chromium feature flags that main.js never sets, so the stream comes back video-only. On headphones the interviewer is never transcribed; on speakers their speech reaches only the microphone, which is hardwired to the "You" label. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HzVW3YgFohygg7bM1Hxxyb
Supersedes the macOS loopback feature-flag design, whose premise was wrong: Electron 33's Chromium contains no macOS system-audio capture at all, and silently ignores the unknown feature names it was passed. Electron 44 captures system audio through Apple's CoreAudio Tap API by default, which needs no flags but does need the NSAudioCaptureUsageDescription Info.plist key on both packaging paths. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HzVW3YgFohygg7bM1Hxxyb
Task 0 translates source comments to English before the Electron work, so later tasks do not write comments that immediately need translating. It carries an explicit do-not-touch list: the repo also contains Chinese that is user-facing or load-bearing (the Chinese answer-language rule, the language <option> labels, and the knowledge-base markers asserted by tests), none of which may be translated. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HzVW3YgFohygg7bM1Hxxyb
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HzVW3YgFohygg7bM1Hxxyb
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HzVW3YgFohygg7bM1Hxxyb
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HzVW3YgFohygg7bM1Hxxyb
Step 6 searched for MacCatapSystemAudioLoopbackCapture, a feature name copied from a community library targeting older Chromium. It does not exist under that spelling in Electron 44, so the check returned 0 on a runtime that does support system audio. Search for the CoreAudio Tap implementation class instead: CatapAudioInputStream returns 16 on Electron 44.2.0 and 0 on 33.4.11, while the control string MacWebContentsOcclusion is found in both. Also records that this machine blocks npm install scripts, so Electron's binary download must be run by hand after a version change. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HzVW3YgFohygg7bM1Hxxyb
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HzVW3YgFohygg7bM1Hxxyb
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HzVW3YgFohygg7bM1Hxxyb
Task 3 raised .nvmrc to 22 and engines.node to >=22.12.0, but the two documents that actually tell a contributor which Node to install still said Node >= 18 / Node 20 LTS, and both CI workflows still pinned 20. npm only warns on an engine mismatch, so a contributor following the README installs Node 20, gets a clean install, and then cannot package the app at all -- @electron/packager requires >= 22.12.0. Also updates the allowScripts pin, which still named electron@33.4.11 after the bump to 44.2.0, and drops a comment in getSystemStream that still blamed a missing feature flag -- the last trace in code of the superseded explanation. Extends test/packaging.test.js to compare the usage-description text between the two packaging sources, not only the key names. macOS shows that text in the permission prompt, so a wording fix applied to one source alone would have passed the previous assertions. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HzVW3YgFohygg7bM1Hxxyb
…n-44 Fix macOS system-audio capture: upgrade to Electron 44
* fix: translate remaining Chinese error/UI strings to English Error messages, dialog titles/filters, and console logs in the main process and renderer were left in Chinese while the rest of the app is English. Intentional multilingual bits are untouched: the native language names in the language <select> options, and the zh branch of the answer-language prompt rule (deliberately written in the target language to prime model output). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q3K6W8gPHnrKVnvtmgDMxF * style: run prettier on main.js Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q3K6W8gPHnrKVnvtmgDMxF --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
…hunk (#5) The transcript treated Deepgram's `is_final` flag as end-of-sentence. That flag only means "this text won't be revised" — Deepgram freezes several such chunks per spoken sentence — so a single question arrived as two or three separate turns. The fragments were then joined and handed to the LLM, which stitched them into a garbled question. DeepgramLive now buffers frozen chunks and commits them as one turn on `speech_final`, the flag that actually means the speaker stopped. An `UtteranceEnd` backstop (requested via `utterance_end_ms`) covers the case where steady background noise keeps endpointing from ever firing, and close() flushes so a trailing sentence isn't dropped. Interim display is prefixed with the buffered text, so a long sentence stays visible while it's still being spoken. The silence threshold was a fixed 300ms, which cut off anyone who paused to think. It's now the `sttPauseMs` setting — Short 0.5s / Normal 0.9s / Long 1.5s — under Settings, defaulting to 0.9s. No settings migration is needed: the DEFAULTS merge in load() gives existing installs the new key. Auto-answer's own debounce drops from 1.3s to 0.6s so it doesn't stack on top of the longer pause. Tests cover the segmentation logic against synthetic Deepgram frames, including the real Ukrainian split that prompted this. deepgram.js gained a guarded CommonJS export to make it loadable under node --test, with a scoped eslint override rather than adding `module` to all renderer globals. Also adds test/renderer-scripts.test.js, which compiles the renderer's <script> files together the way the browser does. They share one global scope, so a top-level `const` in two files is an early SyntaxError that stops a whole file from parsing — and ESLint can't see it, since it lints each file alone. Claude-Session: https://claude.ai/code/session_01U27AjcJKhLosmpXPZmU1sC Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
The Current Question box is filled by a separate, display-only extraction call (main.js:363-378) that sees the last six transcript lines. When the committee asks a short follow-up, EXTRACTION_SYSTEM was told to return that follow-up verbatim, so the box showed things like "А чому саме його?" — unreadable without the preceding dialogue. The answer itself was never affected: in extraction mode buildPrompt takes the no-question branch and hands the answering model all 15 recent turns, which is why the generated answers resolved the reference correctly. This is purely a display fix. EXTRACTION_SYSTEM now asks for the follow-up to be rewritten self-contained, resolving pronouns, ellipsis and back-references against the earlier turns — and explicitly forbids inventing an antecedent, so an out-of-window referent degrades to the wording as spoken rather than to a confident guess. Claude-Session: https://claude.ai/code/session_01H3ymMYyTkERfHPM9aoxEmj Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Add eslint.config.js global for AbortSignal, used by the new model-list timeout (Node's fetch/AbortSignal were already allowed constraints; the lint config just hadn't caught up). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…o think The Model picker pushed Start Listening and Settings off the right edge at the default 1280px width. Top-bar fields now shrink and truncate instead, and the app title hides below 1180px so the selects stay usable at the 960px minimum. The Anthropic question-extraction call had a 2048-token ceiling, but thinking counts against max_tokens and extraction failures are silent, so it is raised to 4096. The budget table moves into config.tokenBudgets so it is covered by a test. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Feat/model picker anthropic
Testing
npm run lintpassesnpm testpassesnpm start) and verified the affected flow