fix(hermes): probe for dashboard subcommand before launching - #3415

Closed
la14-1 wants to merge 2 commits into
mainfrom
fix/hermes-dashboard-command
Closed

fix(hermes): probe for dashboard subcommand before launching#3415
la14-1 wants to merge 2 commits into
mainfrom
fix/hermes-dashboard-command

Conversation

@la14-1

Copy link
Copy Markdown
Collaborator

Why: On DigitalOcean (and potentially other clouds), older hermes installs lack the dashboard subcommand. The previous code launched hermes dashboard unconditionally and waited 60s for a timeout, producing a confusing argparse error that users reported in #3407.

Changes

  • Add a capability probe (hermes --help | grep dashboard) before attempting the dashboard launch
  • If the subcommand is missing, bail immediately with a clear message instead of waiting 60s
  • Surface the actual runServer error message in the warning (was previously swallowed behind a generic message)
  • Add test coverage for the probe logic and failure surfacing

Relationship to #3413

PR #3413 adds diagnostic output (binary location, version, log tail) for debugging. This PR fixes the root cause by detecting the missing subcommand upfront. They are complementary — this one should land first since it prevents the 60s timeout entirely.

Fixes#3407

Agent: code-health
-- spawn-refactor/code-health

louisgvand others added 2 commits May 18, 2026 03:07
The root cause of issue #3407 is that some hermes installs (older versions
or partial installs on DigitalOcean) lack the `dashboard` subcommand entirely.
The previous code launched `hermes dashboard` unconditionally and waited 60s
for a timeout, producing a confusing argparse error.
Add a capability probe (`hermes --help | grep dashboard`) before attempting
the launch. If the subcommand is missing, bail immediately with a clear
message instead of waiting for the timeout. Also surface the actual error
message from runServer failures in the warning.
Fixes#3407
Agent: code-health
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…oss test files
The digitalocean-token and hetzner-cov tests used callCount-based fetch
mock routing, which broke when concurrent test files shared globalThis.fetch.
Switch to URL-based routing so mock responses are determined by the request
URL, not the order of all fetch calls across the process.
Agent: code-health
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

Verified on current main (2026-05-18): lint clean (0 errors), all CI checks passing (ShellCheck, Mock Tests, Biome Lint, Unit Tests, macOS Compatibility). Branch is mergeable with no conflicts. Ready for review.

-- refactor/pr-maintainer

@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

Closing in favor of #3413, which provides the comprehensive diagnostic approach. The earlier probe-only PR #3410 was already closed in favor of #3413's diagnostic block — this PR implements essentially the same probe approach and would conflict on agent-setup.ts and package.json. The diagnostic block in #3413 already includes subcommand detection and provides much richer debugging output.

-- refactor/community-coordinator

Sign up for freeto 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.

[Bug]: hermes on digitalocean fails — hermes dashboard reported as not a command

2 participants

@la14-1@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(hermes): probe for dashboard subcommand before launching - #3415

Closed
la14-1 wants to merge 2 commits into
mainfrom
fix/hermes-dashboard-command
Closed

fix(hermes): probe for dashboard subcommand before launching#3415
la14-1 wants to merge 2 commits into
mainfrom
fix/hermes-dashboard-command

Conversation

@la14-1

Copy link
Copy Markdown
Collaborator

Why: On DigitalOcean (and potentially other clouds), older hermes installs lack the dashboard subcommand. The previous code launched hermes dashboard unconditionally and waited 60s for a timeout, producing a confusing argparse error that users reported in #3407.

Changes

  • Add a capability probe (hermes --help | grep dashboard) before attempting the dashboard launch
  • If the subcommand is missing, bail immediately with a clear message instead of waiting 60s
  • Surface the actual runServer error message in the warning (was previously swallowed behind a generic message)
  • Add test coverage for the probe logic and failure surfacing

Relationship to #3413

PR #3413 adds diagnostic output (binary location, version, log tail) for debugging. This PR fixes the root cause by detecting the missing subcommand upfront. They are complementary — this one should land first since it prevents the 60s timeout entirely.

Fixes#3407

Agent: code-health
-- spawn-refactor/code-health

louisgvand others added 2 commits May 18, 2026 03:07
The root cause of issue #3407 is that some hermes installs (older versions
or partial installs on DigitalOcean) lack the `dashboard` subcommand entirely.
The previous code launched `hermes dashboard` unconditionally and waited 60s
for a timeout, producing a confusing argparse error.
Add a capability probe (`hermes --help | grep dashboard`) before attempting
the launch. If the subcommand is missing, bail immediately with a clear
message instead of waiting for the timeout. Also surface the actual error
message from runServer failures in the warning.
Fixes#3407
Agent: code-health
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…oss test files
The digitalocean-token and hetzner-cov tests used callCount-based fetch
mock routing, which broke when concurrent test files shared globalThis.fetch.
Switch to URL-based routing so mock responses are determined by the request
URL, not the order of all fetch calls across the process.
Agent: code-health
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

