Skip to content

Terminal backend fanout pr2 - PENDING - #23

Closed
shannonsands wants to merge 3 commits into
mainfrom
terminal-backend-fanout-pr2
Closed

Terminal backend fanout pr2 - PENDING#23
shannonsands wants to merge 3 commits into
mainfrom
terminal-backend-fanout-pr2

Conversation

@shannonsands

Copy link
Copy Markdown
Contributor

Modal multiplexing ONLY first, just acts as an enhancement option that doesn't conflict with the current path. previous PR goes in first.

- Preserve full trajectory while truncating prompt view per turn (avoids context overflow)
- Add max_context_tokens support and wire from env config
- Normalize tool call arguments robustly (dict / stringified JSON / plain string)
- Avoid double-encoding tool arguments in Hermes parser
- Add tool-call metrics to AgentResult for debugging/optional shaping

Scope: environments/* only
- Default Modal behavior unchanged
- New pooled mode reuses warm Modal environments across tasks
- Per-task working directory (/root/hermes_tasks/<task_id>) with best-effort cleanup
- Minimal integration: terminal_tool _create_environment now accepts task_id and
  selects pooled modal wrapper when configured
@teknium1 teknium1 closed this Feb 27, 2026
h4x3rotab pushed a commit to Clawdi-AI/hermes-agent that referenced this pull request Apr 10, 2026
…settings

Cherry-picked from PR NousResearch#23 (clawjasper56). Adds skipHydration to Zustand
persist, defers initializeSettingsAppearance to useEffect, and adds
mounted guard to ThemeToggleMini.
h4x3rotab pushed a commit to Clawdi-AI/hermes-agent that referenced this pull request Apr 10, 2026
NousResearch#23)

The inspector panel already uses relative /api/memory paths (fixed in main),
but the parent GET route was missing — requests fell through to the client
router and returned HTML instead of JSON.

This adds a proper TanStack createFileRoute handler that proxies memory
requests through the workspace server with auth, so the inspector works
correctly over Tailscale, LAN, and remote access.

Rebased from PR #4 onto current main.
begjb pushed a commit to begjb/hermes-agent that referenced this pull request May 29, 2026
…ved/rejected legs

The ee014b80 fix covered the reviewer-spawn leg of a review-drain cycle
(`review-required:` block reason → reviewer needs to spawn on a task
with a PR URL in comments). But the cycle has a symmetric second leg:
after the reviewer drains with `review-approved:` (or
`review-rejected:`) and reassigns back to the original assignee, that
assignee must be respawned to squash-merge + complete (or fix + reblock).
The same PR URL still sits in comment history; the same false-positive
fires.

Observed today on jetminds board: t_41626876 (Tower Prefect Child A,
PR NousResearch#23) sat in ready state with the dispatcher firing
respawn_guarded:active_pr every minute since 16:53. Both reviews
APPROVED, PR mergeable + CI-green, but engineering-substrate couldn't
be spawned to merge because the most-recent block reason was
`review-approved:` — not covered by the prior `review-required:`-only
exception.

Fix: extend `_review_required_handoff_active()` to also match
`review-approved:` and `review-rejected:` block-reason prefixes. The
"single most-recent blocked event, narrow scope, doesn't leak past
completion" invariant is preserved unchanged. `review-pending-input:`
and any other non-canonical `review-*` prefix do NOT match — the
predicate enumerates the three drain-cycle prefixes explicitly rather
than substring-matching `review-`.

Tests: 6 new (approved-leg suppresses; rejected-leg suppresses; predicate
matches each prefix individually; predicate rejects unrelated review-*
prefix; approved-leg exception expires post-completion). 27/27 respawn-
guard tests pass; 170/170 test_kanban_db.py file passes. No upstream
behavior changed for non-review-drain workflows.

Refs: substrate task t_b63946f8 (jetminds-main, 2026-05-21)
JetMinds-local; per hermes-fork-patches discipline
difeizheng pushed a commit to difeizheng/zdf-hermes-agent that referenced this pull request Jun 3, 2026
Fixes 12 remaining MEDIUM issues from the deep audit (19 total, 7 fixed in Round 12):

design_agent:
- NousResearch#15: add asyncio.wait_for(300s) around LLM API call to prevent infinite hangs
- NousResearch#17: replace 2x hardcoded 'claude-opus-4-8' with shared DEFAULT_MODEL constant

qa_agent / validate_agent:
- NousResearch#20,NousResearch#22,NousResearch#23: already fixed in Round 12 (verified — dynamic timeout/threshold values used)

memory.py:
- NousResearch#24: frontmatter parser uses regex r'^---$' instead of str.split('---',2),
  preventing false splits on content containing '---' (SQL, markdown tables)
- NousResearch#25: parse and preserve 'description' field from frontmatter in metadata,
  fixing write→load roundtrip data loss

profiles.py:
- NousResearch#26: ProfileConfig now frozen=True (immutable dataclass per coding standards)

deploy_agent:
- NousResearch#31: replace 2x sync subprocess.run with asyncio.create_subprocess_exec
- fix 5x .decode() → .decode('utf-8', errors='replace') for Windows CJK safety
- remove unused import subprocess

db.py:
- NousResearch#27: add class docstring explaining RLock + _unlocked pattern
- NousResearch#28: FK constraints already in DDL (verified PRAGMA foreign_keys=ON active)
- NousResearch#29: add _ensure_connection() with PRAGMA integrity_check(1) + auto-reconnect
       on 4 critical methods (create_task, get_task, claim_task, submit_result)
- extract _create_connection() static method for reuse by reconnect

Tests: 79 passed, 0 failed
Sugumaran-Balasubramaniyan added a commit to Sugumaran-Balasubramaniyan/hermes-agent that referenced this pull request Jun 10, 2026
CRITICAL fixes:
- Remove retracted solve-rate claims (92% failure, 12.5 attempts/solve)
  Per DeepSWE issue NousResearch#21 author: solve-rate findings retracted 2026-06-08
  Replace with honest caveats: no effort tuning, guardrail 404s,
  limited replication. Data is directional, not definitive.
- Remove MiniMax M3 row (never benchmarked on DeepSWE per issue NousResearch#23)
- Expand model table to all 8 published DeepSWE models including
  Claude Opus 4.7, Sonnet 4.6, Gemini 3.5 Flash, Kimi K2.6
- Replace fabricated 'hermes chat' CLI with actual delegate_task() API
- Fix related_skills: model-selection -> subagent-driven-development
- Remove phantom HuggingFace URL (404)

HIGH fixes:
- Description: generic, no disputed model rankings embedded
- Orchestrator: use current model, not hardcoded V4-Pro
- Decision tree: add priority ordering + [route: X] user override
- Strip self-promotion from skill body (frontmatter only)

References file: full table with caveats, valid cost analysis
retained, MiniMax/phamtom-URL removed.
whichguy added a commit to whichguy/hermes-agent-1 that referenced this pull request Jun 30, 2026
… implements NousResearch#23

voi.selection_floor(records, discard_threshold, rel_frac, abs_floor): rel_frac=0 -> the absolute
discard_threshold (backward-compatible); rel_frac>0 -> a relative knee max(abs_floor, rel_frac*top_value)
that scales the cutoff to each run's value distribution, so a low-value domain isn't wiped by a fixed
absolute floor (the 61%-below-0.40 problem). rank_and_select gains rel_frac/abs_floor and uses it as the
gate; infogain DEFAULTS gains rel_keep_frac (float, default 0.0 = current behavior) wired into both
rank_and_select calls. Calibrated value set in the follow-up after the saturation/floor scans.

Tests: 53 (2 new — selection_floor modes, relative keeps more in a low-value domain); rel_frac=0 keeps
all prior behavior.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
whichguy added a commit to whichguy/hermes-agent-1 that referenced this pull request Jul 2, 2026
…ix; families eval plumbing

Two independently designed same-day runs of the pre-mortem eval ladder converge:
auto-on stands, rollback trigger untripped on BOTH criteria.

- Tier-1 (14-cell projected) + tier-2 (realized all-fast): premortem TOP lens by
  realized_regret (0.416; failure-surface 0.602 vs 0.386 ≈1.6×); read-only pm
  questions correctly priced (~0.06) and pruned.
- Independent replication (deepseek judge, bucket source, 34-prompt bank-wide
  two-arm scan): premortem again TOP lens (r_change 0.984, regret 0.765); zero
  read-only bucket entries; adjudicator-diversity trigger explicitly cleared
  (0.65→0.70). Findings §"Independent replication (NousResearch#25)".
- Gate fix: bare artifact nouns (email/message/database) removed from
  _PREMORTEM_HINT (fired on retrieval tasks); word-boundary-prefix hint matching
  with exact-token set (prod/drop/db/repo); pinned in tests.
- Eval-harness families plumbing (the gap that blocked ALL lens evals: cfg from
  DEFAULTS has no 'families' key → harnesses silently ran the flat generator):
  infogain.families_cfg() + --families/--premortem on score_scan/validate_evsi/
  run_evals; lens-tagged scan rows; per_lens() attribution in analyze_evsi;
  pinned in tests/test_eval_families.py. score_scan --include-life no-op fixed.
- Same-dataset side verdicts: NousResearch#23 rel_keep_frac stays OFF (selection_policies —
  every q_value policy ≈ size-matched random within-task); graded change judge
  REJECTED (anchor-clustering; rejudge.py stays as the offline instrument
  harness, --keep-responses stores texts for it). --families-model /
  INFOGAIN_FAMILIES_MODEL override; grouped tests/run.py runner.

Known loose end: reverse-string CI case fails framing_accuracy=0.2 in both arms
(arm-independent, pre-existing).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
whichguy added a commit to whichguy/hermes-agent-1 that referenced this pull request Jul 2, 2026
…esearch#23 stays off, graded judge rejected) + eval plumbing + grouped test suites

- Eval-harness families plumbing: infogain.families_cfg(), --families/--premortem arms on
  score_scan/validate_evsi/run_evals, per_lens() + selection_policies() in analyze_evsi,
  lens-tagged rows; score_scan --include-life pool fix (default now BANK-only).
- NousResearch#25 pre-mortem lens validated at BOTH ladder tiers: tier-1 projected two-arm (14 cells) and
  tier-2 realized two-arm (6 prompts x off/on, 336 rows) — top lens by realized_regret (0.416;
  failure-surface 0.602 vs 0.386 others; forced-on read-only self-prunes). Auto-on confirmed,
  rollback untripped. Gate false positive fixed: artifact nouns removed, word-boundary hint
  matching for both vantage+premortem gates ("repo" != "report", "prod" != "product", old
  '"db "' end-of-text miss fixed).
- NousResearch#23 selection policies: analyze_evsi.selection_policies verdict — every q_value policy within
  ~0.03 of size-matched random within-task; rel_keep_frac stays off.
- Graded change judge (opt-in --graded-change-judge) + --keep-responses + evals/rejudge.py
  offline instrument A/B: REJECTED (anchor-clustering, q_value link 0.60->0.38); original judge
  stays; harness remains for future instrument tests.
- --families-model / INFOGAIN_FAMILIES_MODEL override (families layer no longer hard-pinned to
  glm for evals); SKILL.md drift fixes (stage 1 = plan_model; --value-judge-mode documented).
- Grouped test suites: tests/run.py (basic DEFAULT = mocked/offline ~1s; live opt-in via
  INFOGAIN_TEST_LIVE; all = 107 tests). Docs in evals/README.md.
- roadmap.md reconciled (NousResearch#23 status, NousResearch#24 CLOSED outcome, wrapper DONE); findings + design docs
  updated with all three verdicts. Version 1.0.0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
waefrebeorn pushed a commit to waefrebeorn/slermes that referenced this pull request Jul 27, 2026
…ill-scaffolding extractors, title_generator gaps closed

Standing edict: never skip a module because deps are IO/config/DB — build
the plumbing first, then port dependents.

Stack A (truthy): utils.py is_truthy_value/env_var_enabled as a real
  shared lib fn (include/truthy.h, src/cli/port_utils_truthy.c).
Stack B (skill scaffolding): agent/skill_commands.py extractor surface —
  extract_user_instruction_from_skill_message, describe_skill_invocation,
  _extract_single/_bundle — byte-identical markers, em-dash join,
  excerpt-joint split (include/skill_scaffolding.h,
  src/agent/port_agent_skill_commands.c).
Stack C (session titles): hermes_state.py SessionDB title surface over
  libdb — sanitize_title (UTF-8 control scrub, 100-cp cap),
  get/set/set_auto_if_empty with uniqueness + compression-ancestor title
  transfer, get_next_title_in_lineage (#N dedup)
  (include/session_title.h, src/cli/port_session_title.c).
libdb fix: persist ended_at/end_reason in sidecar meta JSON (was silently
  dropped — compression-ancestor logic needs it; test_db still passes).
title_generator: _auto_title_enabled (config stack + truthy),
  _summarize_user_message (scaffolding stack), _persist_session_title
  (auto-if-empty predicate + #N collision retry) — all against real
  plumbing, no facades.
Verification: oracle suite NousResearch#23 title_stack MATCH (truthy/sanitize/
  describe/extract/summarize vs live Python); t_session_title_db 21/21
  behavioral asserts PASS; all 23 oracle suites MATCH; 36/36 unit tests.
arumihsnek referenced this pull request in arumihsnek/hermes-agent Aug 2, 2026
K8 cross-repository v3 gate 747e6a7b-9f41-4681-98f2-d9351b958c57 accepted configuration-first then product-second integration. Config PR #23 is merged as 3b850fe356a4bfd6c9ae466164c8959a9aaf87be; post-config offline verification passed. Product exact head 09597eb passed the product-only v3 gate a969ecf1-61a5-430f-8ac3-07eeff6cd55c. No provider live test was executed.
ethenotethan added a commit to ethenotethan/harness that referenced this pull request Aug 4, 2026
…ousResearch#23)

wiki.scan only walked the content subdirs, so root-level pages were
invisible in graph clients (HermesNative Wiki Graph ⌘W). Scan the wiki
root too: root pages default to type "meta" (frontmatter type wins),
participate in the wikilink graph, and resolve via wiki.expand_links.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Meraniya pushed a commit to Meraniya/hermes-agent that referenced this pull request Aug 6, 2026
…ousResearch#23)

The claude-code-action aborts with exit 1 ("Either ANTHROPIC_API_KEY,
CLAUDE_CODE_OAUTH_TOKEN, or workload identity federation is required") when no
key is configured, painting a red X on every PR/comment event. Add the same
check-secret gate crm-pipeline uses: probe the secret into a job output and run
the review only when present, turning "not configured" into a clean skip.

No behavior change when the key IS set. Pure CI config.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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