Skip to content

refactor: tighten Settings copy to match macOS System Settings density#322

Merged
hrayleung merged 3 commits into
masterfrom
refactor/prompt-cleanup
May 10, 2026
Merged

refactor: tighten Settings copy to match macOS System Settings density#322
hrayleung merged 3 commits into
masterfrom
refactor/prompt-cleanup

Conversation

@hrayleung
Copy link
Copy Markdown
Owner

@hrayleung hrayleung commented May 9, 2026

Summary

Settings — especially Plugins — accumulated layered explanations that made the panes feel cluttered and un-Apple: section detail paraphrasing row labels, Stored locally / Saved automatically. flicker after every keystroke, Optional X… captions where placeholders would do, and a Firecrawl guidance card spending 80 lines on a single R2 prerequisite. This pass strips that noise so each pane sits closer to System Settings density (section header = noun, row label = value, caption only when load-bearing).

Net diff: +146 / −282 across 25 files. No behavior change beyond UI copy and a new cross-plugin navigation notification used by the Firecrawl callout.

Highlights

  • Status messages: drop Saved automatically. after every keystroke; keep Cleared. and errors. Standardize the missing period in OpenRouter OCR.
  • Boilerplate: strip Stored locally on this Mac. Changes save automatically. from PluginAPIKey, MinerU, TTS, STT, Firecrawl.
  • Web Search: delete the standalone Status and Configured rows, fold Clear into the API Key row, rename Provider Settings{Provider} Options, drop the single-toggle wrapping section, replace Brave country/language captions with placeholders, and trim the Exa/Brave/Jina/Firecrawl/Tavily advanced-row captions.
  • Optional → placeholder across STT, TTS, Cloudflare R2, MinerU.
  • Section structure: merge ChatNaming Behavior + Naming Model into one section, drop Cloudflare Actions wrapper, rename OpenRouter OCR Connection and MinerU API Token sections to API Key.
  • Firecrawl: collapse the 3-row guidance card into one info callout + Configure R2 Upload… button. Adds a new .settingsNavigateToPlugin notification (AppNotifications.swift) that SettingsView observes for cross-plugin navigation.
  • Help links: add Get an API key on … Links for the 6 Web Search providers (signupURL on SearchPluginProvider), plus Cloudflare R2 dashboard and MinerU sign-up Links.
  • Agent Mode / Updates / Appearance: trim verbose Details disclosures, drop Update Check section detail, shorten Appearance overlay-scrollbars caption.
  • Add MCP server / Add provider: drop a duplicate .help() that mirrored supportingText; trim the import disclosure.

Test plan

  • swift build — clean
  • swift test — 2180 tests, 0 failures
  • ./Packaging/package.sh — release Jin.app bundle built and ad-hoc signed
  • Manual smoke-test of Settings panes: Plugins (each plugin), General → Updates / Appearance, Providers (Add provider sheet), MCP Servers (Add server sheet), Agent Mode

Notes

  • New .settingsNavigateToPlugin notification is internal-only; userInfo carries pluginID keyed by SettingsNavigationUserInfoKey.pluginID.
  • SearchPluginProvider.signupURL URLs point at well-known stable provider sign-up landing pages; if any provider relocates we just update the URL.
  • No existing automated UI tests cover Settings copy, so visual smoke-test on real macOS app is required before merge.

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Navigate directly to a plugin’s settings from the app
    • Provider-specific signup/dashboard links for web search providers
  • Bug Fixes & Improvements

    • Simplified and clarified help/supporting text across many settings
    • API key auto-save feedback now hides “Saved automatically.” and shows “Cleared.” when removed
    • Added Cloudflare R2 setup link in OCR settings
    • Reorganized web search provider settings for clarity
  • UI/UX Updates

    • Streamlined section labels and explanatory copy across settings

Review Change Stack

