Skip to content

Conversation

@yujonglee
Copy link
Contributor

@yujonglee yujonglee commented Nov 27, 2025

Summary

Adds Intel macOS (x86_64-apple-darwin) support to the desktop application. Key changes:

  1. CI/CD Pipeline: Added build-macos-intel job that builds for x86_64 on macos-14 runner. The Intel build excludes Argmax SDK and AM STT sidecar (only available on Apple Silicon). Updated publish job to dynamically include Intel DMG in releases.

  2. STT UI: Uses arch() from @tauri-apps/plugin-os to detect CPU architecture at runtime. The STT model selector filters out AM models (am-parakeet-v2, am-parakeet-v3) on Intel Macs, showing only Whisper models (QuantizedTinyEn, QuantizedSmallEn) and cloud transcription.

  3. Download Pages: Created /download/apple-intel redirect page and enabled Intel Mac download option on the main download page.

  4. Changelog: Added platform-specific download buttons (Apple Silicon, Intel Mac, Linux) to changelog version pages.

Updates since last revision

  • Replaced custom get_target_arch Tauri command with arch() from @tauri-apps/plugin-os
  • Removed get_target_arch from misc plugin commands
  • Added @tauri-apps/plugin-os JavaScript package dependency

Review & Testing Checklist for Human

  • Verify arch detection works correctly: The arch() function should return "aarch64" on Apple Silicon and "x86_64" on Intel - confirm STT model filtering works as expected on both architectures
  • Test Intel build in CI: Trigger a staging build to verify the build-macos-intel job completes successfully before merging
  • Verify CrabNebula URL format: The Intel download redirect uses dmg-x86_64 - confirm this matches CrabNebula's expected format for x86_64 builds
  • Check changelog download buttons: Note that download buttons will 404 for versions released before this PR - consider if this is acceptable UX

Recommended test plan:

  1. Trigger a staging build via workflow dispatch to verify both macOS builds complete
  2. Download the Intel staging artifact and test on an Intel Mac
  3. Verify STT settings only show Whisper models (not AM models) on Intel

Notes

- Add build-macos-intel job to desktop_cd.yaml for x86_64-apple-darwin builds
- Update publish job to include Intel macOS DMG in GitHub releases
- Add get_target_arch command to misc plugin for platform detection
- Update STT select UI to filter AM models on Intel Macs (only show Whisper models)
- Add download buttons for each platform in changelog page
- Create apple-intel.tsx download redirect page
- Enable Intel macOS download option on download page

Co-Authored-By: yujonglee <yujonglee.dev@gmail.com>
@devin-ai-integration
Copy link
Contributor

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR that start with 'DevinAI' or '@devin'.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment and CI monitoring

@netlify
Copy link

netlify bot commented Nov 27, 2025

Deploy Preview for hyprnote-storybook ready!

Name Link
🔨 Latest commit c4f3caa
🔍 Latest deploy log https://app.netlify.com/projects/hyprnote-storybook/deploys/6927c259b9ffbc0008d667d3
😎 Deploy Preview https://deploy-preview-1933--hyprnote-storybook.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@netlify
Copy link

netlify bot commented Nov 27, 2025

Deploy Preview for hyprnote ready!

Name Link
🔨 Latest commit c4f3caa
🔍 Latest deploy log https://app.netlify.com/projects/hyprnote/deploys/6927c259975167000883e81d
😎 Deploy Preview https://deploy-preview-1933--hyprnote.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 27, 2025

📝 Walkthrough

Walkthrough

This PR implements multi-architecture macOS support by adding a matrix-based CI/CD workflow for aarch64 and x86_64 builds with per-architecture artifact naming, architecture-aware model selection in the desktop app using OS detection, and platform-specific download routes and UI components for macOS variants.

Changes