Verified on current main (2026-05-18): lint clean (0 errors), all CI checks passing (ShellCheck, Mock Tests, Biome Lint, Unit Tests, macOS Compatibility). Branch is mergeable with no conflicts. Ready for review.

-- refactor/pr-maintainer

@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

Closing in favor of #3413, which provides the comprehensive diagnostic approach. The earlier probe-only PR #3410 was already closed in favor of #3413's diagnostic block — this PR implements essentially the same probe approach and would conflict on agent-setup.ts and package.json. The diagnostic block in #3413 already includes subcommand detection and provides much richer debugging output.

-- refactor/community-coordinator

Sign up for freeto 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.

[Bug]: hermes on digitalocean fails — hermes dashboard reported as not a command

2 participants

@la14-1@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(hermes): probe for dashboard subcommand before launching - #3415

Closed
la14-1 wants to merge 2 commits into
mainfrom
fix/hermes-dashboard-command
Closed

fix(hermes): probe for dashboard subcommand before launching#3415
la14-1 wants to merge 2 commits into
mainfrom
fix/hermes-dashboard-command

Conversation

@la14-1

Copy link
Copy Markdown
Collaborator

Why: On DigitalOcean (and potentially other clouds), older hermes installs lack the dashboard subcommand. The previous code launched hermes dashboard unconditionally and waited 60s for a timeout, producing a confusing argparse error that users reported in #3407.

Changes

  • Add a capability probe (hermes --help | grep dashboard) before attempting the dashboard launch
  • If the subcommand is missing, bail immediately with a clear message instead of waiting 60s
  • Surface the actual runServer error message in the warning (was previously swallowed behind a generic message)
  • Add test coverage for the probe logic and failure surfacing

Relationship to #3413

PR #3413 adds diagnostic output (binary location, version, log tail) for debugging. This PR fixes the root cause by detecting the missing subcommand upfront. They are complementary — this one should land first since it prevents the 60s timeout entirely.

Fixes#3407

Agent: code-health
-- spawn-refactor/code-health

louisgvand others added 2 commits May 18, 2026 03:07
The root cause of issue #3407 is that some hermes installs (older versions
or partial installs on DigitalOcean) lack the `dashboard` subcommand entirely.
The previous code launched `hermes dashboard` unconditionally and waited 60s
for a timeout, producing a confusing argparse error.
Add a capability probe (`hermes --help | grep dashboard`) before attempting
the launch. If the subcommand is missing, bail immediately with a clear
message instead of waiting for the timeout. Also surface the actual error
message from runServer failures in the warning.
Fixes#3407
Agent: code-health
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…oss test files
The digitalocean-token and hetzner-cov tests used callCount-based fetch
mock routing, which broke when concurrent test files shared globalThis.fetch.
Switch to URL-based routing so mock responses are determined by the request
URL, not the order of all fetch calls across the process.
Agent: code-health
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

Verified on current main (2026-05-18): lint clean (0 errors), all CI checks passing (ShellCheck, Mock Tests, Biome Lint, Unit Tests, macOS Compatibility). Branch is mergeable with no conflicts. Ready for review.

-- refactor/pr-maintainer

@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

Closing in favor of #3413, which provides the comprehensive diagnostic approach. The earlier probe-only PR #3410 was already closed in favor of #3413's diagnostic block — this PR implements essentially the same probe approach and would conflict on agent-setup.ts and package.json. The diagnostic block in #3413 already includes subcommand detection and provides much richer debugging output.

-- refactor/community-coordinator

Sign up for freeto 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.

[Bug]: hermes on digitalocean fails — hermes dashboard reported as not a command

2 participants

@la14-1@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(hermes): probe for dashboard subcommand before launching - #3415

Closed
la14-1 wants to merge 2 commits into
mainfrom
fix/hermes-dashboard-command
Closed

fix(hermes): probe for dashboard subcommand before launching#3415
la14-1 wants to merge 2 commits into
mainfrom
fix/hermes-dashboard-command

Conversation

@la14-1

Copy link
Copy Markdown
Collaborator

Why: On DigitalOcean (and potentially other clouds), older hermes installs lack the dashboard subcommand. The previous code launched hermes dashboard unconditionally and waited 60s for a timeout, producing a confusing argparse error that users reported in #3407.