Settings — especially Plugins — accumulated layered explanations: section
detail repeating row label, "Stored locally" / "Saved automatically." status
flicker after every keystroke, "Optional X…" captions where placeholders
suffice, and a Firecrawl guidance card spending 80 lines on a single R2
prerequisite. This sweeps the noise so the panes feel closer to System
Settings: section header carries the noun, row label carries the value, and
captions only appear when load-bearing.

- Drop "Saved automatically." status across all auto-save plugin views
- Strip "Stored locally / Changes save automatically" boilerplate from
  PluginAPIKey, MinerU, TTS, STT, Firecrawl
- Web Search: fold Clear into the API Key row, delete the standalone
  Status and Configured rows, rename Provider Settings to "{Provider}
  Options", drop the single-toggle "Web Search" wrapper, replace Brave
  country/language captions with placeholder hints, and trim Tavily/Exa/
  Jina/Firecrawl/Brave advanced-row captions
- Replace "Optional X…" captions with TextField placeholders across STT,
  TTS, Cloudflare R2, MinerU
- Merge ChatNaming "Behavior" + "Naming Model" into one section; drop
  Cloudflare "Actions" wrapper; rename OpenRouter OCR "Connection" and
  MinerU "API Token" sections to "API Key"
- Collapse Firecrawl 3-row guidance into one info callout + a Configure
  R2 Upload… button (new .settingsNavigateToPlugin event the SettingsView
  observes for cross-plugin navigation)
- Add per-provider Get-an-API-key Links for Web Search providers, plus
  Cloudflare R2 dashboard and MinerU sign-up Links
- Trim Agent Mode Details disclosures, Updates section detail, and
  Appearance overlay-scrollbars caption; consolidate AddMCPServer
  duplicate help/supportingText pairs

swift build, swift test (2180 tests, 0 failures) and ./Packaging/package.sh
all pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 9, 2026

Warning

Rate limit exceeded

@hrayleung has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 52 minutes and 25 seconds before requesting another review.

You’ve run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: ae9566eb-7f3b-417d-a96a-b80b9774846f

📥 Commits

Reviewing files that changed from the base of the PR and between fb9ad7e and abb65a5.

📒 Files selected for processing (2)
  • Sources/Domain/WebSearchAndToolControls.swift
  • Sources/UI/SettingsView.swift
📝 Walkthrough

Walkthrough

This PR adds a notification-based plugin navigation system to the settings UI and simplifies help/supporting text and auto-save status messaging across many plugin and application settings views.

Changes

Plugin Navigation & Settings UI Simplification

