Merge local Hermes improvements: UTF-8 hardening, context compaction,… - #310
Merge local Hermes improvements: UTF-8 hardening, context compaction,…#310helix4u wants to merge 1 commit into
Conversation
… Discord progress, and tool-call recovery
Fix Verified and Deployed ✅ProblemThe profile progress indicator was showing "100% complete" when the Sex field was still unselected (showing "Select sex..." placeholder). Root CauseThe Body section's Fix AppliedAdded // Before:
requiredFields: ["weightValue"]
// After:
requiredFields: ["weightValue", "sex"]Verification
Commit
The |
|
@andrueandersoncs you okay? lol |
|
so... we just needed some sex? seems like the fix for life, man. |
The Ask panel now picks the first configured provider across
OPENROUTER_API_KEY, ANTHROPIC_API_KEY, OPENAI_API_KEY,
TOGETHER_API_KEY (with keys also read from $HERMES_HOME/.env).
Default model when OpenRouter is configured:
anthropic/claude-haiku-4-5. WIKI_LLM_MODEL overrides.
Secondary fixes in IcarusPage.tsx:
- Wrapped the page in an ErrorBoundary so render crashes surface
a readable error instead of a blank tab.
- Moved a useMemo above early returns (previous hook-after-return
ordering caused React error NousResearch#310 when the page went from loading
to loaded).
- Error branch now shows whether the session token is present and
offers a Retry, which helps distinguish "backend restarted after
this tab loaded" from actual failures.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…nder() isolation class Three-part class closure for the React #310 / lost-renderer-crash family (#79428, follow-up to #80560 / #82763): 1. Diagnosability (#79428 defect B): error-boundary catches now persist to desktop.log with their component stack via a new fire-and-forget hermes:logs:renderer-error IPC (synchronous flush — the window may be dying). Every renderer-content window (main, secondary session, instance, HUD, quick entry, pet overlay) gets the error-level console capture that previously only the main window had, labeled per window. 'Open logs' on the crash dialog now reveals a file that actually contains the crash. 2. Recurrence guard: eslint no-restricted-syntax rule banning inline render() calls in JSX — the mechanism behind #80560. The rule immediately caught two live sites #82763's audit missed (floating panes, narrow-overlay reveal), both hosting plugin panes. 3. Fix those two missed sites with the same ContribRender mount. extracted console-capture/report formatting to electron/renderer-log.ts with unit tests; renderer console lines now carry the window label.
…nder() isolation class Three-part class closure for the React NousResearch#310 / lost-renderer-crash family (NousResearch#79428, follow-up to NousResearch#80560 / NousResearch#82763): 1. Diagnosability (NousResearch#79428 defect B): error-boundary catches now persist to desktop.log with their component stack via a new fire-and-forget hermes:logs:renderer-error IPC (synchronous flush — the window may be dying). Every renderer-content window (main, secondary session, instance, HUD, quick entry, pet overlay) gets the error-level console capture that previously only the main window had, labeled per window. 'Open logs' on the crash dialog now reveals a file that actually contains the crash. 2. Recurrence guard: eslint no-restricted-syntax rule banning inline render() calls in JSX — the mechanism behind NousResearch#80560. The rule immediately caught two live sites NousResearch#82763's audit missed (floating panes, narrow-overlay reveal), both hosting plugin panes. 3. Fix those two missed sites with the same ContribRender mount. extracted console-capture/report formatting to electron/renderer-log.ts with unit tests; renderer console lines now carry the window label.
CI's check:lint caught three real issues in the directive surface: - TranscriptDirectiveLeaf called the contribution's render() inline in JSX — the exact pattern no-restricted-syntax bans because the callback's hooks land in the host and a plugin reload changes the host hook count (React #310). The callback is now memoized and mounted via ContribRender. - The inline frame mirrored its height state into a ref from the message handler (the stale-read pattern no-restricted-syntax flags). Functional setState reads current state directly; the shadow refs are gone. - perfectionist import/export ordering in the frame and the SDK index.
CI's check:lint caught three real issues in the directive surface: - TranscriptDirectiveLeaf called the contribution's render() inline in JSX — the exact pattern no-restricted-syntax bans because the callback's hooks land in the host and a plugin reload changes the host hook count (React #310). The callback is now memoized and mounted via ContribRender. - The inline frame mirrored its height state into a ref from the message handler (the stale-read pattern no-restricted-syntax flags). Functional setState reads current state directly; the shadow refs are gone. - perfectionist import/export ordering in the frame and the SDK index.
CI's check:lint caught three real issues in the directive surface: - TranscriptDirectiveLeaf called the contribution's render() inline in JSX — the exact pattern no-restricted-syntax bans because the callback's hooks land in the host and a plugin reload changes the host hook count (React NousResearch#310). The callback is now memoized and mounted via ContribRender. - The inline frame mirrored its height state into a ref from the message handler (the stale-read pattern no-restricted-syntax flags). Functional setState reads current state directly; the shadow refs are gone. - perfectionist import/export ordering in the frame and the SDK index.
…nder() isolation class Three-part class closure for the React NousResearch#310 / lost-renderer-crash family (NousResearch#79428, follow-up to NousResearch#80560 / NousResearch#82763): 1. Diagnosability (NousResearch#79428 defect B): error-boundary catches now persist to desktop.log with their component stack via a new fire-and-forget hermes:logs:renderer-error IPC (synchronous flush — the window may be dying). Every renderer-content window (main, secondary session, instance, HUD, quick entry, pet overlay) gets the error-level console capture that previously only the main window had, labeled per window. 'Open logs' on the crash dialog now reveals a file that actually contains the crash. 2. Recurrence guard: eslint no-restricted-syntax rule banning inline render() calls in JSX — the mechanism behind NousResearch#80560. The rule immediately caught two live sites NousResearch#82763's audit missed (floating panes, narrow-overlay reveal), both hosting plugin panes. 3. Fix those two missed sites with the same ContribRender mount. extracted console-capture/report formatting to electron/renderer-log.ts with unit tests; renderer console lines now carry the window label.
CI's check:lint caught three real issues in the directive surface: - TranscriptDirectiveLeaf called the contribution's render() inline in JSX — the exact pattern no-restricted-syntax bans because the callback's hooks land in the host and a plugin reload changes the host hook count (React NousResearch#310). The callback is now memoized and mounted via ContribRender. - The inline frame mirrored its height state into a ref from the message handler (the stale-read pattern no-restricted-syntax flags). Functional setState reads current state directly; the shadow refs are gone. - perfectionist import/export ordering in the frame and the SDK index.
CI's check:lint caught three real issues in the directive surface: - TranscriptDirectiveLeaf called the contribution's render() inline in JSX — the exact pattern no-restricted-syntax bans because the callback's hooks land in the host and a plugin reload changes the host hook count (React NousResearch#310). The callback is now memoized and mounted via ContribRender. - The inline frame mirrored its height state into a ref from the message handler (the stale-read pattern no-restricted-syntax flags). Functional setState reads current state directly; the shadow refs are gone. - perfectionist import/export ordering in the frame and the SDK index.
closing time...