Discover Claude models from the live harness - #21

Merged
logancsack merged 2 commits into
mainfrom
feature/automatic-agent-updates
Jul 26, 2026
Merged

Discover Claude models from the live harness#21
logancsack merged 2 commits into
mainfrom
feature/automatic-agent-updates

Conversation

@logancsack

@logancsacklogancsack commented Jul 26, 2026

Copy link
Copy Markdown
Owner

Problem

Claude Code already reports the account-specific live model catalog during SDK initialization, but T3 discarded it and used only a hard-coded list. New Claude models therefore required a T3 code release before they could appear in the app.

Solution

  • Parse Claude Code's live initialization model catalog.
  • Preserve the richer known-model capability definitions.
  • Derive effort and fast-mode options for previously unseen models from Claude's reported capability flags.
  • Fall back to the version-gated built-in catalog when the live initialization catalog is unavailable.
  • Keep unknown future model selections dispatchable without requiring a hard-coded slug.

Verification

  • vp test run apps/server/src/provider/Layers/ClaudeCapabilitiesProbe.test.ts apps/server/src/provider/Layers/ProviderRegistry.test.ts — 45 tests passed.
  • vp run --filter t3 typecheck — passed.
  • Targeted vp lint and vp fmt --check — passed.
  • vp run --filter t3 build — passed.

Impact

Backend provider discovery only; no schema, migration, auth, relay, or infrastructure changes. No screenshots are required because the existing model picker already renders provider snapshot models. After merge this will be published as one checksummed DevPC managed T3 artifact and pinned once in remote-dev.

Summary by CodeRabbit

  • New Features

    • Claude provider listings now include models discovered from the connected Claude service.
    • Claude models can expose configurable reasoning effort levels and fast mode support.
    • Model capability details now include names, identifiers, and custom-model status.
  • Improvements

    • Unknown or newly introduced Claude models receive appropriate capability settings instead of appearing without options.
    • Provider model listings more accurately reflect the capabilities available from Claude.

@cursor

cursorBot commented Jul 26, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M labels Jul 26, 2026
@coderabbitai

coderabbitaiBot commented Jul 26, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@logancsack, you've reached your PR review limit, so we couldn't start this review.

Next review available in:52 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 49fa93aa-7d19-4474-bfc7-6aa946227452

📥 Commits

Reviewing files that changed from the base of the PR and between f63e8b3 and fdd344d.

📒 Files selected for processing (2)
  • apps/server/src/provider/Layers/ClaudeAdapter.test.ts
  • apps/server/src/provider/Layers/ClaudeProvider.ts
📝 Walkthrough

Walkthrough

Claude model initialization metadata is parsed into provider models with effort and fast-mode capabilities. The capabilities probe exposes these models, and provider status uses them when available while retaining built-in fallbacks.

Changes

Claude model discovery

Layer / File(s)Summary
Model capability parsing
apps/server/src/provider/Layers/ClaudeProvider.ts
Adds future-model capability defaults, normalizes initialization model features, deduplicates models, and converts them into ServerProviderModel entries.
Capabilities probe model output
apps/server/src/provider/Layers/ClaudeProvider.ts, apps/server/src/provider/Layers/ClaudeCapabilitiesProbe.test.ts
Adds discovered models to probe results and verifies the Claude Sonnet model’s effort and fast-mode descriptors.
Provider status model selection
apps/server/src/provider/Layers/ClaudeProvider.ts, apps/server/src/provider/Layers/ProviderRegistry.test.ts
Uses discovered initialization models when present, falls back to version-gated built-ins otherwise, and tests the resulting provider snapshot.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
participant ClaudeSDK
participant ClaudeCapabilitiesProbe
participant ClaudeProvider
participant ProviderRegistry
ClaudeSDK->>ClaudeCapabilitiesProbe: return initialization models
ClaudeCapabilitiesProbe->>ClaudeProvider: expose parsed capabilities.models
ClaudeProvider->>ProviderRegistry: select discovered models
ProviderRegistry-->>ClaudeProvider: return provider snapshot
Loading

Suggested reviewers:juliusmarminge

Poem

A bunny found models beneath the moon,
With effort and fast mode humming a tune.
The probe gathered names,
The registry framed claims,
And Claude’s model meadow grew bright very soon.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title matches the main change: discovering Claude models from the live initialization catalog.
Description check✅ PassedThe description covers the problem, solution, verification, and impact, even though it uses different headings than the template.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/automatic-agent-updates

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:f63e8b3f29

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadapps/server/src/provider/Layers/ClaudeProvider.ts

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:fdd344d4a2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