Layer / File(s) Summary
Notification & Provider Contracts
Sources/Domain/AppNotifications.swift, Sources/Domain/WebSearchAndToolControls.swift
Added settingsNavigateToPlugin notification and SettingsNavigationUserInfoKey.pluginID; added SearchPluginProvider.signupURL: URL? mapping providers to signup/dashboard URLs.
Settings Navigation Handler
Sources/UI/SettingsView.swift
Added .onReceive handler for .settingsNavigateToPlugin that extracts plugin ID, validates it against available plugins, and animates the UI to the Plugins section selecting the target plugin.
Web Search Settings View
Sources/UI/WebSearchPluginSettingsView.swift
Removed outer wrapper; provider advanced section now titled dynamically as \(defaultProvider.displayName) Options; simplified defaults rows; API key row uses explicit isRevealed binding and onClear handler.
Web Search Advanced Controls
Sources/UI/WebSearchPluginSettingsChromeViews.swift
Simplified many provider fields by removing supportingText and using example fieldTitle initializers; refactored WebSearchAPIKeyRow to use JinSettingsControlRow + JinRevealableSecureField with inline Clear button.
Cloudflare R2 Upload
Sources/UI/CloudflareR2UploadPluginSettingsView.swift
Removed section detail; added conditional "Open Cloudflare R2 dashboard" Link when dashboard URL can be constructed; Public Base URL uses fieldTitle example; auto-save status message set to "Cleared." only when config empty.
Firecrawl R2 Callout & Navigation
Sources/UI/FirecrawlOCRPluginSettingsView.swift
Replaced guidance with r2RequirementCallout including a "Configure R2 Upload…" link that posts .settingsNavigateToPlugin; status UI now conditional on statusMessage; clear/save status behavior adjusted.
OCR Plugin Settings Misc
Sources/UI/DeepSeekOCRPluginSettingsView.swift, Sources/UI/MinerUOCRPluginSettingsView.swift, Sources/UI/OpenRouterOCRPluginSettingsView.swift
Removed or shortened API key section detail/supporting text; added provider links; adjusted statusMessage behavior to show "Cleared." only for empty keys.
Generic Plugin API Key Settings
Sources/UI/PluginAPIKeySettingsView.swift, various persist helpers
Removed section detail strings and standardized persist behavior: non-empty saves clear statusMessage (nil), empty clears set statusMessage = "Cleared.".
Speech-to-Text Settings
Sources/UI/SpeechToTextPluginSettingsView.swift, Sources/UI/SpeechToTextPluginSettingsView+Providers.swift, Sources/UI/SpeechToTextPluginSettingsView+Actions.swift
Language rows now use fieldTitle: "auto-detect" instead of optional supporting text; provider error section renamed to "Unknown Provider" with .plain style; toggle/help usage adjusted; status-message behavior standardized.
Text-to-Speech Settings
Sources/UI/TextToSpeechPluginSettingsView.swift, Sources/UI/TextToSpeechPluginSettingsView+Providers.swift, Sources/UI/TextToSpeechPluginSettingsView+Credentials.swift
Removed some .help(...) modifiers and "(optional)" labels from instruction fields; changed ElevenLabs empty-state to callout style; renamed provider error section to "Unknown Provider"; adjusted credential status messaging.
Agent Mode Settings
Sources/UI/AgentModeSettingsView+CommandPrefixes.swift, Sources/UI/AgentModeSettingsView+ToolsAndSafety.swift
Reworded Safe Commands and allowed-prefix supporting text; updated disclosure bodies for "How Agent Mode Works", "Approval Rules", and "RTK".
MCP & Provider UI
Sources/UI/AddMCPServerSections.swift, Sources/UI/AddProviderView.swift, Sources/UI/MCPServerConfigFormSections.swift
Clarified Quick Setup import details; removed .help(...) guidance from MCP Server "ID" and AddProvider "API Base URL"; simplified API key supporting text and launcher details text.
Appearance & Chat Naming
Sources/UI/AppearanceSettingsView.swift, Sources/UI/ChatNamingPluginSettingsView.swift
Shortened Overlay Scrollbars supporting text; renamed "Behavior" section to "Chat Naming" in chat naming settings.
Update Settings
Sources/UI/UpdateSettingsView.swift
Shortened "Update Check" section detail and updated pre-release toggle explanatory text to note instability rather than beta channel delivery.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • hrayleung/Jin#108: Modifies SearchPluginProvider enum and provider metadata; related to signupURL additions.
  • hrayleung/Jin#148: Prior provider enum/display changes that intersect with signupURL additions.
  • hrayleung/Jin#278: Related SettingsView and WebSearch UI refactor touching signup links and credential UI.

Poem

🐰 I hopped through settings, trimmed the fluff,

Links now point where setup's tough.
Help text tucked, status messages neat,
Plugins navigate with a tiny feat.
Hooray — a tidier settings seat!

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'refactor: tighten Settings copy to match macOS System Settings density' accurately and specifically summarizes the main change—reducing verbose UI copy in Settings panes to align with macOS System Settings. It is clear, concise, and reflects the primary objective of the changeset.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/prompt-cleanup

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 and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🧹 Nitpick comments (1)
Sources/UI/TextToSpeechPluginSettingsView+Providers.swift (1)

234-235: 💤 Low value

Consider using "click" instead of "tap" for macOS platform.

