Skip to content
5 changes: 5 additions & 0 deletions .kwin_debug.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
var windows = workspace.windowList();
for (var i = 0; i < windows.length; i++) {
var w = windows[i];
console.log("KWIN_DEBUG: class=" + w.resourceClass + " | name=" + w.resourceName + " | caption=" + w.caption + " | appId=" + (w.desktopFileName || "N/A"));
}
7 changes: 4 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@

Imposter provides a discreet, always-on-top AI layer designed for maximum invisibility.

* **Stealth Window**: Hardware-level DRM protection makes the AI invisible to screen-sharing, screenshots, and meeting platforms (Zoom, Teams).
* **Voice Transcription**: Real-time system audio capture streamed to AssemblyAI for live results.
* **Stealth Window**: Hardware-level DRM protection (Windows/macOS) and KWin Scripting (Linux KDE) makes the AI invisible to screen-sharing, screenshots, and meeting platforms (Zoom, Teams).
* **Voice Transcription**: Real-time system audio capture via browser WebRTC (Windows/macOS) and native zero-latency PipeWire integration (Linux) streamed to AssemblyAI.
* **Screen OCR**: Local Tesseract.js extraction from any region-snip directly into your AI prompt.
* **High-Stakes Personas**: 12 context-aware identities tailored for specific assessment scenarios.
* **Multi-Provider AI**: Connect to the world's most powerful models through a unified interface.
Expand All @@ -39,7 +39,8 @@ Imposter provides a discreet, always-on-top AI layer designed for maximum invisi

Built on a specialized architecture, Imposter remains non-intrusive and computationally isolated until triggered.

* **Hardware DRM**: Blocks all standard capture APIs.
* **Hardware DRM**: Blocks all standard capture APIs on Windows and macOS.
* **KDE Plasma Stealth**: Native compositor integration via KWin scripting for true invisibility on Linux (KDE 6.6+). Hides from screen capture, taskbar, and alt-tab menus.
* **Disguised UI**: Instantly transform into a standard utility identity to stay under the radar.
* **100% Local**: Zero telemetry. Prompts, conversations, and keys never leave your machine.

Expand Down
4 changes: 3 additions & 1 deletion src/main/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ require('dotenv').config();
const { createMainWindow, getMainWindow } = require('./window-manager');
const { registerShortcuts, unregisterShortcuts } = require('./shortcuts');
const { registerIpcHandlers } = require('./ipc-handlers');
const kdeManager = require('./kde-manager');
// ── Process-Level Crash Guards ──────────────────────────────────────────────

process.on('uncaughtException', (error) => {
Expand Down Expand Up @@ -95,8 +96,9 @@ if (!gotTheLock) {
app.on('will-quit', () => {
try {
unregisterShortcuts();
kdeManager.cleanupKdeRules();
} catch (err) {
console.error('Shortcut cleanup error:', err);
console.error('Cleanup error:', err);
}
});

Expand Down
8 changes: 8 additions & 0 deletions src/main/ipc-handlers.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ const { ipcMain, desktopCapturer, nativeImage, app, net } = require('electron');
const Tesseract = require('tesseract.js');
const { getMainWindow, createIslandWindow, closeIslandWindow, closeSnipperWindow } = require('./window-manager');
const { startTranscription, stopTranscription, sendAudioChunk, testConnection } = require('./transcription');
const kdeManager = require('./kde-manager');

let handlersRegistered = false;

Expand Down Expand Up @@ -41,6 +42,11 @@ function registerIpcHandlers() {
}
});

ipcMain.handle('is-native-linux-audio', () => {
// Use native pipewire record on KDE/Linux instead of Chromium WebRTC
Comment on lines +45 to +46
return kdeManager.isKdePlasma();
});

ipcMain.handle('start-transcription', async (event, apiKeyFromRenderer) => {
try {
const apiKey = apiKeyFromRenderer || process.env.ASSEMBLY_AI_API_KEY || process.env.ASSEMBLY_API;
Expand Down Expand Up @@ -114,11 +120,13 @@ function registerIpcHandlers() {
mainWindow.setAlwaysOnTop(false);
mainWindow.setResizable(true);
mainWindow.setContentProtection(false);
kdeManager.setKdeStealth(false);
} else {
mainWindow.setSkipTaskbar(true);
mainWindow.setAlwaysOnTop(true, 'screen-saver');
mainWindow.setResizable(false);
mainWindow.setContentProtection(true);
kdeManager.setKdeStealth(true);
}
} catch (err) {
console.error('[IPC] set-app-mode error:', err);
Expand Down
Loading
Loading