? yield* resolveCapabilities(claudeSettings).pipe(Effect.orElseSucceed(() => undefined))
: undefined;
const models = providerModelsFromSettings(
capabilities?.models.length ? capabilities.models : fallbackModels,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Replace stale models when applying a live Claude catalog

During normal startup this selects the account-specific catalog, but the refresh is merged into makePendingClaudeProvider's snapshot, which already contains every built-in model. mergeProviderSnapshot in ProviderRegistry.ts retains missing models for every non-OpenCode provider and appends them at lines 81-83 and 120-123, so unavailable built-ins—and cached models discovered under a previous Claude account—remain visible and selectable after a successful live probe. Successful Claude inventories need to replace, rather than merge with, the pending/cached model list.

Useful? React with 👍 / 👎.

@logancsack
logancsack merged commit 89e51fe into mainJul 26, 2026
13 checks passed
@logancsack
logancsack deleted the feature/automatic-agent-updates branch July 26, 2026 02:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:Mvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@logancsack
, '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

Discover Claude models from the live harness - #21

Merged
logancsack merged 2 commits into
mainfrom
feature/automatic-agent-updates
Jul 26, 2026
Merged

Discover Claude models from the live harness#21
logancsack merged 2 commits into
mainfrom
feature/automatic-agent-updates

Conversation

@logancsack

@logancsacklogancsack commented Jul 26, 2026

Copy link
Copy Markdown
Owner

Problem

Claude Code already reports the account-specific live model catalog during SDK initialization, but T3 discarded it and used only a hard-coded list. New Claude models therefore required a T3 code release before they could appear in the app.

Solution

  • Parse Claude Code's live initialization model catalog.
  • Preserve the richer known-model capability definitions.
  • Derive effort and fast-mode options for previously unseen models from Claude's reported capability flags.
  • Fall back to the version-gated built-in catalog when the live initialization catalog is unavailable.
  • Keep unknown future model selections dispatchable without requiring a hard-coded slug.

Verification

  • vp test run apps/server/src/provider/Layers/ClaudeCapabilitiesProbe.test.ts apps/server/src/provider/Layers/ProviderRegistry.test.ts — 45 tests passed.
  • vp run --filter t3 typecheck — passed.
  • Targeted vp lint and vp fmt --check — passed.
  • vp run --filter t3 build — passed.

Impact

Backend provider discovery only; no schema, migration, auth, relay, or infrastructure changes. No screenshots are required because the existing model picker already renders provider snapshot models. After merge this will be published as one checksummed DevPC managed T3 artifact and pinned once in remote-dev.

Summary by CodeRabbit

  • New Features

    • Claude provider listings now include models discovered from the connected Claude service.
    • Claude models can expose configurable reasoning effort levels and fast mode support.
    • Model capability details now include names, identifiers, and custom-model status.
  • Improvements

    • Unknown or newly introduced Claude models receive appropriate capability settings instead of appearing without options.
    • Provider model listings more accurately reflect the capabilities available from Claude.

@cursor

cursorBot commented Jul 26, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M labels Jul 26, 2026
@coderabbitai

coderabbitaiBot commented Jul 26, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@logancsack, you've reached your PR review limit, so we couldn't start this review.

Next review available in:52 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 49fa93aa-7d19-4474-bfc7-6aa946227452

📥 Commits

Reviewing files that changed from the base of the PR and between f63e8b3 and fdd344d.

📒 Files selected for processing (2)
  • apps/server/src/provider/Layers/ClaudeAdapter.test.ts
  • apps/server/src/provider/Layers/ClaudeProvider.ts
📝 Walkthrough

Walkthrough

Claude model initialization metadata is parsed into provider models with effort and fast-mode capabilities. The capabilities probe exposes these models, and provider status uses them when available while retaining built-in fallbacks.

Changes

Claude model discovery

Layer / File(s)Summary
Model capability parsing
apps/server/src/provider/Layers/ClaudeProvider.ts
Adds future-model capability defaults, normalizes initialization model features, deduplicates models, and converts them into ServerProviderModel entries.
Capabilities probe model output
apps/server/src/provider/Layers/ClaudeProvider.ts, apps/server/src/provider/Layers/ClaudeCapabilitiesProbe.test.ts
Adds discovered models to probe results and verifies the Claude Sonnet model’s effort and fast-mode descriptors.
Provider status model selection
apps/server/src/provider/Layers/ClaudeProvider.ts, apps/server/src/provider/Layers/ProviderRegistry.test.ts
Uses discovered initialization models when present, falls back to version-gated built-ins otherwise, and tests the resulting provider snapshot.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
participant ClaudeSDK
participant ClaudeCapabilitiesProbe
participant ClaudeProvider
participant ProviderRegistry
ClaudeSDK->>ClaudeCapabilitiesProbe: return initialization models
ClaudeCapabilitiesProbe->>ClaudeProvider: expose parsed capabilities.models
ClaudeProvider->>ProviderRegistry: select discovered models
ProviderRegistry-->>ClaudeProvider: return provider snapshot
Loading

Suggested reviewers:juliusmarminge

Poem

A bunny found models beneath the moon,
With effort and fast mode humming a tune.
The probe gathered names,
The registry framed claims,
And Claude’s model meadow grew bright very soon.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title matches the main change: discovering Claude models from the live initialization catalog.
Description check✅ PassedThe description covers the problem, solution, verification, and impact, even though it uses different headings than the template.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/automatic-agent-updates

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:f63e8b3f29

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadapps/server/src/provider/Layers/ClaudeProvider.ts

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:fdd344d4a2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

? yield* resolveCapabilities(claudeSettings).pipe(Effect.orElseSucceed(() => undefined))
: undefined;
const models = providerModelsFromSettings(
capabilities?.models.length ? capabilities.models : fallbackModels,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Replace stale models when applying a live Claude catalog

During normal startup this selects the account-specific catalog, but the refresh is merged into makePendingClaudeProvider's snapshot, which already contains every built-in model. mergeProviderSnapshot in ProviderRegistry.ts retains missing models for every non-OpenCode provider and appends them at lines 81-83 and 120-123, so unavailable built-ins—and cached models discovered under a previous Claude account—remain visible and selectable after a successful live probe. Successful Claude inventories need to replace, rather than merge with, the pending/cached model list.

Useful? React with 👍 / 👎.

@logancsack
logancsack merged commit 89e51fe into mainJul 26, 2026
13 checks passed
@logancsack
logancsack deleted the feature/automatic-agent-updates branch July 26, 2026 02:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:Mvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@logancsack
, '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

Discover Claude models from the live harness - #21

Merged
logancsack merged 2 commits into
mainfrom
feature/automatic-agent-updates
Jul 26, 2026
Merged

Discover Claude models from the live harness#21
logancsack merged 2 commits into
mainfrom
feature/automatic-agent-updates

Conversation

@logancsack

@logancsacklogancsack commented Jul 26, 2026

Copy link
Copy Markdown
Owner

Problem

Claude Code already reports the account-specific live model catalog during SDK initialization, but T3 discarded it and used only a hard-coded list. New Claude models therefore required a T3 code release before they could appear in the app.

Solution

  • Parse Claude Code's live initialization model catalog.
  • Preserve the richer known-model capability definitions.
  • Derive effort and fast-mode options for previously unseen models from Claude's reported capability flags.
  • Fall back to the version-gated built-in catalog when the live initialization catalog is unavailable.
  • Keep unknown future model selections dispatchable without requiring a hard-coded slug.

Verification

  • vp test run apps/server/src/provider/Layers/ClaudeCapabilitiesProbe.test.ts apps/server/src/provider/Layers/ProviderRegistry.test.ts — 45 tests passed.
  • vp run --filter t3 typecheck — passed.
  • Targeted vp lint and vp fmt --check — passed.
  • vp run --filter t3 build — passed.

Impact

Backend provider discovery only; no schema, migration, auth, relay, or infrastructure changes. No screenshots are required because the existing model picker already renders provider snapshot models. After merge this will be published as one checksummed DevPC managed T3 artifact and pinned once in remote-dev.

Summary by CodeRabbit

  • New Features

    • Claude provider listings now include models discovered from the connected Claude service.
    • Claude models can expose configurable reasoning effort levels and fast mode support.
    • Model capability details now include names, identifiers, and custom-model status.
  • Improvements

    • Unknown or newly introduced Claude models receive appropriate capability settings instead of appearing without options.
    • Provider model listings more accurately reflect the capabilities available from Claude.

@cursor

cursorBot commented Jul 26, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M labels Jul 26, 2026
@coderabbitai

coderabbitaiBot commented Jul 26, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@logancsack, you've reached your PR review limit, so we couldn't start this review.

Next review available in:52 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 49fa93aa-7d19-4474-bfc7-6aa946227452

📥 Commits

Reviewing files that changed from the base of the PR and between f63e8b3 and fdd344d.

📒 Files selected for processing (2)
  • apps/server/src/provider/Layers/ClaudeAdapter.test.ts
  • apps/server/src/provider/Layers/ClaudeProvider.ts
📝 Walkthrough

Walkthrough

Claude model initialization metadata is parsed into provider models with effort and fast-mode capabilities. The capabilities probe exposes these models, and provider status uses them when available while retaining built-in fallbacks.

Changes

Claude model discovery

Layer / File(s)Summary
Model capability parsing
apps/server/src/provider/Layers/ClaudeProvider.ts
Adds future-model capability defaults, normalizes initialization model features, deduplicates models, and converts them into ServerProviderModel entries.
Capabilities probe model output
apps/server/src/provider/Layers/ClaudeProvider.ts, apps/server/src/provider/Layers/ClaudeCapabilitiesProbe.test.ts
Adds discovered models to probe results and verifies the Claude Sonnet model’s effort and fast-mode descriptors.
Provider status model selection
apps/server/src/provider/Layers/ClaudeProvider.ts, apps/server/src/provider/Layers/ProviderRegistry.test.ts
Uses discovered initialization models when present, falls back to version-gated built-ins otherwise, and tests the resulting provider snapshot.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
participant ClaudeSDK
participant ClaudeCapabilitiesProbe
participant ClaudeProvider
participant ProviderRegistry
ClaudeSDK->>ClaudeCapabilitiesProbe: return initialization models
ClaudeCapabilitiesProbe->>ClaudeProvider: expose parsed capabilities.models
ClaudeProvider->>ProviderRegistry: select discovered models
ProviderRegistry-->>ClaudeProvider: return provider snapshot
Loading

Suggested reviewers:juliusmarminge

Poem

A bunny found models beneath the moon,
With effort and fast mode humming a tune.
The probe gathered names,
The registry framed claims,
And Claude’s model meadow grew bright very soon.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title matches the main change: discovering Claude models from the live initialization catalog.
Description check✅ PassedThe description covers the problem, solution, verification, and impact, even though it uses different headings than the template.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/automatic-agent-updates

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:f63e8b3f29

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadapps/server/src/provider/Layers/ClaudeProvider.ts

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:fdd344d4a2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

? yield* resolveCapabilities(claudeSettings).pipe(Effect.orElseSucceed(() => undefined))
: undefined;
const models = providerModelsFromSettings(
capabilities?.models.length ? capabilities.models : fallbackModels,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Replace stale models when applying a live Claude catalog

During normal startup this selects the account-specific catalog, but the refresh is merged into makePendingClaudeProvider's snapshot, which already contains every built-in model. mergeProviderSnapshot in ProviderRegistry.ts retains missing models for every non-OpenCode provider and appends them at lines 81-83 and 120-123, so unavailable built-ins—and cached models discovered under a previous Claude account—remain visible and selectable after a successful live probe. Successful Claude inventories need to replace, rather than merge with, the pending/cached model list.

Useful? React with 👍 / 👎.

@logancsack
logancsack merged commit 89e51fe into mainJul 26, 2026
13 checks passed
@logancsack
logancsack deleted the feature/automatic-agent-updates branch July 26, 2026 02:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:Mvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@logancsack
, '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

Discover Claude models from the live harness - #21

Merged
logancsack merged 2 commits into
mainfrom
feature/automatic-agent-updates
Jul 26, 2026
Merged

Discover Claude models from the live harness#21
logancsack merged 2 commits into
mainfrom
feature/automatic-agent-updates

Conversation

@logancsack

@logancsacklogancsack commented Jul 26, 2026

Copy link
Copy Markdown
Owner

Problem

Claude Code already reports the account-specific live model catalog during SDK initialization, but T3 discarded it and used only a hard-coded list. New Claude models therefore required a T3 code release before they could appear in the app.

Solution

  • Parse Claude Code's live initialization model catalog.
  • Preserve the richer known-model capability definitions.
  • Derive effort and fast-mode options for previously unseen models from Claude's reported capability flags.
  • Fall back to the version-gated built-in catalog when the live initialization catalog is unavailable.
  • Keep unknown future model selections dispatchable without requiring a hard-coded slug.

Verification

  • vp test run apps/server/src/provider/Layers/ClaudeCapabilitiesProbe.test.ts apps/server/src/provider/Layers/ProviderRegistry.test.ts — 45 tests passed.
  • vp run --filter t3 typecheck — passed.
  • Targeted vp lint and vp fmt --check — passed.
  • vp run --filter t3 build — passed.

Impact

Backend provider discovery only; no schema, migration, auth, relay, or infrastructure changes. No screenshots are required because the existing model picker already renders provider snapshot models. After merge this will be published as one checksummed DevPC managed T3 artifact and pinned once in remote-dev.

Summary by CodeRabbit

  • New Features

    • Claude provider listings now include models discovered from the connected Claude service.
    • Claude models can expose configurable reasoning effort levels and fast mode support.
    • Model capability details now include names, identifiers, and custom-model status.
  • Improvements

    • Unknown or newly introduced Claude models receive appropriate capability settings instead of appearing without options.
    • Provider model listings more accurately reflect the capabilities available from Claude.

@cursor

cursorBot commented Jul 26, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M labels Jul 26, 2026
@coderabbitai

coderabbitaiBot commented Jul 26, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@logancsack, you've reached your PR review limit, so we couldn't start this review.

Next review available in:52 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 49fa93aa-7d19-4474-bfc7-6aa946227452

📥 Commits

Reviewing files that changed from the base of the PR and between f63e8b3 and fdd344d.

📒 Files selected for processing (2)
  • apps/server/src/provider/Layers/ClaudeAdapter.test.ts
  • apps/server/src/provider/Layers/ClaudeProvider.ts
📝 Walkthrough

Walkthrough

Claude model initialization metadata is parsed into provider models with effort and fast-mode capabilities. The capabilities probe exposes these models, and provider status uses them when available while retaining built-in fallbacks.

Changes

Claude model discovery

Layer / File(s)Summary
Model capability parsing
apps/server/src/provider/Layers/ClaudeProvider.ts
Adds future-model capability defaults, normalizes initialization model features, deduplicates models, and converts them into ServerProviderModel entries.
Capabilities probe model output
apps/server/src/provider/Layers/ClaudeProvider.ts, apps/server/src/provider/Layers/ClaudeCapabilitiesProbe.test.ts
Adds discovered models to probe results and verifies the Claude Sonnet model’s effort and fast-mode descriptors.
Provider status model selection
apps/server/src/provider/Layers/ClaudeProvider.ts, apps/server/src/provider/Layers/ProviderRegistry.test.ts
Uses discovered initialization models when present, falls back to version-gated built-ins otherwise, and tests the resulting provider snapshot.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
participant ClaudeSDK
participant ClaudeCapabilitiesProbe
participant ClaudeProvider
participant ProviderRegistry
ClaudeSDK->>ClaudeCapabilitiesProbe: return initialization models
ClaudeCapabilitiesProbe->>ClaudeProvider: expose parsed capabilities.models
ClaudeProvider->>ProviderRegistry: select discovered models
ProviderRegistry-->>ClaudeProvider: return provider snapshot
Loading

Suggested reviewers:juliusmarminge

Poem

A bunny found models beneath the moon,
With effort and fast mode humming a tune.
The probe gathered names,
The registry framed claims,
And Claude’s model meadow grew bright very soon.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title matches the main change: discovering Claude models from the live initialization catalog.
Description check✅ PassedThe description covers the problem, solution, verification, and impact, even though it uses different headings than the template.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/automatic-agent-updates

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:f63e8b3f29

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadapps/server/src/provider/Layers/ClaudeProvider.ts

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:fdd344d4a2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

? yield* resolveCapabilities(claudeSettings).pipe(Effect.orElseSucceed(() => undefined))
: undefined;
const models = providerModelsFromSettings(
capabilities?.models.length ? capabilities.models : fallbackModels,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Replace stale models when applying a live Claude catalog

During normal startup this selects the account-specific catalog, but the refresh is merged into makePendingClaudeProvider's snapshot, which already contains every built-in model. mergeProviderSnapshot in ProviderRegistry.ts retains missing models for every non-OpenCode provider and appends them at lines 81-83 and 120-123, so unavailable built-ins—and cached models discovered under a previous Claude account—remain visible and selectable after a successful live probe. Successful Claude inventories need to replace, rather than merge with, the pending/cached model list.

Useful? React with 👍 / 👎.

@logancsack
logancsack merged commit 89e51fe into mainJul 26, 2026
13 checks passed
@logancsack
logancsack deleted the feature/automatic-agent-updates branch July 26, 2026 02:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:Mvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@logancsack
, '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

Discover Claude models from the live harness - #21

Merged
logancsack merged 2 commits into
mainfrom
feature/automatic-agent-updates
Jul 26, 2026
Merged

Discover Claude models from the live harness#21
logancsack merged 2 commits into
mainfrom
feature/automatic-agent-updates

Conversation

@logancsack

@logancsacklogancsack commented Jul 26, 2026

Copy link
Copy Markdown
Owner

Problem

Claude Code already reports the account-specific live model catalog during SDK initialization, but T3 discarded it and used only a hard-coded list. New Claude models therefore required a T3 code release before they could appear in the app.

Solution

  • Parse Claude Code's live initialization model catalog.
  • Preserve the richer known-model capability definitions.
  • Derive effort and fast-mode options for previously unseen models from Claude's reported capability flags.
  • Fall back to the version-gated built-in catalog when the live initialization catalog is unavailable.
  • Keep unknown future model selections dispatchable without requiring a hard-coded slug.

Verification

  • vp test run apps/server/src/provider/Layers/ClaudeCapabilitiesProbe.test.ts apps/server/src/provider/Layers/ProviderRegistry.test.ts — 45 tests passed.
  • vp run --filter t3 typecheck — passed.
  • Targeted vp lint and vp fmt --check — passed.
  • vp run --filter t3 build — passed.

Impact

Backend provider discovery only; no schema, migration, auth, relay, or infrastructure changes. No screenshots are required because the existing model picker already renders provider snapshot models. After merge this will be published as one checksummed DevPC managed T3 artifact and pinned once in remote-dev.

Summary by CodeRabbit

  • New Features

    • Claude provider listings now include models discovered from the connected Claude service.
    • Claude models can expose configurable reasoning effort levels and fast mode support.
    • Model capability details now include names, identifiers, and custom-model status.
  • Improvements

    • Unknown or newly introduced Claude models receive appropriate capability settings instead of appearing without options.
    • Provider model listings more accurately reflect the capabilities available from Claude.

@cursor

cursorBot commented Jul 26, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M labels Jul 26, 2026
@coderabbitai

coderabbitaiBot commented Jul 26, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@logancsack, you've reached your PR review limit, so we couldn't start this review.

Next review available in:52 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 49fa93aa-7d19-4474-bfc7-6aa946227452

📥 Commits

Reviewing files that changed from the base of the PR and between f63e8b3 and fdd344d.

📒 Files selected for processing (2)
  • apps/server/src/provider/Layers/ClaudeAdapter.test.ts
  • apps/server/src/provider/Layers/ClaudeProvider.ts
📝 Walkthrough

Walkthrough

Claude model initialization metadata is parsed into provider models with effort and fast-mode capabilities. The capabilities probe exposes these models, and provider status uses them when available while retaining built-in fallbacks.

Changes

Claude model discovery

Layer / File(s)Summary
Model capability parsing
apps/server/src/provider/Layers/ClaudeProvider.ts
Adds future-model capability defaults, normalizes initialization model features, deduplicates models, and converts them into ServerProviderModel entries.
Capabilities probe model output
apps/server/src/provider/Layers/ClaudeProvider.ts, apps/server/src/provider/Layers/ClaudeCapabilitiesProbe.test.ts
Adds discovered models to probe results and verifies the Claude Sonnet model’s effort and fast-mode descriptors.
Provider status model selection
apps/server/src/provider/Layers/ClaudeProvider.ts, apps/server/src/provider/Layers/ProviderRegistry.test.ts
Uses discovered initialization models when present, falls back to version-gated built-ins otherwise, and tests the resulting provider snapshot.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
participant ClaudeSDK
participant ClaudeCapabilitiesProbe
participant ClaudeProvider
participant ProviderRegistry
ClaudeSDK->>ClaudeCapabilitiesProbe: return initialization models
ClaudeCapabilitiesProbe->>ClaudeProvider: expose parsed capabilities.models
ClaudeProvider->>ProviderRegistry: select discovered models
ProviderRegistry-->>ClaudeProvider: return provider snapshot
Loading

Suggested reviewers:juliusmarminge

Poem

A bunny found models beneath the moon,
With effort and fast mode humming a tune.
The probe gathered names,
The registry framed claims,
And Claude’s model meadow grew bright very soon.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title matches the main change: discovering Claude models from the live initialization catalog.
Description check✅ PassedThe description covers the problem, solution, verification, and impact, even though it uses different headings than the template.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/automatic-agent-updates

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:f63e8b3f29

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadapps/server/src/provider/Layers/ClaudeProvider.ts

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:fdd344d4a2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

? yield* resolveCapabilities(claudeSettings).pipe(Effect.orElseSucceed(() => undefined))
: undefined;
const models = providerModelsFromSettings(
capabilities?.models.length ? capabilities.models : fallbackModels,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Replace stale models when applying a live Claude catalog

During normal startup this selects the account-specific catalog, but the refresh is merged into makePendingClaudeProvider's snapshot, which already contains every built-in model. mergeProviderSnapshot in ProviderRegistry.ts retains missing models for every non-OpenCode provider and appends them at lines 81-83 and 120-123, so unavailable built-ins—and cached models discovered under a previous Claude account—remain visible and selectable after a successful live probe. Successful Claude inventories need to replace, rather than merge with, the pending/cached model list.

Useful? React with 👍 / 👎.

@logancsack
logancsack merged commit 89e51fe into mainJul 26, 2026
13 checks passed
@logancsack
logancsack deleted the feature/automatic-agent-updates branch July 26, 2026 02:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:Mvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@logancsack
, '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

Discover Claude models from the live harness - #21

Merged
logancsack merged 2 commits into
mainfrom
feature/automatic-agent-updates
Jul 26, 2026
Merged

Discover Claude models from the live harness#21
logancsack merged 2 commits into
mainfrom
feature/automatic-agent-updates

Conversation

@logancsack

@logancsacklogancsack commented Jul 26, 2026

Copy link
Copy Markdown
Owner

Problem

Claude Code already reports the account-specific live model catalog during SDK initialization, but T3 discarded it and used only a hard-coded list. New Claude models therefore required a T3 code release before they could appear in the app.

Solution

  • Parse Claude Code's live initialization model catalog.
  • Preserve the richer known-model capability definitions.
  • Derive effort and fast-mode options for previously unseen models from Claude's reported capability flags.
  • Fall back to the version-gated built-in catalog when the live initialization catalog is unavailable.
  • Keep unknown future model selections dispatchable without requiring a hard-coded slug.

Verification

  • vp test run apps/server/src/provider/Layers/ClaudeCapabilitiesProbe.test.ts apps/server/src/provider/Layers/ProviderRegistry.test.ts — 45 tests passed.
  • vp run --filter t3 typecheck — passed.
  • Targeted vp lint and vp fmt --check — passed.
  • vp run --filter t3 build — passed.

Impact

Backend provider discovery only; no schema, migration, auth, relay, or infrastructure changes. No screenshots are required because the existing model picker already renders provider snapshot models. After merge this will be published as one checksummed DevPC managed T3 artifact and pinned once in remote-dev.

Summary by CodeRabbit

  • New Features

    • Claude provider listings now include models discovered from the connected Claude service.
    • Claude models can expose configurable reasoning effort levels and fast mode support.
    • Model capability details now include names, identifiers, and custom-model status.
  • Improvements

    • Unknown or newly introduced Claude models receive appropriate capability settings instead of appearing without options.
    • Provider model listings more accurately reflect the capabilities available from Claude.

@cursor

cursorBot commented Jul 26, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M labels Jul 26, 2026
@coderabbitai

coderabbitaiBot commented Jul 26, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@logancsack, you've reached your PR review limit, so we couldn't start this review.

Next review available in:52 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 49fa93aa-7d19-4474-bfc7-6aa946227452

📥 Commits

Reviewing files that changed from the base of the PR and between f63e8b3 and fdd344d.

📒 Files selected for processing (2)
  • apps/server/src/provider/Layers/ClaudeAdapter.test.ts
  • apps/server/src/provider/Layers/ClaudeProvider.ts
📝 Walkthrough

Walkthrough

Claude model initialization metadata is parsed into provider models with effort and fast-mode capabilities. The capabilities probe exposes these models, and provider status uses them when available while retaining built-in fallbacks.

Changes

Claude model discovery

Layer / File(s)Summary
Model capability parsing
apps/server/src/provider/Layers/ClaudeProvider.ts
Adds future-model capability defaults, normalizes initialization model features, deduplicates models, and converts them into ServerProviderModel entries.
Capabilities probe model output
apps/server/src/provider/Layers/ClaudeProvider.ts, apps/server/src/provider/Layers/ClaudeCapabilitiesProbe.test.ts
Adds discovered models to probe results and verifies the Claude Sonnet model’s effort and fast-mode descriptors.
Provider status model selection
apps/server/src/provider/Layers/ClaudeProvider.ts, apps/server/src/provider/Layers/ProviderRegistry.test.ts
Uses discovered initialization models when present, falls back to version-gated built-ins otherwise, and tests the resulting provider snapshot.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
participant ClaudeSDK
participant ClaudeCapabilitiesProbe
participant ClaudeProvider
participant ProviderRegistry
ClaudeSDK->>ClaudeCapabilitiesProbe: return initialization models
ClaudeCapabilitiesProbe->>ClaudeProvider: expose parsed capabilities.models
ClaudeProvider->>ProviderRegistry: select discovered models
ProviderRegistry-->>ClaudeProvider: return provider snapshot
Loading

Suggested reviewers:juliusmarminge

Poem

A bunny found models beneath the moon,
With effort and fast mode humming a tune.
The probe gathered names,
The registry framed claims,
And Claude’s model meadow grew bright very soon.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title matches the main change: discovering Claude models from the live initialization catalog.
Description check✅ PassedThe description covers the problem, solution, verification, and impact, even though it uses different headings than the template.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/automatic-agent-updates

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:f63e8b3f29

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadapps/server/src/provider/Layers/ClaudeProvider.ts

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:fdd344d4a2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

? yield* resolveCapabilities(claudeSettings).pipe(Effect.orElseSucceed(() => undefined))
: undefined;
const models = providerModelsFromSettings(
capabilities?.models.length ? capabilities.models : fallbackModels,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Replace stale models when applying a live Claude catalog

During normal startup this selects the account-specific catalog, but the refresh is merged into makePendingClaudeProvider's snapshot, which already contains every built-in model. mergeProviderSnapshot in ProviderRegistry.ts retains missing models for every non-OpenCode provider and appends them at lines 81-83 and 120-123, so unavailable built-ins—and cached models discovered under a previous Claude account—remain visible and selectable after a successful live probe. Successful Claude inventories need to replace, rather than merge with, the pending/cached model list.

Useful? React with 👍 / 👎.

@logancsack
logancsack merged commit 89e51fe into mainJul 26, 2026
13 checks passed
@logancsack
logancsack deleted the feature/automatic-agent-updates branch July 26, 2026 02:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:Mvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@logancsack
, '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

Discover Claude models from the live harness - #21

Merged
logancsack merged 2 commits into
mainfrom
feature/automatic-agent-updates
Jul 26, 2026
Merged

Discover Claude models from the live harness#21
logancsack merged 2 commits into
mainfrom
feature/automatic-agent-updates

Conversation

@logancsack

@logancsacklogancsack commented Jul 26, 2026

Copy link
Copy Markdown
Owner

Problem

Claude Code already reports the account-specific live model catalog during SDK initialization, but T3 discarded it and used only a hard-coded list. New Claude models therefore required a T3 code release before they could appear in the app.

Solution

  • Parse Claude Code's live initialization model catalog.
  • Preserve the richer known-model capability definitions.
  • Derive effort and fast-mode options for previously unseen models from Claude's reported capability flags.
  • Fall back to the version-gated built-in catalog when the live initialization catalog is unavailable.
  • Keep unknown future model selections dispatchable without requiring a hard-coded slug.

Verification

  • vp test run apps/server/src/provider/Layers/ClaudeCapabilitiesProbe.test.ts apps/server/src/provider/Layers/ProviderRegistry.test.ts — 45 tests passed.
  • vp run --filter t3 typecheck — passed.
  • Targeted vp lint and vp fmt --check — passed.
  • vp run --filter t3 build — passed.

Impact

Backend provider discovery only; no schema, migration, auth, relay, or infrastructure changes. No screenshots are required because the existing model picker already renders provider snapshot models. After merge this will be published as one checksummed DevPC managed T3 artifact and pinned once in remote-dev.

Summary by CodeRabbit

  • New Features

    • Claude provider listings now include models discovered from the connected Claude service.
    • Claude models can expose configurable reasoning effort levels and fast mode support.
    • Model capability details now include names, identifiers, and custom-model status.
  • Improvements

    • Unknown or newly introduced Claude models receive appropriate capability settings instead of appearing without options.
    • Provider model listings more accurately reflect the capabilities available from Claude.

@cursor

cursorBot commented Jul 26, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M labels Jul 26, 2026
@coderabbitai

coderabbitaiBot commented Jul 26, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@logancsack, you've reached your PR review limit, so we couldn't start this review.

Next review available in:52 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 49fa93aa-7d19-4474-bfc7-6aa946227452

📥 Commits

Reviewing files that changed from the base of the PR and between f63e8b3 and fdd344d.

📒 Files selected for processing (2)
  • apps/server/src/provider/Layers/ClaudeAdapter.test.ts
  • apps/server/src/provider/Layers/ClaudeProvider.ts
📝 Walkthrough

Walkthrough

Claude model initialization metadata is parsed into provider models with effort and fast-mode capabilities. The capabilities probe exposes these models, and provider status uses them when available while retaining built-in fallbacks.

Changes

Claude model discovery

Layer / File(s)Summary
Model capability parsing
apps/server/src/provider/Layers/ClaudeProvider.ts
Adds future-model capability defaults, normalizes initialization model features, deduplicates models, and converts them into ServerProviderModel entries.
Capabilities probe model output
apps/server/src/provider/Layers/ClaudeProvider.ts, apps/server/src/provider/Layers/ClaudeCapabilitiesProbe.test.ts
Adds discovered models to probe results and verifies the Claude Sonnet model’s effort and fast-mode descriptors.
Provider status model selection
apps/server/src/provider/Layers/ClaudeProvider.ts, apps/server/src/provider/Layers/ProviderRegistry.test.ts
Uses discovered initialization models when present, falls back to version-gated built-ins otherwise, and tests the resulting provider snapshot.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
participant ClaudeSDK
participant ClaudeCapabilitiesProbe
participant ClaudeProvider
participant ProviderRegistry
ClaudeSDK->>ClaudeCapabilitiesProbe: return initialization models
ClaudeCapabilitiesProbe->>ClaudeProvider: expose parsed capabilities.models
ClaudeProvider->>ProviderRegistry: select discovered models
ProviderRegistry-->>ClaudeProvider: return provider snapshot
Loading

Suggested reviewers:juliusmarminge

Poem

A bunny found models beneath the moon,
With effort and fast mode humming a tune.
The probe gathered names,
The registry framed claims,
And Claude’s model meadow grew bright very soon.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title matches the main change: discovering Claude models from the live initialization catalog.
Description check✅ PassedThe description covers the problem, solution, verification, and impact, even though it uses different headings than the template.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/automatic-agent-updates

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:f63e8b3f29

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadapps/server/src/provider/Layers/ClaudeProvider.ts

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:fdd344d4a2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

? yield* resolveCapabilities(claudeSettings).pipe(Effect.orElseSucceed(() => undefined))
: undefined;
const models = providerModelsFromSettings(
capabilities?.models.length ? capabilities.models : fallbackModels,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Replace stale models when applying a live Claude catalog

During normal startup this selects the account-specific catalog, but the refresh is merged into makePendingClaudeProvider's snapshot, which already contains every built-in model. mergeProviderSnapshot in ProviderRegistry.ts retains missing models for every non-OpenCode provider and appends them at lines 81-83 and 120-123, so unavailable built-ins—and cached models discovered under a previous Claude account—remain visible and selectable after a successful live probe. Successful Claude inventories need to replace, rather than merge with, the pending/cached model list.

Useful? React with 👍 / 👎.

@logancsack
logancsack merged commit 89e51fe into mainJul 26, 2026
13 checks passed
@logancsack
logancsack deleted the feature/automatic-agent-updates branch July 26, 2026 02:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:Mvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@logancsack
, '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

Discover Claude models from the live harness - #21

Merged
logancsack merged 2 commits into
mainfrom
feature/automatic-agent-updates
Jul 26, 2026
Merged

Discover Claude models from the live harness#21
logancsack merged 2 commits into
mainfrom
feature/automatic-agent-updates

Conversation

@logancsack

@logancsacklogancsack commented Jul 26, 2026

Copy link
Copy Markdown
Owner

Problem

Claude Code already reports the account-specific live model catalog during SDK initialization, but T3 discarded it and used only a hard-coded list. New Claude models therefore required a T3 code release before they could appear in the app.

Solution

  • Parse Claude Code's live initialization model catalog.
  • Preserve the richer known-model capability definitions.
  • Derive effort and fast-mode options for previously unseen models from Claude's reported capability flags.
  • Fall back to the version-gated built-in catalog when the live initialization catalog is unavailable.
  • Keep unknown future model selections dispatchable without requiring a hard-coded slug.

Verification

  • vp test run apps/server/src/provider/Layers/ClaudeCapabilitiesProbe.test.ts apps/server/src/provider/Layers/ProviderRegistry.test.ts — 45 tests passed.
  • vp run --filter t3 typecheck — passed.
  • Targeted vp lint and vp fmt --check — passed.
  • vp run --filter t3 build — passed.

Impact

Backend provider discovery only; no schema, migration, auth, relay, or infrastructure changes. No screenshots are required because the existing model picker already renders provider snapshot models. After merge this will be published as one checksummed DevPC managed T3 artifact and pinned once in remote-dev.

Summary by CodeRabbit

  • New Features

    • Claude provider listings now include models discovered from the connected Claude service.
    • Claude models can expose configurable reasoning effort levels and fast mode support.
    • Model capability details now include names, identifiers, and custom-model status.
  • Improvements

    • Unknown or newly introduced Claude models receive appropriate capability settings instead of appearing without options.
    • Provider model listings more accurately reflect the capabilities available from Claude.

@cursor

cursorBot commented Jul 26, 2026

Copy link
Copy Markdown

Bugbot is not enabled for your account, so this pull request was not reviewed.

Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs.

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M labels Jul 26, 2026
@coderabbitai

coderabbitaiBot commented Jul 26, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@logancsack, you've reached your PR review limit, so we couldn't start this review.

Next review available in:52 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 49fa93aa-7d19-4474-bfc7-6aa946227452

📥 Commits

Reviewing files that changed from the base of the PR and between f63e8b3 and fdd344d.

📒 Files selected for processing (2)
  • apps/server/src/provider/Layers/ClaudeAdapter.test.ts
  • apps/server/src/provider/Layers/ClaudeProvider.ts
📝 Walkthrough

Walkthrough

Claude model initialization metadata is parsed into provider models with effort and fast-mode capabilities. The capabilities probe exposes these models, and provider status uses them when available while retaining built-in fallbacks.

Changes

Claude model discovery

Layer / File(s)Summary
Model capability parsing
apps/server/src/provider/Layers/ClaudeProvider.ts
Adds future-model capability defaults, normalizes initialization model features, deduplicates models, and converts them into ServerProviderModel entries.
Capabilities probe model output
apps/server/src/provider/Layers/ClaudeProvider.ts, apps/server/src/provider/Layers/ClaudeCapabilitiesProbe.test.ts
Adds discovered models to probe results and verifies the Claude Sonnet model’s effort and fast-mode descriptors.
Provider status model selection
apps/server/src/provider/Layers/ClaudeProvider.ts, apps/server/src/provider/Layers/ProviderRegistry.test.ts
Uses discovered initialization models when present, falls back to version-gated built-ins otherwise, and tests the resulting provider snapshot.

Estimated code review effort: 4 (Complex) | ~45 minutes

Sequence Diagram(s)

sequenceDiagram
participant ClaudeSDK
participant ClaudeCapabilitiesProbe
participant ClaudeProvider
participant ProviderRegistry
ClaudeSDK->>ClaudeCapabilitiesProbe: return initialization models
ClaudeCapabilitiesProbe->>ClaudeProvider: expose parsed capabilities.models
ClaudeProvider->>ProviderRegistry: select discovered models
ProviderRegistry-->>ClaudeProvider: return provider snapshot
Loading

Suggested reviewers:juliusmarminge

Poem

A bunny found models beneath the moon,
With effort and fast mode humming a tune.
The probe gathered names,
The registry framed claims,
And Claude’s model meadow grew bright very soon.

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title matches the main change: discovering Claude models from the live initialization catalog.
Description check✅ PassedThe description covers the problem, solution, verification, and impact, even though it uses different headings than the template.
Docstring Coverage✅ PassedNo functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feature/automatic-agent-updates

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:f63e8b3f29

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

Comment threadapps/server/src/provider/Layers/ClaudeProvider.ts

@chatgpt-codex-connectorchatgpt-codex-connectorBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit:fdd344d4a2

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

? yield* resolveCapabilities(claudeSettings).pipe(Effect.orElseSucceed(() => undefined))
: undefined;
const models = providerModelsFromSettings(
capabilities?.models.length ? capabilities.models : fallbackModels,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Replace stale models when applying a live Claude catalog

During normal startup this selects the account-specific catalog, but the refresh is merged into makePendingClaudeProvider's snapshot, which already contains every built-in model. mergeProviderSnapshot in ProviderRegistry.ts retains missing models for every non-OpenCode provider and appends them at lines 81-83 and 120-123, so unavailable built-ins—and cached models discovered under a previous Claude account—remain visible and selectable after a successful live probe. Successful Claude inventories need to replace, rather than merge with, the pending/cached model list.

Useful? React with 👍 / 👎.

@logancsack
logancsack merged commit 89e51fe into mainJul 26, 2026
13 checks passed
@logancsack
logancsack deleted the feature/automatic-agent-updates branch July 26, 2026 02:55
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:Mvouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@logancsack