Skip to content

fix(help): spell Arguments-block names the way the usage line does - #80

Merged
dspangen merged 1 commit into
mainfrom
fix/arguments-section-flag-names
Aug 28, 2026
Merged

fix(help): spell Arguments-block names the way the usage line does#80
dspangen merged 1 commit into
mainfrom
fix/arguments-section-flag-names

Conversation

@dspangen

Copy link
Copy Markdown
Contributor

omni models merge-branch --help described its two positionals twice, under two different names:

Arguments:
<modelid> Model UUID
<branchname> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]

The Arguments block exists to tell a reader that the second positional is a branch name, not a UUID. That only lands if both blocks are recognizably about the same argument — under two spellings they read as four arguments.

The usage line has used canonicalName since #77; argumentsHelp kept calling slugify, which lowercases but doesn't split camelCase. Both now use canonicalName.

Help text only — nothing is parsed from these strings, and flag/arg matching is unaffected.

Details: scope and verification

Scope

One line in argumentsHelp. Only the path-param branch needed it; body-shorthand arg names (model-id, prompt, …) are authored in kebab-case already and were never affected.

Every generated command with a camelCase path param was showing the wrong spelling — ai conversation-detail (<conversationid>), ai job-cancel (<jobid>), models merge-branch, and so on.

After

Arguments:
<model-id> Model UUID
<branch-name> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]

Verification

make build && go test ./... — all packages pass.

TestBuildCommand_ArgumentsSection updated to expect the canonical spelling, and a new TestGenerateCommands_ArgumentNamesMatchUsageLine walks every generated command in api/openapi.json and asserts each <placeholder> in the usage line appears in the Arguments block — the two are built by separate code paths, which is how they drifted in the first place.

Both fail against the pre-fix code (checked by reverting the one-line change): the spec-wide test flags ai conversation-detail, ai job-cancel, and the rest.

🤖 Generated with Claude Code

https://claude.ai/code/session_01UP53YBDjhQkkn3WAqMR3sf

`omni models merge-branch --help` listed its positionals twice under two
different names:
Arguments:
<modelid> Model UUID
<branchname> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]
The Arguments block exists so a reader learns that the second positional is a
branch NAME, not a UUID. That only lands if the two blocks are recognizably
about the same argument — under two spellings they read as four arguments.
The usage line has used canonicalName since #77; argumentsHelp kept calling
slugify, which lowercases but does not split camelCase. Both now use
canonicalName. Affects help text only — nothing is parsed from these strings.
Adds a spec-wide test asserting every `<placeholder>` in a generated command's
usage line appears in its Arguments block, so the two paths cannot drift apart
again silently.
Constraint: body-shorthand arg names are already authored in kebab-case, so
only the path-param branch needed changing
Confidence: high
Scope-risk: narrow
@dspangen
dspangen requested a review from n8agrinAugust 25, 2026 16:45
@dspangen
dspangen merged commit fb32efa into mainAug 28, 2026
2 checks passed
@dspangen
dspangen deleted the fix/arguments-section-flag-names branch August 28, 2026 12:40
ernestoongaro added a commit that referenced this pull request Aug 28, 2026
#86)
* fix(schema): spell --schema flags and placeholders the way --help does
--schema still rendered query-param flags and positional placeholders with
slugify() ("--basemodelid", "<modelid>") after #77 and #80 moved the flag
registry, usage line and Arguments block to canonicalName()
("--base-model-id", "<model-id>"). An agent reading --schema was told a
flag name that no longer appears anywhere else in the CLI.
Use canonicalName in both places and assert the kebab-case spelling in the
bodyless-GET schema test.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ei8UYaG1bW5PJhk93EaqzA
* fix(schema): report query flags through resolveQueryFlags
canonicalName alone still disagreed with the CLI when flag registration
renames a collision: a "baseUrl" param registers as --param-base-url (the
global --base-url is reserved) and a second param canonicalising to the
same name gets a -2 suffix. Iterate resolveQueryFlags(op) so --schema
advertises exactly the flags the command accepts, and add a test that
covers both rename paths and checks each advertised flag is registered.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ei8UYaG1bW5PJhk93EaqzA
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.

2 participants

