.github/workflows/ci.yml | 14 +- .github/workflows/release.yml | 13 +- apps/desktop/gnome-extension/bundle.json | 10 + apps/desktop/gnome-extension/captureFeedback.js | 168 ++ apps/desktop/gnome-extension/captureFeedback.test.js | 186 ++ apps/desktop/gnome-extension/captureService.js | 63 + apps/desktop/gnome-extension/captureService.test.js | 148 ++ apps/desktop/gnome-extension/extension.js | 192 ++ apps/desktop/gnome-extension/feedbackGeometry.js | 28 + apps/desktop/gnome-extension/feedbackGeometry.test.js | 34 + apps/desktop/gnome-extension/metadata.json | 8 + apps/desktop/package.json | 5 +- apps/desktop/scripts/dev-electron.mjs | 16 + apps/desktop/scripts/electron-launcher.mjs | 95 +- apps/desktop/scripts/electron-launcher.test.mjs | 72 +- apps/desktop/src/app/DesktopApp.ts | 3 + apps/desktop/src/app/DesktopAppIdentity.ts | 4 - apps/desktop/src/app/DesktopEarlyElectronStartup.test.ts | 2 + apps/desktop/src/app/DesktopEarlyElectronStartup.ts | 10 +- apps/desktop/src/app/DesktopEnvironment.test.ts | 14 + apps/desktop/src/app/DesktopEnvironment.ts | 5 +- apps/desktop/src/app/DesktopLifecycle.test.ts | 3 + apps/desktop/src/app/DesktopLinuxUrlHandler.test.ts | 51 +- apps/desktop/src/app/DesktopLinuxUrlHandler.ts | 29 +- apps/desktop/src/app/DesktopPreReadyPlatform.test.ts | 85 +- apps/desktop/src/app/DesktopPreReadyPlatform.ts | 31 +- apps/desktop/src/backend/DesktopBackendPool.test.ts | 2 + apps/desktop/src/electron/ElectronShell.test.ts | 22 + apps/desktop/src/electron/ElectronShell.ts | 4 +- apps/desktop/src/electron/ElectronWindow.module.test.ts | 9 + apps/desktop/src/electron/ElectronWindow.test.ts | 364 +++- apps/desktop/src/electron/ElectronWindow.ts | 95 +- apps/desktop/src/electron/WindowsForeground.test.ts | 120 ++ apps/desktop/src/electron/WindowsForeground.ts | 224 ++ apps/desktop/src/electron/WindowsForegroundFocusThread.test.ts | 100 + apps/desktop/src/electron/WindowsForegroundFocusThread.ts | 148 ++ apps/desktop/src/electron/WindowsForegroundFocusWorker.test.ts | 36 + apps/desktop/src/electron/WindowsForegroundFocusWorker.ts | 99 + apps/desktop/src/ipc/DesktopIpc.test.ts | 30 + apps/desktop/src/ipc/DesktopIpc.ts | 16 +- apps/desktop/src/ipc/DesktopIpcHandlers.ts | 26 + apps/desktop/src/ipc/channels.ts | 15 + apps/desktop/src/ipc/methods/clientSettings.ts | 3 + apps/desktop/src/ipc/methods/snapShot.test.ts | 358 ++++ apps/desktop/src/ipc/methods/snapShot.ts | 239 +++ apps/desktop/src/main.ts | 6 + apps/desktop/src/preload.ts | 47 + apps/desktop/src/preview/Manager.test.ts | 43 +- apps/desktop/src/preview/Manager.ts | 20 +- apps/desktop/src/settings/DesktopClientSettings.test.ts | 7 +- apps/desktop/src/snapShot/ActiveWindow.test.ts | 129 ++ apps/desktop/src/snapShot/ActiveWindow.ts | 143 ++ apps/desktop/src/snapShot/CaptureShortcutConfig.test.ts | 263 +++ apps/desktop/src/snapShot/CaptureShortcutConfig.ts | 303 +++ apps/desktop/src/snapShot/DesktopSnapShot.test.ts | 3650 ++++++++++++++++++++++++++++++++ apps/desktop/src/snapShot/DesktopSnapShot.ts | 1679 +++++++++++++++ apps/desktop/src/snapShot/GlobalShiftShortcutProcess.ts | 61 + apps/desktop/src/snapShot/GlobalShiftShortcutWorker.ts | 39 + apps/desktop/src/snapShot/GnomeCaptureSetup.test.ts | 193 ++ apps/desktop/src/snapShot/GnomeCaptureSetup.ts | 246 +++ apps/desktop/src/snapShot/HyprlandSnapShot.test.ts | 171 ++ apps/desktop/src/snapShot/HyprlandSnapShot.ts | 221 ++ apps/desktop/src/snapShot/KdeSnapShot.test.ts | 238 +++ apps/desktop/src/snapShot/KdeSnapShot.ts | 285 +++ apps/desktop/src/snapShot/LinuxSnapShot.dbus.test.ts | 281 +++ apps/desktop/src/snapShot/LinuxSnapShot.test.ts | 414 ++++ apps/desktop/src/snapShot/LinuxSnapShot.ts | 422 ++++ apps/desktop/src/snapShot/MacModifierPairShortcutProcess.test.ts | 93 + apps/desktop/src/snapShot/MacModifierPairShortcutProcess.ts | 89 + apps/desktop/src/snapShot/MacSnapShot.test.ts | 103 + apps/desktop/src/snapShot/MacSnapShot.ts | 70 + apps/desktop/src/snapShot/NativeCaptureFeedback.test.ts | 112 + apps/desktop/src/snapShot/NativeCaptureFeedback.ts | 113 + apps/desktop/src/snapShot/NiriCaptureShortcut.ts | 66 + apps/desktop/src/snapShot/NiriSnapShot.test.ts | 248 +++ apps/desktop/src/snapShot/NiriSnapShot.ts | 263 +++ apps/desktop/src/snapShot/PortalCaptureShortcut.dbus.test.ts | 179 ++ apps/desktop/src/snapShot/PortalCaptureShortcut.test.ts | 418 ++++ apps/desktop/src/snapShot/PortalCaptureShortcut.ts | 429 ++++ apps/desktop/src/snapShot/RegionSnapShot.test.ts | 295 +++ apps/desktop/src/snapShot/RegionSnapShot.ts | 204 ++ apps/desktop/src/snapShot/RegionSnapShotWorker.ts | 29 + apps/desktop/src/snapShot/SnapShotAccessibility.ts | 223 ++ apps/desktop/src/snapShot/SnapShotAccessibilityProcess.test.ts | 141 ++ apps/desktop/src/snapShot/SnapShotAccessibilityProcess.ts | 176 ++ apps/desktop/src/snapShot/SnapShotAccessibilityWorker.ts | 29 + apps/desktop/src/snapShot/SnapShotTransition.ts | 450 ++++ apps/desktop/src/snapShot/WindowsCaptureFeedback.test.ts | 61 + apps/desktop/src/snapShot/WindowsCaptureFeedback.ts | 16 + apps/desktop/src/snapShot/captureConfigEdit.test.ts | 135 ++ apps/desktop/src/snapShot/captureConfigEdit.ts | 195 ++ apps/desktop/src/snapShot/captureConfigKdl.ts | 146 ++ apps/desktop/src/snapShot/gnomeCaptureBundle.ts | 4 + apps/desktop/src/snapShot/linuxCaptureSession.ts | 150 ++ apps/desktop/src/snapShot/snapShot.test.ts | 760 +++++++ apps/desktop/src/snapShot/snapShot.ts | 591 ++++++ apps/desktop/src/ssh/DesktopSshPasswordPrompts.test.ts | 1 + apps/desktop/src/updates/updatesTestHarness.ts | 1 + apps/desktop/src/window/DesktopApplicationMenu.test.ts | 2 + apps/desktop/src/window/DesktopWindow.test.ts | 155 +- apps/desktop/src/window/DesktopWindow.ts | 76 +- apps/desktop/vite.config.ts | 8 +- apps/server/src/orchestration/Normalizer.ts | 1 + apps/server/src/provider/Layers/ProviderService.test.ts | 364 ++++ apps/server/src/provider/Layers/ProviderService.ts | 212 +- apps/web/src/assets/snap-shot-click.mp3 | Bin 0 -> 6381 bytes apps/web/src/assets/snap-shot-whoosh.mp3 | Bin 0 -> 15021 bytes apps/web/src/components/ChatView.tsx | 4 + apps/web/src/components/chat/ChatComposer.tsx | 158 +- apps/web/src/components/chat/ExpandedImageDialog.tsx | 64 +- apps/web/src/components/chat/ExpandedImagePreview.test.ts | 26 + apps/web/src/components/chat/ExpandedImagePreview.tsx | 6 +- apps/web/src/components/chat/MessagesTimeline.test.tsx | 96 + apps/web/src/components/chat/MessagesTimeline.tsx | 14 +- apps/web/src/components/chat/SnapShotAttachmentDetails.test.tsx | 101 + apps/web/src/components/chat/SnapShotAttachmentDetails.tsx | 230 ++ apps/web/src/components/cloud/ConnectOnboardingDialog.tsx | 61 +- apps/web/src/components/desktop/SnapShotCoordinator.test.ts | 382 ++++ apps/web/src/components/desktop/SnapShotCoordinator.tsx | 414 ++++ apps/web/src/components/desktop/SnapShotShortcutKeys.tsx | 26 + apps/web/src/components/settings/CaptureShortcutConfig.test.tsx | 320 +++ apps/web/src/components/settings/CaptureShortcutConfig.tsx | 346 +++ apps/web/src/components/settings/IntegrationsSettings.tsx | 35 +- apps/web/src/components/settings/KeybindingsSettings.logic.test.ts | 40 +- apps/web/src/components/settings/KeybindingsSettings.logic.ts | 5 +- apps/web/src/components/settings/SettingsSidebarNav.tsx | 14 + apps/web/src/components/settings/SnapShotSettings.logic.test.ts | 330 +++ apps/web/src/components/settings/SnapShotSettings.logic.ts | 142 ++ apps/web/src/components/settings/SnapShotSettings.test.tsx | 416 ++++ apps/web/src/components/settings/SnapShotSettings.tsx | 622 ++++++ apps/web/src/components/settings/SnapShotSetupDialog.logic.test.ts | 341 +++ apps/web/src/components/settings/SnapShotSetupDialog.logic.ts | 98 + apps/web/src/components/settings/SnapShotSetupDialog.tsx | 573 +++++ apps/web/src/components/settings/settingsLayout.test.tsx | 15 + apps/web/src/components/settings/settingsLayout.tsx | 20 + apps/web/src/components/settings/settingsSearch.test.ts | 21 + apps/web/src/components/settings/settingsSearch.ts | 41 + apps/web/src/components/settings/useSnapShotShortcutRecorder.test.tsx | 166 ++ apps/web/src/components/settings/useSnapShotShortcutRecorder.tsx | 150 ++ apps/web/src/components/ui/wizard-steps.tsx | 56 + apps/web/src/composerDraftStore.test.ts | 27 +- apps/web/src/composerDraftStore.ts | 24 +- apps/web/src/hooks/useHandleNewThread.ts | 2 + apps/web/src/hooks/useSettings.test.ts | 38 +- apps/web/src/hooks/useSettings.ts | 8 +- apps/web/src/index.css | 11 + apps/web/src/keybindings.test.ts | 36 + apps/web/src/keybindings.ts | 57 +- apps/web/src/lib/attachmentUploadQueue.test.ts | 16 +- apps/web/src/lib/attachmentUploadQueue.ts | 1 + apps/web/src/lib/desktopSnapShot.test.ts | 57 + apps/web/src/lib/desktopSnapShot.ts | 44 + apps/web/src/lib/imageCompression.test.ts | 94 + apps/web/src/lib/imageCompression.ts | 24 +- apps/web/src/lib/snapShotAnimation.test.ts | 68 + apps/web/src/lib/snapShotAnimation.ts | 179 ++ apps/web/src/lib/snapShotSetupResume.test.ts | 42 + apps/web/src/lib/snapShotSetupResume.ts | 36 + apps/web/src/lib/snapShotShortcut.test.ts | 190 ++ apps/web/src/lib/snapShotShortcut.ts | 121 ++ apps/web/src/lib/snapShotSound.test.ts | 51 + apps/web/src/lib/snapShotSound.ts | 11 + apps/web/src/lib/snapShotSource.ts | 40 + apps/web/src/routeTree.gen.ts | 21 + apps/web/src/routes/__root.tsx | 14 + apps/web/src/routes/settings.snap-shot.tsx | 11 + docs/README.md | 1 + docs/internals/linux-snap-shot.md | 108 + docs/internals/overview.md | 18 + docs/operations/release.md | 5 + docs/user/snap-shot.md | 99 + knip.jsonc | 5 + native/hyprland-snap-shot/Cargo.lock | 637 ++++++ native/hyprland-snap-shot/Cargo.toml | 31 + native/hyprland-snap-shot/protocols/hyprland-toplevel-export-v1.xml | 228 ++ native/hyprland-snap-shot/protocols/hyprland-toplevel-mapping-v1.xml | 124 ++ native/hyprland-snap-shot/src/capture.rs | 334 +++ native/hyprland-snap-shot/src/feedback.rs | 776 +++++++ native/hyprland-snap-shot/src/ipc.rs | 236 +++ native/hyprland-snap-shot/src/main.rs | 48 + native/hyprland-snap-shot/src/protocols.rs | 37 + native/hyprland-snap-shot/src/transport_tests.rs | 392 ++++ native/kde-snap-shot/Cargo.lock | 963 +++++++++ native/kde-snap-shot/Cargo.toml | 19 + native/kde-snap-shot/src/activate.js | 39 + native/kde-snap-shot/src/activate.test.ts | 91 + native/kde-snap-shot/src/feedback.qml | 198 ++ native/kde-snap-shot/src/feedback.rs | 289 +++ native/kde-snap-shot/src/feedbackGeometry.js | 32 + native/kde-snap-shot/src/feedbackGeometry.test.ts | 47 + native/kde-snap-shot/src/main.rs | 481 +++++ native/kde-snap-shot/src/transport_tests.rs | 270 +++ native/kde-snap-shot/tests/qml/imports/org/kde/kwin/DBusCall.qml | 25 + native/kde-snap-shot/tests/qml/imports/org/kde/kwin/Workspace.qml | 26 + native/kde-snap-shot/tests/qml/imports/org/kde/kwin/qmldir | 3 + native/kde-snap-shot/tests/qml/tst_feedback.qml | 82 + package.json | 1 + packages/contracts/src/ipc.ts | 175 +- packages/contracts/src/orchestration.test.ts | 112 + packages/contracts/src/orchestration.ts | 109 + packages/contracts/src/settings.test.ts | 84 + packages/contracts/src/settings.ts | 81 + patches/dbus-next@0.10.2.patch | 46 + pnpm-lock.yaml | 264 ++- pnpm-workspace.yaml | 6 + scripts/build-desktop-artifact.test.ts | 130 +- scripts/build-desktop-artifact.ts | 137 +- 207 files changed, 31651 insertions(+), 362 deletions(-)