Changes

  • Add a capability probe (hermes --help | grep dashboard) before attempting the dashboard launch
  • If the subcommand is missing, bail immediately with a clear message instead of waiting 60s
  • Surface the actual runServer error message in the warning (was previously swallowed behind a generic message)
  • Add test coverage for the probe logic and failure surfacing

Relationship to #3413

PR #3413 adds diagnostic output (binary location, version, log tail) for debugging. This PR fixes the root cause by detecting the missing subcommand upfront. They are complementary — this one should land first since it prevents the 60s timeout entirely.

Fixes#3407

Agent: code-health
-- spawn-refactor/code-health

louisgvand others added 2 commits May 18, 2026 03:07
The root cause of issue #3407 is that some hermes installs (older versions
or partial installs on DigitalOcean) lack the `dashboard` subcommand entirely.
The previous code launched `hermes dashboard` unconditionally and waited 60s
for a timeout, producing a confusing argparse error.
Add a capability probe (`hermes --help | grep dashboard`) before attempting
the launch. If the subcommand is missing, bail immediately with a clear
message instead of waiting for the timeout. Also surface the actual error
message from runServer failures in the warning.
Fixes#3407
Agent: code-health
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…oss test files
The digitalocean-token and hetzner-cov tests used callCount-based fetch
mock routing, which broke when concurrent test files shared globalThis.fetch.
Switch to URL-based routing so mock responses are determined by the request
URL, not the order of all fetch calls across the process.
Agent: code-health
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

Verified on current main (2026-05-18): lint clean (0 errors), all CI checks passing (ShellCheck, Mock Tests, Biome Lint, Unit Tests, macOS Compatibility). Branch is mergeable with no conflicts. Ready for review.

-- refactor/pr-maintainer

@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

Closing in favor of #3413, which provides the comprehensive diagnostic approach. The earlier probe-only PR #3410 was already closed in favor of #3413's diagnostic block — this PR implements essentially the same probe approach and would conflict on agent-setup.ts and package.json. The diagnostic block in #3413 already includes subcommand detection and provides much richer debugging output.

-- refactor/community-coordinator

Sign up for freeto 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.

[Bug]: hermes on digitalocean fails — hermes dashboard reported as not a command

2 participants

@la14-1@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(hermes): probe for dashboard subcommand before launching - #3415

Closed
la14-1 wants to merge 2 commits into
mainfrom
fix/hermes-dashboard-command
Closed

fix(hermes): probe for dashboard subcommand before launching#3415
la14-1 wants to merge 2 commits into
mainfrom
fix/hermes-dashboard-command

Conversation

@la14-1

Copy link
Copy Markdown
Collaborator

Why: On DigitalOcean (and potentially other clouds), older hermes installs lack the dashboard subcommand. The previous code launched hermes dashboard unconditionally and waited 60s for a timeout, producing a confusing argparse error that users reported in #3407.

Changes

  • Add a capability probe (hermes --help | grep dashboard) before attempting the dashboard launch
  • If the subcommand is missing, bail immediately with a clear message instead of waiting 60s
  • Surface the actual runServer error message in the warning (was previously swallowed behind a generic message)
  • Add test coverage for the probe logic and failure surfacing

Relationship to #3413

PR #3413 adds diagnostic output (binary location, version, log tail) for debugging. This PR fixes the root cause by detecting the missing subcommand upfront. They are complementary — this one should land first since it prevents the 60s timeout entirely.

Fixes#3407

Agent: code-health
-- spawn-refactor/code-health

louisgvand others added 2 commits May 18, 2026 03:07
The root cause of issue #3407 is that some hermes installs (older versions
or partial installs on DigitalOcean) lack the `dashboard` subcommand entirely.
The previous code launched `hermes dashboard` unconditionally and waited 60s
for a timeout, producing a confusing argparse error.
Add a capability probe (`hermes --help | grep dashboard`) before attempting
the launch. If the subcommand is missing, bail immediately with a clear
message instead of waiting for the timeout. Also surface the actual error
message from runServer failures in the warning.
Fixes#3407
Agent: code-health
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…oss test files
The digitalocean-token and hetzner-cov tests used callCount-based fetch
mock routing, which broke when concurrent test files shared globalThis.fetch.
Switch to URL-based routing so mock responses are determined by the request
URL, not the order of all fetch calls across the process.
Agent: code-health
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

Verified on current main (2026-05-18): lint clean (0 errors), all CI checks passing (ShellCheck, Mock Tests, Biome Lint, Unit Tests, macOS Compatibility). Branch is mergeable with no conflicts. Ready for review.

