feat(hermes): implement create_executor() with HERMES_API_KEY / OPENROUTER_API_KEY fallback + smoke tests - #49
Merged
Merged
Conversation
…back Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds HERMES_API_KEY to .env.example with a cross-reference to the OPENROUTER_API_KEY fallback, and adds the hermes runtime row to the CLAUDE.md runtime table so the new adapter is discoverable alongside its siblings (langgraph, claude-code, openclaw, crewai, autogen, deepagents). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Contributor
Author
7-gate verification — PASS
Not-noteworthy by cron policy — new LLM runtime, billing is on the user's own API key. Merging with |
HongmingWang-Rabbit
pushed a commit
that referenced
this pull request
Apr 14, 2026
…_KEY) The hermes config required NOUS_API_KEY but the executor (workspace-template/adapters/hermes/executor.py from PR #49) checks HERMES_API_KEY and OPENROUTER_API_KEY. A workspace created from this template would have the provisioner block on a missing NOUS_API_KEY even when HERMES_API_KEY was set, or pass provisioning but fail at executor init. .env.example already documents HERMES_API_KEY. Fix: rename the required_env entry to HERMES_API_KEY and update the comments to match the executor's actual fallback order (HERMES_API_KEY first, OPENROUTER_API_KEY second). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2 tasks
molecule-ai Bot
pushed a commit
that referenced
this pull request
Apr 21, 2026
feat(hermes): implement create_executor() with HERMES_API_KEY / OPENROUTER_API_KEY fallback + smoke tests
molecule-ai Bot
pushed a commit
that referenced
this pull request
Apr 21, 2026
…_KEY) The hermes config required NOUS_API_KEY but the executor (workspace-template/adapters/hermes/executor.py from PR #49) checks HERMES_API_KEY and OPENROUTER_API_KEY. A workspace created from this template would have the provisioner block on a missing NOUS_API_KEY even when HERMES_API_KEY was set, or pass provisioning but fail at executor init. .env.example already documents HERMES_API_KEY. Fix: rename the required_env entry to HERMES_API_KEY and update the comments to match the executor's actual fallback order (HERMES_API_KEY first, OPENROUTER_API_KEY second). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
molecule-ai Bot
pushed a commit
that referenced
this pull request
Apr 23, 2026
SEO Analyst cron references docs/marketing/seo/keywords.md but the file was missing. Created with all 12 keywords from PR #49 (all Published). Assigned owners: Content Marketer (8), DevRel Engineer (2), PMM (2). Status: Brief needed on all 12. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
HongmingWang-Rabbit
pushed a commit
that referenced
this pull request
Jun 12, 2026
…kly/monthly) Extends the single monthly per-workspace budget to four independent ROLLING windows so a workspace can be capped per hour/day/week/month (#49 — gives the canvas Budget tab a real lever against runaway LLM spend, e.g. the reno-stars opus drain). SSOT design: - budget_periods.go = single source of truth: the period set + rolling windows, one FILTERed per-period spend query over the ledger, and the PURE parse/encode/exceededPeriods logic. Add a period = one line here. - migration: workspaces.budget_limits jsonb (canonical config, backfilled from the legacy monthly budget_limit) + workspace_spend_events ledger. - heartbeat (registry.go): derive the spend INCREMENT from the agent's existing cumulative report (delta vs prev; reset-aware) → ledger row. Server owns windowing; NO runtime change. - budget.go GET/PATCH: per-period limit/spend/remaining; accepts the new {budget_limits:{...}} shape AND the legacy {budget_limit} (→ monthly); legacy response fields still emitted + budget_limit kept synced (rollout back-compat). A limit of 0 = block-all (preserved); null/absent = no limit. - a2a_proxy.go checkWorkspaceBudget: 402 if ANY configured period's rolling window spend >= its limit; fail-open on DB error. - canvas BudgetSection: four period rows (USD limit input + spend/limit + bar). Tests: pure SSOT (parse/encode/exceededPeriods); GET/PATCH + multi-period + A2A enforcement (sqlmock, migrated to the new two-query flow); shared expectBudgetCheck helpers updated; canvas behavioral + per-period progress/aria. go build + vet + full handlers suite + migrations + canvas vitest all green. NOTE: the duplicate components/__tests__/BudgetSection.test.tsx (old single-limit UI) was repurposed to a focused per-period progress/aria suite — behavioral coverage now lives in tabs/__tests__/BudgetSection.test.tsx (one component, no parallel identical suites). Refs #49. Co-Authored-By: Claude Opus 4.7 (1M context) <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.
Summary
Hermes adapter PR 2 — implements
create_executor()inworkspace-template/adapters/hermes/with the key-resolution order CEO specified, plus a smoke test suite.Changes
workspace-template/adapters/hermes/executor.py(+153) —create_executor(hermes_api_key=None)factory. Resolution order:hermes_api_keyparameter if passed directlyHERMES_API_KEYenv var → routes to Nous PortalOPENROUTER_API_KEYenv var → routes to OpenRouterValueErrorwith clear messageworkspace-template/adapters/hermes/__init__.py(+3) — exportscreate_executorworkspace-template/adapters/hermes/adapter.py(+42/-7) — integrates the new factoryworkspace-template/tests/test_hermes_smoke.py(+84) — smoke test suiteTest plan
Authorship / chain of custody
Implemented by Dev Lead agent (commit author Dev Lead Agent on 791def3) on 2026-04-13 during the first successful Hermes integration cycle after the private-repo clone blocker was resolved. Patch was applied locally for review before pushing; now opening the PR per the always-push workflow.
Related:
🤖 Generated with Claude Code