fix(cli): group the browser command surface and drop help-list noise - #319

Open
Agnik47 wants to merge 1 commit into
agentrhq:mainfrom
Agnik47:fix/browser-help-command-surface
Open

fix(cli): group the browser command surface and drop help-list noise#319
Agnik47 wants to merge 1 commit into
agentrhq:mainfrom
Agnik47:fix/browser-help-command-surface

Conversation

@Agnik47

Copy link
Copy Markdown
Contributor

Fixes#317.

Problem

webcmd browser --help printed one flat list mixing two unrelated surfaces, plus Commander's auto help [command] a line below the -h, --help option that does the same thing:

Usage: webcmd browser [options] [command]
bind, close, fork, init, run, snapshot, tabs, verify
Options:
-h, --help display help for command
Commands:
init <name> Generate adapter scaffold in ~/.webcmd/clis/
fork <name> Fork an installed plugin command into a private copy
verify [options] <name> Execute an adapter and validate output; uses fixture
at ~/.webcmd/sites/<site>/verify/<cmd>.json when
present
tabs List pages in the existing browser session
bind [options] Bind this session to an existing page
run [options] Run JavaScript with Playwright
snapshot [options] Inspect the current page with a compact accessibility
snapshot
close Close or detach this browser session
help [command] display help for command

docs/cli-reference.mdx already states that "the public raw-browser surface is tabs, bind, run, and snapshot", but the help output gave init/fork/verify equal billing with no indication they are adapter-authoring commands.

After

Usage: webcmd browser [options] [command]
bind, close, init, run, snapshot, tabs, verify
Options:
-h, --help display help for command
Browser session commands:
tabs List pages in the existing browser session
bind [options] Bind this session to an existing page
run [options] Run JavaScript with Playwright
snapshot [options] Inspect the current page with a compact accessibility
snapshot
close Close or detach this browser session
Adapter authoring commands:
init <name> Generate adapter scaffold in ~/.webcmd/clis/
verify [options] <name> Execute an adapter and validate output; uses fixture
at ~/.webcmd/sites/<site>/verify/<cmd>.json when
present

Changes

  • Grouping. Browser subcommands are grouped under Browser session commands: / Adapter authoring commands:. The mapping lives next to browserCommandCatalog and is consumed by both cli.ts and hosted/browser-args.ts, so local and hosted browser --help present the same shape. The catalog entries and hosted-contract.json are untouched.
  • Ordering.init/fork/verify are now attached after the session commands (via new Command(...) + addCommand, matching how tabs/bind/run/snapshot/close were already registered), so the group the namespace is named for comes first. Leaf help and error text for these commands is byte-identical to before.
  • fork. It copies a plugin command into ~/.webcmd/clis and never touches a Session — exactly what webcmd adapter override does. adapter override gains a fork alias, so webcmd adapter fork <site>/<command> is the local spelling, and browser fork is hidden from local help while staying registered and dispatchable. Hosted help still lists it, since hosted mode has no adapter fork.
  • help [command]. Namespace help no longer advertises Commander's auto help command; the root presentation already omitted it. webcmd <namespace> help <command> still works — it is only dropped from the listed commands. This applies to every namespace (browser, adapter, plugin, profile, daemon, auth, session, ...).

Not included

init and verify are grouped, not relocated. Moving them to webcmd adapter init|verify would be a breaking surface change: they are the documented cloud authoring flow (hosted/runner.ts prints webcmd browser init / webcmd browser verify after plugin create), they are referenced throughout the bundled skills (webcmd-adapter-author, webcmd-usage, webcmd-autofix), and they are part of the hosted browser contract. Happy to do that relocation in a follow-up if you'd like it — it needs a call on hosted routing and a skills/docs sweep.

Verification

  • npx tsc --noEmit clean.
  • npx vitest run --project unit: no new failures. The 20 remaining failures on this branch are pre-existing on main in this environment (Windows EPERM on symlink in plugin/discovery/site-memory/docs-sync-review tests, plus one hosted file-upload test).
  • New coverage in src/browser/command-catalog.test.ts (group mapping, group order, fork hidden but registered, adapter override|fork alias) and src/help.test.ts (visibleChildCommands / hideAutoHelpCommands, including that help <command> still dispatches).
  • src/hosted/runner.test.ts "matches the exact local text help for every raw-session browser leaf" still passes, so local and hosted leaf help remain byte-identical.
  • npm run check:typed-error-lint and npm run check:silent-column-drop report no new violations.

@github-actions

github-actionsBot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

🟠 Maintainer review suggested — low confidence

The automated review could not reach a fully supported conclusion.

Limitations

  • The automated review returned an invalid structured result.

This review is advisory and does not block merging.

@Agnik47
Agnik47force-pushed the fix/browser-help-command-surface branch 2 times, most recently from 86721ec to 8975307CompareAugust 20, 2026 13:40
…gentrhq#317)
`browser --help` listed its session commands and its adapter-authoring commands
in one flat block, so the two unrelated surfaces read as one. Group them from
the shared catalog: `tabs`, `bind`, `run`, `snapshot`, and `close` under
"Browser session commands", `init` and `verify` under "Adapter authoring
commands". Local and hosted help draw from the same catalog, so they stay
aligned.
`browser fork` is also removed here. It ran the same action as the adapter
command and only existed as a hidden re-registration, which agentrhq#361 superseded;
`adapter override` gains a `fork` alias so the local spelling survives.
Rebased onto 0.7.10. Three upstream changes landed in the same lines and are
kept: the structured-help imports from agentrhq#425/agentrhq#428, `BROWSER_RUN_HELP_TEXT`, and
the `adapter override` description and hosted artifact-download paragraph. The
alias is additive to that description rather than replacing it.
@Agnik47
Agnik47force-pushed the fix/browser-help-command-surface branch from 8975307 to 152d777CompareAugust 28, 2026 20:56
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]:

1 participant

@Agnik47
, '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(cli): group the browser command surface and drop help-list noise - #319

Open
Agnik47 wants to merge 1 commit into
agentrhq:mainfrom
Agnik47:fix/browser-help-command-surface
Open

fix(cli): group the browser command surface and drop help-list noise#319
Agnik47 wants to merge 1 commit into
agentrhq:mainfrom
Agnik47:fix/browser-help-command-surface

Conversation

@Agnik47

Copy link
Copy Markdown
Contributor

Fixes#317.

Problem

webcmd browser --help printed one flat list mixing two unrelated surfaces, plus Commander's auto help [command] a line below the -h, --help option that does the same thing:

Usage: webcmd browser [options] [command]
bind, close, fork, init, run, snapshot, tabs, verify
Options:
-h, --help display help for command
Commands:
init <name> Generate adapter scaffold in ~/.webcmd/clis/
fork <name> Fork an installed plugin command into a private copy
verify [options] <name> Execute an adapter and validate output; uses fixture
at ~/.webcmd/sites/<site>/verify/<cmd>.json when
present
tabs List pages in the existing browser session
bind [options] Bind this session to an existing page
run [options] Run JavaScript with Playwright
snapshot [options] Inspect the current page with a compact accessibility
snapshot
close Close or detach this browser session
help [command] display help for command

docs/cli-reference.mdx already states that "the public raw-browser surface is tabs, bind, run, and snapshot", but the help output gave init/fork/verify equal billing with no indication they are adapter-authoring commands.

After

Usage: webcmd browser [options] [command]
bind, close, init, run, snapshot, tabs, verify
Options:
-h, --help display help for command
Browser session commands:
tabs List pages in the existing browser session
bind [options] Bind this session to an existing page
run [options] Run JavaScript with Playwright
snapshot [options] Inspect the current page with a compact accessibility
snapshot
close Close or detach this browser session
Adapter authoring commands:
init <name> Generate adapter scaffold in ~/.webcmd/clis/
verify [options] <name> Execute an adapter and validate output; uses fixture
at ~/.webcmd/sites/<site>/verify/<cmd>.json when
present

Changes

  • Grouping. Browser subcommands are grouped under Browser session commands: / Adapter authoring commands:. The mapping lives next to browserCommandCatalog and is consumed by both cli.ts and hosted/browser-args.ts, so local and hosted browser --help present the same shape. The catalog entries and hosted-contract.json are untouched.
  • Ordering.init/fork/verify are now attached after the session commands (via new Command(...) + addCommand, matching how tabs/bind/run/snapshot/close were already registered), so the group the namespace is named for comes first. Leaf help and error text for these commands is byte-identical to before.
  • fork. It copies a plugin command into ~/.webcmd/clis and never touches a Session — exactly what webcmd adapter override does. adapter override gains a fork alias, so webcmd adapter fork <site>/<command> is the local spelling, and browser fork is hidden from local help while staying registered and dispatchable. Hosted help still lists it, since hosted mode has no adapter fork.
  • help [command]. Namespace help no longer advertises Commander's auto help command; the root presentation already omitted it. webcmd <namespace> help <command> still works — it is only dropped from the listed commands. This applies to every namespace (browser, adapter, plugin, profile, daemon, auth, session, ...).

Not included

init and verify are grouped, not relocated. Moving them to webcmd adapter init|verify would be a breaking surface change: they are the documented cloud authoring flow (hosted/runner.ts prints webcmd browser init / webcmd browser verify after plugin create), they are referenced throughout the bundled skills (webcmd-adapter-author, webcmd-usage, webcmd-autofix), and they are part of the hosted browser contract. Happy to do that relocation in a follow-up if you'd like it — it needs a call on hosted routing and a skills/docs sweep.

Verification

  • npx tsc --noEmit clean.
  • npx vitest run --project unit: no new failures. The 20 remaining failures on this branch are pre-existing on main in this environment (Windows EPERM on symlink in plugin/discovery/site-memory/docs-sync-review tests, plus one hosted file-upload test).
  • New coverage in src/browser/command-catalog.test.ts (group mapping, group order, fork hidden but registered, adapter override|fork alias) and src/help.test.ts (visibleChildCommands / hideAutoHelpCommands, including that help <command> still dispatches).
  • src/hosted/runner.test.ts "matches the exact local text help for every raw-session browser leaf" still passes, so local and hosted leaf help remain byte-identical.
  • npm run check:typed-error-lint and npm run check:silent-column-drop report no new violations.

@github-actions

github-actionsBot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

🟠 Maintainer review suggested — low confidence

The automated review could not reach a fully supported conclusion.

Limitations

  • The automated review returned an invalid structured result.

This review is advisory and does not block merging.

@Agnik47
Agnik47force-pushed the fix/browser-help-command-surface branch 2 times, most recently from 86721ec to 8975307CompareAugust 20, 2026 13:40
…gentrhq#317)
`browser --help` listed its session commands and its adapter-authoring commands
in one flat block, so the two unrelated surfaces read as one. Group them from
the shared catalog: `tabs`, `bind`, `run`, `snapshot`, and `close` under
"Browser session commands", `init` and `verify` under "Adapter authoring
commands". Local and hosted help draw from the same catalog, so they stay
aligned.
`browser fork` is also removed here. It ran the same action as the adapter
command and only existed as a hidden re-registration, which agentrhq#361 superseded;
`adapter override` gains a `fork` alias so the local spelling survives.
Rebased onto 0.7.10. Three upstream changes landed in the same lines and are
kept: the structured-help imports from agentrhq#425/agentrhq#428, `BROWSER_RUN_HELP_TEXT`, and
the `adapter override` description and hosted artifact-download paragraph. The
alias is additive to that description rather than replacing it.
@Agnik47
Agnik47force-pushed the fix/browser-help-command-surface branch from 8975307 to 152d777CompareAugust 28, 2026 20:56
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]:

1 participant

