Skip to content

Merge local Hermes improvements: UTF-8 hardening, context compaction,… - #310

Closed
helix4u wants to merge 1 commit into
NousResearch:mainfrom
helix4u:reapply/local-sync
Closed

Merge local Hermes improvements: UTF-8 hardening, context compaction,…#310
helix4u wants to merge 1 commit into
NousResearch:mainfrom
helix4u:reapply/local-sync

Conversation

@helix4u

@helix4u helix4u commented Mar 3, 2026

Copy link
Copy Markdown
Contributor

closing time...

@helix4u helix4u closed this Mar 3, 2026
@helix4u
helix4u deleted the reapply/local-sync branch March 3, 2026 06:55
@andrueandersoncs

Copy link
Copy Markdown

Fix Verified and Deployed ✅

Problem

The profile progress indicator was showing "100% complete" when the Sex field was still unselected (showing "Select sex..." placeholder).

Root Cause

The Body section's requiredFields configuration only included weightValue, not sex. This meant the Body section was considered complete based solely on weight being filled, ignoring the sex field.

Fix Applied

Added "sex" to the Body section's requiredFields array in components/profile-form.tsx:

// Before:
requiredFields: ["weightValue"]

// After:
requiredFields: ["weightValue", "sex"]

Verification

  • ✅ All 508 tests pass
  • ✅ Build compiles with no TypeScript errors
  • ✅ Lint passes
  • Production QA verified: Progress correctly shows 67% (not 100%) when sex is unselected
  • ✅ Progress reaches 100% only when ALL required fields (name, email, weight, sex) are filled

Commit

fb30ebd - fix: require sex field for 100% profile completion (#310)

The isSectionComplete() function already correctly validates that string fields have trim().length > 0, so adding sex to requiredFields properly prevents the Body section from appearing complete when sex is still on the placeholder value.

@helix4u

helix4u commented Apr 1, 2026

Copy link
Copy Markdown
Contributor Author

@andrueandersoncs you okay? lol

@helix4u

helix4u commented Apr 1, 2026

Copy link
Copy Markdown
Contributor Author

so... we just needed some sex? seems like the fix for life, man.

esaradev added a commit to esaradev/hermes-agent that referenced this pull request Apr 15, 2026
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>
teknium1 added a commit that referenced this pull request Aug 11, 2026
…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.
blut-agent pushed a commit to blut-agent/hermes-agent-fork that referenced this pull request Aug 11, 2026
…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.
OutThisLife added a commit that referenced this pull request Aug 17, 2026
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.
OutThisLife added a commit that referenced this pull request Aug 17, 2026
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.
lisajlau pushed a commit to lisajlau/hermes-agent that referenced this pull request Aug 20, 2026
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.
prmartinow pushed a commit to prmartinow/hermes-agent that referenced this pull request Aug 26, 2026
…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.
prmartinow pushed a commit to prmartinow/hermes-agent that referenced this pull request Aug 26, 2026
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.
bobaba76 pushed a commit to bobaba76/hermes-agent that referenced this pull request Aug 27, 2026
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants