Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
112 changes: 56 additions & 56 deletions .claude/settings.local.json
Original file line number Diff line number Diff line change
@@ -1,58 +1,58 @@
{
"permissions": {
"allow": [
"Bash(pnpm typecheck:*)",
"Bash(pnpm lint:*)",
"Bash(pnpm build:*)",
"Bash(cargo check:*)",
"Bash(cargo fmt:*)",
"Bash(pnpm format:*)",
"Bash(pnpm exec biome check:*)",
"Bash(grep:*)",
"Bash(cargo metadata:*)",
"Bash(ffprobe:*)",
"Bash(ls:*)",
"Bash(find:*)",
"Bash(cat:*)",
"WebFetch(domain:raw.githubusercontent.com)",
"WebFetch(domain:api.github.com)",
"Bash(cargo doc:*)",
"Bash(cargo clippy:*)",
"Bash(python3:*)",
"Bash(cargo run:*)",
"WebSearch",
"Bash(xargs ls:*)",
"WebFetch(domain:ffmpeg.org)",
"Bash(git log:*)",
"Bash(tree:*)",
"Bash(tail:*)",
"Bash(pnpm typecheck:desktop:*)",
"Bash(pnpm exec tsc:*)",
"Bash(pnpm biome check:*)",
"Bash(pnpm --dir apps/desktop exec tsc:*)",
"Bash(xxd:*)",
"Bash(git checkout:*)",
"WebFetch(domain:www.npmjs.com)",
"Bash(pnpm install:*)",
"Bash(pnpm --dir apps/desktop exec biome check:*)",
"Bash(pnpm --dir apps/desktop exec biome format:*)",
"Bash(echo:*)",
"Bash(pnpm exec biome:*)",
"Bash(rustfmt:*)",
"Bash(cargo tree:*)",
"WebFetch(domain:github.com)",
"WebFetch(domain:docs.rs)",
"WebFetch(domain:gix.github.io)",
"Bash(cargo clean:*)",
"Bash(cargo test:*)",
"Bash(powershell -Command \"[System.Environment]::OSVersion.Version.ToString()\")",
"Bash(cargo build:*)",
"Bash(gh api:*)",
"Bash(curl:*)",
"Bash(node -e:*)",
"Bash(findstr:*)"
],
"deny": [],
"ask": []
}
"permissions": {
"allow": [
"Bash(pnpm typecheck:*)",
"Bash(pnpm lint:*)",
"Bash(pnpm build:*)",
"Bash(cargo check:*)",
"Bash(cargo fmt:*)",
"Bash(pnpm format:*)",
"Bash(pnpm exec biome check:*)",
"Bash(grep:*)",
"Bash(cargo metadata:*)",
"Bash(ffprobe:*)",
"Bash(ls:*)",
"Bash(find:*)",
"Bash(cat:*)",
"WebFetch(domain:raw.githubusercontent.com)",
"WebFetch(domain:api.github.com)",
"Bash(cargo doc:*)",
"Bash(cargo clippy:*)",
"Bash(python3:*)",
"Bash(cargo run:*)",
"WebSearch",
"Bash(xargs ls:*)",
"WebFetch(domain:ffmpeg.org)",
"Bash(git log:*)",
"Bash(tree:*)",
"Bash(tail:*)",
"Bash(pnpm typecheck:desktop:*)",
"Bash(pnpm exec tsc:*)",
"Bash(pnpm biome check:*)",
"Bash(pnpm --dir apps/desktop exec tsc:*)",
"Bash(xxd:*)",
"Bash(git checkout:*)",
"WebFetch(domain:www.npmjs.com)",
"Bash(pnpm install:*)",
"Bash(pnpm --dir apps/desktop exec biome check:*)",
"Bash(pnpm --dir apps/desktop exec biome format:*)",
"Bash(echo:*)",
"Bash(pnpm exec biome:*)",
"Bash(rustfmt:*)",
"Bash(cargo tree:*)",
"WebFetch(domain:github.com)",
"WebFetch(domain:docs.rs)",
"WebFetch(domain:gix.github.io)",
"Bash(ffmpeg:*)",
"Bash(DYLD_LIBRARY_PATH=/opt/homebrew/lib:$DYLD_LIBRARY_PATH ./target/release/examples/memory-leak-detector:*)",
"Bash(ln:*)",
"Bash(./target/release/examples/memory-leak-detector:*)",
"Bash(cargo build:*)",
"Bash(footprint:*)",
"Bash(RUST_LOG=info,cap_recording=debug ./target/release/examples/memory-leak-detector:*)",
"Bash(git rm:*)"
],
"deny": [],
"ask": []
}
}
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,4 @@ tauri.windows.conf.json
.cursor
.env*.local
.docs/
.claude/
32 changes: 4 additions & 28 deletions apps/desktop/src/routes/(window-chrome)/settings/feedback.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,7 @@ export default function FeedbackTab() {
>
{(diag) => (
<div class="space-y-3 text-sm">
<Show when={diag().windowsVersion}>
<Show when={diag().macosVersion}>
{(ver) => (
<div class="space-y-1">
<p class="text-gray-11 font-medium">Operating System</p>
Expand All @@ -143,45 +143,21 @@ export default function FeedbackTab() {
)}
</Show>

<Show when={diag().gpuInfo}>
{(gpu) => (
<div class="space-y-1">
<p class="text-gray-11 font-medium">Graphics</p>
<p class="text-gray-10 bg-gray-2 px-2 py-1.5 rounded font-mono text-xs">
{gpu().description} ({gpu().vendor},{" "}
{gpu().dedicatedVideoMemoryMb} MB VRAM)
</p>
</div>
)}
</Show>

<div class="space-y-1">
<p class="text-gray-11 font-medium">Capture Support</p>
<div class="flex gap-2 flex-wrap">
<span
class={`px-2 py-1 rounded text-xs ${
diag().graphicsCaptureSupported
diag().screenCaptureSupported
? "bg-green-500/20 text-green-400"
: "bg-red-500/20 text-red-400"
}`}
>
Graphics Capture:{" "}
{diag().graphicsCaptureSupported
Screen Capture:{" "}
{diag().screenCaptureSupported
? "Supported"
: "Not Supported"}
</span>
<span
class={`px-2 py-1 rounded text-xs ${
diag().d3D11VideoProcessorAvailable
? "bg-green-500/20 text-green-400"
: "bg-yellow-500/20 text-yellow-400"
}`}
>
D3D11 Video:{" "}
{diag().d3D11VideoProcessorAvailable
? "Available"
: "Unavailable"}
</span>
</div>
</div>

Expand Down
7 changes: 2 additions & 5 deletions apps/desktop/src/utils/tauri.ts
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,6 @@ uploadProgressEvent: "upload-progress-event"

/** user-defined types **/

export type AllGpusInfo = { gpus: GpuInfoDiag[]; primaryGpuIndex: number | null; isMultiGpuSystem: boolean; hasDiscreteGpu: boolean }
export type Annotation = { id: string; type: AnnotationType; x: number; y: number; width: number; height: number; strokeColor: string; strokeWidth: number; fillColor: string; opacity: number; rotation: number; text: string | null; maskType?: MaskType | null; maskLevel?: number | null }
export type AnnotationType = "arrow" | "circle" | "rectangle" | "text" | "mask"
export type AppTheme = "system" | "light" | "dark"
Expand Down Expand Up @@ -424,7 +423,6 @@ quality: number | null;
* Whether to prioritize speed over quality (default: false)
*/
fast: boolean | null }
export type GpuInfoDiag = { vendor: string; description: string; dedicatedVideoMemoryMb: number; adapterIndex: number; isSoftwareAdapter: boolean; isBasicRenderDriver: boolean; supportsHardwareEncoding: boolean }
export type HapticPattern = "alignment" | "levelChange" | "generic"
export type HapticPerformanceTime = "default" | "now" | "drawCompleted"
export type Hotkey = { code: string; meta: boolean; ctrl: boolean; alt: boolean; shift: boolean }
Expand All @@ -437,6 +435,7 @@ export type JsonValue<T> = [T]
export type LogicalBounds = { position: LogicalPosition; size: LogicalSize }
export type LogicalPosition = { x: number; y: number }
export type LogicalSize = { width: number; height: number }
export type MacOSVersionInfo = { displayName: string }
export type MainWindowRecordingStartBehaviour = "close" | "minimise"
export type MaskKeyframes = { position?: MaskVectorKeyframe[]; size?: MaskVectorKeyframe[]; intensity?: MaskScalarKeyframe[] }
export type MaskKind = "sensitive" | "highlight"
Expand Down Expand Up @@ -479,7 +478,6 @@ export type RecordingStatus = "pending" | "recording"
export type RecordingStopped = null
export type RecordingTargetMode = "display" | "window" | "area"
export type RenderFrameEvent = { frame_number: number; fps: number; resolution_base: XY<number> }
export type RenderingStatus = { isUsingSoftwareRendering: boolean; isUsingBasicRenderDriver: boolean; hardwareEncodingAvailable: boolean; warningMessage: string | null }
export type RequestOpenRecordingPicker = { target_mode: RecordingTargetMode | null }
export type RequestOpenSettings = { page: string }
export type RequestScreenCapturePrewarm = { force?: boolean }
Expand All @@ -500,7 +498,7 @@ export type StartRecordingInputs = { capture_target: ScreenCaptureTarget; captur
export type StereoMode = "stereo" | "monoL" | "monoR"
export type StudioRecordingMeta = { segment: SingleSegment } | { inner: MultipleSegments }
export type StudioRecordingStatus = { status: "InProgress" } | { status: "NeedsRemux" } | { status: "Failed"; error: string } | { status: "Complete" }
export type SystemDiagnostics = { windowsVersion: WindowsVersionInfo | null; gpuInfo: GpuInfoDiag | null; allGpus: AllGpusInfo | null; renderingStatus: RenderingStatus; availableEncoders: string[]; graphicsCaptureSupported: boolean; d3D11VideoProcessorAvailable: boolean }
export type SystemDiagnostics = { macosVersion: MacOSVersionInfo | null; availableEncoders: string[]; screenCaptureSupported: boolean }
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Breaking change in SystemDiagnostics type requires verification.

The SystemDiagnostics type has been completely restructured from Windows/GPU-centric diagnostics to macOS-centric diagnostics. This breaking change removes several fields (e.g., windowsVersion, gpuInfo, allGpus, renderingStatus, graphicsCaptureSupported, d3D11VideoProcessorAvailable) and introduces new macOS-specific fields (macosVersion, screenCaptureSupported).

Ensure that all TypeScript consumers of this type have been updated to reference the new field names and structure.

#!/bin/bash

# Search for usages of removed SystemDiagnostics fields
echo "=== Searching for removed SystemDiagnostics fields ==="
rg -n --type=ts --type=tsx -C3 '\b(windowsVersion|gpuInfo|allGpus|renderingStatus|graphicsCaptureSupported|d3D11VideoProcessorAvailable)\b'

echo ""
echo "=== Searching for SystemDiagnostics type usage ==="
rg -n --type=ts --type=tsx -C3 'SystemDiagnostics'
🤖 Prompt for AI Agents
In apps/desktop/src/utils/tauri.ts around line 501, the SystemDiagnostics type
was changed from a Windows/GPU-centric shape to a macOS-centric shape (removed
fields: windowsVersion, gpuInfo, allGpus, renderingStatus,
graphicsCaptureSupported, d3D11VideoProcessorAvailable; added macosVersion,
screenCaptureSupported), which is a breaking change; locate all TypeScript
usages (run the provided ripgrep commands), update each consumer to use the new
field names or accessors, or restore a compatibility union/interface or mapping
function that populates the old fields from the new diagnostics where
appropriate, and add unit/type tests to confirm no remaining references to
removed fields remain and compilation succeeds.

export type TargetUnderCursor = { display_id: DisplayId | null; window: WindowUnderCursor | null }
export type TextSegment = { start: number; end: number; enabled?: boolean; content?: string; center?: XY<number>; size?: XY<number>; fontFamily?: string; fontSize?: number; fontWeight?: number; italic?: boolean; color?: string; fadeDuration?: number }
export type TimelineConfiguration = { segments: TimelineSegment[]; zoomSegments: ZoomSegment[]; sceneSegments?: SceneSegment[]; maskSegments?: MaskSegment[]; textSegments?: TextSegment[] }
Expand All @@ -517,7 +515,6 @@ export type VideoUploadInfo = { id: string; link: string; config: S3UploadMeta }
export type WindowExclusion = { bundleIdentifier?: string | null; ownerName?: string | null; windowTitle?: string | null }
export type WindowId = string
export type WindowUnderCursor = { id: WindowId; app_name: string; bounds: LogicalBounds }
export type WindowsVersionInfo = { major: number; minor: number; build: number; displayName: string; meetsRequirements: boolean; isWindows11: boolean }
export type XY<T> = { x: T; y: T }
export type ZoomMode = "auto" | { manual: { x: number; y: number } }
export type ZoomSegment = { start: number; end: number; amount: number; mode: ZoomMode }
Expand Down
Loading