@Agnik47
, '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(cli): group the browser command surface and drop help-list noise - #319

Open
Agnik47 wants to merge 1 commit into
agentrhq:mainfrom
Agnik47:fix/browser-help-command-surface
Open

fix(cli): group the browser command surface and drop help-list noise#319
Agnik47 wants to merge 1 commit into
agentrhq:mainfrom
Agnik47:fix/browser-help-command-surface

Conversation

@Agnik47

Copy link
Copy Markdown
Contributor

Fixes#317.

Problem

webcmd browser --help printed one flat list mixing two unrelated surfaces, plus Commander's auto help [command] a line below the -h, --help option that does the same thing:

Usage: webcmd browser [options] [command]
bind, close, fork, init, run, snapshot, tabs, verify
Options:
-h, --help display help for command
Commands:
init <name> Generate adapter scaffold in ~/.webcmd/clis/
fork <name> Fork an installed plugin command into a private copy
verify [options] <name> Execute an adapter and validate output; uses fixture
at ~/.webcmd/sites/<site>/verify/<cmd>.json when
present
tabs List pages in the existing browser session
bind [options] Bind this session to an existing page
run [options] Run JavaScript with Playwright
snapshot [options] Inspect the current page with a compact accessibility
snapshot
close Close or detach this browser session
help [command] display help for command

docs/cli-reference.mdx already states that "the public raw-browser surface is tabs, bind, run, and snapshot", but the help output gave init/fork/verify equal billing with no indication they are adapter-authoring commands.

After

Usage: webcmd browser [options] [command]
bind, close, init, run, snapshot, tabs, verify
Options:
-h, --help display help for command
Browser session commands:
tabs List pages in the existing browser session
bind [options] Bind this session to an existing page
run [options] Run JavaScript with Playwright
snapshot [options] Inspect the current page with a compact accessibility
snapshot
close Close or detach this browser session
Adapter authoring commands:
init <name> Generate adapter scaffold in ~/.webcmd/clis/
verify [options] <name> Execute an adapter and validate output; uses fixture
at ~/.webcmd/sites/<site>/verify/<cmd>.json when
present

Changes

  • Grouping. Browser subcommands are grouped under Browser session commands: / Adapter authoring commands:. The mapping lives next to browserCommandCatalog and is consumed by both cli.ts and hosted/browser-args.ts, so local and hosted browser --help present the same shape. The catalog entries and hosted-contract.json are untouched.
  • Ordering.init/fork/verify are now attached after the session commands (via new Command(...) + addCommand, matching how tabs/bind/run/snapshot/close were already registered), so the group the namespace is named for comes first. Leaf help and error text for these commands is byte-identical to before.
  • fork. It copies a plugin command into ~/.webcmd/clis and never touches a Session — exactly what webcmd adapter override does. adapter override gains a fork alias, so webcmd adapter fork <site>/<command> is the local spelling, and browser fork is hidden from local help while staying registered and dispatchable. Hosted help still lists it, since hosted mode has no adapter fork.
  • help [command]. Namespace help no longer advertises Commander's auto help command; the root presentation already omitted it. webcmd <namespace> help <command> still works — it is only dropped from the listed commands. This applies to every namespace (browser, adapter, plugin, profile, daemon, auth, session, ...).

Not included

init and verify are grouped, not relocated. Moving them to webcmd adapter init|verify would be a breaking surface change: they are the documented cloud authoring flow (hosted/runner.ts prints webcmd browser init / webcmd browser verify after plugin create), they are referenced throughout the bundled skills (webcmd-adapter-author, webcmd-usage, webcmd-autofix), and they are part of the hosted browser contract. Happy to do that relocation in a follow-up if you'd like it — it needs a call on hosted routing and a skills/docs sweep.

Verification

  • npx tsc --noEmit clean.
  • npx vitest run --project unit: no new failures. The 20 remaining failures on this branch are pre-existing on main in this environment (Windows EPERM on symlink in plugin/discovery/site-memory/docs-sync-review tests, plus one hosted file-upload test).
  • New coverage in src/browser/command-catalog.test.ts (group mapping, group order, fork hidden but registered, adapter override|fork alias) and src/help.test.ts (visibleChildCommands / hideAutoHelpCommands, including that help <command> still dispatches).
  • src/hosted/runner.test.ts "matches the exact local text help for every raw-session browser leaf" still passes, so local and hosted leaf help remain byte-identical.
  • npm run check:typed-error-lint and npm run check:silent-column-drop report no new violations.

@github-actions

github-actionsBot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

🟠 Maintainer review suggested — low confidence

The automated review could not reach a fully supported conclusion.

Limitations

  • The automated review returned an invalid structured result.

This review is advisory and does not block merging.

@Agnik47
Agnik47force-pushed the fix/browser-help-command-surface branch 2 times, most recently from 86721ec to 8975307CompareAugust 20, 2026 13:40
…gentrhq#317)
`browser --help` listed its session commands and its adapter-authoring commands
in one flat block, so the two unrelated surfaces read as one. Group them from
the shared catalog: `tabs`, `bind`, `run`, `snapshot`, and `close` under
"Browser session commands", `init` and `verify` under "Adapter authoring
commands". Local and hosted help draw from the same catalog, so they stay
aligned.
`browser fork` is also removed here. It ran the same action as the adapter
command and only existed as a hidden re-registration, which agentrhq#361 superseded;
`adapter override` gains a `fork` alias so the local spelling survives.
Rebased onto 0.7.10. Three upstream changes landed in the same lines and are
kept: the structured-help imports from agentrhq#425/agentrhq#428, `BROWSER_RUN_HELP_TEXT`, and
the `adapter override` description and hosted artifact-download paragraph. The
alias is additive to that description rather than replacing it.
@Agnik47
Agnik47force-pushed the fix/browser-help-command-surface branch from 8975307 to 152d777CompareAugust 28, 2026 20:56
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]:

1 participant