@dspangen@n8agrin
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
fix(help): spell Arguments-block names the way the usage line does by dspangen · Pull Request #80 · exploreomni/cli · GitHub
Skip to content

fix(help): spell Arguments-block names the way the usage line does - #80

Merged
dspangen merged 1 commit into
mainfrom
fix/arguments-section-flag-names
Aug 28, 2026
Merged

fix(help): spell Arguments-block names the way the usage line does#80
dspangen merged 1 commit into
mainfrom
fix/arguments-section-flag-names

Conversation

@dspangen

Copy link
Copy Markdown
Contributor

omni models merge-branch --help described its two positionals twice, under two different names:

Arguments:
<modelid> Model UUID
<branchname> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]

The Arguments block exists to tell a reader that the second positional is a branch name, not a UUID. That only lands if both blocks are recognizably about the same argument — under two spellings they read as four arguments.

The usage line has used canonicalName since #77; argumentsHelp kept calling slugify, which lowercases but doesn't split camelCase. Both now use canonicalName.

Help text only — nothing is parsed from these strings, and flag/arg matching is unaffected.

Details: scope and verification

Scope

One line in argumentsHelp. Only the path-param branch needed it; body-shorthand arg names (model-id, prompt, …) are authored in kebab-case already and were never affected.

Every generated command with a camelCase path param was showing the wrong spelling — ai conversation-detail (<conversationid>), ai job-cancel (<jobid>), models merge-branch, and so on.

After

Arguments:
<model-id> Model UUID
<branch-name> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]

Verification

make build && go test ./... — all packages pass.

TestBuildCommand_ArgumentsSection updated to expect the canonical spelling, and a new TestGenerateCommands_ArgumentNamesMatchUsageLine walks every generated command in api/openapi.json and asserts each <placeholder> in the usage line appears in the Arguments block — the two are built by separate code paths, which is how they drifted in the first place.

Both fail against the pre-fix code (checked by reverting the one-line change): the spec-wide test flags ai conversation-detail, ai job-cancel, and the rest.

🤖 Generated with Claude Code

https://claude.ai/code/session_01UP53YBDjhQkkn3WAqMR3sf

`omni models merge-branch --help` listed its positionals twice under two
different names:
Arguments:
<modelid> Model UUID
<branchname> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]
The Arguments block exists so a reader learns that the second positional is a
branch NAME, not a UUID. That only lands if the two blocks are recognizably
about the same argument — under two spellings they read as four arguments.
The usage line has used canonicalName since #77; argumentsHelp kept calling
slugify, which lowercases but does not split camelCase. Both now use
canonicalName. Affects help text only — nothing is parsed from these strings.
Adds a spec-wide test asserting every `<placeholder>` in a generated command's
usage line appears in its Arguments block, so the two paths cannot drift apart
again silently.
Constraint: body-shorthand arg names are already authored in kebab-case, so
only the path-param branch needed changing
Confidence: high
Scope-risk: narrow
@dspangen
dspangen requested a review from n8agrinAugust 25, 2026 16:45
@dspangen
dspangen merged commit fb32efa into mainAug 28, 2026
2 checks passed
@dspangen
dspangen deleted the fix/arguments-section-flag-names branch August 28, 2026 12:40
ernestoongaro added a commit that referenced this pull request Aug 28, 2026
#86)
* fix(schema): spell --schema flags and placeholders the way --help does
--schema still rendered query-param flags and positional placeholders with
slugify() ("--basemodelid", "<modelid>") after #77 and #80 moved the flag
registry, usage line and Arguments block to canonicalName()
("--base-model-id", "<model-id>"). An agent reading --schema was told a
flag name that no longer appears anywhere else in the CLI.
Use canonicalName in both places and assert the kebab-case spelling in the
bodyless-GET schema test.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ei8UYaG1bW5PJhk93EaqzA
* fix(schema): report query flags through resolveQueryFlags
canonicalName alone still disagreed with the CLI when flag registration
renames a collision: a "baseUrl" param registers as --param-base-url (the
global --base-url is reserved) and a second param canonicalising to the
same name gets a -2 suffix. Iterate resolveQueryFlags(op) so --schema
advertises exactly the flags the command accepts, and add a test that
covers both rename paths and checks each advertised flag is registered.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ei8UYaG1bW5PJhk93EaqzA
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.

2 participants

@dspangen@n8agrin
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(help): spell Arguments-block names the way the usage line does by dspangen · Pull Request #80 · exploreomni/cli · GitHub
Skip to content

fix(help): spell Arguments-block names the way the usage line does - #80

Merged
dspangen merged 1 commit into
mainfrom
fix/arguments-section-flag-names
Aug 28, 2026
Merged

fix(help): spell Arguments-block names the way the usage line does#80
dspangen merged 1 commit into
mainfrom
fix/arguments-section-flag-names

Conversation

@dspangen

Copy link
Copy Markdown
Contributor

omni models merge-branch --help described its two positionals twice, under two different names:

Arguments:
<modelid> Model UUID
<branchname> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]

The Arguments block exists to tell a reader that the second positional is a branch name, not a UUID. That only lands if both blocks are recognizably about the same argument — under two spellings they read as four arguments.

The usage line has used canonicalName since #77; argumentsHelp kept calling slugify, which lowercases but doesn't split camelCase. Both now use canonicalName.

Help text only — nothing is parsed from these strings, and flag/arg matching is unaffected.

Details: scope and verification

Scope

One line in argumentsHelp. Only the path-param branch needed it; body-shorthand arg names (model-id, prompt, …) are authored in kebab-case already and were never affected.

Every generated command with a camelCase path param was showing the wrong spelling — ai conversation-detail (<conversationid>), ai job-cancel (<jobid>), models merge-branch, and so on.

After

Arguments:
<model-id> Model UUID
<branch-name> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]

Verification

make build && go test ./... — all packages pass.

TestBuildCommand_ArgumentsSection updated to expect the canonical spelling, and a new TestGenerateCommands_ArgumentNamesMatchUsageLine walks every generated command in api/openapi.json and asserts each <placeholder> in the usage line appears in the Arguments block — the two are built by separate code paths, which is how they drifted in the first place.

Both fail against the pre-fix code (checked by reverting the one-line change): the spec-wide test flags ai conversation-detail, ai job-cancel, and the rest.

🤖 Generated with Claude Code

https://claude.ai/code/session_01UP53YBDjhQkkn3WAqMR3sf

`omni models merge-branch --help` listed its positionals twice under two
different names:
Arguments:
<modelid> Model UUID
<branchname> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]
The Arguments block exists so a reader learns that the second positional is a
branch NAME, not a UUID. That only lands if the two blocks are recognizably
about the same argument — under two spellings they read as four arguments.
The usage line has used canonicalName since #77; argumentsHelp kept calling
slugify, which lowercases but does not split camelCase. Both now use
canonicalName. Affects help text only — nothing is parsed from these strings.
Adds a spec-wide test asserting every `<placeholder>` in a generated command's
usage line appears in its Arguments block, so the two paths cannot drift apart
again silently.
Constraint: body-shorthand arg names are already authored in kebab-case, so
only the path-param branch needed changing
Confidence: high
Scope-risk: narrow
@dspangen
dspangen requested a review from n8agrinAugust 25, 2026 16:45
@dspangen
dspangen merged commit fb32efa into mainAug 28, 2026
2 checks passed
@dspangen
dspangen deleted the fix/arguments-section-flag-names branch August 28, 2026 12:40
ernestoongaro added a commit that referenced this pull request Aug 28, 2026
#86)
* fix(schema): spell --schema flags and placeholders the way --help does
--schema still rendered query-param flags and positional placeholders with
slugify() ("--basemodelid", "<modelid>") after #77 and #80 moved the flag
registry, usage line and Arguments block to canonicalName()
("--base-model-id", "<model-id>"). An agent reading --schema was told a
flag name that no longer appears anywhere else in the CLI.
Use canonicalName in both places and assert the kebab-case spelling in the
bodyless-GET schema test.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ei8UYaG1bW5PJhk93EaqzA
* fix(schema): report query flags through resolveQueryFlags
canonicalName alone still disagreed with the CLI when flag registration
renames a collision: a "baseUrl" param registers as --param-base-url (the
global --base-url is reserved) and a second param canonicalising to the
same name gets a -2 suffix. Iterate resolveQueryFlags(op) so --schema
advertises exactly the flags the command accepts, and add a test that
covers both rename paths and checks each advertised flag is registered.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ei8UYaG1bW5PJhk93EaqzA
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.

2 participants

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

fix(help): spell Arguments-block names the way the usage line does - #80

Merged
dspangen merged 1 commit into
mainfrom
fix/arguments-section-flag-names
Aug 28, 2026
Merged

fix(help): spell Arguments-block names the way the usage line does#80
dspangen merged 1 commit into
mainfrom
fix/arguments-section-flag-names

Conversation

@dspangen

Copy link
Copy Markdown
Contributor

omni models merge-branch --help described its two positionals twice, under two different names:

Arguments:
<modelid> Model UUID
<branchname> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]

The Arguments block exists to tell a reader that the second positional is a branch name, not a UUID. That only lands if both blocks are recognizably about the same argument — under two spellings they read as four arguments.

The usage line has used canonicalName since #77; argumentsHelp kept calling slugify, which lowercases but doesn't split camelCase. Both now use canonicalName.

Help text only — nothing is parsed from these strings, and flag/arg matching is unaffected.

Details: scope and verification

Scope

One line in argumentsHelp. Only the path-param branch needed it; body-shorthand arg names (model-id, prompt, …) are authored in kebab-case already and were never affected.

Every generated command with a camelCase path param was showing the wrong spelling — ai conversation-detail (<conversationid>), ai job-cancel (<jobid>), models merge-branch, and so on.

After

Arguments:
<model-id> Model UUID
<branch-name> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]

Verification

make build && go test ./... — all packages pass.

TestBuildCommand_ArgumentsSection updated to expect the canonical spelling, and a new TestGenerateCommands_ArgumentNamesMatchUsageLine walks every generated command in api/openapi.json and asserts each <placeholder> in the usage line appears in the Arguments block — the two are built by separate code paths, which is how they drifted in the first place.

Both fail against the pre-fix code (checked by reverting the one-line change): the spec-wide test flags ai conversation-detail, ai job-cancel, and the rest.

🤖 Generated with Claude Code

https://claude.ai/code/session_01UP53YBDjhQkkn3WAqMR3sf

`omni models merge-branch --help` listed its positionals twice under two
different names:
Arguments:
<modelid> Model UUID
<branchname> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]
The Arguments block exists so a reader learns that the second positional is a
branch NAME, not a UUID. That only lands if the two blocks are recognizably
about the same argument — under two spellings they read as four arguments.
The usage line has used canonicalName since #77; argumentsHelp kept calling
slugify, which lowercases but does not split camelCase. Both now use
canonicalName. Affects help text only — nothing is parsed from these strings.
Adds a spec-wide test asserting every `<placeholder>` in a generated command's
usage line appears in its Arguments block, so the two paths cannot drift apart
again silently.
Constraint: body-shorthand arg names are already authored in kebab-case, so
only the path-param branch needed changing
Confidence: high
Scope-risk: narrow
@dspangen
dspangen requested a review from n8agrinAugust 25, 2026 16:45
@dspangen
dspangen merged commit fb32efa into mainAug 28, 2026
2 checks passed
@dspangen
dspangen deleted the fix/arguments-section-flag-names branch August 28, 2026 12:40
ernestoongaro added a commit that referenced this pull request Aug 28, 2026
#86)
* fix(schema): spell --schema flags and placeholders the way --help does
--schema still rendered query-param flags and positional placeholders with
slugify() ("--basemodelid", "<modelid>") after #77 and #80 moved the flag
registry, usage line and Arguments block to canonicalName()
("--base-model-id", "<model-id>"). An agent reading --schema was told a
flag name that no longer appears anywhere else in the CLI.
Use canonicalName in both places and assert the kebab-case spelling in the
bodyless-GET schema test.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ei8UYaG1bW5PJhk93EaqzA
* fix(schema): report query flags through resolveQueryFlags
canonicalName alone still disagreed with the CLI when flag registration
renames a collision: a "baseUrl" param registers as --param-base-url (the
global --base-url is reserved) and a second param canonicalising to the
same name gets a -2 suffix. Iterate resolveQueryFlags(op) so --schema
advertises exactly the flags the command accepts, and add a test that
covers both rename paths and checks each advertised flag is registered.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ei8UYaG1bW5PJhk93EaqzA
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.

2 participants

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

fix(help): spell Arguments-block names the way the usage line does - #80

Merged
dspangen merged 1 commit into
mainfrom
fix/arguments-section-flag-names
Aug 28, 2026
Merged

fix(help): spell Arguments-block names the way the usage line does#80
dspangen merged 1 commit into
mainfrom
fix/arguments-section-flag-names

Conversation

@dspangen

Copy link
Copy Markdown
Contributor

omni models merge-branch --help described its two positionals twice, under two different names:

Arguments:
<modelid> Model UUID
<branchname> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]

The Arguments block exists to tell a reader that the second positional is a branch name, not a UUID. That only lands if both blocks are recognizably about the same argument — under two spellings they read as four arguments.

The usage line has used canonicalName since #77; argumentsHelp kept calling slugify, which lowercases but doesn't split camelCase. Both now use canonicalName.

Help text only — nothing is parsed from these strings, and flag/arg matching is unaffected.

Details: scope and verification

Scope

One line in argumentsHelp. Only the path-param branch needed it; body-shorthand arg names (model-id, prompt, …) are authored in kebab-case already and were never affected.

Every generated command with a camelCase path param was showing the wrong spelling — ai conversation-detail (<conversationid>), ai job-cancel (<jobid>), models merge-branch, and so on.

After

Arguments:
<model-id> Model UUID
<branch-name> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]

Verification

make build && go test ./... — all packages pass.

TestBuildCommand_ArgumentsSection updated to expect the canonical spelling, and a new TestGenerateCommands_ArgumentNamesMatchUsageLine walks every generated command in api/openapi.json and asserts each <placeholder> in the usage line appears in the Arguments block — the two are built by separate code paths, which is how they drifted in the first place.

Both fail against the pre-fix code (checked by reverting the one-line change): the spec-wide test flags ai conversation-detail, ai job-cancel, and the rest.

🤖 Generated with Claude Code

https://claude.ai/code/session_01UP53YBDjhQkkn3WAqMR3sf

`omni models merge-branch --help` listed its positionals twice under two
different names:
Arguments:
<modelid> Model UUID
<branchname> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]
The Arguments block exists so a reader learns that the second positional is a
branch NAME, not a UUID. That only lands if the two blocks are recognizably
about the same argument — under two spellings they read as four arguments.
The usage line has used canonicalName since #77; argumentsHelp kept calling
slugify, which lowercases but does not split camelCase. Both now use
canonicalName. Affects help text only — nothing is parsed from these strings.
Adds a spec-wide test asserting every `<placeholder>` in a generated command's
usage line appears in its Arguments block, so the two paths cannot drift apart
again silently.
Constraint: body-shorthand arg names are already authored in kebab-case, so
only the path-param branch needed changing
Confidence: high
Scope-risk: narrow
@dspangen
dspangen requested a review from n8agrinAugust 25, 2026 16:45
@dspangen
dspangen merged commit fb32efa into mainAug 28, 2026
2 checks passed
@dspangen
dspangen deleted the fix/arguments-section-flag-names branch August 28, 2026 12:40
ernestoongaro added a commit that referenced this pull request Aug 28, 2026
#86)
* fix(schema): spell --schema flags and placeholders the way --help does
--schema still rendered query-param flags and positional placeholders with
slugify() ("--basemodelid", "<modelid>") after #77 and #80 moved the flag
registry, usage line and Arguments block to canonicalName()
("--base-model-id", "<model-id>"). An agent reading --schema was told a
flag name that no longer appears anywhere else in the CLI.
Use canonicalName in both places and assert the kebab-case spelling in the
bodyless-GET schema test.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ei8UYaG1bW5PJhk93EaqzA
* fix(schema): report query flags through resolveQueryFlags
canonicalName alone still disagreed with the CLI when flag registration
renames a collision: a "baseUrl" param registers as --param-base-url (the
global --base-url is reserved) and a second param canonicalising to the
same name gets a -2 suffix. Iterate resolveQueryFlags(op) so --schema
advertises exactly the flags the command accepts, and add a test that
covers both rename paths and checks each advertised flag is registered.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ei8UYaG1bW5PJhk93EaqzA
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.

2 participants

@dspangen@n8agrin
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(help): spell Arguments-block names the way the usage line does by dspangen · Pull Request #80 · exploreomni/cli · GitHub
Skip to content