Cohort / File(s) Summary
CI/CD Multi-Architecture Workflow
.github/workflows/desktop_cd.yaml
Introduces matrix-based multi-architecture macOS builds (aarch64-silicon, x86_64-intel) with per-arch artifact naming, conditional build steps, and dynamic artifact computation for release uploads.
Desktop App Architecture Detection
apps/desktop/package.json, apps/desktop/src/components/settings/ai/stt/select.tsx
Adds @tauri-apps/plugin-os dependency and uses OS architecture detection to conditionally load Apple Silicon-specific speech recognition models (am-parakeet-v2 and am-parakeet-v3).
Web Download Routing
apps/web/src/routes/_view/download/apple-intel.tsx, apps/web/src/routes/_view/download/index.tsx
Creates new Intel Mac download redirect route and enables Intel Mac download option on main download page with updated platform availability messaging.
Web Changelog Download UI
apps/web/src/routes/_view/changelog/$slug.tsx
Adds DownloadButtons component rendering platform-specific download links (Apple Silicon, Intel Mac, Linux) integrated into the changelog hero section.
Minor Cleanup
apps/desktop/src/components/main/sidebar/search/index.tsx
Removes unused cn utility import.

Sequence Diagram

sequenceDiagram
    participant Desktop App
    participant OS Plugin
    participant Model Service
    
    Desktop App->>OS Plugin: arch()
    OS Plugin-->>Desktop App: "aarch64" or other
    Desktop App->>Desktop App: Derive isAppleSilicon
    
    alt isAppleSilicon == true
        Desktop App->>Model Service: Load [cloud, QuantizedTinyEn, QuantizedSmallEn, am-parakeet-v2, am-parakeet-v3]
    else
        Desktop App->>Model Service: Load [cloud, QuantizedTinyEn, QuantizedSmallEn]
    end
    
    Model Service-->>Desktop App: Models array
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • CI/CD workflow matrix configuration: Verify matrix.include_am, matrix.target, and matrix.artifact_name logic; validate per-arch artifact paths and naming consistency
  • Architecture detection logic: Confirm useQuery hook initialization with correct staleTime and arch() function integration; validate isAppleSilicon derived flag and conditional model appending
  • Download URL patterns: Verify redirect URL format (dmg-x86_64?channel=nightly) and route parameter passing consistency across new download routes
  • Dynamic artifact computation: Review GitHub release action input and comma-separated artifact list generation for multi-arch uploads

Possibly related PRs

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 66.67% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title 'feat: add Intel macOS (x86_64) support' directly and clearly describes the main objective of the PR, which is adding Intel macOS support as evidenced by all the related changes across CI/CD, STT UI, download pages, and changelog.
Description check ✅ Passed The description is comprehensive and directly related to the changeset, providing clear explanations of modifications across CI/CD, STT UI, downloads, and changelog with specific technical details about the implementation.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch devin/1764207651-intel-macos-support

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 938622a and c4f3caa.