@Agnik47
, '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(cli): group the browser command surface and drop help-list noise - #319

Open
Agnik47 wants to merge 1 commit into
agentrhq:mainfrom
Agnik47:fix/browser-help-command-surface
Open

fix(cli): group the browser command surface and drop help-list noise#319
Agnik47 wants to merge 1 commit into
agentrhq:mainfrom
Agnik47:fix/browser-help-command-surface

Conversation

@Agnik47

Copy link
Copy Markdown
Contributor

Fixes#317.

Problem

webcmd browser --help printed one flat list mixing two unrelated surfaces, plus Commander's auto help [command] a line below the -h, --help option that does the same thing:

Usage: webcmd browser [options] [command]
bind, close, fork, init, run, snapshot, tabs, verify
Options:
-h, --help display help for command
Commands:
init <name> Generate adapter scaffold in ~/.webcmd/clis/
fork <name> Fork an installed plugin command into a private copy
verify [options] <name> Execute an adapter and validate output; uses fixture
at ~/.webcmd/sites/<site>/verify/<cmd>.json when
present
tabs List pages in the existing browser session
bind [options] Bind this session to an existing page
run [options] Run JavaScript with Playwright
snapshot [options] Inspect the current page with a compact accessibility
snapshot
close Close or detach this browser session
help [command] display help for command

docs/cli-reference.mdx already states that "the public raw-browser surface is tabs, bind, run, and snapshot", but the help output gave init/fork/verify equal billing with no indication they are adapter-authoring commands.

After

Usage: webcmd browser [options] [command]
bind, close, init, run, snapshot, tabs, verify
Options:
-h, --help display help for command
Browser session commands:
tabs List pages in the existing browser session
bind [options] Bind this session to an existing page
run [options] Run JavaScript with Playwright
snapshot [options] Inspect the current page with a compact accessibility
snapshot
close Close or detach this browser session
Adapter authoring commands:
init <name> Generate adapter scaffold in ~/.webcmd/clis/
verify [options] <name> Execute an adapter and validate output; uses fixture
at ~/.webcmd/sites/<site>/verify/<cmd>.json when
present

Changes

  • Grouping. Browser subcommands are grouped under Browser session commands: / Adapter authoring commands:. The mapping lives next to browserCommandCatalog and is consumed by both cli.ts and hosted/browser-args.ts, so local and hosted browser --help present the same shape. The catalog entries and hosted-contract.json are untouched.
  • Ordering.init/fork/verify are now attached after the session commands (via new Command(...) + addCommand, matching how tabs/bind/run/snapshot/close were already registered), so the group the namespace is named for comes first. Leaf help and error text for these commands is byte-identical to before.
  • fork. It copies a plugin command into ~/.webcmd/clis and never touches a Session — exactly what webcmd adapter override does. adapter override gains a fork alias, so webcmd adapter fork <site>/<command> is the local spelling, and browser fork is hidden from local help while staying registered and dispatchable. Hosted help still lists it, since hosted mode has no adapter fork.
  • help [command]. Namespace help no longer advertises Commander's auto help command; the root presentation already omitted it. webcmd <namespace> help <command> still works — it is only dropped from the listed commands. This applies to every namespace (browser, adapter, plugin, profile, daemon, auth, session, ...).

Not included

init and verify are grouped, not relocated. Moving them to webcmd adapter init|verify would be a breaking surface change: they are the documented cloud authoring flow (hosted/runner.ts prints webcmd browser init / webcmd browser verify after plugin create), they are referenced throughout the bundled skills (webcmd-adapter-author, webcmd-usage, webcmd-autofix), and they are part of the hosted browser contract. Happy to do that relocation in a follow-up if you'd like it — it needs a call on hosted routing and a skills/docs sweep.

Verification

  • npx tsc --noEmit clean.
  • npx vitest run --project unit: no new failures. The 20 remaining failures on this branch are pre-existing on main in this environment (Windows EPERM on symlink in plugin/discovery/site-memory/docs-sync-review tests, plus one hosted file-upload test).
  • New coverage in src/browser/command-catalog.test.ts (group mapping, group order, fork hidden but registered, adapter override|fork alias) and src/help.test.ts (visibleChildCommands / hideAutoHelpCommands, including that help <command> still dispatches).
  • src/hosted/runner.test.ts "matches the exact local text help for every raw-session browser leaf" still passes, so local and hosted leaf help remain byte-identical.
  • npm run check:typed-error-lint and npm run check:silent-column-drop report no new violations.

@github-actions

github-actionsBot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

🟠 Maintainer review suggested — low confidence

The automated review could not reach a fully supported conclusion.

Limitations

  • The automated review returned an invalid structured result.

This review is advisory and does not block merging.

@Agnik47
Agnik47force-pushed the fix/browser-help-command-surface branch 2 times, most recently from 86721ec to 8975307CompareAugust 20, 2026 13:40
…gentrhq#317)
`browser --help` listed its session commands and its adapter-authoring commands
in one flat block, so the two unrelated surfaces read as one. Group them from
the shared catalog: `tabs`, `bind`, `run`, `snapshot`, and `close` under
"Browser session commands", `init` and `verify` under "Adapter authoring
commands". Local and hosted help draw from the same catalog, so they stay
aligned.
`browser fork` is also removed here. It ran the same action as the adapter
command and only existed as a hidden re-registration, which agentrhq#361 superseded;
`adapter override` gains a `fork` alias so the local spelling survives.
Rebased onto 0.7.10. Three upstream changes landed in the same lines and are
kept: the structured-help imports from agentrhq#425/agentrhq#428, `BROWSER_RUN_HELP_TEXT`, and
the `adapter override` description and hosted artifact-download paragraph. The
alias is additive to that description rather than replacing it.
@Agnik47
Agnik47force-pushed the fix/browser-help-command-surface branch from 8975307 to 152d777CompareAugust 28, 2026 20:56
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]:

1 participant