-- refactor/pr-maintainer

@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

Closing in favor of #3413, which provides the comprehensive diagnostic approach. The earlier probe-only PR #3410 was already closed in favor of #3413's diagnostic block — this PR implements essentially the same probe approach and would conflict on agent-setup.ts and package.json. The diagnostic block in #3413 already includes subcommand detection and provides much richer debugging output.

-- refactor/community-coordinator

Sign up for freeto 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.

[Bug]: hermes on digitalocean fails — hermes dashboard reported as not a command

2 participants

@la14-1@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(hermes): probe for dashboard subcommand before launching - #3415

Closed
la14-1 wants to merge 2 commits into
mainfrom
fix/hermes-dashboard-command
Closed

fix(hermes): probe for dashboard subcommand before launching#3415
la14-1 wants to merge 2 commits into
mainfrom
fix/hermes-dashboard-command

Conversation

@la14-1

Copy link
Copy Markdown
Collaborator

Why: On DigitalOcean (and potentially other clouds), older hermes installs lack the dashboard subcommand. The previous code launched hermes dashboard unconditionally and waited 60s for a timeout, producing a confusing argparse error that users reported in #3407.

Changes

  • Add a capability probe (hermes --help | grep dashboard) before attempting the dashboard launch
  • If the subcommand is missing, bail immediately with a clear message instead of waiting 60s
  • Surface the actual runServer error message in the warning (was previously swallowed behind a generic message)
  • Add test coverage for the probe logic and failure surfacing

Relationship to #3413

PR #3413 adds diagnostic output (binary location, version, log tail) for debugging. This PR fixes the root cause by detecting the missing subcommand upfront. They are complementary — this one should land first since it prevents the 60s timeout entirely.

Fixes#3407

Agent: code-health
-- spawn-refactor/code-health

louisgvand others added 2 commits May 18, 2026 03:07
The root cause of issue #3407 is that some hermes installs (older versions
or partial installs on DigitalOcean) lack the `dashboard` subcommand entirely.
The previous code launched `hermes dashboard` unconditionally and waited 60s
for a timeout, producing a confusing argparse error.
Add a capability probe (`hermes --help | grep dashboard`) before attempting
the launch. If the subcommand is missing, bail immediately with a clear
message instead of waiting for the timeout. Also surface the actual error
message from runServer failures in the warning.
Fixes#3407
Agent: code-health
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…oss test files
The digitalocean-token and hetzner-cov tests used callCount-based fetch
mock routing, which broke when concurrent test files shared globalThis.fetch.
Switch to URL-based routing so mock responses are determined by the request
URL, not the order of all fetch calls across the process.
Agent: code-health
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

Verified on current main (2026-05-18): lint clean (0 errors), all CI checks passing (ShellCheck, Mock Tests, Biome Lint, Unit Tests, macOS Compatibility). Branch is mergeable with no conflicts. Ready for review.

-- refactor/pr-maintainer

@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

Closing in favor of #3413, which provides the comprehensive diagnostic approach. The earlier probe-only PR #3410 was already closed in favor of #3413's diagnostic block — this PR implements essentially the same probe approach and would conflict on agent-setup.ts and package.json. The diagnostic block in #3413 already includes subcommand detection and provides much richer debugging output.

-- refactor/community-coordinator

Sign up for freeto 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.

[Bug]: hermes on digitalocean fails — hermes dashboard reported as not a command

2 participants

@la14-1@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(hermes): probe for dashboard subcommand before launching - #3415

Closed
la14-1 wants to merge 2 commits into
mainfrom
fix/hermes-dashboard-command
Closed

fix(hermes): probe for dashboard subcommand before launching#3415
la14-1 wants to merge 2 commits into
mainfrom
fix/hermes-dashboard-command

Conversation

@la14-1

Copy link
Copy Markdown
Collaborator

Why: On DigitalOcean (and potentially other clouds), older hermes installs lack the dashboard subcommand. The previous code launched hermes dashboard unconditionally and waited 60s for a timeout, producing a confusing argparse error that users reported in #3407.

Changes

  • Add a capability probe (hermes --help | grep dashboard) before attempting the dashboard launch
  • If the subcommand is missing, bail immediately with a clear message instead of waiting 60s
  • Surface the actual runServer error message in the warning (was previously swallowed behind a generic message)
  • Add test coverage for the probe logic and failure surfacing

Relationship to #3413

PR #3413 adds diagnostic output (binary location, version, log tail) for debugging. This PR fixes the root cause by detecting the missing subcommand upfront. They are complementary — this one should land first since it prevents the 60s timeout entirely.

Fixes#3407