The instruction text uses "tap Test Connection" which is mobile/touch-interface language. On macOS, "click" is more conventional. However, if "tap" is used consistently throughout the codebase for cross-platform messaging, this can be deferred.

📝 Suggested wording adjustment
-                Text("Enter your API key and tap Test Connection to load voices.")
+                Text("Enter your API key and click Test Connection to load voices.")
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Sources/UI/TextToSpeechPluginSettingsView`+Providers.swift around lines 234 -
235, The message string "Enter your API key and tap Test Connection to load
voices." uses touch terminology; update the Text(...) initializer to use
platform-appropriate wording by switching "tap" to "click" on macOS (e.g. wrap
the string in a conditional compilation branch using `#if` os(macOS) / `#else` so
macOS shows "click" and other platforms keep "tap"), leaving the
jinInfoCallout() usage unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@Sources/Domain/WebSearchAndToolControls.swift`:
- Around line 111-120: The signupURL computed property contains potentially
incorrect endpoints for the .exa and .perplexity cases; verify the canonical
dashboard/signup URLs and replace "https://dashboard.exa.ai/" and
"https://www.perplexity.ai/settings/api" with the correct targets (or a
documented help/support URL) inside the signupURL switch branch for .exa and
.perplexity in WebSearchAndToolControls so the links no longer return 429/403;
if no direct dashboard URL exists, point to the provider’s public signup or
account/settings landing page and add a short comment above the .exa/.perplexity
cases noting the reason for the chosen fallback.

In `@Sources/UI/SettingsView.swift`:
- Around line 176-185: The NotificationCenter handler for the
.settingsNavigateToPlugin publisher mutates `@State` (selectedSection,
selectedPluginID) off the main thread; ensure delivery on the main thread by
adding .receive(on: RunLoop.main) to the publisher chain (i.e., change
.onReceive(NotificationCenter.default.publisher(for: .settingsNavigateToPlugin))
to .onReceive(NotificationCenter.default.publisher(for:
.settingsNavigateToPlugin).receive(on: RunLoop.main))) or alternatively wrap the
mutation block in Task { await MainActor.run { ... } } so the
withAnimation(settingsMotionAnimation) and assignments to
selectedSection/selectedPluginID always run on the main thread.

---

Nitpick comments:
In `@Sources/UI/TextToSpeechPluginSettingsView`+Providers.swift:
- Around line 234-235: The message string "Enter your API key and tap Test
Connection to load voices." uses touch terminology; update the Text(...)
initializer to use platform-appropriate wording by switching "tap" to "click" on
macOS (e.g. wrap the string in a conditional compilation branch using `#if`
os(macOS) / `#else` so macOS shows "click" and other platforms keep "tap"),
leaving the jinInfoCallout() usage unchanged.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 48e36164-4db6-4fb6-b261-bd5e47ef26c3

📥 Commits

Reviewing files that changed from the base of the PR and between de4db79 and 3cc0202.

📒 Files selected for processing (25)
  • Sources/Domain/AppNotifications.swift
  • Sources/Domain/WebSearchAndToolControls.swift
  • Sources/UI/AddMCPServerSections.swift
  • Sources/UI/AddProviderView.swift
  • Sources/UI/AgentModeSettingsView+CommandPrefixes.swift
  • Sources/UI/AgentModeSettingsView+ToolsAndSafety.swift
  • Sources/UI/AppearanceSettingsView.swift
  • Sources/UI/ChatNamingPluginSettingsView.swift
  • Sources/UI/CloudflareR2UploadPluginSettingsView.swift
  • Sources/UI/DeepSeekOCRPluginSettingsView.swift
  • Sources/UI/FirecrawlOCRPluginSettingsView.swift
  • Sources/UI/MCPServerConfigFormSections.swift
  • Sources/UI/MinerUOCRPluginSettingsView.swift
  • Sources/UI/OpenRouterOCRPluginSettingsView.swift
  • Sources/UI/PluginAPIKeySettingsView.swift
  • Sources/UI/SettingsView.swift
  • Sources/UI/SpeechToTextPluginSettingsView+Actions.swift
  • Sources/UI/SpeechToTextPluginSettingsView+Providers.swift
  • Sources/UI/SpeechToTextPluginSettingsView.swift
  • Sources/UI/TextToSpeechPluginSettingsView+Credentials.swift
  • Sources/UI/TextToSpeechPluginSettingsView+Providers.swift
  • Sources/UI/TextToSpeechPluginSettingsView.swift
  • Sources/UI/UpdateSettingsView.swift
  • Sources/UI/WebSearchPluginSettingsChromeViews.swift
  • Sources/UI/WebSearchPluginSettingsView.swift