@Agnik47
, '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(cli): group the browser command surface and drop help-list noise - #319

Open
Agnik47 wants to merge 1 commit into
agentrhq:mainfrom
Agnik47:fix/browser-help-command-surface
Open

fix(cli): group the browser command surface and drop help-list noise#319
Agnik47 wants to merge 1 commit into
agentrhq:mainfrom
Agnik47:fix/browser-help-command-surface

Conversation

@Agnik47

Copy link
Copy Markdown
Contributor

Fixes#317.

Problem

webcmd browser --help printed one flat list mixing two unrelated surfaces, plus Commander's auto help [command] a line below the -h, --help option that does the same thing:

Usage: webcmd browser [options] [command]
bind, close, fork, init, run, snapshot, tabs, verify
Options:
-h, --help display help for command
Commands:
init <name> Generate adapter scaffold in ~/.webcmd/clis/
fork <name> Fork an installed plugin command into a private copy
verify [options] <name> Execute an adapter and validate output; uses fixture
at ~/.webcmd/sites/<site>/verify/<cmd>.json when
present
tabs List pages in the existing browser session
bind [options] Bind this session to an existing page
run [options] Run JavaScript with Playwright
snapshot [options] Inspect the current page with a compact accessibility
snapshot
close Close or detach this browser session
help [command] display help for command

docs/cli-reference.mdx already states that "the public raw-browser surface is tabs, bind, run, and snapshot", but the help output gave init/fork/verify equal billing with no indication they are adapter-authoring commands.

After

Usage: webcmd browser [options] [command]
bind, close, init, run, snapshot, tabs, verify
Options:
-h, --help display help for command
Browser session commands:
tabs List pages in the existing browser session
bind [options] Bind this session to an existing page
run [options] Run JavaScript with Playwright
snapshot [options] Inspect the current page with a compact accessibility
snapshot
close Close or detach this browser session
Adapter authoring commands:
init <name> Generate adapter scaffold in ~/.webcmd/clis/
verify [options] <name> Execute an adapter and validate output; uses fixture
at ~/.webcmd/sites/<site>/verify/<cmd>.json when
present

Changes

  • Grouping. Browser subcommands are grouped under Browser session commands: / Adapter authoring commands:. The mapping lives next to browserCommandCatalog and is consumed by both cli.ts and hosted/browser-args.ts, so local and hosted browser --help present the same shape. The catalog entries and hosted-contract.json are untouched.
  • Ordering.init/fork/verify are now attached after the session commands (via new Command(...) + addCommand, matching how tabs/bind/run/snapshot/close were already registered), so the group the namespace is named for comes first. Leaf help and error text for these commands is byte-identical to before.
  • fork. It copies a plugin command into ~/.webcmd/clis and never touches a Session — exactly what webcmd adapter override does. adapter override gains a fork alias, so webcmd adapter fork <site>/<command> is the local spelling, and browser fork is hidden from local help while staying registered and dispatchable. Hosted help still lists it, since hosted mode has no adapter fork.
  • help [command]. Namespace help no longer advertises Commander's auto help command; the root presentation already omitted it. webcmd <namespace> help <command> still works — it is only dropped from the listed commands. This applies to every namespace (browser, adapter, plugin, profile, daemon, auth, session, ...).

Not included

init and verify are grouped, not relocated. Moving them to webcmd adapter init|verify would be a breaking surface change: they are the documented cloud authoring flow (hosted/runner.ts prints webcmd browser init / webcmd browser verify after plugin create), they are referenced throughout the bundled skills (webcmd-adapter-author, webcmd-usage, webcmd-autofix), and they are part of the hosted browser contract. Happy to do that relocation in a follow-up if you'd like it — it needs a call on hosted routing and a skills/docs sweep.

Verification

  • npx tsc --noEmit clean.
  • npx vitest run --project unit: no new failures. The 20 remaining failures on this branch are pre-existing on main in this environment (Windows EPERM on symlink in plugin/discovery/site-memory/docs-sync-review tests, plus one hosted file-upload test).
  • New coverage in src/browser/command-catalog.test.ts (group mapping, group order, fork hidden but registered, adapter override|fork alias) and src/help.test.ts (visibleChildCommands / hideAutoHelpCommands, including that help <command> still dispatches).
  • src/hosted/runner.test.ts "matches the exact local text help for every raw-session browser leaf" still passes, so local and hosted leaf help remain byte-identical.
  • npm run check:typed-error-lint and npm run check:silent-column-drop report no new violations.

@github-actions

github-actionsBot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

🟠 Maintainer review suggested — low confidence

The automated review could not reach a fully supported conclusion.

Limitations

  • The automated review returned an invalid structured result.

This review is advisory and does not block merging.

@Agnik47
Agnik47force-pushed the fix/browser-help-command-surface branch 2 times, most recently from 86721ec to 8975307CompareAugust 20, 2026 13:40
…gentrhq#317)
`browser --help` listed its session commands and its adapter-authoring commands
in one flat block, so the two unrelated surfaces read as one. Group them from
the shared catalog: `tabs`, `bind`, `run`, `snapshot`, and `close` under
"Browser session commands", `init` and `verify` under "Adapter authoring
commands". Local and hosted help draw from the same catalog, so they stay
aligned.
`browser fork` is also removed here. It ran the same action as the adapter
command and only existed as a hidden re-registration, which agentrhq#361 superseded;
`adapter override` gains a `fork` alias so the local spelling survives.
Rebased onto 0.7.10. Three upstream changes landed in the same lines and are
kept: the structured-help imports from agentrhq#425/agentrhq#428, `BROWSER_RUN_HELP_TEXT`, and
the `adapter override` description and hosted artifact-download paragraph. The
alias is additive to that description rather than replacing it.
@Agnik47
Agnik47force-pushed the fix/browser-help-command-surface branch from 8975307 to 152d777CompareAugust 28, 2026 20:56
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]:

1 participant

@Agnik47
, '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(cli): group the browser command surface and drop help-list noise - #319

Open
Agnik47 wants to merge 1 commit into
agentrhq:mainfrom
Agnik47:fix/browser-help-command-surface
Open

fix(cli): group the browser command surface and drop help-list noise#319
Agnik47 wants to merge 1 commit into
agentrhq:mainfrom
Agnik47:fix/browser-help-command-surface

Conversation

@Agnik47

Copy link
Copy Markdown
Contributor

Fixes#317.

Problem

webcmd browser --help printed one flat list mixing two unrelated surfaces, plus Commander's auto help [command] a line below the -h, --help option that does the same thing:

Usage: webcmd browser [options] [command]
bind, close, fork, init, run, snapshot, tabs, verify
Options:
-h, --help display help for command
Commands:
init <name> Generate adapter scaffold in ~/.webcmd/clis/
fork <name> Fork an installed plugin command into a private copy
verify [options] <name> Execute an adapter and validate output; uses fixture
at ~/.webcmd/sites/<site>/verify/<cmd>.json when
present
tabs List pages in the existing browser session
bind [options] Bind this session to an existing page
run [options] Run JavaScript with Playwright
snapshot [options] Inspect the current page with a compact accessibility
snapshot
close Close or detach this browser session
help [command] display help for command

docs/cli-reference.mdx already states that "the public raw-browser surface is tabs, bind, run, and snapshot", but the help output gave init/fork/verify equal billing with no indication they are adapter-authoring commands.

After

Usage: webcmd browser [options] [command]
bind, close, init, run, snapshot, tabs, verify
Options:
-h, --help display help for command
Browser session commands:
tabs List pages in the existing browser session
bind [options] Bind this session to an existing page
run [options] Run JavaScript with Playwright
snapshot [options] Inspect the current page with a compact accessibility
snapshot
close Close or detach this browser session
Adapter authoring commands:
init <name> Generate adapter scaffold in ~/.webcmd/clis/
verify [options] <name> Execute an adapter and validate output; uses fixture
at ~/.webcmd/sites/<site>/verify/<cmd>.json when
present

Changes

  • Grouping. Browser subcommands are grouped under Browser session commands: / Adapter authoring commands:. The mapping lives next to browserCommandCatalog and is consumed by both cli.ts and hosted/browser-args.ts, so local and hosted browser --help present the same shape. The catalog entries and hosted-contract.json are untouched.
  • Ordering.init/fork/verify are now attached after the session commands (via new Command(...) + addCommand, matching how tabs/bind/run/snapshot/close were already registered), so the group the namespace is named for comes first. Leaf help and error text for these commands is byte-identical to before.
  • fork. It copies a plugin command into ~/.webcmd/clis and never touches a Session — exactly what webcmd adapter override does. adapter override gains a fork alias, so webcmd adapter fork <site>/<command> is the local spelling, and browser fork is hidden from local help while staying registered and dispatchable. Hosted help still lists it, since hosted mode has no adapter fork.
  • help [command]. Namespace help no longer advertises Commander's auto help command; the root presentation already omitted it. webcmd <namespace> help <command> still works — it is only dropped from the listed commands. This applies to every namespace (browser, adapter, plugin, profile, daemon, auth, session, ...).

Not included

init and verify are grouped, not relocated. Moving them to webcmd adapter init|verify would be a breaking surface change: they are the documented cloud authoring flow (hosted/runner.ts prints webcmd browser init / webcmd browser verify after plugin create), they are referenced throughout the bundled skills (webcmd-adapter-author, webcmd-usage, webcmd-autofix), and they are part of the hosted browser contract. Happy to do that relocation in a follow-up if you'd like it — it needs a call on hosted routing and a skills/docs sweep.

Verification

  • npx tsc --noEmit clean.
  • npx vitest run --project unit: no new failures. The 20 remaining failures on this branch are pre-existing on main in this environment (Windows EPERM on symlink in plugin/discovery/site-memory/docs-sync-review tests, plus one hosted file-upload test).
  • New coverage in src/browser/command-catalog.test.ts (group mapping, group order, fork hidden but registered, adapter override|fork alias) and src/help.test.ts (visibleChildCommands / hideAutoHelpCommands, including that help <command> still dispatches).
  • src/hosted/runner.test.ts "matches the exact local text help for every raw-session browser leaf" still passes, so local and hosted leaf help remain byte-identical.
  • npm run check:typed-error-lint and npm run check:silent-column-drop report no new violations.

@github-actions

github-actionsBot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

🟠 Maintainer review suggested — low confidence

The automated review could not reach a fully supported conclusion.

Limitations

  • The automated review returned an invalid structured result.

This review is advisory and does not block merging.

@Agnik47
Agnik47force-pushed the fix/browser-help-command-surface branch 2 times, most recently from 86721ec to 8975307CompareAugust 20, 2026 13:40
…gentrhq#317)
`browser --help` listed its session commands and its adapter-authoring commands
in one flat block, so the two unrelated surfaces read as one. Group them from
the shared catalog: `tabs`, `bind`, `run`, `snapshot`, and `close` under
"Browser session commands", `init` and `verify` under "Adapter authoring
commands". Local and hosted help draw from the same catalog, so they stay
aligned.
`browser fork` is also removed here. It ran the same action as the adapter
command and only existed as a hidden re-registration, which agentrhq#361 superseded;
`adapter override` gains a `fork` alias so the local spelling survives.
Rebased onto 0.7.10. Three upstream changes landed in the same lines and are
kept: the structured-help imports from agentrhq#425/agentrhq#428, `BROWSER_RUN_HELP_TEXT`, and
the `adapter override` description and hosted artifact-download paragraph. The
alias is additive to that description rather than replacing it.
@Agnik47
Agnik47force-pushed the fix/browser-help-command-surface branch from 8975307 to 152d777CompareAugust 28, 2026 20:56
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]:

1 participant