fix(help): spell Arguments-block names the way the usage line does - #80

Merged
dspangen merged 1 commit into
mainfrom
fix/arguments-section-flag-names
Aug 28, 2026
Merged

fix(help): spell Arguments-block names the way the usage line does#80
dspangen merged 1 commit into
mainfrom
fix/arguments-section-flag-names

Conversation

@dspangen

Copy link
Copy Markdown
Contributor

omni models merge-branch --help described its two positionals twice, under two different names:

Arguments:
<modelid> Model UUID
<branchname> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]

The Arguments block exists to tell a reader that the second positional is a branch name, not a UUID. That only lands if both blocks are recognizably about the same argument — under two spellings they read as four arguments.

The usage line has used canonicalName since #77; argumentsHelp kept calling slugify, which lowercases but doesn't split camelCase. Both now use canonicalName.

Help text only — nothing is parsed from these strings, and flag/arg matching is unaffected.

Details: scope and verification

Scope

One line in argumentsHelp. Only the path-param branch needed it; body-shorthand arg names (model-id, prompt, …) are authored in kebab-case already and were never affected.

Every generated command with a camelCase path param was showing the wrong spelling — ai conversation-detail (<conversationid>), ai job-cancel (<jobid>), models merge-branch, and so on.

After

Arguments:
<model-id> Model UUID
<branch-name> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]

Verification

make build && go test ./... — all packages pass.

TestBuildCommand_ArgumentsSection updated to expect the canonical spelling, and a new TestGenerateCommands_ArgumentNamesMatchUsageLine walks every generated command in api/openapi.json and asserts each <placeholder> in the usage line appears in the Arguments block — the two are built by separate code paths, which is how they drifted in the first place.

Both fail against the pre-fix code (checked by reverting the one-line change): the spec-wide test flags ai conversation-detail, ai job-cancel, and the rest.

🤖 Generated with Claude Code

https://claude.ai/code/session_01UP53YBDjhQkkn3WAqMR3sf

`omni models merge-branch --help` listed its positionals twice under two
different names:
Arguments:
<modelid> Model UUID
<branchname> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]
The Arguments block exists so a reader learns that the second positional is a
branch NAME, not a UUID. That only lands if the two blocks are recognizably
about the same argument — under two spellings they read as four arguments.
The usage line has used canonicalName since #77; argumentsHelp kept calling
slugify, which lowercases but does not split camelCase. Both now use
canonicalName. Affects help text only — nothing is parsed from these strings.
Adds a spec-wide test asserting every `<placeholder>` in a generated command's
usage line appears in its Arguments block, so the two paths cannot drift apart
again silently.
Constraint: body-shorthand arg names are already authored in kebab-case, so
only the path-param branch needed changing
Confidence: high
Scope-risk: narrow
@dspangen
dspangen requested a review from n8agrinAugust 25, 2026 16:45
@dspangen
dspangen merged commit fb32efa into mainAug 28, 2026
2 checks passed
@dspangen
dspangen deleted the fix/arguments-section-flag-names branch August 28, 2026 12:40
ernestoongaro added a commit that referenced this pull request Aug 28, 2026
#86)
* fix(schema): spell --schema flags and placeholders the way --help does
--schema still rendered query-param flags and positional placeholders with
slugify() ("--basemodelid", "<modelid>") after #77 and #80 moved the flag
registry, usage line and Arguments block to canonicalName()
("--base-model-id", "<model-id>"). An agent reading --schema was told a
flag name that no longer appears anywhere else in the CLI.
Use canonicalName in both places and assert the kebab-case spelling in the
bodyless-GET schema test.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ei8UYaG1bW5PJhk93EaqzA
* fix(schema): report query flags through resolveQueryFlags
canonicalName alone still disagreed with the CLI when flag registration
renames a collision: a "baseUrl" param registers as --param-base-url (the
global --base-url is reserved) and a second param canonicalising to the
same name gets a -2 suffix. Iterate resolveQueryFlags(op) so --schema
advertises exactly the flags the command accepts, and add a test that
covers both rename paths and checks each advertised flag is registered.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ei8UYaG1bW5PJhk93EaqzA
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.

2 participants

@dspangen@n8agrin
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(help): spell Arguments-block names the way the usage line does by dspangen · Pull Request #80 · exploreomni/cli · GitHub
Skip to content

fix(help): spell Arguments-block names the way the usage line does - #80

Merged
dspangen merged 1 commit into
mainfrom
fix/arguments-section-flag-names
Aug 28, 2026
Merged

fix(help): spell Arguments-block names the way the usage line does#80
dspangen merged 1 commit into
mainfrom
fix/arguments-section-flag-names

Conversation

@dspangen

Copy link
Copy Markdown
Contributor

omni models merge-branch --help described its two positionals twice, under two different names:

Arguments:
<modelid> Model UUID
<branchname> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]

The Arguments block exists to tell a reader that the second positional is a branch name, not a UUID. That only lands if both blocks are recognizably about the same argument — under two spellings they read as four arguments.

The usage line has used canonicalName since #77; argumentsHelp kept calling slugify, which lowercases but doesn't split camelCase. Both now use canonicalName.

Help text only — nothing is parsed from these strings, and flag/arg matching is unaffected.

Details: scope and verification

Scope

One line in argumentsHelp. Only the path-param branch needed it; body-shorthand arg names (model-id, prompt, …) are authored in kebab-case already and were never affected.

Every generated command with a camelCase path param was showing the wrong spelling — ai conversation-detail (<conversationid>), ai job-cancel (<jobid>), models merge-branch, and so on.

After

Arguments:
<model-id> Model UUID
<branch-name> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]

Verification

make build && go test ./... — all packages pass.

TestBuildCommand_ArgumentsSection updated to expect the canonical spelling, and a new TestGenerateCommands_ArgumentNamesMatchUsageLine walks every generated command in api/openapi.json and asserts each <placeholder> in the usage line appears in the Arguments block — the two are built by separate code paths, which is how they drifted in the first place.

Both fail against the pre-fix code (checked by reverting the one-line change): the spec-wide test flags ai conversation-detail, ai job-cancel, and the rest.

🤖 Generated with Claude Code

https://claude.ai/code/session_01UP53YBDjhQkkn3WAqMR3sf

`omni models merge-branch --help` listed its positionals twice under two
different names:
Arguments:
<modelid> Model UUID
<branchname> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]
The Arguments block exists so a reader learns that the second positional is a
branch NAME, not a UUID. That only lands if the two blocks are recognizably
about the same argument — under two spellings they read as four arguments.
The usage line has used canonicalName since #77; argumentsHelp kept calling
slugify, which lowercases but does not split camelCase. Both now use
canonicalName. Affects help text only — nothing is parsed from these strings.
Adds a spec-wide test asserting every `<placeholder>` in a generated command's
usage line appears in its Arguments block, so the two paths cannot drift apart
again silently.
Constraint: body-shorthand arg names are already authored in kebab-case, so
only the path-param branch needed changing
Confidence: high
Scope-risk: narrow
@dspangen
dspangen requested a review from n8agrinAugust 25, 2026 16:45
@dspangen
dspangen merged commit fb32efa into mainAug 28, 2026
2 checks passed
@dspangen
dspangen deleted the fix/arguments-section-flag-names branch August 28, 2026 12:40
ernestoongaro added a commit that referenced this pull request Aug 28, 2026
#86)
* fix(schema): spell --schema flags and placeholders the way --help does
--schema still rendered query-param flags and positional placeholders with
slugify() ("--basemodelid", "<modelid>") after #77 and #80 moved the flag
registry, usage line and Arguments block to canonicalName()
("--base-model-id", "<model-id>"). An agent reading --schema was told a
flag name that no longer appears anywhere else in the CLI.
Use canonicalName in both places and assert the kebab-case spelling in the
bodyless-GET schema test.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ei8UYaG1bW5PJhk93EaqzA
* fix(schema): report query flags through resolveQueryFlags
canonicalName alone still disagreed with the CLI when flag registration
renames a collision: a "baseUrl" param registers as --param-base-url (the
global --base-url is reserved) and a second param canonicalising to the
same name gets a -2 suffix. Iterate resolveQueryFlags(op) so --schema
advertises exactly the flags the command accepts, and add a test that
covers both rename paths and checks each advertised flag is registered.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ei8UYaG1bW5PJhk93EaqzA
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.

2 participants

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

fix(help): spell Arguments-block names the way the usage line does - #80

Merged
dspangen merged 1 commit into
mainfrom
fix/arguments-section-flag-names
Aug 28, 2026
Merged

fix(help): spell Arguments-block names the way the usage line does#80
dspangen merged 1 commit into
mainfrom
fix/arguments-section-flag-names

Conversation

@dspangen

Copy link
Copy Markdown
Contributor

omni models merge-branch --help described its two positionals twice, under two different names:

Arguments:
<modelid> Model UUID
<branchname> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]

The Arguments block exists to tell a reader that the second positional is a branch name, not a UUID. That only lands if both blocks are recognizably about the same argument — under two spellings they read as four arguments.

The usage line has used canonicalName since #77; argumentsHelp kept calling slugify, which lowercases but doesn't split camelCase. Both now use canonicalName.

Help text only — nothing is parsed from these strings, and flag/arg matching is unaffected.

Details: scope and verification

Scope

One line in argumentsHelp. Only the path-param branch needed it; body-shorthand arg names (model-id, prompt, …) are authored in kebab-case already and were never affected.

Every generated command with a camelCase path param was showing the wrong spelling — ai conversation-detail (<conversationid>), ai job-cancel (<jobid>), models merge-branch, and so on.

After

Arguments:
<model-id> Model UUID
<branch-name> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]

Verification

make build && go test ./... — all packages pass.

TestBuildCommand_ArgumentsSection updated to expect the canonical spelling, and a new TestGenerateCommands_ArgumentNamesMatchUsageLine walks every generated command in api/openapi.json and asserts each <placeholder> in the usage line appears in the Arguments block — the two are built by separate code paths, which is how they drifted in the first place.

Both fail against the pre-fix code (checked by reverting the one-line change): the spec-wide test flags ai conversation-detail, ai job-cancel, and the rest.

🤖 Generated with Claude Code

https://claude.ai/code/session_01UP53YBDjhQkkn3WAqMR3sf

`omni models merge-branch --help` listed its positionals twice under two
different names:
Arguments:
<modelid> Model UUID
<branchname> Branch name
Usage:
omni models merge-branch <model-id> <branch-name> [flags]
The Arguments block exists so a reader learns that the second positional is a
branch NAME, not a UUID. That only lands if the two blocks are recognizably
about the same argument — under two spellings they read as four arguments.
The usage line has used canonicalName since #77; argumentsHelp kept calling
slugify, which lowercases but does not split camelCase. Both now use
canonicalName. Affects help text only — nothing is parsed from these strings.
Adds a spec-wide test asserting every `<placeholder>` in a generated command's
usage line appears in its Arguments block, so the two paths cannot drift apart
again silently.
Constraint: body-shorthand arg names are already authored in kebab-case, so
only the path-param branch needed changing
Confidence: high
Scope-risk: narrow
@dspangen
dspangen requested a review from n8agrinAugust 25, 2026 16:45
@dspangen
dspangen merged commit fb32efa into mainAug 28, 2026
2 checks passed
@dspangen
dspangen deleted the fix/arguments-section-flag-names branch August 28, 2026 12:40
ernestoongaro added a commit that referenced this pull request Aug 28, 2026
#86)
* fix(schema): spell --schema flags and placeholders the way --help does
--schema still rendered query-param flags and positional placeholders with
slugify() ("--basemodelid", "<modelid>") after #77 and #80 moved the flag
registry, usage line and Arguments block to canonicalName()
("--base-model-id", "<model-id>"). An agent reading --schema was told a
flag name that no longer appears anywhere else in the CLI.
Use canonicalName in both places and assert the kebab-case spelling in the
bodyless-GET schema test.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ei8UYaG1bW5PJhk93EaqzA
* fix(schema): report query flags through resolveQueryFlags
canonicalName alone still disagreed with the CLI when flag registration
renames a collision: a "baseUrl" param registers as --param-base-url (the
global --base-url is reserved) and a second param canonicalising to the
same name gets a -2 suffix. Iterate resolveQueryFlags(op) so --schema
advertises exactly the flags the command accepts, and add a test that
covers both rename paths and checks each advertised flag is registered.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ei8UYaG1bW5PJhk93EaqzA
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.

2 participants

@dspangen@n8agrin