⛔ Files ignored due to path filters (1)
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (3)
  • .github/workflows/desktop_cd.yaml (8 hunks)
  • apps/desktop/package.json (1 hunks)
  • apps/desktop/src/components/settings/ai/stt/select.tsx (3 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/desktop/src/components/settings/ai/stt/select.tsx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (11)
  • GitHub Check: Redirect rules - hyprnote-storybook
  • GitHub Check: Header rules - hyprnote-storybook
  • GitHub Check: Pages changed - hyprnote-storybook
  • GitHub Check: Redirect rules - hyprnote
  • GitHub Check: Header rules - hyprnote
  • GitHub Check: Pages changed - hyprnote
  • GitHub Check: ci (macos, macos-14)
  • GitHub Check: ci (linux, depot-ubuntu-24.04-8)
  • GitHub Check: ci (macos, depot-macos-14)
  • GitHub Check: ci (linux, depot-ubuntu-22.04-8)
  • GitHub Check: fmt
🔇 Additional comments (12)
.github/workflows/desktop_cd.yaml (11)

69-81: Matrix strategy cleanly separates per-architecture configurations.

The matrix setup correctly gates AM SDK setup and model selection by architecture. The separation is clear: silicon builds include AM models and API key, while Intel builds exclude them.


98-102: AM SDK setup correctly gated to silicon builds only.

The conditional prevents Intel builds from attempting Argmax SDK setup, which is appropriate since AM models are Apple Silicon–only.


103-114: STT sidecar conditionally downloaded and configured based on architecture.

Both the download (line 103) and chmod/sidecar setup (line 111) are correctly gated to silicon builds, with matrix.target ensuring the correct binary path is used.


131-131: AM_API_KEY correctly set only for silicon builds.

The conditional assignment ${{ matrix.include_am && secrets.AM_API_KEY || '' }} ensures the API key is only provided to silicon builds, aligning with the PR objective that Intel builds do not include this variable.


127-127: Build targets correctly specified via matrix variable.

The tauri build command uses ${{ matrix.target }} to build the appropriate architecture, ensuring each job produces the correct binary.


148-152: Artifact copy uses matrix-aware target directory path.

The find command correctly searches in the per-architecture target directory (target/${{ matrix.target }}/release), ensuring artifacts from the correct build are collected.


163-172: S3 artifact upload uses consistent per-architecture naming.

DMG files are named using matrix.arch (aarch64 or x86_64) and uploaded to versioned S3 paths, enabling the publish job to download both variants.


173-178: Staging artifacts named with user-friendly architecture labels.

Staging builds upload artifacts with matrix.artifact_name (silicon/intel) for clarity, while the path correctly references the per-arch build output using matrix.target.


278-302: Multi-architecture publish requires both builds to succeed.

The conditional if: ${{ needs.build-macos.result == 'success' }} gates both Silicon and Intel DMG downloads. With the matrix strategy and fail-fast: false, this means the publish job will fail if either architecture build fails. This is an atomic approach (both artifacts or no release), which may be intentional for consistency but prevents partial releases.

Confirm whether partial-release scenarios (e.g., Silicon succeeds but Intel fails) should be supported in future iterations. If so, separate per-architecture conditions will be needed.


308-325: Artifact collection gracefully handles variable build configurations.

The logic correctly builds a comma-separated list based on which build jobs succeeded, avoids malformed comma sequences, and fails explicitly if no artifacts are available. The guard at line 321-324 prevents silent release attempts with empty artifacts.


326-331: Release action correctly references computed artifact list.

The artifacts parameter uses the dynamically built list from the artifact collection step, enabling the release to include all available builds.

apps/desktop/package.json (1)

70-70: No issues found with the @tauri-apps/plugin-os dependency.

Version 2.3.2 exists and is the latest available release on npm. The caret constraint (^2.3.2) is appropriate for plugin dependencies and aligns correctly with other @tauri-apps v2.x packages like @tauri-apps/api (^2.9.0). The dependency addition is valid and compatible.


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

@argos-ci
Copy link

argos-ci bot commented Nov 27, 2025

The latest updates on your projects. Learn more about Argos notifications ↗︎

Build Status Details Updated (UTC)
web (Inspect) ⚠️ Changes detected (Review) 1 changed Nov 27, 2025, 3:17 AM

Copy link
Contributor

@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: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/web/src/routes/_view/download/index.tsx (1)

153-159: FAQ may need updating for Intel Mac.

The FAQ states "macOS Intel and Windows are planned for January 2026", but Intel Mac is now available. Consider updating this answer to reflect current availability.

     {
       question: "Which platforms are currently supported?",
       answer:
-        "macOS 14.2+ with Apple Silicon is currently available. macOS Intel and Windows are planned for January 2026, Linux for February 2026, and iOS/Android for April 2026. Please note that these dates are subject to change and may be delayed.",
+        "macOS 14.2+ with Apple Silicon and Intel are currently available. Windows is planned for January 2026, Linux for February 2026, and iOS/Android for April 2026. Please note that these dates are subject to change and may be delayed.",
     },
🧹 Nitpick comments (2)
.github/workflows/desktop_cd.yaml (1)

166-253: Intel build intentionally excludes local STT binaries.

The Intel build omits the argmax SDK setup and STT sidecar binary download that are present in the Silicon build. This is consistent with the web UI stating "Intel Mac available with cloud-based transcription" — Intel users will use cloud STT only.

However, this should be documented to prevent future confusion:

Consider adding a comment clarifying this intentional difference:

  build-macos-intel:
    needs: [compute-version, cn-draft]
    if: ${{ !cancelled() && (needs.cn-draft.result == 'success' || needs.cn-draft.result == 'skipped') }}
+   # Note: Intel build excludes local STT models - uses cloud transcription only
    permissions:
      contents: write
    runs-on: macos-13
apps/desktop/src/components/settings/ai/stt/select.tsx (1)

231-238: Consider skipping parakeet queries on Intel.

The code queries isDownloaded for am-parakeet-v2 and am-parakeet-v3 (lines 233-234) even on Intel where they'll never be used. This is a minor inefficiency.

You could conditionally skip these queries:

- const [p2, p3, tinyEn, smallEn] = useQueries({
-   queries: [
-     sttModelQueries.isDownloaded("am-parakeet-v2"),
-     sttModelQueries.isDownloaded("am-parakeet-v3"),
-     sttModelQueries.isDownloaded("QuantizedTinyEn"),
-     sttModelQueries.isDownloaded("QuantizedSmallEn"),
-   ],
- });
+ const [p2, p3, tinyEn, smallEn] = useQueries({
+   queries: [
+     { ...sttModelQueries.isDownloaded("am-parakeet-v2"), enabled: isAppleSilicon },
+     { ...sttModelQueries.isDownloaded("am-parakeet-v3"), enabled: isAppleSilicon },
+     sttModelQueries.isDownloaded("QuantizedTinyEn"),
+     sttModelQueries.isDownloaded("QuantizedSmallEn"),
+   ],
+ });

Note: This requires targetArch query to resolve first. Current approach is simpler and the overhead is negligible, so this is optional.

Also applies to: 247-258

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 21777ff and 70ca13e.

⛔ Files ignored due to path filters (1)
  • plugins/misc/js/bindings.gen.ts is excluded by !**/*.gen.ts
📒 Files selected for processing (7)
  • .github/workflows/desktop_cd.yaml (6 hunks)
  • apps/desktop/src/components/settings/ai/stt/select.tsx (3 hunks)
  • apps/web/src/routes/_view/changelog/$slug.tsx (1 hunks)
  • apps/web/src/routes/_view/download/apple-intel.tsx (1 hunks)
  • apps/web/src/routes/_view/download/index.tsx (2 hunks)
  • plugins/misc/src/commands.rs (1 hunks)
  • plugins/misc/src/lib.rs (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{ts,tsx}: Avoid creating a bunch of types/interfaces if they are not shared. Especially for function props, just inline them instead.
Never do manual state management for form/mutation. Use useForm (from tanstack-form) and useQuery/useMutation (from tanstack-query) instead for 99% of cases. Avoid patterns like setError.
If there are many classNames with conditional logic, use cn (import from @hypr/utils). It is similar to clsx. Always pass an array and split by logical grouping.
Use motion/react instead of framer-motion.

Files:

  • apps/web/src/routes/_view/download/index.tsx
  • apps/web/src/routes/_view/download/apple-intel.tsx
  • apps/desktop/src/components/settings/ai/stt/select.tsx
  • apps/web/src/routes/_view/changelog/$slug.tsx
🧠 Learnings (2)
📚 Learning: 2025-11-24T16:32:23.055Z
Learnt from: CR
Repo: fastrepl/hyprnote PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-24T16:32:23.055Z
Learning: Applies to **/*.{ts,tsx} : Never do manual state management for form/mutation. Use useForm (from tanstack-form) and useQuery/useMutation (from tanstack-query) instead for 99% of cases. Avoid patterns like setError.

Applied to files:

  • apps/desktop/src/components/settings/ai/stt/select.tsx
📚 Learning: 2025-11-24T16:32:19.706Z
Learnt from: CR
Repo: fastrepl/hyprnote PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-24T16:32:19.706Z
Learning: Applies to **/*.{ts,tsx} : Never do manual state management for form/mutation. Use useForm (from tanstack-form) and useQuery/useMutation (from tanstack-query) for 99% of cases instead of setError and similar patterns.

Applied to files:

  • apps/desktop/src/components/settings/ai/stt/select.tsx
🧬 Code graph analysis (2)
apps/web/src/routes/_view/changelog/$slug.tsx (1)
apps/storybook/stories/Button.stories.tsx (1)
  • Icon (72-77)
plugins/misc/src/lib.rs (1)
plugins/misc/src/commands.rs (1)
  • get_target_arch (18-20)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
  • GitHub Check: Redirect rules - hyprnote
  • GitHub Check: Header rules - hyprnote
  • GitHub Check: Pages changed - hyprnote
  • GitHub Check: fmt
  • GitHub Check: ci (macos, macos-14)
🔇 Additional comments (8)
plugins/misc/src/commands.rs (1)

16-20: LGTM!

Clean implementation using std::env::consts::ARCH for compile-time architecture detection. This correctly returns the target architecture the binary was compiled for, which is the appropriate choice for determining which STT models to offer.

apps/web/src/routes/_view/changelog/$slug.tsx (1)

127-155: LGTM!

Clean component that constructs versioned download URLs for each platform. The URL patterns (hyprnote-macos-aarch64.dmg, hyprnote-macos-x86_64.dmg, hyprnote-linux-x86_64.AppImage) correctly align with the artifact names in the CI workflow.

plugins/misc/src/lib.rs (1)

13-17: LGTM!

The command is correctly registered without the ::<tauri::Wry> type parameter since get_target_arch doesn't require a Runtime generic (it doesn't use AppHandle). This is consistent with its implementation in commands.rs.

apps/web/src/routes/_view/download/index.tsx (2)

29-33: LGTM!

The updated banner clearly communicates the feature difference between Apple Silicon (on-device STT) and Intel Mac (cloud-based transcription).


58-63: Intel Mac download is now available.

The card correctly links to /download/apple-intel which will redirect to the external download URL.

apps/desktop/src/components/settings/ai/stt/select.tsx (2)

223-229: LGTM!

Good use of useQuery with staleTime: Infinity for architecture detection — the value won't change during the app's lifetime. The isAppleSilicon derivation correctly identifies Apple Silicon via aarch64.


247-265: Model list construction is correct.

The logic correctly builds the base model list (cloud, QuantizedTinyEn, QuantizedSmallEn) and only adds the parakeet models when on Apple Silicon. This ensures Intel users only see cloud and quantized options.

apps/web/src/routes/_view/download/apple-intel.tsx (1)

1-9: Consistency confirmed between Apple Intel and Apple Silicon routes.

Both apple-intel.tsx and apple-silicon.tsx follow the identical redirect pattern with the channel=nightly parameter hardcoded consistently. The only difference is the architecture identifier (dmg-x86_64 vs dmg-aarch64), which is intentional. No inconsistency exists.

devin-ai-integration bot and others added 2 commits November 27, 2025 02:00
…main)

Co-Authored-By: yujonglee <yujonglee.dev@gmail.com>
Co-Authored-By: yujonglee <yujonglee.dev@gmail.com>
Copy link
Contributor

@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: 0

🧹 Nitpick comments (2)
apps/desktop/src/components/settings/ai/stt/select.tsx (2)

2-4: Arch detection query looks good; please confirm the 'aarch64' contract and consider normalizing it

The useQuery wiring and staleTime: Infinity are appropriate for a static CPU architecture, and importing miscCommands here makes sense. The only fragile bit is the hard-coded comparison against "aarch64":

const isAppleSilicon = targetArch.data === "aarch64";

If miscCommands.getTargetArch() ever returns "arm64" or a full triple (e.g. "aarch64-apple-darwin"), Apple Silicon will be treated as non‑AppleSilicon and AM models will never show up.

It would be safer to either normalize the value in the misc plugin (e.g. return a small enum/union like "apple-silicon" | "intel") or broaden the predicate here to accept all known Apple Silicon identifiers.

Also applies to: 223-229


231-238: Hyprnote model mapping matches the arch requirements; optionally gate AM download queries on isAppleSilicon

The new hyprnote models list correctly:

  • Always includes cloud + Whisper (QuantizedTinyEn, QuantizedSmallEn).
  • Only appends am-parakeet-v2/v3 on Apple Silicon via isAppleSilicon.
  • Uses billing.isPro to enable/disable the cloud option and download flags for the rest.

This achieves the Intel‑only Whisper set without exposing AM models on x86_64.

One small improvement: AM download checks still run on Intel even though the results are never used. You can avoid unnecessary work by gating those two queries:

-  const [p2, p3, tinyEn, smallEn] = useQueries({
-    queries: [
-      sttModelQueries.isDownloaded("am-parakeet-v2"),
-      sttModelQueries.isDownloaded("am-parakeet-v3"),
-      sttModelQueries.isDownloaded("QuantizedTinyEn"),
-      sttModelQueries.isDownloaded("QuantizedSmallEn"),
-    ],
-  });
+  const [p2, p3, tinyEn, smallEn] = useQueries({
+    queries: [
+      {
+        ...sttModelQueries.isDownloaded("am-parakeet-v2"),
+        enabled: isAppleSilicon,
+      },
+      {
+        ...sttModelQueries.isDownloaded("am-parakeet-v3"),
+        enabled: isAppleSilicon,
+      },
+      sttModelQueries.isDownloaded("QuantizedTinyEn"),
+      sttModelQueries.isDownloaded("QuantizedSmallEn"),
+    ],
+  });

Behavior stays the same, but AM queries won’t touch disk/FS on Intel.

Also applies to: 247-258, 264-264

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 70ca13e and ac360ff.

📒 Files selected for processing (2)
  • apps/desktop/src/components/main/sidebar/search/index.tsx (0 hunks)
  • apps/desktop/src/components/settings/ai/stt/select.tsx (3 hunks)
💤 Files with no reviewable changes (1)
  • apps/desktop/src/components/main/sidebar/search/index.tsx
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{ts,tsx}: Avoid creating a bunch of types/interfaces if they are not shared. Especially for function props, just inline them instead.
Never do manual state management for form/mutation. Use useForm (from tanstack-form) and useQuery/useMutation (from tanstack-query) instead for 99% of cases. Avoid patterns like setError.
If there are many classNames with conditional logic, use cn (import from @hypr/utils). It is similar to clsx. Always pass an array and split by logical grouping.
Use motion/react instead of framer-motion.

Files:

  • apps/desktop/src/components/settings/ai/stt/select.tsx
🧠 Learnings (2)
📚 Learning: 2025-11-24T16:32:23.055Z
Learnt from: CR
Repo: fastrepl/hyprnote PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-24T16:32:23.055Z
Learning: Applies to **/*.{ts,tsx} : Never do manual state management for form/mutation. Use useForm (from tanstack-form) and useQuery/useMutation (from tanstack-query) instead for 99% of cases. Avoid patterns like setError.

Applied to files:

  • apps/desktop/src/components/settings/ai/stt/select.tsx
📚 Learning: 2025-11-24T16:32:19.706Z
Learnt from: CR
Repo: fastrepl/hyprnote PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-11-24T16:32:19.706Z
Learning: Applies to **/*.{ts,tsx} : Never do manual state management for form/mutation. Use useForm (from tanstack-form) and useQuery/useMutation (from tanstack-query) for 99% of cases instead of setError and similar patterns.

Applied to files:

  • apps/desktop/src/components/settings/ai/stt/select.tsx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (11)
  • GitHub Check: Redirect rules - hyprnote-storybook
  • GitHub Check: Redirect rules - hyprnote
  • GitHub Check: Header rules - hyprnote-storybook
  • GitHub Check: Header rules - hyprnote
  • GitHub Check: Pages changed - hyprnote-storybook
  • GitHub Check: Pages changed - hyprnote
  • GitHub Check: ci (linux, depot-ubuntu-24.04-8)
  • GitHub Check: ci (macos, depot-macos-14)
  • GitHub Check: ci (linux, depot-ubuntu-22.04-8)
  • GitHub Check: ci (macos, macos-14)
  • GitHub Check: fmt

Co-Authored-By: yujonglee <yujonglee.dev@gmail.com>
@devin-ai-integration
Copy link
Contributor

Devin is archived and cannot be woken up. Please unarchive Devin if you want to continue using it.

devin-ai-integration bot and others added 2 commits November 27, 2025 02:20
- Replace custom get_target_arch command with @tauri-apps/plugin-os arch()
- Remove get_target_arch from misc plugin commands
- Add @tauri-apps/plugin-os JavaScript package dependency

Co-Authored-By: yujonglee <yujonglee.dev@gmail.com>
- Combine build-macos-silicon and build-macos-intel into single build-macos job with matrix
- Use conditional steps for AM-specific setup (argmax SDK, sidecar download)
- Update publish job to reference unified build-macos job
- Regenerate misc plugin bindings (removed getTargetArch)

Co-Authored-By: yujonglee <yujonglee.dev@gmail.com>
@yujonglee yujonglee merged commit d0be4ff into main Nov 27, 2025
14 of 15 checks passed
@yujonglee yujonglee deleted the devin/1764207651-intel-macos-support branch November 27, 2025 03:27
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