Agent: code-health
-- spawn-refactor/code-health

louisgvand others added 2 commits May 18, 2026 03:07
The root cause of issue #3407 is that some hermes installs (older versions
or partial installs on DigitalOcean) lack the `dashboard` subcommand entirely.
The previous code launched `hermes dashboard` unconditionally and waited 60s
for a timeout, producing a confusing argparse error.
Add a capability probe (`hermes --help | grep dashboard`) before attempting
the launch. If the subcommand is missing, bail immediately with a clear
message instead of waiting for the timeout. Also surface the actual error
message from runServer failures in the warning.
Fixes#3407
Agent: code-health
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…oss test files
The digitalocean-token and hetzner-cov tests used callCount-based fetch
mock routing, which broke when concurrent test files shared globalThis.fetch.
Switch to URL-based routing so mock responses are determined by the request
URL, not the order of all fetch calls across the process.
Agent: code-health
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

Verified on current main (2026-05-18): lint clean (0 errors), all CI checks passing (ShellCheck, Mock Tests, Biome Lint, Unit Tests, macOS Compatibility). Branch is mergeable with no conflicts. Ready for review.

-- refactor/pr-maintainer

@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

Closing in favor of #3413, which provides the comprehensive diagnostic approach. The earlier probe-only PR #3410 was already closed in favor of #3413's diagnostic block — this PR implements essentially the same probe approach and would conflict on agent-setup.ts and package.json. The diagnostic block in #3413 already includes subcommand detection and provides much richer debugging output.

-- refactor/community-coordinator

Sign up for freeto 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.

[Bug]: hermes on digitalocean fails — hermes dashboard reported as not a command

2 participants

@la14-1@louisgv
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(hermes): probe for dashboard subcommand before launching - #3415

Closed
la14-1 wants to merge 2 commits into
mainfrom
fix/hermes-dashboard-command
Closed

fix(hermes): probe for dashboard subcommand before launching#3415
la14-1 wants to merge 2 commits into
mainfrom
fix/hermes-dashboard-command

Conversation

@la14-1

Copy link
Copy Markdown
Collaborator

Why: On DigitalOcean (and potentially other clouds), older hermes installs lack the dashboard subcommand. The previous code launched hermes dashboard unconditionally and waited 60s for a timeout, producing a confusing argparse error that users reported in #3407.

Changes

  • Add a capability probe (hermes --help | grep dashboard) before attempting the dashboard launch
  • If the subcommand is missing, bail immediately with a clear message instead of waiting 60s
  • Surface the actual runServer error message in the warning (was previously swallowed behind a generic message)
  • Add test coverage for the probe logic and failure surfacing

Relationship to #3413

PR #3413 adds diagnostic output (binary location, version, log tail) for debugging. This PR fixes the root cause by detecting the missing subcommand upfront. They are complementary — this one should land first since it prevents the 60s timeout entirely.

Fixes#3407

Agent: code-health
-- spawn-refactor/code-health

louisgvand others added 2 commits May 18, 2026 03:07
The root cause of issue #3407 is that some hermes installs (older versions
or partial installs on DigitalOcean) lack the `dashboard` subcommand entirely.
The previous code launched `hermes dashboard` unconditionally and waited 60s
for a timeout, producing a confusing argparse error.
Add a capability probe (`hermes --help | grep dashboard`) before attempting
the launch. If the subcommand is missing, bail immediately with a clear
message instead of waiting for the timeout. Also surface the actual error
message from runServer failures in the warning.
Fixes#3407
Agent: code-health
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…oss test files
The digitalocean-token and hetzner-cov tests used callCount-based fetch
mock routing, which broke when concurrent test files shared globalThis.fetch.
Switch to URL-based routing so mock responses are determined by the request
URL, not the order of all fetch calls across the process.
Agent: code-health
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

Verified on current main (2026-05-18): lint clean (0 errors), all CI checks passing (ShellCheck, Mock Tests, Biome Lint, Unit Tests, macOS Compatibility). Branch is mergeable with no conflicts. Ready for review.

-- refactor/pr-maintainer

@la14-1

Copy link
Copy Markdown
CollaboratorAuthor

Closing in favor of #3413, which provides the comprehensive diagnostic approach. The earlier probe-only PR #3410 was already closed in favor of #3413's diagnostic block — this PR implements essentially the same probe approach and would conflict on agent-setup.ts and package.json. The diagnostic block in #3413 already includes subcommand detection and provides much richer debugging output.

-- refactor/community-coordinator

Sign up for freeto 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.

[Bug]: hermes on digitalocean fails — hermes dashboard reported as not a command

2 participants

@la14-1@louisgv