Comment on lines +111 to +120
var signupURL: URL? {
switch self {
case .exa: return URL(string: "https://dashboard.exa.ai/")
case .brave: return URL(string: "https://api-dashboard.search.brave.com/")
case .jina: return URL(string: "https://jina.ai/api-dashboard/")
case .firecrawl: return URL(string: "https://www.firecrawl.dev/")
case .tavily: return URL(string: "https://app.tavily.com/")
case .perplexity: return URL(string: "https://www.perplexity.ai/settings/api")
}
}
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Description: Check HTTP status of all signup URLs

urls=(
  "https://dashboard.exa.ai/"
  "https://api-dashboard.search.brave.com/"
  "https://jina.ai/api-dashboard/"
  "https://www.firecrawl.dev/"
  "https://app.tavily.com/"
  "https://www.perplexity.ai/settings/api"
)

for url in "${urls[@]}"; do
  status=$(curl -o /dev/null -s -w "%{http_code}" -L "$url")
  echo "$url -> HTTP $status"
done

Repository: hrayleung/Jin

Length of output: 316


Verify signup URLs for Exa and Perplexity; most other URLs are accessible.

Accessibility check reveals most provider signup URLs are reachable, but two need attention:

  • Exa dashboard (https://dashboard.exa.ai/) returns HTTP 429 (Rate Limited)
  • Perplexity settings (https://www.perplexity.ai/settings/api) returns HTTP 403 (Forbidden)

Confirm these are the correct signup/dashboard URLs, or update them if they should point elsewhere. The remaining URLs (Brave, Jina, Firecrawl, Tavily) are confirmed accessible.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Sources/Domain/WebSearchAndToolControls.swift` around lines 111 - 120, The
signupURL computed property contains potentially incorrect endpoints for the
.exa and .perplexity cases; verify the canonical dashboard/signup URLs and
replace "https://dashboard.exa.ai/" and "https://www.perplexity.ai/settings/api"
with the correct targets (or a documented help/support URL) inside the signupURL
switch branch for .exa and .perplexity in WebSearchAndToolControls so the links
no longer return 429/403; if no direct dashboard URL exists, point to the
provider’s public signup or account/settings landing page and add a short
comment above the .exa/.perplexity cases noting the reason for the chosen
fallback.

Comment thread Sources/UI/SettingsView.swift Outdated
hrayleung and others added 2 commits May 10, 2026 10:51
Resolve conflict in WebSearchPluginSettingsChromeViews.swift between
master's expanded provider settings (#321 — Exa Category, User location,
moderation; Jina Country/Locale; Firecrawl Country/Language and source
toggles; Tavily Country and auto-tune; Perplexity Country/Language) and
this branch's Apple-density cleanup.

Resolution keeps every new control while applying the same cleanup rules:
self-explanatory toggles ship without supportingText, and Optional X…
captions on country/language/locale fields are replaced with `e.g. US` /
`e.g. en` placeholders. Tavily's "applies on General topic only" gating
note and the auto-tune warning are kept as trimmed supportingText since
the behavior is non-obvious.

swift build and swift test (2258 tests, 0 failures) pass.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Deliver .settingsNavigateToPlugin on RunLoop.main so the SettingsView
  handler always mutates @State on the main thread (mirrors the existing
  pattern in TTSMiniPlayerView+Coordinator.swift). NotificationCenter
  publishers fire on the posting thread, so a future poster off-main
  would otherwise touch SwiftUI state on a background queue.
- Repoint the Perplexity sign-up Link from www.perplexity.ai/settings/api
  (auth-walled, returns 403 to unauthenticated visitors) to
  docs.perplexity.ai, which is reliably public-facing for users who do
  not yet have an account.

Skipped: Exa dashboard URL — `dashboard.exa.ai` is the canonical Exa
dashboard subdomain (referenced by Exa's own docs); the 429 the bot
saw is request rate limiting on its scraper, not a user-facing issue.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
Sources/UI/WebSearchPluginSettingsChromeViews.swift (1)

204-211: 💤 Low value

Reorder Tavily search-depth options along a single axis.

The current order Basic → Fast → Advanced → Ultra-fast doesn't follow speed nor quality monotonically, which forces the user to scan all four to compare. Reordering by speed (or by latency-vs-relevance per Tavily's own framing) makes the choice more legible. Tavily/langchain-tavily docs confirm all four tags are valid, so only the picker order is at issue here.

♻️ Suggested ordering (slowest/most-relevant → fastest)
     private var tavilySearchDepthRow: some View {
         JinSettingsPickerRow("Search depth", selection: $tavilySearchDepth) {
+            Text("Advanced").tag("advanced")
             Text("Basic").tag("basic")
-            Text("Fast").tag("fast")
-            Text("Advanced").tag("advanced")
-            Text("Ultra-fast").tag("ultra-fast")
+            Text("Fast").tag("fast")
+            Text("Ultra-fast").tag("ultra-fast")
         }
     }

Worth a quick check that Tavily's current search_depth enum still includes fast/ultra-fast (the public REST reference page primarily documents basic/advanced; the SDK references list all four). If the REST endpoint hasn't graduated fast/ultra-fast out of beta, you may want to gate them behind a comment or omit them.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Sources/UI/WebSearchPluginSettingsChromeViews.swift` around lines 204 - 211,
Reorder the picker items in tavilySearchDepthRow (the JinSettingsPickerRow bound
to $tavilySearchDepth) so options run slowest/most-relevant → fastest (e.g.,
"Basic".tag("basic"), "Advanced".tag("advanced"), "Fast".tag("fast"),
"Ultra-fast".tag("ultra-fast")); update the sequence in that closure and
optionally add a short comment above tavilySearchDepthRow noting to verify
Tavily's search_depth enum still supports "fast" and "ultra-fast" before
shipping.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@Sources/UI/WebSearchPluginSettingsChromeViews.swift`:
- Around line 204-211: Reorder the picker items in tavilySearchDepthRow (the
JinSettingsPickerRow bound to $tavilySearchDepth) so options run
slowest/most-relevant → fastest (e.g., "Basic".tag("basic"),
"Advanced".tag("advanced"), "Fast".tag("fast"), "Ultra-fast".tag("ultra-fast"));
update the sequence in that closure and optionally add a short comment above
tavilySearchDepthRow noting to verify Tavily's search_depth enum still supports
"fast" and "ultra-fast" before shipping.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: f06c5d2f-039b-42aa-a673-f8704e978969

📥 Commits

Reviewing files that changed from the base of the PR and between 3cc0202 and fb9ad7e.

📒 Files selected for processing (3)
  • Sources/Domain/WebSearchAndToolControls.swift
  • Sources/UI/WebSearchPluginSettingsChromeViews.swift
  • Sources/UI/WebSearchPluginSettingsView.swift
🚧 Files skipped from review as they are similar to previous changes (1)
  • Sources/Domain/WebSearchAndToolControls.swift

@hrayleung hrayleung merged commit 186af14 into master May 10, 2026
3 checks passed
@hrayleung hrayleung deleted the refactor/prompt-cleanup branch May 10, 2026 03:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant