/claim #1540 Fixes #1540
I am still trying to record a demo, currently unable to do that due to the error below when i run this command: pnpm tauri:build --debug; is there a specific node version that the repo recommends, only this commands fails, commands like pnpm dev:desktop works fine.
Error:
@cap/web-domain:build: import { styleText } from "node:util";
@cap/web-domain:build: ^^^^^^^^^
@cap/web-domain:build: SyntaxError: The requested module 'node:util' does not provide an export named 'styleText'
@cap/web-domain:build: at ModuleJob._instantiate (node:internal/modules/esm/module_job:122:21)
@cap/web-domain:build: at async ModuleJob.run (node:internal/modules/esm/module_job:188:5)
@cap/web-domain:build:
@cap/web-domain:build: Node.js v20.2.0
@cap/env:build: ELIFECYCLE Command failed with exit code 1.
@cap/web-domain:build: ELIFECYCLE Command failed with exit code 1.
@cap/env:build: ERROR: command finished with error: command (/Users/onyedikachi/Documents/codes/Cap/packages/env) /Users/onyedikachi/.nvm/versions/node/v20.2.0/bin/pnpm run build exited (1)
@cap/web-domain:build: ERROR: command finished with error: command (/Users/onyedikachi/Documents/codes/Cap/packages/web-domain) /Users/onyedikachi/.nvm/versions/node/v20.2.0/bin/pnpm run build exited (1)
@cap/env#build: command (/Users/onyedikachi/Documents/codes/Cap/packages/env) /Users/onyedikachi/.nvm/versions/node/v20.2.0/bin/pnpm run build exited (1)
@cap/web-domain#build: command (/Users/onyedikachi/Documents/codes/Cap/packages/web-domain) /Users/onyedikachi/.nvm/versions/node/v20.2.0/bin/pnpm run build exited (1)
Tasks: 0 successful, 2 total
Cached: 0 cached, 2 total
Time: 1.834s
Failed: @cap/env#build, @cap/web-domain#build
ERROR run failed: command exited (1)
beforeBuildCommand `pnpm turbo build --filter @cap/desktop` failed with exit code 1
Error [tauri_cli_node] beforeBuildCommand `pnpm turbo build --filter @cap/desktop` failed with exit code 1
ELIFECYCLE Command failed with exit code 1.
ELIFECYCLE Command failed with exit code 1.
Extends Cap’s deeplink API with 8 new actions for recording control and adds a functional Raycast extension for controlling Cap from Raycast.
Major Changes:
pause_recording, resume_recording, toggle_pause_recording, restart_recording, take_screenshot, set_microphone, set_camera, list_devices, get_statusresolve_capture_target() helperextensions/raycast/ with 8 commandsextensions/* to pnpm workspace configurationIssues Found:
GetStatus and ListDevices actions print JSON responses to stdout via CAP_DEEPLINK_RESPONSE: prefix, but the Raycast extension has no mechanism to capture this output since deeplinks are fire-and-forget URL scheme callsrecording-status command triggers the action but cannot display the actual status datapackage.json)GetStatus and ListDevices actions are incomplete as their responses cannot be received by the Raycast extension through the current deeplink architectureapps/desktop/src-tauri/src/deeplink_actions.rs (stdout response mechanism) and extensions/raycast/src/recording-status.tsx (incomplete implementation)| Filename | Overview |
|---|---|
| apps/desktop/src-tauri/src/deeplink_actions.rs | Adds 8 new deeplink actions (pause, resume, toggle pause, restart, screenshot, set microphone/camera, list devices, get status) with proper error handling and refactored capture target resolution |
| extensions/raycast/src/utils.ts | Utility functions for creating deeplink actions and checking Cap installation status |
| extensions/raycast/src/start-recording.tsx | Form-based command for starting recordings with screen/window selection and instant/studio mode |
| extensions/raycast/src/recording-status.tsx | Command that triggers GetStatus action but doesn’t receive or display the response data |
sequenceDiagram
participant R as Raycast Extension
participant OS as macOS URL Handler
participant C as Cap Desktop App
participant DR as Deeplink Router
participant RA as Recording Actions
Note over R,RA: Start Recording Flow
R->>R: User fills form (screen/window, mode)
R->>R: Create JSON action payload
R->>OS: Open cap-desktop://action?value=<encoded-json>
OS->>C: Route deeplink URL
C->>DR: handle(url)
DR->>DR: Parse URL & deserialize action
DR->>RA: execute(StartRecording)
RA->>RA: set_camera_input()
RA->>RA: set_mic_input()
RA->>RA: resolve_capture_target()
RA->>RA: start_recording()
R->>R: Show HUD "Starting recording..."
Note over R,RA: Control Recording Flow
R->>OS: Open cap-desktop://action?value={"pause_recording":{}}
OS->>C: Route deeplink
C->>DR: handle(url)
DR->>RA: execute(PauseRecording)
RA->>RA: pause_recording()
R->>R: Show HUD "Pausing recording..."
Note over R,RA: Query Status Flow (Current Issue)
R->>OS: Open cap-desktop://action?value={"get_status":{}}
OS->>C: Route deeplink
C->>DR: handle(url)
DR->>RA: execute(GetStatus)
RA->>RA: Read app state
RA->>RA: println!("CAP_DEEPLINK_RESPONSE:{json}")
Note over R,RA: Response printed to stdout but not captured by Raycast
R->>R: Show HUD (no actual status data)
Note over R,RA: Screenshot Flow
R->>R: User selects screen/window
R->>OS: Open cap-desktop://action?value={"take_screenshot":{...}}
OS->>C: Route deeplink
C->>DR: handle(url)
DR->>RA: execute(TakeScreenshot)
RA->>RA: resolve_capture_target()
RA->>RA: take_screenshot()
R->>R: Show HUD "Taking screenshot..."
David Anyatonwu
@onyedikachi-david
Cap
@CapSoftware