@Agnik47
, '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(cli): group the browser command surface and drop help-list noise - #319

Open
Agnik47 wants to merge 1 commit into
agentrhq:mainfrom
Agnik47:fix/browser-help-command-surface
Open

fix(cli): group the browser command surface and drop help-list noise#319
Agnik47 wants to merge 1 commit into
agentrhq:mainfrom
Agnik47:fix/browser-help-command-surface

Conversation

@Agnik47

Copy link
Copy Markdown
Contributor

Fixes#317.

Problem

webcmd browser --help printed one flat list mixing two unrelated surfaces, plus Commander's auto help [command] a line below the -h, --help option that does the same thing:

Usage: webcmd browser [options] [command]
bind, close, fork, init, run, snapshot, tabs, verify
Options:
-h, --help display help for command
Commands:
init <name> Generate adapter scaffold in ~/.webcmd/clis/
fork <name> Fork an installed plugin command into a private copy
verify [options] <name> Execute an adapter and validate output; uses fixture
at ~/.webcmd/sites/<site>/verify/<cmd>.json when
present
tabs List pages in the existing browser session
bind [options] Bind this session to an existing page
run [options] Run JavaScript with Playwright
snapshot [options] Inspect the current page with a compact accessibility
snapshot
close Close or detach this browser session
help [command] display help for command

docs/cli-reference.mdx already states that "the public raw-browser surface is tabs, bind, run, and snapshot", but the help output gave init/fork/verify equal billing with no indication they are adapter-authoring commands.

After

Usage: webcmd browser [options] [command]
bind, close, init, run, snapshot, tabs, verify
Options:
-h, --help display help for command
Browser session commands:
tabs List pages in the existing browser session
bind [options] Bind this session to an existing page
run [options] Run JavaScript with Playwright
snapshot [options] Inspect the current page with a compact accessibility
snapshot
close Close or detach this browser session
Adapter authoring commands:
init <name> Generate adapter scaffold in ~/.webcmd/clis/
verify [options] <name> Execute an adapter and validate output; uses fixture
at ~/.webcmd/sites/<site>/verify/<cmd>.json when
present

Changes

  • Grouping. Browser subcommands are grouped under Browser session commands: / Adapter authoring commands:. The mapping lives next to browserCommandCatalog and is consumed by both cli.ts and hosted/browser-args.ts, so local and hosted browser --help present the same shape. The catalog entries and hosted-contract.json are untouched.
  • Ordering.init/fork/verify are now attached after the session commands (via new Command(...) + addCommand, matching how tabs/bind/run/snapshot/close were already registered), so the group the namespace is named for comes first. Leaf help and error text for these commands is byte-identical to before.
  • fork. It copies a plugin command into ~/.webcmd/clis and never touches a Session — exactly what webcmd adapter override does. adapter override gains a fork alias, so webcmd adapter fork <site>/<command> is the local spelling, and browser fork is hidden from local help while staying registered and dispatchable. Hosted help still lists it, since hosted mode has no adapter fork.
  • help [command]. Namespace help no longer advertises Commander's auto help command; the root presentation already omitted it. webcmd <namespace> help <command> still works — it is only dropped from the listed commands. This applies to every namespace (browser, adapter, plugin, profile, daemon, auth, session, ...).

Not included

init and verify are grouped, not relocated. Moving them to webcmd adapter init|verify would be a breaking surface change: they are the documented cloud authoring flow (hosted/runner.ts prints webcmd browser init / webcmd browser verify after plugin create), they are referenced throughout the bundled skills (webcmd-adapter-author, webcmd-usage, webcmd-autofix), and they are part of the hosted browser contract. Happy to do that relocation in a follow-up if you'd like it — it needs a call on hosted routing and a skills/docs sweep.

Verification

  • npx tsc --noEmit clean.
  • npx vitest run --project unit: no new failures. The 20 remaining failures on this branch are pre-existing on main in this environment (Windows EPERM on symlink in plugin/discovery/site-memory/docs-sync-review tests, plus one hosted file-upload test).
  • New coverage in src/browser/command-catalog.test.ts (group mapping, group order, fork hidden but registered, adapter override|fork alias) and src/help.test.ts (visibleChildCommands / hideAutoHelpCommands, including that help <command> still dispatches).
  • src/hosted/runner.test.ts "matches the exact local text help for every raw-session browser leaf" still passes, so local and hosted leaf help remain byte-identical.
  • npm run check:typed-error-lint and npm run check:silent-column-drop report no new violations.

@github-actions

github-actionsBot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

🟠 Maintainer review suggested — low confidence

The automated review could not reach a fully supported conclusion.

Limitations

  • The automated review returned an invalid structured result.

This review is advisory and does not block merging.

@Agnik47
Agnik47force-pushed the fix/browser-help-command-surface branch 2 times, most recently from 86721ec to 8975307CompareAugust 20, 2026 13:40
…gentrhq#317)
`browser --help` listed its session commands and its adapter-authoring commands
in one flat block, so the two unrelated surfaces read as one. Group them from
the shared catalog: `tabs`, `bind`, `run`, `snapshot`, and `close` under
"Browser session commands", `init` and `verify` under "Adapter authoring
commands". Local and hosted help draw from the same catalog, so they stay
aligned.
`browser fork` is also removed here. It ran the same action as the adapter
command and only existed as a hidden re-registration, which agentrhq#361 superseded;
`adapter override` gains a `fork` alias so the local spelling survives.
Rebased onto 0.7.10. Three upstream changes landed in the same lines and are
kept: the structured-help imports from agentrhq#425/agentrhq#428, `BROWSER_RUN_HELP_TEXT`, and
the `adapter override` description and hosted artifact-download paragraph. The
alias is additive to that description rather than replacing it.
@Agnik47
Agnik47force-pushed the fix/browser-help-command-surface branch from 8975307 to 152d777CompareAugust 28, 2026 20:56
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]:

1 participant

@Agnik47
, '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(cli): group the browser command surface and drop help-list noise - #319

Open
Agnik47 wants to merge 1 commit into
agentrhq:mainfrom
Agnik47:fix/browser-help-command-surface
Open

fix(cli): group the browser command surface and drop help-list noise#319
Agnik47 wants to merge 1 commit into
agentrhq:mainfrom
Agnik47:fix/browser-help-command-surface

Conversation

@Agnik47

Copy link
Copy Markdown
Contributor

Fixes#317.

Problem

webcmd browser --help printed one flat list mixing two unrelated surfaces, plus Commander's auto help [command] a line below the -h, --help option that does the same thing:

Usage: webcmd browser [options] [command]
bind, close, fork, init, run, snapshot, tabs, verify
Options:
-h, --help display help for command
Commands:
init <name> Generate adapter scaffold in ~/.webcmd/clis/
fork <name> Fork an installed plugin command into a private copy
verify [options] <name> Execute an adapter and validate output; uses fixture
at ~/.webcmd/sites/<site>/verify/<cmd>.json when
present
tabs List pages in the existing browser session
bind [options] Bind this session to an existing page
run [options] Run JavaScript with Playwright
snapshot [options] Inspect the current page with a compact accessibility
snapshot
close Close or detach this browser session
help [command] display help for command

docs/cli-reference.mdx already states that "the public raw-browser surface is tabs, bind, run, and snapshot", but the help output gave init/fork/verify equal billing with no indication they are adapter-authoring commands.

After

Usage: webcmd browser [options] [command]
bind, close, init, run, snapshot, tabs, verify
Options:
-h, --help display help for command
Browser session commands:
tabs List pages in the existing browser session
bind [options] Bind this session to an existing page
run [options] Run JavaScript with Playwright
snapshot [options] Inspect the current page with a compact accessibility
snapshot
close Close or detach this browser session
Adapter authoring commands:
init <name> Generate adapter scaffold in ~/.webcmd/clis/
verify [options] <name> Execute an adapter and validate output; uses fixture
at ~/.webcmd/sites/<site>/verify/<cmd>.json when
present

Changes

  • Grouping. Browser subcommands are grouped under Browser session commands: / Adapter authoring commands:. The mapping lives next to browserCommandCatalog and is consumed by both cli.ts and hosted/browser-args.ts, so local and hosted browser --help present the same shape. The catalog entries and hosted-contract.json are untouched.
  • Ordering.init/fork/verify are now attached after the session commands (via new Command(...) + addCommand, matching how tabs/bind/run/snapshot/close were already registered), so the group the namespace is named for comes first. Leaf help and error text for these commands is byte-identical to before.
  • fork. It copies a plugin command into ~/.webcmd/clis and never touches a Session — exactly what webcmd adapter override does. adapter override gains a fork alias, so webcmd adapter fork <site>/<command> is the local spelling, and browser fork is hidden from local help while staying registered and dispatchable. Hosted help still lists it, since hosted mode has no adapter fork.
  • help [command]. Namespace help no longer advertises Commander's auto help command; the root presentation already omitted it. webcmd <namespace> help <command> still works — it is only dropped from the listed commands. This applies to every namespace (browser, adapter, plugin, profile, daemon, auth, session, ...).

Not included

init and verify are grouped, not relocated. Moving them to webcmd adapter init|verify would be a breaking surface change: they are the documented cloud authoring flow (hosted/runner.ts prints webcmd browser init / webcmd browser verify after plugin create), they are referenced throughout the bundled skills (webcmd-adapter-author, webcmd-usage, webcmd-autofix), and they are part of the hosted browser contract. Happy to do that relocation in a follow-up if you'd like it — it needs a call on hosted routing and a skills/docs sweep.

Verification

  • npx tsc --noEmit clean.
  • npx vitest run --project unit: no new failures. The 20 remaining failures on this branch are pre-existing on main in this environment (Windows EPERM on symlink in plugin/discovery/site-memory/docs-sync-review tests, plus one hosted file-upload test).
  • New coverage in src/browser/command-catalog.test.ts (group mapping, group order, fork hidden but registered, adapter override|fork alias) and src/help.test.ts (visibleChildCommands / hideAutoHelpCommands, including that help <command> still dispatches).
  • src/hosted/runner.test.ts "matches the exact local text help for every raw-session browser leaf" still passes, so local and hosted leaf help remain byte-identical.
  • npm run check:typed-error-lint and npm run check:silent-column-drop report no new violations.

@github-actions

github-actionsBot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

🟠 Maintainer review suggested — low confidence

The automated review could not reach a fully supported conclusion.

Limitations

  • The automated review returned an invalid structured result.

This review is advisory and does not block merging.

@Agnik47
Agnik47force-pushed the fix/browser-help-command-surface branch 2 times, most recently from 86721ec to 8975307CompareAugust 20, 2026 13:40
…gentrhq#317)
`browser --help` listed its session commands and its adapter-authoring commands
in one flat block, so the two unrelated surfaces read as one. Group them from
the shared catalog: `tabs`, `bind`, `run`, `snapshot`, and `close` under
"Browser session commands", `init` and `verify` under "Adapter authoring
commands". Local and hosted help draw from the same catalog, so they stay
aligned.
`browser fork` is also removed here. It ran the same action as the adapter
command and only existed as a hidden re-registration, which agentrhq#361 superseded;
`adapter override` gains a `fork` alias so the local spelling survives.
Rebased onto 0.7.10. Three upstream changes landed in the same lines and are
kept: the structured-help imports from agentrhq#425/agentrhq#428, `BROWSER_RUN_HELP_TEXT`, and
the `adapter override` description and hosted artifact-download paragraph. The
alias is additive to that description rather than replacing it.
@Agnik47
Agnik47force-pushed the fix/browser-help-command-surface branch from 8975307 to 152d777CompareAugust 28, 2026 20:56
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]:

1 participant

@Agnik47