13 Commits

Author SHA1 Message Date
Eric
f5fc172cc0 fix(workspace): finish remaining installer and tasks cleanup (#433)
- make install.sh resilient when pnpm is only available via corepack
- cap pnpm build heap for low-memory installs
- relabel Workspace Kanban sidebar entry to Tasks and clarify copy

Co-authored-by: Aurora release bot <release@outsourc-e.com>
2026-05-13 22:53:23 -04:00
Eric
cd6115b2fc fix: consolidate verified workspace issue sweep (#432)
* fix(start): use server-entry wrapper for production

* fix(swarm): reconcile oneshot checkpoints and ignore phantom blockers

* fix(profiles): sync editable descriptions from profile config

* fix: show cron jobs across Hermes profiles

* fix(capabilities): clarify dashboard-backed API detection

* feat: make Conductor use native Swarm fallback

Treat Workspace-native Swarm as the official Conductor fallback when the dashboard mission API is unavailable. Preserve dashboard-first dispatch, native status/cancel handling, provider-neutral setup docs, and regression coverage for gateway capability detection, swarm health, roster/profile handling, and native Conductor responses.

* fix(usage-meter): reposition menu trigger for better alignment

- Adjusted the position of the menu trigger in the usage meter component to enhance layout consistency and user experience.

fix(chat-panel): adjust position of chat panel toggle button

- Updated the positioning of the chat panel toggle button to improve visibility and accessibility by changing its bottom and right offsets.

* fix(stt): wire Groq/OpenAI voice transcription into chat

* Fix Workspace Kanban loopback dashboard link

* fix(update): do not open historical release notes on startup

* fix(chat): clear stale thinking runs reliably

* fix(dashboard): trust sessions endpoint for status

* fix(settings): address review — local default, OAuth lifecycle, validation

* fix(dashboard): always scrape live session token from HTML

* fix(chat): avoid portable history replay on bound sessions

* fix(settings): remove dead smart routing controls

* fix(tasks-api): guard against HTML catch-all in probeBackend

The /api/hermes-tasks route was renamed to /api/claude-tasks in commit
efcb7d14, but the probe logic still listed the old route as a candidate.
When probed, the SPA catch-all returned a 200 HTML response instead of
a 404, so probeBackend() treated it as a valid (empty) backend and then
failed when the actual task fetch threw.

Fixes:
- probeBackend() now checks Content-Type: application/json and returns
  -1 for non-JSON responses, so future route renames degrade gracefully.
- resolveBackend() now only selects hermes if hermesCount > 0, defaulting
  to claude-tasks (the active backend post rename) when hermes is absent.

* fix(terminal): default cwd to ~ and fallback if path missing

PTY helper chdir fails when ~/.hermes is absent (common in Docker).
Default shell cwd to home; server falls back to HOME if cwd does not exist.

Co-authored-by: Cursor <cursoragent@cursor.com>

* fix(settings): satisfy lint on custom providers UI

* fix(docker): add -m flag to useradd so workspace home dir is created

Without -m, the system account has no /home/workspace directory.
The auth middleware tries to write the session store at
/home/workspace/.hermes/workspace-sessions.json; mkdirSync fails with
EACCES because /home/ is root-owned (755), causing the 'Failed to
persist session store' warning and a 500 on every authenticated route.

Adding -m causes useradd to create and chown /home/workspace correctly
so the session store can be written on first login.

* fix(tasks): preserve real session links and restore task launch flow

* fix(launchd): install macOS plist from server-entry template

* fix(docker): expose dashboard API and persist workspace volumes

* fix(jobs): serialize deliver targets for cron API

* Make Hermes Workspace installable as PWA

* chore(deps): pin direct tanstack versions

* feat: align semantic Hermes swarm agents

Add semantic swarm roster metadata, profile/tool/skill docs, shared semantic worker ID validation, focused roster regression coverage, and one-shot checkpoint capture for dispatch smoke tests.

* fix(conductor): pass through sessionKeyPrefix from portable spawn result

sessionKeyPrefix was hardcoded to null in conductor-spawn.ts, breaking
async session resolution when the dashboard backend returns a prefix.
Now mirrors the sessionKey pattern and passes through the value from
the spawn result.

Co-authored-by: Hermes Agent

* feat(swarm): bridge workspace kanban to native Hermes

* fix(chat): keep portable main pinned without breaking resolved sessions

* Add Windows startup script for Hermes Workspace

Document PowerShell usage for launching and restarting gateway + workspace via WSL tmux.

Co-Authored-By: Oz <oz-agent@warp.dev>

* fix(config): name Hermes Agent in restart notice

* fix(swarm): reconcile aggregate semantic worker exports

---------

Co-authored-by: Aurora release bot <release@outsourc-e.com>
Co-authored-by: motoki takahashi <motokitakahashi@motokinoMac-mini.local>
Co-authored-by: Vicky Wonder <vicky@openclaw.ai>
Co-authored-by: Vitaliy Isikov <visikov+supagoku@gmail.com>
Co-authored-by: Hermes Agent <hermes-agent@local>
Co-authored-by: Nikolay Mohr <nikomohr96@gmail.com>
Co-authored-by: Niko Mohr <niko@friendsfromcollege.de>
Co-authored-by: wtchronos <262830926+wtchronos@users.noreply.github.com>
Co-authored-by: Dak0verflow <dakotaferris@gmail.com>
Co-authored-by: norema <mamadou.marone.19@gmail.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: daoyuan <ludaoyuan1989@gmail.com>
Co-authored-by: firemountain <firemountain@gmail.com>
Co-authored-by: RAZSOC Local <razsoc@local>
Co-authored-by: Waylon Kenning <waylonkenning@Waylons-MacBook-Pro.local>
Co-authored-by: Kublai <kublai@kublai.local>
Co-authored-by: justa <justa@local>
Co-authored-by: Oz <oz-agent@warp.dev>
2026-05-13 22:34:42 -04:00
charithasjayakody-wq
171229c78f fix: clean Hermes Workspace setup and branding copy (#252)
Co-authored-by: Aurora release bot <release@outsourc-e.com>
2026-05-03 09:55:15 -04:00
Aurora release bot
7fe6f4a4bb fix(branding): restore Hermes naming across GitHub surfaces 2026-05-01 10:55:01 -04:00
Aurora release bot
efcb7d144e chore(rename): migrate legacy 'Hermes' codename bytes to canonical 'Claude' across repo
- Rewrites all Claude/claude/CLAUDE -> Hermes/claude/CLAUDE
- Renames 31 files (hermes-*.ts -> claude-*.ts, hermes-*.png -> claude-*.png, etc.)
- Renames 1 directory (src/routes/api/hermes-proxy -> claude-proxy)
- 254 files content-modified, 2681 byte sequences replaced
- Build passes, no new test regressions (pre-existing failures unchanged)
- Adds skills-bundle/ to gitignore + vitest exclude to keep test scope clean
2026-05-01 01:00:06 -04:00
aurora
8a53bbbb35 docs: agent pairing guide + troubleshooting + installer env-var typo guard
Three additions to reduce onboarding friction:

1. docs/AGENT-PAIRING.md — step-by-step guide designed for AI agent
   ingestion. Covers the full Workspace↔Gateway pairing flow from
   scratch: hermes-agent install → env var setup → API server enable →
   port verification → workspace .env → startup verification. Includes
   platform-specific notes (WSL, macOS, Linux), a copy-paste quick-fix
   block, and a diagnostic bundle command for when things go wrong.

2. docs/troubleshooting.md — human-readable FAQ covering the six most
   common setup failures (API server not binding, mode=disconnected,
   port conflicts, WSL cold-start race, dev server crashes, onboarding
   error state). Each entry has cause → fix → verify.

3. install.sh — added a post-setup guard that scans ~/.hermes/.env for
   env var names missing underscores (APISERVERENABLED vs
   API_SERVER_ENABLED). The gateway reads exact names via os.getenv()
   and silently ignores typos — this produces a 'gateway starts but API
   server never binds' failure that's hard to diagnose from the UI.
   The guard now warns the user with the correct names.
2026-04-21 12:50:42 -04:00
Hamoun-IA
a89e1f354b fix: harden workspace installer for local Hermes API (#79)
Co-authored-by: Valentina via Hermes <bot@hamoun.tech>
2026-04-20 20:02:41 -04:00
Eric
4ccad791c2 fix(install): delegate hermes-agent to Nous upstream installer
hermes-agent is not published to PyPI - pip install was always going to fail
with 'No matching distribution found'. Delegate to the official Nous
installer which handles PEP 668, uv, Termux, and source build properly.

Detected from user bug report:
  curl -fsSL https://hermes-workspace.com/install.sh | bash
  -> ERROR: No matching distribution found for hermes-agent[cron]

- Drop PyPI/pipx/venv/PEP 668 fallback chain (Nous handles it all)
- Require curl as prereq
- Ensure ~/.hermes/bin and ~/.local/bin on PATH after install
- Bail with helpful message if hermes not on PATH post-install
2026-04-20 14:42:16 -04:00
Eric
984d9853fb fix(install,onboarding): correct PEP 668 detection + auto-recover gateway
install.sh:
- The PEP 668 marker EXTERNALLY-MANAGED lives *inside* stdlib (e.g.
  /usr/lib/python3.13/EXTERNALLY-MANAGED), not its parent. Our check
  pointed at the parent so Ubuntu 25.10 / Python 3.13 was treated as
  un-managed and tripped 'externally-managed-environment' on plain pip.
  Now we check both locations and fall back to a 'pip install --dry-run'
  probe that just reads stderr for the marker.
- ensure_pipx() auto-installs pipx via apt/dnf/pacman/brew when absent so
  fresh Debian/Ubuntu boxes don't have to run an extra command first.
  apt path tries 'pipx' then 'python3-pipx' for older releases.
- install_with_venv() now hints at python3-venv/python3-full when
  'python3 -m venv' itself is missing on minimal Debian-family installs.

connection-startup-screen:
- After 4s of failed health polling, fire /api/start-hermes once silently.
  If hermes-agent is installed and just not running, the gateway comes up
  without the user clicking anything; the existing 2s polling loop sees
  /health and dismisses the splash. The manual 'Auto-Start Hermes Gateway'
  button stays as a fallback.

hermes-reconnect-banner:
- When the in-session probe flips to disconnected, fire /api/start-hermes
  once silently with a 5-minute cool-down per restart attempt. Catches
  gateway crashes (OOM, killed parent shell, quota loop) and brings it
  back without requiring the user to click the banner. Falls back to the
  existing 'Start Agent' button if the silent attempt fails.
2026-04-20 11:47:56 -04:00
Eric
ba3c223bb2 feat(conductor): bundle workspace-dispatch skill in repo + auto-link on install
- Drop skills/workspace-dispatch/SKILL.md (112 lines) into the repo so the
  Conductor orchestrator gets real decomposition guidance on every spawn,
  not the 'proceed using create_task to spawn workers' fallback.
- conductor-spawn: resolve skill path from this module's location
  (import.meta.url -> repo root) so it works regardless of which directory
  the dev server starts from. New search order:
    1. <repo>/skills/workspace-dispatch/SKILL.md  (bundled)
    2. $cwd/skills/workspace-dispatch/SKILL.md
    3. ~/.hermes/skills/workspace-dispatch/SKILL.md
    4. ~/.ocplatform/workspace/skills/workspace-dispatch/SKILL.md
- install.sh: symlink every directory under <repo>/skills/* into
  ~/.hermes/skills/<name> so end users get the bundled skills available to
  their hermes agent (not just to Conductor). Skips if target exists.

Verified: fresh conductor spawn now reads the real skill into the
orchestrator prompt ('# Workspace Dispatch (Single Agent)' visible in the
job output prompt instead of the not-found stub).
2026-04-20 10:55:28 -04:00
Eric
5a9ee68401 feat(operations): port Operations screen, wire to Hermes profiles + jobs
- Port clawsuite Operations module (screens/agents/*) — 265-line operations-screen,
  8 components, 2 hooks, agent presets.
- Route /operations now renders OperationsScreen (was gateway AgentsScreen).
- Each Hermes profile = one Operations agent. use-operations.ts talks to
  /api/profiles/{list,create,update,delete}. Default profile shown as 'Workspace'.
- New server fn updateProfileConfig + /api/profiles/update endpoint.
- cron-api.ts rewired to /api/hermes-jobs (was /api/cron/*). Friendly croniter
  missing-dep hint.
- New /api/session-history + /api/session-send adapters so the embedded
  ControlSuite chat components work against Hermes (/api/history + /api/send-stream).
- ChatScreen gains 'embedded' prop that disables auto-navigation side effects
  so the real chat can be embedded in Operations orchestrator without yanking
  users to /chat/$sessionKey on refresh/send.
- New Agent modal: template picker (Sage/Builder/Scribe/Ops/Trader/Blank) that
  pre-fills emoji + description + system prompt from agent-presets.
- Surface pass for hermes-nous dark theme: swapped literal bg-white ->
  bg-[var(--theme-card)] across all agents components (6 files).
- Stub src/hooks/use-agent-outputs.ts (clawsuite had dangling import; returns
  empty list for now — outputs feed backend TBD).
- install.sh: handle PEP 668 (Debian 12+/Ubuntu 23.04+) via pipx-first,
  venv-fallback. Include [cron] extra so hermes-agent has croniter.
2026-04-20 10:24:33 -04:00
Eric
ed5f79e5cc fix(install): remove undefined BOLD/RESET vars from final installer output
The installer logic completed successfully, but the final success message
referenced shell variables that were never defined, causing:

  bash: line 117: BOLD: unbound variable

Replace the final instructions block with plain text so the one-liner install
finishes cleanly under .
2026-04-19 17:44:18 -04:00
Eric
fff216d5d7 feat(v2): one-liner installer + zero-fork messaging cleanup
- Add install.sh: preflight-checked installer that pulls vanilla
  hermes-agent from PyPI, clones the repo, configures .env, installs
  deps. Idempotent, re-runnable.
- README: new 'One-line install' section with curl | bash command.
  Demote Manual install section to secondary path.
- Banner tightened: 'v2 — zero-fork. Clone, don't fork.'
- Remove 'Earlier versions required a fork' retrospective from banner;
  the fork is gone, we don't need to apologize for it.
- Model switch toast: drop 'enhanced fork' phrasing, use 'enhanced
  runtime' (the fork no longer exists as a distinct thing; vanilla
  provides the enhanced runtime).
- Update pinned-copy test accordingly.

One-liner for users:
  curl -fsSL https://raw.githubusercontent.com/outsourc-e/hermes-workspace/main/install.sh | bash
2026-04-19 16:06:06 -04:00