Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
| #!/usr/bin/swift | ||
| import ApplicationServices | ||
| import Cocoa | ||
| // Get target app name or PID from command line | ||
| guard CommandLine.arguments.count > 1 else { | ||
| print("Usage: enable_ax <app_name_or_pid>") | ||
| exit(1) | ||
| } | ||
| let target = CommandLine.arguments[1] | ||
| let workspace = NSWorkspace.shared | ||
| let runningApps = workspace.runningApplications | ||
| var targetApp: NSRunningApplication? | ||
| // Try to parse as PID first | ||
| if let pid = Int32(target) { | ||
| targetApp = runningApps.first(where: { $0.processIdentifier == pid }) | ||
| } else { | ||
| // Search by name | ||
| targetApp = runningApps.first(where: { | ||
| $0.localizedName == target || | ||
| $0.bundleIdentifier == target | ||
| }) | ||
| } | ||
| guard let app = targetApp else { | ||
| print("ERROR: App '\(target)' not found") | ||
| exit(1) | ||
| } | ||
| let pid = app.processIdentifier | ||
| // Create AXUIElement for the app | ||
| let appElement = AXUIElementCreateApplication(pid) | ||
| // Try to set AXManualAccessibility to true | ||
| let result = AXUIElementSetAttributeValue( | ||
| appElement, | ||
| "AXManualAccessibility" as CFString, | ||
| kCFBooleanTrue | ||
| ) | ||
| if result == .success { | ||
| print("SUCCESS: Enabled AXManualAccessibility for '\(app.localizedName ?? target)' (PID: \(pid))") | ||
| exit(0) | ||
| } else { | ||
| print("ERROR: Failed to enable AXManualAccessibility (error code: \(result.rawValue))") | ||
| exit(1) | ||
| } |
| /** | ||
| * killswitch command - Manage the kill switch for automation safety | ||
| */ | ||
| import { Command } from 'commander'; | ||
| export declare function killswitchCommand(): Command; | ||
| //# sourceMappingURL=killswitch.d.ts.map |
| {"version":3,"file":"killswitch.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/killswitch.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,iBAAiB,IAAI,OAAO,CAqE3C"} |
| /** | ||
| * killswitch command - Manage the kill switch for automation safety | ||
| */ | ||
| import { Command } from 'commander'; | ||
| import chalk from 'chalk'; | ||
| import { writeFileSync, existsSync, mkdirSync } from 'node:fs'; | ||
| import { join } from 'node:path'; | ||
| import { homedir } from 'node:os'; | ||
| const OSCRIBE_DIR = join(homedir(), '.oscribe'); | ||
| const RESUME_FILE = join(OSCRIBE_DIR, 'killswitch-resume'); | ||
| export function killswitchCommand() { | ||
| const cmd = new Command('killswitch') | ||
| .description('Manage the kill switch for automation safety'); | ||
| cmd | ||
| .command('reset') | ||
| .alias('resume') | ||
| .description('Reset the kill switch to allow automation to continue') | ||
| .action(() => { | ||
| try { | ||
| // Ensure .oscribe directory exists | ||
| if (!existsSync(OSCRIBE_DIR)) { | ||
| mkdirSync(OSCRIBE_DIR, { recursive: true }); | ||
| } | ||
| // Create the resume signal file with timestamp | ||
| writeFileSync(RESUME_FILE, Date.now().toString(), 'utf-8'); | ||
| console.log(); | ||
| console.log(chalk.green('Kill switch reset signal sent.')); | ||
| console.log(chalk.gray('The MCP server will resume automation on the next action.')); | ||
| console.log(); | ||
| } | ||
| catch (error) { | ||
| console.error(chalk.red('Failed to reset kill switch')); | ||
| console.error(error instanceof Error ? error.message : error); | ||
| process.exit(1); | ||
| } | ||
| }); | ||
| cmd | ||
| .command('status') | ||
| .description('Show kill switch configuration') | ||
| .action(async () => { | ||
| // Dynamic import to avoid loading config at CLI startup | ||
| const { loadConfig } = await import('../../config/index.js'); | ||
| const config = loadConfig(); | ||
| const { killSwitch } = config; | ||
| console.log(); | ||
| console.log(chalk.bold('Kill Switch Configuration')); | ||
| console.log('β'.repeat(40)); | ||
| console.log(`Enabled: ${killSwitch.enabled ? chalk.green('Yes') : chalk.yellow('No')}`); | ||
| console.log(`Movement threshold: ${chalk.cyan(killSwitch.movementThreshold + 'px')}`); | ||
| console.log(`Cooldown: ${chalk.cyan(killSwitch.cooldownMs + 'ms')}`); | ||
| console.log(); | ||
| console.log(chalk.gray('The kill switch stops automation when you move the mouse.')); | ||
| console.log(chalk.gray('Use "oscribe killswitch reset" to resume after a stop.')); | ||
| }); | ||
| // Default action: show help | ||
| cmd.action(() => { | ||
| console.log(); | ||
| console.log(chalk.bold('Kill Switch')); | ||
| console.log('β'.repeat(40)); | ||
| console.log('Safety feature that stops automation when you move the mouse.'); | ||
| console.log(); | ||
| console.log('Commands:'); | ||
| console.log(` ${chalk.yellow('oscribe killswitch reset')} Reset and allow automation to continue`); | ||
| console.log(` ${chalk.yellow('oscribe killswitch status')} Show current configuration`); | ||
| console.log(); | ||
| }); | ||
| return cmd; | ||
| } | ||
| //# sourceMappingURL=killswitch.js.map |
| {"version":3,"file":"killswitch.js","sourceRoot":"","sources":["../../../../src/cli/commands/killswitch.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * voiceover command - Manage VoiceOver screen reader for Electron accessibility (macOS) | ||
| */ | ||
| import { Command } from 'commander'; | ||
| export declare function voiceoverCommand(): Command; | ||
| //# sourceMappingURL=voiceover.d.ts.map |
| {"version":3,"file":"voiceover.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/voiceover.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,gBAAgB,IAAI,OAAO,CAuH1C"} |
| /** | ||
| * voiceover command - Manage VoiceOver screen reader for Electron accessibility (macOS) | ||
| */ | ||
| import { Command } from 'commander'; | ||
| import chalk from 'chalk'; | ||
| import ora from 'ora'; | ||
| import { getVoiceOverStatus, startVoiceOver, stopVoiceOver, } from '../../core/voiceover.js'; | ||
| export function voiceoverCommand() { | ||
| const cmd = new Command('voiceover') | ||
| .description('Manage VoiceOver screen reader for Electron app accessibility (macOS only)'); | ||
| cmd | ||
| .command('status') | ||
| .description('Show VoiceOver status') | ||
| .action(async () => { | ||
| const spinner = ora('Checking VoiceOver status...').start(); | ||
| try { | ||
| const status = await getVoiceOverStatus(); | ||
| spinner.stop(); | ||
| console.log(); | ||
| console.log(chalk.bold('VoiceOver Status')); | ||
| console.log('β'.repeat(40)); | ||
| console.log(`Available: ${status.available ? chalk.green('Yes') : chalk.yellow('No (macOS only)')}`); | ||
| console.log(`Running: ${status.running ? chalk.green('Yes') : chalk.gray('No')}`); | ||
| console.log(`Can control: ${status.canControl ? chalk.green('Yes') : chalk.yellow('No (grant Accessibility permissions)')}`); | ||
| console.log(); | ||
| } | ||
| catch (error) { | ||
| spinner.fail(chalk.red('Failed to check VoiceOver status')); | ||
| console.error(error instanceof Error ? error.message : error); | ||
| process.exit(1); | ||
| } | ||
| }); | ||
| cmd | ||
| .command('start') | ||
| .description('Start VoiceOver in silent mode (no audio)') | ||
| .option('--with-speech', 'Start VoiceOver with speech enabled') | ||
| .action(async (options) => { | ||
| if (process.platform !== 'darwin') { | ||
| console.log(chalk.yellow('VoiceOver is only available on macOS')); | ||
| return; | ||
| } | ||
| const silent = !options.withSpeech; | ||
| const spinner = ora(`Starting VoiceOver${silent ? ' in silent mode' : ''}...`).start(); | ||
| try { | ||
| const success = await startVoiceOver(silent); | ||
| if (success) { | ||
| spinner.succeed(chalk.green(`VoiceOver started${silent ? ' in silent mode (no audio)' : ''}`)); | ||
| if (silent) { | ||
| console.log(); | ||
| console.log(chalk.gray('VoiceOver is running without speech synthesis.')); | ||
| console.log(chalk.gray('UI Automation features are active.')); | ||
| } | ||
| } | ||
| else { | ||
| spinner.fail(chalk.red('Failed to start VoiceOver')); | ||
| process.exit(1); | ||
| } | ||
| } | ||
| catch (error) { | ||
| spinner.fail(chalk.red('Failed to start VoiceOver')); | ||
| console.error(error instanceof Error ? error.message : error); | ||
| process.exit(1); | ||
| } | ||
| }); | ||
| cmd | ||
| .command('stop') | ||
| .description('Stop VoiceOver') | ||
| .option('--no-restore-speech', 'Do not restore speech settings when stopping') | ||
| .action(async (options) => { | ||
| if (process.platform !== 'darwin') { | ||
| console.log(chalk.yellow('VoiceOver is only available on macOS')); | ||
| return; | ||
| } | ||
| const restoreSpeech = options.restoreSpeech !== false; | ||
| const spinner = ora('Stopping VoiceOver...').start(); | ||
| try { | ||
| const success = await stopVoiceOver(restoreSpeech); | ||
| if (success) { | ||
| spinner.succeed(chalk.green('VoiceOver stopped')); | ||
| } | ||
| else { | ||
| spinner.fail(chalk.red('Failed to stop VoiceOver')); | ||
| process.exit(1); | ||
| } | ||
| } | ||
| catch (error) { | ||
| spinner.fail(chalk.red('Failed to stop VoiceOver')); | ||
| console.error(error instanceof Error ? error.message : error); | ||
| process.exit(1); | ||
| } | ||
| }); | ||
| // Default action: show status | ||
| cmd.action(async () => { | ||
| const status = await getVoiceOverStatus(); | ||
| console.log(); | ||
| console.log(chalk.bold('VoiceOver Screen Reader (macOS)')); | ||
| console.log('β'.repeat(40)); | ||
| console.log(`Status: ${status.available ? (status.running ? chalk.green('Running') : chalk.gray('Available')) : chalk.yellow('Not available (macOS only)')}`); | ||
| console.log(); | ||
| console.log('Commands:'); | ||
| console.log(` ${chalk.yellow('oscribe voiceover status')} Show detailed status`); | ||
| console.log(` ${chalk.yellow('oscribe voiceover start')} Start VoiceOver silently`); | ||
| console.log(` ${chalk.yellow('oscribe voiceover stop')} Stop VoiceOver`); | ||
| console.log(); | ||
| console.log(chalk.gray('VoiceOver enables full UI element detection in Electron apps.')); | ||
| }); | ||
| return cmd; | ||
| } | ||
| //# sourceMappingURL=voiceover.js.map |
| {"version":3,"file":"voiceover.js","sourceRoot":"","sources":["../../../../src/cli/commands/voiceover.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * AXManualAccessibility Management | ||
| * | ||
| * Enables macOS Accessibility Tree for Electron apps WITHOUT VoiceOver. | ||
| * This is the preferred method as it: | ||
| * - Has no audio output | ||
| * - Is faster (no screen reader startup time) | ||
| * - Is lighter (no additional process) | ||
| * - Works on macOS only | ||
| * | ||
| * How it works: | ||
| * - Uses the AXManualAccessibility attribute to force Electron/Chromium | ||
| * to expose its accessibility tree | ||
| * - This attribute can be set programmatically on any running app | ||
| * - No system-wide screen reader needed | ||
| */ | ||
| export interface AXManualStatus { | ||
| available: boolean; | ||
| platform: string; | ||
| } | ||
| /** | ||
| * Check if AXManualAccessibility is available on this system | ||
| * Only available on macOS | ||
| */ | ||
| export declare function isAXManualAvailable(): boolean; | ||
| /** | ||
| * Enable AXManualAccessibility for a specific app | ||
| * @param appNameOrPid - App name, bundle ID, or PID | ||
| * @returns Promise<boolean> - true if successful | ||
| */ | ||
| export declare function enableAXManual(appNameOrPid: string | number): Promise<boolean>; | ||
| /** | ||
| * Get AXManualAccessibility status | ||
| */ | ||
| export declare function getAXManualStatus(): Promise<AXManualStatus>; | ||
| /** | ||
| * Enable accessibility for an Electron app | ||
| * This is a convenience function that handles common Electron app scenarios | ||
| */ | ||
| export declare function enableElectronAccessibility(appIdentifier: string | number): Promise<boolean>; | ||
| //# sourceMappingURL=axmanual.d.ts.map |
| {"version":3,"file":"axmanual.d.ts","sourceRoot":"","sources":["../../../src/core/axmanual.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAkCH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBpF;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,cAAc,CAAC,CAKjE;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,aAAa,EAAE,MAAM,GAAG,MAAM,GAC7B,OAAO,CAAC,OAAO,CAAC,CAOlB"} |
| /** | ||
| * AXManualAccessibility Management | ||
| * | ||
| * Enables macOS Accessibility Tree for Electron apps WITHOUT VoiceOver. | ||
| * This is the preferred method as it: | ||
| * - Has no audio output | ||
| * - Is faster (no screen reader startup time) | ||
| * - Is lighter (no additional process) | ||
| * - Works on macOS only | ||
| * | ||
| * How it works: | ||
| * - Uses the AXManualAccessibility attribute to force Electron/Chromium | ||
| * to expose its accessibility tree | ||
| * - This attribute can be set programmatically on any running app | ||
| * - No system-wide screen reader needed | ||
| */ | ||
| import { exec } from 'node:child_process'; | ||
| import { promisify } from 'node:util'; | ||
| import path from 'node:path'; | ||
| import { fileURLToPath } from 'node:url'; | ||
| const execAsync = promisify(exec); | ||
| const isMacOS = process.platform === 'darwin'; | ||
| // Get the directory of the current module | ||
| const __filename = fileURLToPath(import.meta.url); | ||
| const __dirname = path.dirname(__filename); | ||
| // Path to the enable_ax binary | ||
| const ENABLE_AX_BIN = path.join(__dirname, '../../bin/enable_ax'); | ||
| // Simple logger | ||
| const logger = { | ||
| debug: (msg, data) => { | ||
| if (process.env['DEBUG']) | ||
| console.log(`[axmanual] ${msg}`, data ?? ''); | ||
| }, | ||
| info: (msg, data) => { | ||
| console.log(`[axmanual] ${msg}`, data ?? ''); | ||
| }, | ||
| warn: (msg, data) => { | ||
| console.warn(`[axmanual] ${msg}`, data ?? ''); | ||
| }, | ||
| error: (msg, data) => { | ||
| console.error(`[axmanual] ${msg}`, data ?? ''); | ||
| }, | ||
| }; | ||
| /** | ||
| * Check if AXManualAccessibility is available on this system | ||
| * Only available on macOS | ||
| */ | ||
| export function isAXManualAvailable() { | ||
| return isMacOS; | ||
| } | ||
| /** | ||
| * Enable AXManualAccessibility for a specific app | ||
| * @param appNameOrPid - App name, bundle ID, or PID | ||
| * @returns Promise<boolean> - true if successful | ||
| */ | ||
| export async function enableAXManual(appNameOrPid) { | ||
| if (!isMacOS) { | ||
| logger.debug('AXManualAccessibility only available on macOS'); | ||
| return false; | ||
| } | ||
| try { | ||
| const target = String(appNameOrPid); | ||
| logger.debug(`Enabling AXManualAccessibility for: ${target}`); | ||
| const { stdout, stderr } = await execAsync(`"${ENABLE_AX_BIN}" "${target}"`); | ||
| if (stdout.includes('SUCCESS')) { | ||
| logger.info(`AXManualAccessibility enabled for ${target}`); | ||
| return true; | ||
| } | ||
| else { | ||
| logger.warn(`Failed to enable AXManualAccessibility: ${stderr || stdout}`); | ||
| return false; | ||
| } | ||
| } | ||
| catch (error) { | ||
| logger.error('Failed to enable AXManualAccessibility', { error: String(error) }); | ||
| return false; | ||
| } | ||
| } | ||
| /** | ||
| * Get AXManualAccessibility status | ||
| */ | ||
| export async function getAXManualStatus() { | ||
| return { | ||
| available: isAXManualAvailable(), | ||
| platform: process.platform, | ||
| }; | ||
| } | ||
| /** | ||
| * Enable accessibility for an Electron app | ||
| * This is a convenience function that handles common Electron app scenarios | ||
| */ | ||
| export async function enableElectronAccessibility(appIdentifier) { | ||
| if (!isMacOS) { | ||
| logger.debug('Electron accessibility only needed on macOS'); | ||
| return false; | ||
| } | ||
| return enableAXManual(appIdentifier); | ||
| } | ||
| //# sourceMappingURL=axmanual.js.map |
| {"version":3,"file":"axmanual.js","sourceRoot":"","sources":["../../../src/core/axmanual.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC;AAE9C,0CAA0C;AAC1C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C,+BAA+B;AAC/B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,qBAAqB,CAAC,CAAC;AAElE,gBAAgB;AAChB,MAAM,MAAM,GAAG;IACb,KAAK,EAAE,CAAC,GAAW,EAAE,IAA8B,EAAE,EAAE;QACrD,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,EAAE,CAAC,GAAW,EAAE,IAA8B,EAAE,EAAE;QACpD,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,EAAE,CAAC,GAAW,EAAE,IAA8B,EAAE,EAAE;QACpD,OAAO,CAAC,IAAI,CAAC,cAAc,GAAG,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,KAAK,EAAE,CAAC,GAAW,EAAE,IAA8B,EAAE,EAAE;QACrD,OAAO,CAAC,KAAK,CAAC,cAAc,GAAG,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;CACF,CAAC;AAOF;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,YAA6B;IAChE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;QAC9D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,uCAAuC,MAAM,EAAE,CAAC,CAAC;QAE9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,aAAa,MAAM,MAAM,GAAG,CAAC,CAAC;QAE7E,IAAI,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,qCAAqC,MAAM,EAAE,CAAC,CAAC;YAC3D,OAAO,IAAI,CAAC;QACd,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,2CAA2C,MAAM,IAAI,MAAM,EAAE,CAAC,CAAC;YAC3E,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,wCAAwC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjF,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,OAAO;QACL,SAAS,EAAE,mBAAmB,EAAE;QAChC,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,aAA8B;IAE9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,cAAc,CAAC,aAAa,CAAC,CAAC;AACvC,CAAC"} |
| /** | ||
| * Browser restart with CDP support | ||
| * Saves open tabs, closes browser, relaunches with remote debugging | ||
| */ | ||
| import { BrowserType } from './browser.js'; | ||
| export interface BrowserRestartResult { | ||
| success: boolean; | ||
| browser: BrowserType; | ||
| tabsSaved: number; | ||
| tabsRestored: number; | ||
| cdpEnabled: boolean; | ||
| error?: string; | ||
| } | ||
| /** | ||
| * Restart browser with CDP enabled | ||
| * Saves tabs, closes browser, relaunches with remote debugging, restores tabs | ||
| * @param port - Remote debugging port (default: 9222) | ||
| * @param windowApp - Optional app name to target (e.g., "Google Chrome"). If not provided, uses active window. | ||
| */ | ||
| export declare function restartBrowserWithCDP(port?: number, windowApp?: string): Promise<BrowserRestartResult>; | ||
| //# sourceMappingURL=browser-restart.d.ts.map |
| {"version":3,"file":"browser-restart.d.ts","sourceRoot":"","sources":["../../../src/core/browser-restart.ts"],"names":[],"mappings":"AAAE;;;EAGC;AAMH,OAAO,EAAE,WAAW,EAA+B,MAAM,cAAc,CAAC;AA2BxE,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA2YD;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,SAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA+H1G"} |
| /** | ||
| * Browser restart with CDP support | ||
| * Saves open tabs, closes browser, relaunches with remote debugging | ||
| */ | ||
| import { execSync } from 'node:child_process'; | ||
| import { appendFileSync, existsSync, mkdirSync } from 'node:fs'; | ||
| import { homedir } from 'node:os'; | ||
| import { dirname, join } from 'node:path'; | ||
| import { detectBrowser, isCDPEnabled } from './browser.js'; | ||
| import { connectCDP, disconnectCDP } from './cdp-client.js'; | ||
| import { getActiveWindow } from './windows.js'; | ||
| const LOG_FILE = join(homedir(), 'Desktop', 'oscribe-browser-restart.log'); | ||
| function log(message) { | ||
| const timestamp = new Date().toISOString(); | ||
| const line = `[${timestamp}] ${message}\n`; | ||
| console.error(line.trim()); | ||
| try { | ||
| appendFileSync(LOG_FILE, line, 'utf8'); | ||
| } | ||
| catch (err) { | ||
| console.error(`Failed to write to log file ${LOG_FILE}:`, err); | ||
| } | ||
| } | ||
| // Test log on module load to verify file writing works | ||
| try { | ||
| log('=== BROWSER-RESTART MODULE LOADED ==='); | ||
| log(`Log file path: ${LOG_FILE}`); | ||
| log(`Platform: ${process.platform}`); | ||
| log(`Process: PID=${process.pid}, cwd=${process.cwd()}`); | ||
| } | ||
| catch (err) { | ||
| console.error('Failed to initialize log file:', err); | ||
| } | ||
| /** | ||
| * Get the default Chrome profile path for the current platform | ||
| */ | ||
| function getDefaultChromeProfilePath() { | ||
| if (process.platform === 'darwin') { | ||
| return join(homedir(), 'Library/Application Support/Google/Chrome'); | ||
| } | ||
| else if (process.platform === 'win32') { | ||
| return join(process.env['APPDATA'] || '', 'Google/Chrome/User Data'); | ||
| } | ||
| else { | ||
| // Linux | ||
| return join(homedir(), '.config/google-chrome'); | ||
| } | ||
| } | ||
| /** | ||
| * Get the OScribe Chrome profile path | ||
| */ | ||
| function getOScribeProfilePath() { | ||
| return join(homedir(), '.oscribe/chrome-profile'); | ||
| } | ||
| /** | ||
| * Synchronize Chrome default profile to OScribe profile directory | ||
| * ALWAYS copies to ensure latest extensions/cookies/logins | ||
| * Uses rsync on Unix (faster than cp for updates), xcopy on Windows | ||
| */ | ||
| async function syncProfileToOScribe() { | ||
| log('Synchronizing Chrome profile to OScribe directory...'); | ||
| const defaultProfile = getDefaultChromeProfilePath(); | ||
| const oscribeProfile = getOScribeProfilePath(); | ||
| try { | ||
| // Create parent directory if needed | ||
| const parentDir = dirname(oscribeProfile); | ||
| if (!existsSync(parentDir)) { | ||
| mkdirSync(parentDir, { recursive: true }); | ||
| } | ||
| // Remove old OScribe profile if exists (clean slate) | ||
| if (existsSync(oscribeProfile)) { | ||
| log('Removing old OScribe profile...'); | ||
| if (process.platform === 'win32') { | ||
| execSync(`rmdir /s /q "${oscribeProfile}"`, { timeout: 30000 }); | ||
| } | ||
| else { | ||
| execSync(`rm -rf "${oscribeProfile}"`, { timeout: 30000 }); | ||
| } | ||
| } | ||
| // Copy profile | ||
| // Use rsync on Unix (faster), xcopy on Windows | ||
| log('Copying profile... (this may take a moment for large profiles)'); | ||
| if (process.platform === 'win32') { | ||
| execSync(`xcopy "${defaultProfile}" "${oscribeProfile}" /E /I /H /Y /Q`, { timeout: 120000 }); | ||
| } | ||
| else { | ||
| // Use rsync if available (faster), fallback to cp | ||
| try { | ||
| execSync(`rsync -a "${defaultProfile}/" "${oscribeProfile}/"`, { timeout: 120000 }); | ||
| } | ||
| catch { | ||
| execSync(`cp -R "${defaultProfile}" "${oscribeProfile}"`, { timeout: 120000 }); | ||
| } | ||
| } | ||
| log('Profile synchronized successfully'); | ||
| return true; | ||
| } | ||
| catch (error) { | ||
| log(`ERROR: Failed to sync profile: ${error}`); | ||
| return false; | ||
| } | ||
| } | ||
| /** | ||
| * Get all open tabs from a browser via CDP | ||
| * Must be called BEFORE closing the browser | ||
| */ | ||
| async function getOpenTabs(port = 9222) { | ||
| try { | ||
| // Check if CDP is already enabled | ||
| if (!(await isCDPEnabled(port))) { | ||
| // CDP not enabled yet - try to get tabs via AppleScript (macOS only) | ||
| if (process.platform === 'darwin') { | ||
| return await getTabsViaAppleScript(); | ||
| } | ||
| return []; | ||
| } | ||
| // Connect to CDP | ||
| const cdp = await connectCDP({ port, host: 'localhost' }); | ||
| // Get all targets (tabs) | ||
| const { targetInfos } = await cdp.Target.getTargets({}); | ||
| // Extract URLs from page targets only | ||
| const urls = targetInfos | ||
| .filter((target) => target.type === 'page' && target.url && !target.url.startsWith('chrome://')) | ||
| .map((target) => target.url); | ||
| await disconnectCDP(cdp); | ||
| return urls; | ||
| } | ||
| catch (error) { | ||
| console.warn('[browser-restart] Failed to get tabs via CDP:', error); | ||
| // Fallback: try AppleScript on macOS | ||
| if (process.platform === 'darwin') { | ||
| return await getTabsViaAppleScript(); | ||
| } | ||
| return []; | ||
| } | ||
| } | ||
| /** | ||
| * Get tabs via AppleScript (macOS fallback when CDP not available) | ||
| */ | ||
| async function getTabsViaAppleScript() { | ||
| if (process.platform !== 'darwin') | ||
| return []; | ||
| try { | ||
| const script = ` | ||
| tell application "Google Chrome" | ||
| set tabUrls to {} | ||
| repeat with w in windows | ||
| repeat with t in tabs of w | ||
| set end of tabUrls to URL of t | ||
| end repeat | ||
| end repeat | ||
| return tabUrls | ||
| end tell | ||
| `; | ||
| const result = execSync(`osascript -e '${script.replace(/'/g, "'\\''")}'`, { | ||
| encoding: 'utf-8', | ||
| timeout: 10000, | ||
| }); | ||
| // Parse AppleScript result (comma-separated list) | ||
| return result | ||
| .trim() | ||
| .split(', ') | ||
| .filter((url) => url && !url.startsWith('chrome://')); | ||
| } | ||
| catch (error) { | ||
| console.warn('[browser-restart] Failed to get tabs via AppleScript:', error); | ||
| return []; | ||
| } | ||
| } | ||
| /** | ||
| * Close browser process | ||
| */ | ||
| async function closeBrowser(browserType) { | ||
| const event = { | ||
| action: 'close_browser', | ||
| browser: browserType, | ||
| timestamp: new Date().toISOString(), | ||
| success: false, | ||
| }; | ||
| try { | ||
| if (process.platform === 'darwin') { | ||
| // macOS: Use osascript to quit gracefully | ||
| const appNames = { | ||
| chrome: 'Google Chrome', | ||
| edge: 'Microsoft Edge', | ||
| brave: 'Brave Browser', | ||
| arc: 'Arc', | ||
| opera: 'Opera', | ||
| chromium: 'Chromium', | ||
| unknown: '', | ||
| }; | ||
| const appName = appNames[browserType]; | ||
| if (!appName) { | ||
| throw new Error(`Unknown browser type: ${browserType}`); | ||
| } | ||
| execSync(`osascript -e 'quit app "${appName}"'`, { timeout: 5000 }); | ||
| // Wait for process to fully close | ||
| await new Promise((resolve) => setTimeout(resolve, 2000)); | ||
| event.success = true; | ||
| console.log('[browser-restart]', event); | ||
| return true; | ||
| } | ||
| else if (process.platform === 'win32') { | ||
| // Windows: Use taskkill | ||
| const processNames = { | ||
| chrome: 'chrome.exe', | ||
| edge: 'msedge.exe', | ||
| brave: 'brave.exe', | ||
| arc: 'arc.exe', | ||
| opera: 'opera.exe', | ||
| chromium: 'chromium.exe', | ||
| unknown: '', | ||
| }; | ||
| const processName = processNames[browserType]; | ||
| if (!processName) { | ||
| throw new Error(`Unknown browser type: ${browserType}`); | ||
| } | ||
| execSync(`taskkill /F /IM ${processName}`, { timeout: 5000 }); | ||
| // Wait for process to fully close | ||
| await new Promise((resolve) => setTimeout(resolve, 2000)); | ||
| event.success = true; | ||
| console.log('[browser-restart]', event); | ||
| return true; | ||
| } | ||
| else if (process.platform === 'linux') { | ||
| // Linux: Use pkill | ||
| const processNames = { | ||
| chrome: 'chrome', | ||
| edge: 'msedge', | ||
| brave: 'brave', | ||
| arc: 'arc', | ||
| opera: 'opera', | ||
| chromium: 'chromium', | ||
| unknown: '', | ||
| }; | ||
| const processName = processNames[browserType]; | ||
| if (!processName) { | ||
| throw new Error(`Unknown browser type: ${browserType}`); | ||
| } | ||
| execSync(`pkill -f ${processName}`, { timeout: 5000 }); | ||
| // Wait for process to fully close | ||
| await new Promise((resolve) => setTimeout(resolve, 2000)); | ||
| event.success = true; | ||
| console.log('[browser-restart]', event); | ||
| return true; | ||
| } | ||
| throw new Error(`Unsupported platform: ${process.platform}`); | ||
| } | ||
| catch { | ||
| console.error('[browser-restart]', event); | ||
| return false; | ||
| } | ||
| } | ||
| /** | ||
| * Launch browser with remote debugging enabled | ||
| */ | ||
| async function launchBrowserWithCDP(browserType, port = 9222) { | ||
| const event = { | ||
| action: 'launch_browser_cdp', | ||
| browser: browserType, | ||
| port, | ||
| timestamp: new Date().toISOString(), | ||
| success: false, | ||
| }; | ||
| try { | ||
| if (process.platform === 'darwin') { | ||
| // macOS: Use direct binary path (open -a with --args doesn't work reliably) | ||
| const binaryPaths = { | ||
| chrome: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome', | ||
| edge: '/Applications/Microsoft Edge.app/Contents/MacOS/Microsoft Edge', | ||
| brave: '/Applications/Brave Browser.app/Contents/MacOS/Brave Browser', | ||
| arc: '/Applications/Arc.app/Contents/MacOS/Arc', | ||
| opera: '/Applications/Opera.app/Contents/MacOS/Opera', | ||
| chromium: '/Applications/Chromium.app/Contents/MacOS/Chromium', | ||
| unknown: '', | ||
| }; | ||
| const binaryPath = binaryPaths[browserType]; | ||
| if (!binaryPath) { | ||
| throw new Error(`Unknown browser type: ${browserType}`); | ||
| } | ||
| // Launch browser with remote debugging using 'open' command | ||
| // This ensures Chrome properly initializes CDP | ||
| const appNames = { | ||
| chrome: 'Google Chrome', | ||
| edge: 'Microsoft Edge', | ||
| brave: 'Brave Browser', | ||
| arc: 'Arc', | ||
| opera: 'Opera', | ||
| chromium: 'Chromium', | ||
| unknown: '', | ||
| }; | ||
| const appName = appNames[browserType]; | ||
| if (!appName) { | ||
| throw new Error(`Unknown browser type: ${browserType}`); | ||
| } | ||
| const oscribeProfile = getOScribeProfilePath(); | ||
| execSync(`open -a "${appName}" --args --remote-debugging-port=${port} --user-data-dir="${oscribeProfile}"`, { | ||
| timeout: 5000, | ||
| }); | ||
| } | ||
| else if (process.platform === 'win32') { | ||
| // Windows: Use start command | ||
| const commands = { | ||
| chrome: 'start chrome', | ||
| edge: 'start msedge', | ||
| brave: 'start brave', | ||
| arc: 'start arc', | ||
| opera: 'start opera', | ||
| chromium: 'start chromium', | ||
| unknown: '', | ||
| }; | ||
| const command = commands[browserType]; | ||
| if (!command) { | ||
| throw new Error(`Unknown browser type: ${browserType}`); | ||
| } | ||
| const oscribeProfile = getOScribeProfilePath(); | ||
| execSync(`${command} --remote-debugging-port=${port} --user-data-dir="${oscribeProfile}"`, { timeout: 5000 }); | ||
| } | ||
| else if (process.platform === 'linux') { | ||
| // Linux: Direct binary execution | ||
| const binaries = { | ||
| chrome: 'google-chrome', | ||
| edge: 'microsoft-edge', | ||
| brave: 'brave-browser', | ||
| arc: 'arc', | ||
| opera: 'opera', | ||
| chromium: 'chromium', | ||
| unknown: '', | ||
| }; | ||
| const binary = binaries[browserType]; | ||
| if (!binary) { | ||
| throw new Error(`Unknown browser type: ${browserType}`); | ||
| } | ||
| const oscribeProfile = getOScribeProfilePath(); | ||
| execSync(`${binary} --remote-debugging-port=${port} --user-data-dir="${oscribeProfile}" &`, { timeout: 5000 }); | ||
| } | ||
| else { | ||
| throw new Error(`Unsupported platform: ${process.platform}`); | ||
| } | ||
| // Wait for browser to start | ||
| await new Promise((resolve) => setTimeout(resolve, 3000)); | ||
| event.success = true; | ||
| console.log('[browser-restart]', event); | ||
| return true; | ||
| } | ||
| catch { | ||
| console.error('[browser-restart]', event); | ||
| return false; | ||
| } | ||
| } | ||
| /** | ||
| * Restore tabs by opening them in the browser | ||
| */ | ||
| async function restoreTabs(urls, port = 9222) { | ||
| if (urls.length === 0) | ||
| return 0; | ||
| try { | ||
| // Wait for CDP to be ready | ||
| let retries = 10; | ||
| while (retries > 0 && !(await isCDPEnabled(port))) { | ||
| await new Promise((resolve) => setTimeout(resolve, 1000)); | ||
| retries--; | ||
| } | ||
| if (!(await isCDPEnabled(port))) { | ||
| console.warn('[browser-restart] CDP not ready after browser launch'); | ||
| return 0; | ||
| } | ||
| // Connect to CDP | ||
| const cdp = await connectCDP({ port, host: 'localhost' }); | ||
| let restored = 0; | ||
| // Create new tabs for each URL | ||
| for (const url of urls) { | ||
| try { | ||
| await cdp.Target.createTarget({ url }); | ||
| restored++; | ||
| } | ||
| catch (error) { | ||
| console.warn(`[browser-restart] Failed to restore tab: ${url}`, error); | ||
| } | ||
| } | ||
| await disconnectCDP(cdp); | ||
| return restored; | ||
| } | ||
| catch (error) { | ||
| console.error('[browser-restart] Failed to restore tabs:', error); | ||
| return 0; | ||
| } | ||
| } | ||
| /** | ||
| * Restart browser with CDP enabled | ||
| * Saves tabs, closes browser, relaunches with remote debugging, restores tabs | ||
| * @param port - Remote debugging port (default: 9222) | ||
| * @param windowApp - Optional app name to target (e.g., "Google Chrome"). If not provided, uses active window. | ||
| */ | ||
| export async function restartBrowserWithCDP(port = 9222, windowApp) { | ||
| log(`>>> restartBrowserWithCDP called with port ${port}, windowApp=${windowApp || 'auto-detect'}`); | ||
| const event = { | ||
| action: 'restart_browser_cdp', | ||
| port, | ||
| windowApp: windowApp || 'auto-detect', | ||
| timestamp: new Date().toISOString(), | ||
| duration_ms: 0, | ||
| success: false, | ||
| }; | ||
| const start = Date.now(); | ||
| try { | ||
| // 1. Detect browser | ||
| log('Step 1: Detecting browser...'); | ||
| let targetApp; | ||
| if (windowApp) { | ||
| // Use provided app name | ||
| log(`Using provided app name: ${windowApp}`); | ||
| targetApp = windowApp; | ||
| } | ||
| else { | ||
| // Fall back to active window detection | ||
| log('No app name provided, detecting active window...'); | ||
| const activeWindow = await getActiveWindow(); | ||
| log(`Active window detected: ${JSON.stringify(activeWindow)}`); | ||
| console.error('[browser-restart] Active window:', activeWindow); | ||
| if (!activeWindow) { | ||
| throw new Error('No active window detected'); | ||
| } | ||
| if (!activeWindow.app) { | ||
| throw new Error('Active window has no app name'); | ||
| } | ||
| targetApp = activeWindow.app; | ||
| } | ||
| const browserInfo = await detectBrowser('', targetApp); | ||
| log(`Browser info: ${JSON.stringify(browserInfo)}`); | ||
| console.error('[browser-restart] Browser info:', browserInfo); | ||
| if (!browserInfo) { | ||
| log('ERROR: Browser not detected'); | ||
| throw new Error(`Window is not a supported Chromium browser (app: ${targetApp})`); | ||
| } | ||
| const browserType = browserInfo.type; | ||
| log(`Browser type: ${browserType}`); | ||
| // 2. Save open tabs | ||
| log('Step 2: Saving open tabs...'); | ||
| console.log('[browser-restart] Saving open tabs...'); | ||
| const tabs = await getOpenTabs(port); | ||
| log(`Saved ${tabs.length} tabs: ${JSON.stringify(tabs.slice(0, 3))}...`); | ||
| console.log(`[browser-restart] Saved ${tabs.length} tabs`); | ||
| // 3. Close browser | ||
| log('Step 3: Closing browser...'); | ||
| console.log('[browser-restart] Closing browser...'); | ||
| const closed = await closeBrowser(browserType); | ||
| log(`Browser closed: ${closed}`); | ||
| if (!closed) { | ||
| log('ERROR: Failed to close browser'); | ||
| throw new Error('Failed to close browser'); | ||
| } | ||
| // 3.5. Synchronize profile (Chrome 136+ requirement for CDP) | ||
| log('Step 3.5: Synchronizing profile to OScribe directory...'); | ||
| console.log('[browser-restart] Synchronizing Chrome profile for CDP compatibility...'); | ||
| const profileSynced = await syncProfileToOScribe(); | ||
| if (!profileSynced) { | ||
| log('WARNING: Could not sync profile, CDP may not work correctly'); | ||
| console.warn('[browser-restart] Profile sync failed, continuing with fallback'); | ||
| } | ||
| // 4. Launch with CDP | ||
| log(`Step 4: Launching ${browserType} with CDP on port ${port}...`); | ||
| console.log(`[browser-restart] Launching ${browserType} with CDP on port ${port}...`); | ||
| const launched = await launchBrowserWithCDP(browserType, port); | ||
| log(`Browser launched: ${launched}`); | ||
| if (!launched) { | ||
| log('ERROR: Failed to launch browser with CDP'); | ||
| throw new Error('Failed to launch browser with CDP'); | ||
| } | ||
| // 5. Restore tabs | ||
| log('Step 5: Restoring tabs...'); | ||
| console.log('[browser-restart] Restoring tabs...'); | ||
| const restored = await restoreTabs(tabs, port); | ||
| log(`Restored ${restored}/${tabs.length} tabs`); | ||
| console.log(`[browser-restart] Restored ${restored}/${tabs.length} tabs`); | ||
| // 6. Verify CDP is enabled | ||
| log('Step 6: Verifying CDP is enabled...'); | ||
| const cdpEnabled = await isCDPEnabled(port); | ||
| log(`CDP enabled: ${cdpEnabled}`); | ||
| event.duration_ms = Date.now() - start; | ||
| event.success = true; | ||
| log(`SUCCESS: Restart completed in ${event.duration_ms}ms`); | ||
| console.log('[browser-restart]', event); | ||
| return { | ||
| success: true, | ||
| browser: browserType, | ||
| tabsSaved: tabs.length, | ||
| tabsRestored: restored, | ||
| cdpEnabled, | ||
| }; | ||
| } | ||
| catch (error) { | ||
| event.duration_ms = Date.now() - start; | ||
| log(`ERROR: ${error instanceof Error ? error.message : String(error)}`); | ||
| log(`Stack: ${error instanceof Error ? error.stack : 'N/A'}`); | ||
| console.error('[browser-restart]', event); | ||
| return { | ||
| success: false, | ||
| browser: 'unknown', | ||
| tabsSaved: 0, | ||
| tabsRestored: 0, | ||
| cdpEnabled: false, | ||
| error: String(error), | ||
| }; | ||
| } | ||
| finally { | ||
| log('<<< restartBrowserWithCDP finished'); | ||
| } | ||
| } | ||
| //# sourceMappingURL=browser-restart.js.map |
| {"version":3,"file":"browser-restart.js","sourceRoot":"","sources":["../../../src/core/browser-restart.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Browser Detection Module | ||
| * | ||
| * Detects Chromium-based browsers (Chrome, Edge, Brave, Arc, Opera) and checks | ||
| * if remote debugging is enabled for CDP (Chrome DevTools Protocol) access. | ||
| * | ||
| * Cross-platform support: Windows, macOS, Linux | ||
| */ | ||
| export type BrowserProcessId = string & { | ||
| __brand: 'BrowserProcessId'; | ||
| }; | ||
| export type BrowserType = 'chrome' | 'edge' | 'brave' | 'arc' | 'opera' | 'chromium' | 'unknown'; | ||
| export interface BrowserInfo { | ||
| type: BrowserType; | ||
| processId: BrowserProcessId; | ||
| debugPort: number | null; | ||
| isDebuggingEnabled: boolean; | ||
| windowTitle: string; | ||
| windowClass: string; | ||
| } | ||
| /** | ||
| * Detect if a window is a Chromium-based browser | ||
| * | ||
| * @param windowClass - Window class name (Windows) or window title (macOS/Linux) | ||
| * @param processName - Optional process name for additional detection | ||
| * @returns BrowserInfo if browser detected, null otherwise | ||
| */ | ||
| export declare function detectBrowser(windowClass: string, processName?: string): Promise<BrowserInfo | null>; | ||
| /** | ||
| * Check if CDP is enabled on a specific port | ||
| * | ||
| * @param port - Port number to check (default: 9222) | ||
| * @returns true if CDP is available, false otherwise | ||
| */ | ||
| export declare function isCDPEnabled(port?: number): Promise<boolean>; | ||
| //# sourceMappingURL=browser.d.ts.map |
| {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../src/core/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG;IAAE,OAAO,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAGxE,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,MAAM,GACN,OAAO,GACP,KAAK,GACL,OAAO,GACP,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAeD;;;;;;GAMG;AACH,wBAAsB,aAAa,CACjC,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAmD7B;AA2JD;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,IAAI,SAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CA+BhE"} |
| /** | ||
| * Browser Detection Module | ||
| * | ||
| * Detects Chromium-based browsers (Chrome, Edge, Brave, Arc, Opera) and checks | ||
| * if remote debugging is enabled for CDP (Chrome DevTools Protocol) access. | ||
| * | ||
| * Cross-platform support: Windows, macOS, Linux | ||
| */ | ||
| // Simple logger | ||
| const logger = { | ||
| debug: (msg, data) => { | ||
| if (process.env['DEBUG']) | ||
| console.log(`[browser] ${msg}`, data ?? ''); | ||
| }, | ||
| info: (msg, data) => { | ||
| console.log(`[browser] ${msg}`, data ?? ''); | ||
| }, | ||
| warn: (msg, data) => { | ||
| console.warn(`[browser] ${msg}`, data ?? ''); | ||
| }, | ||
| }; | ||
| /** | ||
| * Detect if a window is a Chromium-based browser | ||
| * | ||
| * @param windowClass - Window class name (Windows) or window title (macOS/Linux) | ||
| * @param processName - Optional process name for additional detection | ||
| * @returns BrowserInfo if browser detected, null otherwise | ||
| */ | ||
| export async function detectBrowser(windowClass, processName) { | ||
| const platform = process.platform; | ||
| console.error('[BROWSER DEBUG] detectBrowser called:', { windowClass, processName, platform }); | ||
| logger.debug('Detecting browser', { windowClass, processName, platform }); | ||
| // Platform-specific detection | ||
| let browserType = 'unknown'; | ||
| const processId = ''; | ||
| if (platform === 'win32') { | ||
| // Windows: detect by window class | ||
| browserType = detectBrowserWindows(windowClass, processName); | ||
| } | ||
| else if (platform === 'darwin') { | ||
| // macOS: detect by app name | ||
| browserType = detectBrowserMacOS(windowClass, processName); | ||
| } | ||
| else if (platform === 'linux') { | ||
| // Linux: detect by window class | ||
| browserType = detectBrowserLinux(windowClass, processName); | ||
| } | ||
| if (browserType === 'unknown') { | ||
| logger.debug('Not a recognized Chromium browser'); | ||
| return null; | ||
| } | ||
| // Check if remote debugging is enabled | ||
| console.error('[BROWSER DEBUG] Calling detectCDPPort...'); | ||
| const debugPort = await detectCDPPort(); | ||
| const isDebuggingEnabled = debugPort !== null; | ||
| console.error('[BROWSER DEBUG] Browser detected:', { | ||
| type: browserType, | ||
| debugPort, | ||
| isDebuggingEnabled, | ||
| }); | ||
| logger.debug('Browser detected', { | ||
| type: browserType, | ||
| debugPort, | ||
| isDebuggingEnabled, | ||
| }); | ||
| return { | ||
| type: browserType, | ||
| processId, | ||
| debugPort, | ||
| isDebuggingEnabled, | ||
| windowTitle: windowClass, | ||
| windowClass, | ||
| }; | ||
| } | ||
| /** | ||
| * Detect browser type on Windows based on window class | ||
| */ | ||
| function detectBrowserWindows(windowClass, processName) { | ||
| const classLower = windowClass.toLowerCase(); | ||
| const procLower = processName?.toLowerCase() ?? ''; | ||
| // Chrome | ||
| if (classLower.includes('chrome_widgetwin') || procLower.includes('chrome')) { | ||
| if (procLower.includes('msedge') || classLower.includes('edge')) { | ||
| return 'edge'; | ||
| } | ||
| if (procLower.includes('brave')) { | ||
| return 'brave'; | ||
| } | ||
| if (procLower.includes('opera')) { | ||
| return 'opera'; | ||
| } | ||
| return 'chrome'; | ||
| } | ||
| // Edge (modern Chromium-based) | ||
| if (classLower.includes('applicationframewindow') || | ||
| procLower.includes('msedge')) { | ||
| return 'edge'; | ||
| } | ||
| // Brave | ||
| if (procLower.includes('brave')) { | ||
| return 'brave'; | ||
| } | ||
| // Arc | ||
| if (procLower.includes('arc')) { | ||
| return 'arc'; | ||
| } | ||
| // Opera | ||
| if (procLower.includes('opera')) { | ||
| return 'opera'; | ||
| } | ||
| return 'unknown'; | ||
| } | ||
| /** | ||
| * Detect browser type on macOS based on app name | ||
| */ | ||
| function detectBrowserMacOS(windowTitle, appName) { | ||
| const titleLower = windowTitle.toLowerCase(); | ||
| const appLower = appName?.toLowerCase() ?? ''; | ||
| // Chrome | ||
| if (appLower.includes('google chrome') || titleLower.includes('chrome')) { | ||
| return 'chrome'; | ||
| } | ||
| // Edge | ||
| if (appLower.includes('microsoft edge') || titleLower.includes('edge')) { | ||
| return 'edge'; | ||
| } | ||
| // Brave | ||
| if (appLower.includes('brave')) { | ||
| return 'brave'; | ||
| } | ||
| // Arc | ||
| if (appLower.includes('arc')) { | ||
| return 'arc'; | ||
| } | ||
| // Opera | ||
| if (appLower.includes('opera')) { | ||
| return 'opera'; | ||
| } | ||
| // Generic Chromium | ||
| if (appLower.includes('chromium')) { | ||
| return 'chromium'; | ||
| } | ||
| return 'unknown'; | ||
| } | ||
| /** | ||
| * Detect browser type on Linux based on window class | ||
| */ | ||
| function detectBrowserLinux(windowClass, processName) { | ||
| const classLower = windowClass.toLowerCase(); | ||
| const procLower = processName?.toLowerCase() ?? ''; | ||
| // Chrome | ||
| if (classLower.includes('chrome') || procLower.includes('chrome')) { | ||
| return 'chrome'; | ||
| } | ||
| // Edge | ||
| if (classLower.includes('edge') || procLower.includes('msedge')) { | ||
| return 'edge'; | ||
| } | ||
| // Brave | ||
| if (classLower.includes('brave') || procLower.includes('brave')) { | ||
| return 'brave'; | ||
| } | ||
| // Arc | ||
| if (procLower.includes('arc')) { | ||
| return 'arc'; | ||
| } | ||
| // Opera | ||
| if (classLower.includes('opera') || procLower.includes('opera')) { | ||
| return 'opera'; | ||
| } | ||
| // Generic Chromium | ||
| if (classLower.includes('chromium') || procLower.includes('chromium')) { | ||
| return 'chromium'; | ||
| } | ||
| return 'unknown'; | ||
| } | ||
| /** | ||
| * Detect CDP port by checking default ports | ||
| * Returns port number if CDP is enabled, null otherwise | ||
| */ | ||
| async function detectCDPPort() { | ||
| const defaultPort = 9222; | ||
| const portsToCheck = [defaultPort, 9223, 9224]; // Check multiple ports | ||
| for (const port of portsToCheck) { | ||
| if (await isCDPEnabled(port)) { | ||
| return port; | ||
| } | ||
| } | ||
| return null; | ||
| } | ||
| /** | ||
| * Check if CDP is enabled on a specific port | ||
| * | ||
| * @param port - Port number to check (default: 9222) | ||
| * @returns true if CDP is available, false otherwise | ||
| */ | ||
| export async function isCDPEnabled(port = 9222) { | ||
| const controller = new AbortController(); | ||
| const timeout = setTimeout(() => controller.abort(), 2000); | ||
| try { | ||
| console.error(`[browser] Checking CDP on port ${port}...`); | ||
| const response = await fetch(`http://localhost:${port}/json/version`, { | ||
| signal: controller.signal, | ||
| }); | ||
| console.error(`[browser] CDP response.ok:`, response.ok); | ||
| if (response.ok) { | ||
| const data = (await response.json()); | ||
| const enabled = Boolean(data.webSocketDebuggerUrl); | ||
| console.error(`[browser] CDP enabled:`, enabled, 'data:', data); | ||
| return enabled; | ||
| } | ||
| console.error(`[browser] CDP response not OK`); | ||
| return false; | ||
| } | ||
| catch (error) { | ||
| // Connection refused or timeout - CDP not enabled | ||
| console.error(`[browser] CDP error:`, String(error)); | ||
| logger.debug(`CDP not available on port ${port}`, { | ||
| error: String(error), | ||
| }); | ||
| return false; | ||
| } | ||
| finally { | ||
| clearTimeout(timeout); | ||
| } | ||
| } | ||
| //# sourceMappingURL=browser.js.map |
| {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../../src/core/browser.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * CDP Client Module | ||
| * | ||
| * Manages connections to Chrome DevTools Protocol with retry logic, | ||
| * circuit breaker pattern, and proper error handling. | ||
| * | ||
| * Cross-platform support: Windows, macOS, Linux | ||
| */ | ||
| import CDP from 'chrome-remote-interface'; | ||
| export interface CDPConnectionConfig { | ||
| host?: string; | ||
| port?: number; | ||
| secure?: boolean; | ||
| target?: string; | ||
| } | ||
| export type CDPConnection = CDP.Client; | ||
| export declare class CDPConnectionError extends Error { | ||
| code: string; | ||
| constructor(message: string, code: string); | ||
| } | ||
| export declare class CDPNotEnabledError extends Error { | ||
| constructor(message: string); | ||
| } | ||
| export declare class CDPTimeoutError extends Error { | ||
| constructor(message: string); | ||
| } | ||
| /** | ||
| * Connect to Chrome DevTools Protocol | ||
| * | ||
| * @param config - Connection configuration | ||
| * @returns CDP client instance | ||
| * @throws CDPConnectionError if connection fails | ||
| */ | ||
| export declare function connectCDP(config?: CDPConnectionConfig): Promise<CDPConnection>; | ||
| /** | ||
| * Get the active tab target | ||
| * | ||
| * @param connection - Optional CDP connection (if not provided, creates a new one) | ||
| * @returns Active tab target or null if no tab is active | ||
| */ | ||
| export declare function getActiveTab(_connection?: CDPConnection): Promise<CDP.Target | null>; | ||
| /** | ||
| * Disconnect from CDP and cleanup | ||
| * | ||
| * @param connection - CDP connection to close | ||
| */ | ||
| export declare function disconnectCDP(connection: CDPConnection): Promise<void>; | ||
| //# sourceMappingURL=cdp-client.d.ts.map |
| {"version":3,"file":"cdp-client.d.ts","sourceRoot":"","sources":["../../../src/core/cdp-client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,GAAG,MAAM,yBAAyB,CAAC;AAG1C,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC;AAGvC,qBAAa,kBAAmB,SAAQ,KAAK;IACP,IAAI,EAAE,MAAM;gBAApC,OAAO,EAAE,MAAM,EAAS,IAAI,EAAE,MAAM;CAIjD;AAED,qBAAa,kBAAmB,SAAQ,KAAK;gBAC/B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,eAAgB,SAAQ,KAAK;gBAC5B,OAAO,EAAE,MAAM;CAI5B;AAwBD;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,MAAM,GAAE,mBAAwB,GAC/B,OAAO,CAAC,aAAa,CAAC,CAyExB;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,WAAW,CAAC,EAAE,aAAa,GAC1B,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CA6B5B;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,aAAa,GACxB,OAAO,CAAC,IAAI,CAAC,CAOf"} |
| /** | ||
| * CDP Client Module | ||
| * | ||
| * Manages connections to Chrome DevTools Protocol with retry logic, | ||
| * circuit breaker pattern, and proper error handling. | ||
| * | ||
| * Cross-platform support: Windows, macOS, Linux | ||
| */ | ||
| import CDP from 'chrome-remote-interface'; | ||
| // Custom error classes | ||
| export class CDPConnectionError extends Error { | ||
| code; | ||
| constructor(message, code) { | ||
| super(message); | ||
| this.code = code; | ||
| this.name = 'CDPConnectionError'; | ||
| } | ||
| } | ||
| export class CDPNotEnabledError extends Error { | ||
| constructor(message) { | ||
| super(message); | ||
| this.name = 'CDPNotEnabledError'; | ||
| } | ||
| } | ||
| export class CDPTimeoutError extends Error { | ||
| constructor(message) { | ||
| super(message); | ||
| this.name = 'CDPTimeoutError'; | ||
| } | ||
| } | ||
| // Circuit breaker state | ||
| let circuitBreakerFailures = 0; | ||
| let circuitBreakerLastFailure = null; | ||
| const CIRCUIT_BREAKER_THRESHOLD = 3; | ||
| const CIRCUIT_BREAKER_RESET_TIME = 30000; // 30 seconds | ||
| // Simple logger | ||
| const logger = { | ||
| debug: (msg, data) => { | ||
| if (process.env['DEBUG']) | ||
| console.log(`[cdp-client] ${msg}`, data ?? ''); | ||
| }, | ||
| info: (msg, data) => { | ||
| console.log(`[cdp-client] ${msg}`, data ?? ''); | ||
| }, | ||
| warn: (msg, data) => { | ||
| console.warn(`[cdp-client] ${msg}`, data ?? ''); | ||
| }, | ||
| error: (msg, data) => { | ||
| console.error(`[cdp-client] ${msg}`, data ?? ''); | ||
| }, | ||
| }; | ||
| /** | ||
| * Connect to Chrome DevTools Protocol | ||
| * | ||
| * @param config - Connection configuration | ||
| * @returns CDP client instance | ||
| * @throws CDPConnectionError if connection fails | ||
| */ | ||
| export async function connectCDP(config = {}) { | ||
| const { host = 'localhost', port = 9222, secure = false, target } = config; | ||
| // Check circuit breaker | ||
| if (isCircuitBreakerOpen()) { | ||
| throw new CDPConnectionError('Circuit breaker open - too many consecutive failures', 'CIRCUIT_BREAKER_OPEN'); | ||
| } | ||
| // Wide event pattern - single log for entire operation | ||
| const event = { | ||
| action: 'cdp_connect', | ||
| host, | ||
| port, | ||
| timestamp: new Date().toISOString(), | ||
| duration_ms: 0, | ||
| success: false, | ||
| }; | ||
| const startTime = Date.now(); | ||
| try { | ||
| logger.debug('Connecting to CDP', { host, port, target }); | ||
| // Retry with exponential backoff: 500ms β 1000ms β 2000ms | ||
| const connection = await retryWithBackoff(() => CDP({ | ||
| host, | ||
| port, | ||
| secure, | ||
| target, | ||
| }), 3, 500); | ||
| event.duration_ms = Date.now() - startTime; | ||
| event.success = true; | ||
| // Reset circuit breaker on success | ||
| circuitBreakerFailures = 0; | ||
| circuitBreakerLastFailure = null; | ||
| logger.info('CDP connection established', event); | ||
| return connection; | ||
| } | ||
| catch (error) { | ||
| event.duration_ms = Date.now() - startTime; | ||
| // Increment circuit breaker | ||
| circuitBreakerFailures++; | ||
| circuitBreakerLastFailure = Date.now(); | ||
| logger.error('CDP connection failed', { ...event, error: String(error) }); | ||
| if (error.message.includes('ECONNREFUSED')) { | ||
| throw new CDPNotEnabledError('Remote debugging not enabled - launch browser with --remote-debugging-port=9222'); | ||
| } | ||
| if (error.message.includes('timeout')) { | ||
| throw new CDPTimeoutError('CDP connection timeout after 5 seconds'); | ||
| } | ||
| throw new CDPConnectionError(`Failed to connect to CDP: ${error.message}`, 'CONNECTION_FAILED'); | ||
| } | ||
| } | ||
| /** | ||
| * Get the active tab target | ||
| * | ||
| * @param connection - Optional CDP connection (if not provided, creates a new one) | ||
| * @returns Active tab target or null if no tab is active | ||
| */ | ||
| export async function getActiveTab(_connection) { | ||
| try { | ||
| const targets = (await CDP.List()); | ||
| // Find the first "page" type target (browser tab) | ||
| // Accept chrome://newtab/ for fresh browser starts, but exclude other chrome:// URLs | ||
| const activeTab = targets.find((target) => target.type === 'page' && (!target.url.startsWith('chrome://') || | ||
| target.url.startsWith('chrome://newtab/'))); | ||
| if (!activeTab) { | ||
| logger.warn('No active tab found'); | ||
| return null; | ||
| } | ||
| logger.debug('Active tab found', { | ||
| title: activeTab.title, | ||
| url: activeTab.url, | ||
| id: activeTab.id, | ||
| }); | ||
| return activeTab; | ||
| } | ||
| catch (error) { | ||
| logger.error('Failed to get active tab', { error: String(error) }); | ||
| return null; | ||
| } | ||
| } | ||
| /** | ||
| * Disconnect from CDP and cleanup | ||
| * | ||
| * @param connection - CDP connection to close | ||
| */ | ||
| export async function disconnectCDP(connection) { | ||
| try { | ||
| await connection.close(); | ||
| logger.debug('CDP connection closed'); | ||
| } | ||
| catch (error) { | ||
| logger.error('Failed to close CDP connection', { error: String(error) }); | ||
| } | ||
| } | ||
| /** | ||
| * Retry a function with exponential backoff | ||
| * | ||
| * @param fn - Function to retry | ||
| * @param maxAttempts - Maximum number of attempts (default: 3) | ||
| * @param initialDelay - Initial delay in ms (default: 500) | ||
| * @returns Result of the function | ||
| */ | ||
| async function retryWithBackoff(fn, maxAttempts = 3, initialDelay = 500) { | ||
| let lastError = null; | ||
| for (let attempt = 0; attempt < maxAttempts; attempt++) { | ||
| try { | ||
| return await fn(); | ||
| } | ||
| catch (error) { | ||
| lastError = error; | ||
| if (attempt < maxAttempts - 1) { | ||
| const delay = initialDelay * Math.pow(2, attempt); | ||
| logger.debug(`Retry attempt ${attempt + 1}/${maxAttempts} after ${delay}ms`); | ||
| await new Promise((resolve) => setTimeout(resolve, delay)); | ||
| } | ||
| } | ||
| } | ||
| throw lastError; | ||
| } | ||
| /** | ||
| * Check if circuit breaker is open (too many failures) | ||
| */ | ||
| function isCircuitBreakerOpen() { | ||
| if (circuitBreakerFailures < CIRCUIT_BREAKER_THRESHOLD) { | ||
| return false; | ||
| } | ||
| // Check if reset time has passed | ||
| if (circuitBreakerLastFailure && | ||
| Date.now() - circuitBreakerLastFailure > CIRCUIT_BREAKER_RESET_TIME) { | ||
| // Reset circuit breaker | ||
| circuitBreakerFailures = 0; | ||
| circuitBreakerLastFailure = null; | ||
| logger.info('Circuit breaker reset'); | ||
| return false; | ||
| } | ||
| logger.warn('Circuit breaker open', { | ||
| failures: circuitBreakerFailures, | ||
| lastFailure: circuitBreakerLastFailure, | ||
| }); | ||
| return true; | ||
| } | ||
| //# sourceMappingURL=cdp-client.js.map |
| {"version":3,"file":"cdp-client.js","sourceRoot":"","sources":["../../../src/core/cdp-client.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * CDP Elements Module | ||
| * | ||
| * Extracts DOM elements from browser via Chrome DevTools Protocol | ||
| * and converts them to OScribe's UIElement format. | ||
| * | ||
| * Uses Accessibility Tree for semantic element information | ||
| * and DOM.getBoxModel() for precise bounding boxes. | ||
| */ | ||
| import type { CDPConnection } from './cdp-client.js'; | ||
| import type { UIElement } from './uiautomation.js'; | ||
| /** | ||
| * Get all interactive elements from the page via CDP | ||
| * | ||
| * @param cdp - CDP connection instance | ||
| * @returns Array of UIElements | ||
| */ | ||
| /** | ||
| * Get Chrome UI offset (toolbar height) | ||
| * Returns the exact height of Chrome's UI (title bar + tabs + address bar) | ||
| */ | ||
| export declare function getChromeUIOffset(cdp: CDPConnection): Promise<number>; | ||
| export declare function getInteractiveElements(cdp: CDPConnection): Promise<UIElement[]>; | ||
| /** | ||
| * Get element at specific coordinates | ||
| * | ||
| * @param cdp - CDP connection | ||
| * @param x - X coordinate | ||
| * @param y - Y coordinate | ||
| * @returns UIElement at coordinates or null | ||
| */ | ||
| export declare function getElementAtCoordinates(cdp: CDPConnection, x: number, y: number): Promise<UIElement | null>; | ||
| //# sourceMappingURL=cdp-elements.d.ts.map |
| {"version":3,"file":"cdp-elements.d.ts","sourceRoot":"","sources":["../../../src/core/cdp-elements.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAiGnD;;;;;GAKG;AACH;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAkB3E;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,aAAa,GACjB,OAAO,CAAC,SAAS,EAAE,CAAC,CAoDtB;AAkHD;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,aAAa,EAClB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,GACR,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA+B3B"} |
| /** | ||
| * CDP Elements Module | ||
| * | ||
| * Extracts DOM elements from browser via Chrome DevTools Protocol | ||
| * and converts them to OScribe's UIElement format. | ||
| * | ||
| * Uses Accessibility Tree for semantic element information | ||
| * and DOM.getBoxModel() for precise bounding boxes. | ||
| */ | ||
| // Map ARIA/AX roles to UIElement types | ||
| const ROLE_TO_TYPE = { | ||
| button: 'Button', | ||
| link: 'Hyperlink', | ||
| textbox: 'Edit', | ||
| 'search box': 'Edit', | ||
| combobox: 'ComboBox', | ||
| checkbox: 'CheckBox', | ||
| radio: 'RadioButton', | ||
| menuitem: 'MenuItem', | ||
| menuitemcheckbox: 'MenuItem', | ||
| menuitemradio: 'MenuItem', | ||
| tab: 'TabItem', | ||
| tabpanel: 'TabItem', | ||
| heading: 'Text', | ||
| image: 'Image', | ||
| img: 'Image', | ||
| list: 'List', | ||
| listitem: 'ListItem', | ||
| table: 'Table', | ||
| row: 'DataItem', | ||
| cell: 'DataItem', | ||
| columnheader: 'Header', | ||
| rowheader: 'Header', | ||
| slider: 'Slider', | ||
| spinbutton: 'Spinner', | ||
| progressbar: 'ProgressBar', | ||
| scrollbar: 'ScrollBar', | ||
| toolbar: 'ToolBar', | ||
| status: 'StatusBar', | ||
| alert: 'Text', | ||
| dialog: 'Window', | ||
| document: 'Document', | ||
| }; | ||
| // Interactive roles that should be included | ||
| const INTERACTIVE_ROLES = new Set([ | ||
| 'button', | ||
| 'link', | ||
| 'textbox', | ||
| 'search box', | ||
| 'combobox', | ||
| 'checkbox', | ||
| 'radio', | ||
| 'menuitem', | ||
| 'menuitemcheckbox', | ||
| 'menuitemradio', | ||
| 'tab', | ||
| 'slider', | ||
| 'spinbutton', | ||
| ]); | ||
| // Simple logger | ||
| const logger = { | ||
| debug: (msg, data) => { | ||
| if (process.env['DEBUG']) | ||
| console.log(`[cdp-elements] ${msg}`, data ?? ''); | ||
| }, | ||
| info: (msg, data) => { | ||
| console.log(`[cdp-elements] ${msg}`, data ?? ''); | ||
| }, | ||
| warn: (msg, data) => { | ||
| console.warn(`[cdp-elements] ${msg}`, data ?? ''); | ||
| }, | ||
| error: (msg, data) => { | ||
| console.error(`[cdp-elements] ${msg}`, data ?? ''); | ||
| }, | ||
| }; | ||
| /** | ||
| * Get all interactive elements from the page via CDP | ||
| * | ||
| * @param cdp - CDP connection instance | ||
| * @returns Array of UIElements | ||
| */ | ||
| /** | ||
| * Get Chrome UI offset (toolbar height) | ||
| * Returns the exact height of Chrome's UI (title bar + tabs + address bar) | ||
| */ | ||
| export async function getChromeUIOffset(cdp) { | ||
| try { | ||
| // Execute JavaScript to get the difference between outer and inner height | ||
| const result = await cdp.Runtime.evaluate({ | ||
| expression: 'window.outerHeight - window.innerHeight', | ||
| returnByValue: true, | ||
| }); | ||
| if (result.result?.value && typeof result.result.value === 'number') { | ||
| return result.result.value; | ||
| } | ||
| // Fallback: estimate based on platform | ||
| return process.platform === 'darwin' ? 140 : 120; | ||
| } | ||
| catch { | ||
| // Fallback on error | ||
| return process.platform === 'darwin' ? 140 : 120; | ||
| } | ||
| } | ||
| export async function getInteractiveElements(cdp) { | ||
| // Wide event pattern - single log for entire operation | ||
| const event = { | ||
| action: 'cdp_get_elements', | ||
| timestamp: new Date().toISOString(), | ||
| duration_ms: 0, | ||
| success: false, | ||
| elementsFound: 0, | ||
| }; | ||
| const startTime = Date.now(); | ||
| try { | ||
| // Enable Accessibility domain | ||
| await cdp.Accessibility.enable(); | ||
| // Get the full accessibility tree | ||
| // Pass empty object {} as required by CDP API | ||
| const { nodes } = await cdp.Accessibility.getFullAXTree({}); | ||
| logger.debug(`Retrieved ${nodes.length} accessibility nodes`); | ||
| // Filter and convert nodes to UIElements | ||
| const elements = []; | ||
| for (const node of nodes) { | ||
| const element = await convertAXNodeToUIElement(cdp, node); | ||
| if (element) { | ||
| elements.push(element); | ||
| } | ||
| } | ||
| // Disable Accessibility domain to save resources | ||
| await cdp.Accessibility.disable(); | ||
| event.duration_ms = Date.now() - startTime; | ||
| event.success = true; | ||
| event.elementsFound = elements.length; | ||
| logger.info('Interactive elements extracted', event); | ||
| return elements; | ||
| } | ||
| catch (error) { | ||
| event.duration_ms = Date.now() - startTime; | ||
| logger.error('Failed to get interactive elements', { | ||
| ...event, | ||
| error: String(error), | ||
| }); | ||
| return []; | ||
| } | ||
| } | ||
| /** | ||
| * Convert AX node to UIElement | ||
| * | ||
| * @param cdp - CDP connection | ||
| * @param node - Accessibility node | ||
| * @returns UIElement or null if node should be filtered | ||
| */ | ||
| async function convertAXNodeToUIElement(cdp, node) { | ||
| // Skip ignored nodes | ||
| if (node.ignored || !node.role) { | ||
| return null; | ||
| } | ||
| const role = node.role.value; | ||
| const type = ROLE_TO_TYPE[role] || 'Control'; | ||
| // Filter non-interactive elements (unless they're specific types we want) | ||
| if (!INTERACTIVE_ROLES.has(role) && type === 'Control') { | ||
| return null; | ||
| } | ||
| const name = node.name?.value || ''; | ||
| // Skip unnamed non-interactive elements | ||
| if (!name && !INTERACTIVE_ROLES.has(role)) { | ||
| return null; | ||
| } | ||
| // Get bounding box if we have a DOM node ID | ||
| let bounds = { x: 0, y: 0, width: 0, height: 0 }; | ||
| if (node.backendDOMNodeId) { | ||
| bounds = await getBoundingBox(cdp, node.backendDOMNodeId); | ||
| } | ||
| // Skip elements with no size (hidden or not rendered) | ||
| if (bounds.width === 0 || bounds.height === 0) { | ||
| return null; | ||
| } | ||
| const element = { | ||
| type, | ||
| name, | ||
| x: bounds.x, | ||
| y: bounds.y, | ||
| width: bounds.width, | ||
| height: bounds.height, | ||
| isEnabled: !node.disabled && !node.readonly, | ||
| }; | ||
| // Add optional properties only if they exist | ||
| if (node.description?.value) { | ||
| element.description = node.description.value; | ||
| } | ||
| if (node.value?.value) { | ||
| element.value = node.value.value; | ||
| } | ||
| return element; | ||
| } | ||
| /** | ||
| * Get bounding box for a DOM node | ||
| * | ||
| * @param cdp - CDP connection | ||
| * @param nodeId - Backend DOM node ID | ||
| * @returns Bounding box { x, y, width, height } | ||
| */ | ||
| async function getBoundingBox(cdp, nodeId) { | ||
| try { | ||
| const { model } = await cdp.DOM.getBoxModel({ backendNodeId: nodeId }); | ||
| if (!model) { | ||
| return { x: 0, y: 0, width: 0, height: 0 }; | ||
| } | ||
| const boxModel = model; | ||
| // Content quad is [x1, y1, x2, y2, x3, y3, x4, y4] | ||
| // We want top-left corner (x1, y1) and dimensions | ||
| const x = Math.min(boxModel.content[0] ?? 0, boxModel.content[2] ?? 0, boxModel.content[4] ?? 0, boxModel.content[6] ?? 0); | ||
| const y = Math.min(boxModel.content[1] ?? 0, boxModel.content[3] ?? 0, boxModel.content[5] ?? 0, boxModel.content[7] ?? 0); | ||
| const width = boxModel.width; | ||
| const height = boxModel.height; | ||
| return { x, y, width, height }; | ||
| } | ||
| catch (error) { | ||
| // Node might not have a box model (e.g., display: none) | ||
| logger.debug(`Failed to get box model for node ${nodeId}`, { | ||
| error: String(error), | ||
| }); | ||
| return { x: 0, y: 0, width: 0, height: 0 }; | ||
| } | ||
| } | ||
| /** | ||
| * Get element at specific coordinates | ||
| * | ||
| * @param cdp - CDP connection | ||
| * @param x - X coordinate | ||
| * @param y - Y coordinate | ||
| * @returns UIElement at coordinates or null | ||
| */ | ||
| export async function getElementAtCoordinates(cdp, x, y) { | ||
| try { | ||
| // Get node at coordinates | ||
| const { nodeId } = await cdp.DOM.getNodeForLocation({ x, y }); | ||
| if (!nodeId) { | ||
| return null; | ||
| } | ||
| // Get accessibility node for this DOM node | ||
| await cdp.Accessibility.enable(); | ||
| const { nodes } = await cdp.Accessibility.getPartialAXTree({ | ||
| nodeId, | ||
| fetchRelatives: false, | ||
| }); | ||
| await cdp.Accessibility.disable(); | ||
| if (nodes.length === 0) { | ||
| return null; | ||
| } | ||
| const axNode = nodes[0]; | ||
| return convertAXNodeToUIElement(cdp, axNode); | ||
| } | ||
| catch (error) { | ||
| logger.error('Failed to get element at coordinates', { | ||
| x, | ||
| y, | ||
| error: String(error), | ||
| }); | ||
| return null; | ||
| } | ||
| } | ||
| //# sourceMappingURL=cdp-elements.js.map |
| {"version":3,"file":"cdp-elements.js","sourceRoot":"","sources":["../../../src/core/cdp-elements.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * VoiceOver Screen Reader Management | ||
| * | ||
| * Manages VoiceOver for Electron app accessibility on macOS. | ||
| * VoiceOver triggers Chromium/Electron to expose accessibility trees | ||
| * that are otherwise invisible to standard accessibility APIs. | ||
| * | ||
| * Why VoiceOver is needed: | ||
| * - Electron/Chromium only exposes its accessibility tree when a screen reader is detected | ||
| * - VoiceOver on macOS triggers this behavior system-wide | ||
| * - Without it, Electron apps show minimal UI elements (3-5 instead of 100+) | ||
| * | ||
| * Platform note: | ||
| * - This module only works on macOS (darwin) | ||
| * - On Windows/Linux, all functions return false/no-op | ||
| */ | ||
| export interface VoiceOverStatus { | ||
| available: boolean; | ||
| running: boolean; | ||
| canControl: boolean; | ||
| platform: string; | ||
| } | ||
| /** | ||
| * Check if VoiceOver is available on this system | ||
| * Only available on macOS | ||
| */ | ||
| export declare function isVoiceOverAvailable(): boolean; | ||
| /** | ||
| * Check if VoiceOver is currently running | ||
| */ | ||
| export declare function isVoiceOverRunning(): Promise<boolean>; | ||
| /** | ||
| * Start VoiceOver | ||
| * @param silent - If true, mute speech output (keep accessibility tree access) | ||
| */ | ||
| export declare function startVoiceOver(silent?: boolean): Promise<boolean>; | ||
| /** | ||
| * Stop VoiceOver | ||
| * @param restoreSpeech - If true, unmute before stopping | ||
| */ | ||
| export declare function stopVoiceOver(restoreSpeech?: boolean): Promise<boolean>; | ||
| /** | ||
| * Get VoiceOver status | ||
| */ | ||
| export declare function getVoiceOverStatus(): Promise<VoiceOverStatus>; | ||
| /** | ||
| * Ensure VoiceOver is running for Electron app accessibility | ||
| * Starts VoiceOver in silent mode if not already running | ||
| * Used by uiautomation.ts for Electron apps with low element counts | ||
| */ | ||
| export declare function ensureVoiceOverForElectron(): Promise<boolean>; | ||
| //# sourceMappingURL=voiceover.d.ts.map |
| {"version":3,"file":"voiceover.d.ts","sourceRoot":"","sources":["../../../src/core/voiceover.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAyBH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAc3D;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,MAAM,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAsFrE;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,aAAa,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CA+B3E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC,CAQnE;AAqBD;;;;GAIG;AACH,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,OAAO,CAAC,CAanE"} |
| /** | ||
| * VoiceOver Screen Reader Management | ||
| * | ||
| * Manages VoiceOver for Electron app accessibility on macOS. | ||
| * VoiceOver triggers Chromium/Electron to expose accessibility trees | ||
| * that are otherwise invisible to standard accessibility APIs. | ||
| * | ||
| * Why VoiceOver is needed: | ||
| * - Electron/Chromium only exposes its accessibility tree when a screen reader is detected | ||
| * - VoiceOver on macOS triggers this behavior system-wide | ||
| * - Without it, Electron apps show minimal UI elements (3-5 instead of 100+) | ||
| * | ||
| * Platform note: | ||
| * - This module only works on macOS (darwin) | ||
| * - On Windows/Linux, all functions return false/no-op | ||
| */ | ||
| import { exec } from 'node:child_process'; | ||
| import { promisify } from 'node:util'; | ||
| const execAsync = promisify(exec); | ||
| const isMacOS = process.platform === 'darwin'; | ||
| // Simple logger for VoiceOver module | ||
| const logger = { | ||
| debug: (msg, data) => { | ||
| if (process.env['DEBUG']) | ||
| console.log(`[voiceover] ${msg}`, data ?? ''); | ||
| }, | ||
| info: (msg, data) => { | ||
| console.log(`[voiceover] ${msg}`, data ?? ''); | ||
| }, | ||
| warn: (msg, data) => { | ||
| console.warn(`[voiceover] ${msg}`, data ?? ''); | ||
| }, | ||
| error: (msg, data) => { | ||
| console.error(`[voiceover] ${msg}`, data ?? ''); | ||
| }, | ||
| }; | ||
| /** | ||
| * Check if VoiceOver is available on this system | ||
| * Only available on macOS | ||
| */ | ||
| export function isVoiceOverAvailable() { | ||
| return isMacOS; | ||
| } | ||
| /** | ||
| * Check if VoiceOver is currently running | ||
| */ | ||
| export async function isVoiceOverRunning() { | ||
| if (!isMacOS) { | ||
| return false; | ||
| } | ||
| try { | ||
| const { stdout } = await execAsync(`osascript -e 'tell application "System Events" to return (name of processes) contains "VoiceOver"'`); | ||
| return stdout.trim().toLowerCase() === 'true'; | ||
| } | ||
| catch { | ||
| logger.debug('Failed to check VoiceOver status'); | ||
| return false; | ||
| } | ||
| } | ||
| /** | ||
| * Start VoiceOver | ||
| * @param silent - If true, mute speech output (keep accessibility tree access) | ||
| */ | ||
| export async function startVoiceOver(silent = false) { | ||
| if (!isMacOS) { | ||
| logger.debug('VoiceOver only available on macOS'); | ||
| return false; | ||
| } | ||
| try { | ||
| // If VoiceOver is already running, stop it first to apply new preferences | ||
| if (await isVoiceOverRunning()) { | ||
| logger.debug('VoiceOver already running, restarting to apply preferences...'); | ||
| await execAsync('killall VoiceOver'); | ||
| await new Promise((resolve) => setTimeout(resolve, 1000)); | ||
| } | ||
| logger.info('Starting VoiceOver...'); | ||
| // Configure speech settings BEFORE starting VoiceOver | ||
| // VoiceOver MUST be stopped when we write these preferences | ||
| // Write to BOTH preference domains to ensure settings are applied | ||
| if (silent) { | ||
| // Set volume to 0 in both preference domains | ||
| await execAsync('defaults write com.apple.VoiceOver4.default SCRAudioVolume -float 0.0'); | ||
| await execAsync('defaults write com.apple.VoiceOver SCRAudioVolume -float 0.0'); | ||
| // Force macOS to sync the preferences to disk | ||
| await execAsync('killall -u $(whoami) cfprefsd'); | ||
| logger.debug('VoiceOver audio volume set to 0 in both preference domains'); | ||
| } | ||
| else { | ||
| // Restore volume to default (0.8) in both preference domains | ||
| await execAsync('defaults write com.apple.VoiceOver4.default SCRAudioVolume -float 0.8'); | ||
| await execAsync('defaults write com.apple.VoiceOver SCRAudioVolume -float 0.8'); | ||
| // Force macOS to sync the preferences to disk | ||
| await execAsync('killall -u $(whoami) cfprefsd'); | ||
| logger.debug('VoiceOver audio volume restored to 0.8 in both preference domains'); | ||
| } | ||
| // Start VoiceOver using open command (more reliable than AppleScript) | ||
| await execAsync('open -a VoiceOver'); | ||
| // Wait for VoiceOver to start with retry logic | ||
| // macOS Sequoia 15.x can take 6-10 seconds to start VoiceOver | ||
| let running = false; | ||
| const maxAttempts = 10; | ||
| for (let i = 0; i < maxAttempts; i++) { | ||
| await new Promise((resolve) => setTimeout(resolve, 1000)); | ||
| running = await isVoiceOverRunning(); | ||
| if (running) { | ||
| logger.debug(`VoiceOver started after ${i + 1} seconds`); | ||
| break; | ||
| } | ||
| } | ||
| if (!running) { | ||
| logger.warn('VoiceOver did not start after 10 seconds'); | ||
| return false; | ||
| } | ||
| // If silent mode requested, mute VoiceOver after it starts | ||
| // Use keyboard shortcuts to control volume (VO + Command + Down Arrow to decrease) | ||
| if (silent) { | ||
| logger.debug('Muting VoiceOver audio using keyboard shortcuts...'); | ||
| // Wait for VoiceOver to fully initialize | ||
| await new Promise((resolve) => setTimeout(resolve, 2000)); | ||
| // Send VO+Command+Down Arrow 10 times to set volume to 0 | ||
| // VO = Control+Option | ||
| for (let i = 0; i < 10; i++) { | ||
| await execAsync('osascript -e \'tell application "System Events" to keystroke (ASCII character 31) using {control down, option down, command down}\''); | ||
| await new Promise((resolve) => setTimeout(resolve, 100)); | ||
| } | ||
| logger.debug('VoiceOver volume muted via keyboard shortcuts'); | ||
| } | ||
| logger.info('VoiceOver started successfully'); | ||
| return true; | ||
| } | ||
| catch (error) { | ||
| logger.error('Failed to start VoiceOver', { error: String(error) }); | ||
| return false; | ||
| } | ||
| } | ||
| /** | ||
| * Stop VoiceOver | ||
| * @param restoreSpeech - If true, unmute before stopping | ||
| */ | ||
| export async function stopVoiceOver(restoreSpeech = false) { | ||
| if (!isMacOS) { | ||
| return true; // No-op on non-macOS | ||
| } | ||
| try { | ||
| if (!(await isVoiceOverRunning())) { | ||
| logger.debug('VoiceOver not running'); | ||
| return true; | ||
| } | ||
| if (restoreSpeech) { | ||
| // Re-enable speech by unchecking "Mute speech" | ||
| await execAsync('defaults write com.apple.VoiceOver4.default SCRMuteSpeech -int 0'); | ||
| logger.debug('VoiceOver speech unmuted in preferences (SCRMuteSpeech=0)'); | ||
| } | ||
| logger.info('Stopping VoiceOver...'); | ||
| // Stop VoiceOver using killall (more reliable) | ||
| await execAsync('killall VoiceOver'); | ||
| // Wait for VoiceOver to stop | ||
| await new Promise((resolve) => setTimeout(resolve, 1000)); | ||
| logger.info('VoiceOver stopped'); | ||
| return true; | ||
| } | ||
| catch (error) { | ||
| logger.error('Failed to stop VoiceOver', { error: String(error) }); | ||
| return false; | ||
| } | ||
| } | ||
| /** | ||
| * Get VoiceOver status | ||
| */ | ||
| export async function getVoiceOverStatus() { | ||
| const canControl = await checkAccessibilityPermissions(); | ||
| return { | ||
| available: isVoiceOverAvailable(), | ||
| running: await isVoiceOverRunning(), | ||
| canControl, | ||
| platform: process.platform, | ||
| }; | ||
| } | ||
| /** | ||
| * Check if we have accessibility permissions to control VoiceOver | ||
| */ | ||
| async function checkAccessibilityPermissions() { | ||
| if (!isMacOS) { | ||
| return false; | ||
| } | ||
| try { | ||
| // Try to check if System Events can be controlled | ||
| const { stdout } = await execAsync(`osascript -e 'tell application "System Events" to return true'`); | ||
| return stdout.trim().toLowerCase() === 'true'; | ||
| } | ||
| catch { | ||
| return false; | ||
| } | ||
| } | ||
| /** | ||
| * Ensure VoiceOver is running for Electron app accessibility | ||
| * Starts VoiceOver in silent mode if not already running | ||
| * Used by uiautomation.ts for Electron apps with low element counts | ||
| */ | ||
| export async function ensureVoiceOverForElectron() { | ||
| if (!isMacOS) { | ||
| return false; | ||
| } | ||
| // Check if already running | ||
| if (await isVoiceOverRunning()) { | ||
| logger.debug('VoiceOver already running for Electron'); | ||
| return true; | ||
| } | ||
| // Start in silent mode | ||
| return startVoiceOver(true); | ||
| } | ||
| //# sourceMappingURL=voiceover.js.map |
| {"version":3,"file":"voiceover.js","sourceRoot":"","sources":["../../../src/core/voiceover.ts"],"names":[],"mappings":"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"} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,WAAW,IAAI,OAAO,CAqBrC"} | ||
| {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BpC,wBAAgB,WAAW,IAAI,OAAO,CAkDrC"} |
@@ -7,3 +7,27 @@ /** | ||
| import ora from 'ora'; | ||
| import { createInterface } from 'node:readline'; | ||
| import { ensureConfigDir, getConfigPath, saveConfig } from '../../config/index.js'; | ||
| import { isNvdaInstalled, initNvda } from '../../core/nvda.js'; | ||
| /** | ||
| * Simple yes/no prompt using readline | ||
| */ | ||
| async function confirm(message, defaultValue = true) { | ||
| const rl = createInterface({ | ||
| input: process.stdin, | ||
| output: process.stdout, | ||
| }); | ||
| const hint = defaultValue ? '[Y/n]' : '[y/N]'; | ||
| return new Promise((resolve) => { | ||
| rl.question(`${message} ${hint} `, (answer) => { | ||
| rl.close(); | ||
| const normalized = answer.trim().toLowerCase(); | ||
| if (normalized === '') { | ||
| resolve(defaultValue); | ||
| } | ||
| else { | ||
| resolve(normalized === 'y' || normalized === 'yes'); | ||
| } | ||
| }); | ||
| }); | ||
| } | ||
| export function initCommand() { | ||
@@ -18,2 +42,30 @@ return new Command('init').description('Initialize OScribe configuration').action(async () => { | ||
| console.log(`Config file: ${chalk.cyan(getConfigPath())}`); | ||
| // Windows-specific: offer NVDA installation for Electron accessibility | ||
| if (process.platform === 'win32' && !isNvdaInstalled()) { | ||
| console.log(); | ||
| console.log(chalk.yellow('π’ Windows detected')); | ||
| console.log(chalk.gray('NVDA screen reader is needed to automate Electron apps (VS Code, Slack, Discord, etc.)')); | ||
| console.log(chalk.gray('Without NVDA, these apps show only 3-5 UI elements instead of 100+.')); | ||
| console.log(); | ||
| const installNvda = await confirm('Install NVDA portable for Electron accessibility? (~40MB)', true); | ||
| if (installNvda) { | ||
| const nvdaSpinner = ora('Downloading NVDA portable...').start(); | ||
| try { | ||
| const success = await initNvda(true); | ||
| if (success) { | ||
| nvdaSpinner.succeed(chalk.green('NVDA portable installed and configured (silent mode)')); | ||
| } | ||
| else { | ||
| nvdaSpinner.fail(chalk.yellow('NVDA installation failed - you can retry with: oscribe nvda install')); | ||
| } | ||
| } | ||
| catch { | ||
| nvdaSpinner.fail(chalk.yellow('NVDA installation failed')); | ||
| console.log(chalk.gray(`You can retry later with: oscribe nvda install`)); | ||
| } | ||
| } | ||
| else { | ||
| console.log(chalk.gray('Skipped. You can install later with: oscribe nvda install')); | ||
| } | ||
| } | ||
| console.log(); | ||
@@ -20,0 +72,0 @@ console.log('Next steps:'); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnF,MAAM,UAAU,WAAW;IACzB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,kCAAkC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QAC3F,MAAM,OAAO,GAAG,GAAG,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEvD,IAAI,CAAC;YACH,eAAe,EAAE,CAAC;YAClB,UAAU,CAAC,EAAE,CAAC,CAAC;YAEf,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"} | ||
| {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE/D;;GAEG;AACH,KAAK,UAAU,OAAO,CAAC,OAAe,EAAE,YAAY,GAAG,IAAI;IACzD,MAAM,EAAE,GAAG,eAAe,CAAC;QACzB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;IAE9C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,GAAG,OAAO,IAAI,IAAI,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE;YAC5C,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YAC/C,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC;gBACtB,OAAO,CAAC,YAAY,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,KAAK,CAAC,CAAC;YACtD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,kCAAkC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;QAC3F,MAAM,OAAO,GAAG,GAAG,CAAC,yBAAyB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEvD,IAAI,CAAC;YACH,eAAe,EAAE,CAAC;YAClB,UAAU,CAAC,EAAE,CAAC,CAAC;YAEf,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;YAE3D,uEAAuE;YACvE,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;gBACvD,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC;gBACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wFAAwF,CAAC,CAAC,CAAC;gBAClH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qEAAqE,CAAC,CAAC,CAAC;gBAC/F,OAAO,CAAC,GAAG,EAAE,CAAC;gBAEd,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,2DAA2D,EAAE,IAAI,CAAC,CAAC;gBAErG,IAAI,WAAW,EAAE,CAAC;oBAChB,MAAM,WAAW,GAAG,GAAG,CAAC,8BAA8B,CAAC,CAAC,KAAK,EAAE,CAAC;oBAChE,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;wBACrC,IAAI,OAAO,EAAE,CAAC;4BACZ,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC,CAAC;wBAC3F,CAAC;6BAAM,CAAC;4BACN,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,qEAAqE,CAAC,CAAC,CAAC;wBACxG,CAAC;oBACH,CAAC;oBAAC,MAAM,CAAC;wBACP,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;wBAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC,CAAC;oBAC5E,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC,CAAC;gBACvF,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC;YACxE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;QACzE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACxD,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAezC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAcvD"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiBzC,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgBvD"} |
@@ -17,2 +17,4 @@ /** | ||
| import { nvdaCommand } from './commands/nvda.js'; | ||
| import { killswitchCommand } from './commands/killswitch.js'; | ||
| import { voiceoverCommand } from './commands/voiceover.js'; | ||
| export function registerCommands(program) { | ||
@@ -32,3 +34,5 @@ program.addCommand(initCommand()); | ||
| program.addCommand(nvdaCommand()); | ||
| program.addCommand(killswitchCommand()); | ||
| program.addCommand(voiceoverCommand()); | ||
| } | ||
| //# sourceMappingURL=index.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AACpC,CAAC"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACzC,CAAC"} |
@@ -12,2 +12,8 @@ /** | ||
| export * from './nvda.js'; | ||
| export * from './voiceover.js'; | ||
| export * from './axmanual.js'; | ||
| export * from './browser.js'; | ||
| export * from './cdp-client.js'; | ||
| export * from './cdp-elements.js'; | ||
| export * from './browser-restart.js'; | ||
| export * from './logger.js'; | ||
@@ -14,0 +20,0 @@ export * from './security.js'; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAE1B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAEhC,cAAc,oBAAoB,CAAC"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAE9B,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AAErC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAEhC,cAAc,oBAAoB,CAAC"} |
@@ -12,2 +12,9 @@ /** | ||
| export * from './nvda.js'; | ||
| export * from './voiceover.js'; | ||
| export * from './axmanual.js'; | ||
| // Browser CDP modules | ||
| export * from './browser.js'; | ||
| export * from './cdp-client.js'; | ||
| export * from './cdp-elements.js'; | ||
| export * from './browser-restart.js'; | ||
| // Security modules | ||
@@ -14,0 +21,0 @@ export * from './logger.js'; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,mBAAmB;AACnB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,iBAAiB;AACjB,cAAc,oBAAoB,CAAC"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,sBAAsB;AACtB,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,mBAAmB;AACnB,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,iBAAiB;AACjB,cAAc,oBAAoB,CAAC"} |
@@ -20,2 +20,8 @@ /** | ||
| /** | ||
| * Check for resume signal file from CLI | ||
| * If found, reset kill switch and delete the file | ||
| * Returns true if a resume signal was consumed | ||
| */ | ||
| export declare function checkResumeSignal(): boolean; | ||
| /** | ||
| * Check for user activity BEFORE each action | ||
@@ -22,0 +28,0 @@ * Throws UserInterruptError if user moved the mouse |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"killswitch.d.ts","sourceRoot":"","sources":["../../../src/core/killswitch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;aAEzB,QAAQ,EAAE,MAAM;aAChB,SAAS,EAAE,MAAM;gBADjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM;CASpC;AAMD;;;GAGG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAGtC;AAYD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAyCxC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CASvC"} | ||
| {"version":3,"file":"killswitch.d.ts","sourceRoot":"","sources":["../../../src/core/killswitch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,KAAK;aAEzB,QAAQ,EAAE,MAAM;aAChB,SAAS,EAAE,MAAM;gBADjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM;CASpC;AAMD;;;GAGG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAGtC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,OAAO,CAsB3C;AAYD;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CAyCxC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CASvC"} |
@@ -6,5 +6,10 @@ /** | ||
| import { loadConfig } from '../config/index.js'; | ||
| import { existsSync, unlinkSync, readFileSync } from 'node:fs'; | ||
| import { join } from 'node:path'; | ||
| import { homedir } from 'node:os'; | ||
| // Import getMousePosition from input.ts would create circular dependency | ||
| // So we import robotjs directly here | ||
| import robot from 'robotjs'; | ||
| // Resume signal file path | ||
| const RESUME_FILE = join(homedir(), '.oscribe', 'killswitch-resume'); | ||
| /** | ||
@@ -40,2 +45,28 @@ * Custom error for user interrupt | ||
| /** | ||
| * Check for resume signal file from CLI | ||
| * If found, reset kill switch and delete the file | ||
| * Returns true if a resume signal was consumed | ||
| */ | ||
| export function checkResumeSignal() { | ||
| try { | ||
| if (existsSync(RESUME_FILE)) { | ||
| // Read and validate the signal (contains timestamp) | ||
| const content = readFileSync(RESUME_FILE, 'utf-8'); | ||
| const timestamp = parseInt(content, 10); | ||
| // Signal is valid if it's recent (within last 60 seconds) | ||
| const isRecent = Date.now() - timestamp < 60000; | ||
| // Always delete the file after reading | ||
| unlinkSync(RESUME_FILE); | ||
| if (isRecent) { | ||
| resetKillSwitch(); | ||
| return true; | ||
| } | ||
| } | ||
| } | ||
| catch { | ||
| // Ignore errors (file might be deleted by another process) | ||
| } | ||
| return false; | ||
| } | ||
| /** | ||
| * Calculate euclidean distance between two points | ||
@@ -42,0 +73,0 @@ */ |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"killswitch.js","sourceRoot":"","sources":["../../../src/core/killswitch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,yEAAyE;AACzE,qCAAqC;AACrC,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B;;;GAGG;AACH,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAEzB;IACA;IAFlB,YACkB,QAAgB,EAChB,SAAiB;QAEjC,KAAK,CAAC,sCAAsC,QAAQ,kBAAkB,SAAS,0BAA0B,CAAC,CAAC;QAH3F,aAAQ,GAAR,QAAQ,CAAQ;QAChB,cAAS,GAAT,SAAS,CAAQ;QAGjC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,oCAAoC;QACpC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC5B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;CACF;AAED,eAAe;AACf,IAAI,YAAY,GAAoC,IAAI,CAAC;AACzD,IAAI,cAAc,GAAG,CAAC,CAAC;AAEvB;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,YAAY,GAAG,IAAI,CAAC;IACpB,cAAc,GAAG,CAAC,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACxB,EAA4B,EAC5B,EAA4B;IAE5B,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAE9B,kCAAkC;IAClC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,qCAAqC;IACrC,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,YAAY,GAAG,OAAO,CAAC;QACvB,cAAc,GAAG,GAAG,CAAC;QACrB,OAAO;IACT,CAAC;IAED,2DAA2D;IAC3D,2DAA2D;IAC3D,IAAI,GAAG,GAAG,cAAc,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC;QACjD,YAAY,GAAG,OAAO,CAAC;QACvB,cAAc,GAAG,GAAG,CAAC;QACrB,OAAO;IACT,CAAC;IAED,gCAAgC;IAChC,MAAM,QAAQ,GAAG,iBAAiB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAE1D,IAAI,QAAQ,GAAG,UAAU,CAAC,iBAAiB,EAAE,CAAC;QAC5C,gCAAgC;QAChC,MAAM,IAAI,kBAAkB,CAC1B,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EACpB,UAAU,CAAC,iBAAiB,CAC7B,CAAC;IACJ,CAAC;IAED,wBAAwB;IACxB,YAAY,GAAG,OAAO,CAAC;IACvB,cAAc,GAAG,GAAG,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,YAAY,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACnC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC9B,CAAC"} | ||
| {"version":3,"file":"killswitch.js","sourceRoot":"","sources":["../../../src/core/killswitch.ts"],"names":[],"mappings":"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"} |
@@ -75,7 +75,9 @@ /** | ||
| * | ||
| * @param forceInstall - bypass autoDownload config (for MCP screenshot when Electron detected) | ||
| * | ||
| * Respects config: | ||
| * - nvda.autoStart: if false, won't start NVDA automatically | ||
| * - nvda.autoDownload: if false, won't download NVDA automatically | ||
| * - nvda.autoDownload: if false, won't download NVDA automatically (unless forceInstall=true) | ||
| */ | ||
| export declare function ensureNvdaForElectron(): Promise<boolean>; | ||
| export declare function ensureNvdaForElectron(forceInstall?: boolean): Promise<boolean>; | ||
| export declare function getPaths(): { | ||
@@ -82,0 +84,0 @@ toolsDir: string; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"nvda.d.ts","sourceRoot":"","sources":["../../../src/core/nvda.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAoEH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAcvC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CASzC;AAED;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAsBtD;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAYzD;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CA+C3F;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCtE;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,aAAa,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAgCtE;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAuDlE;AAED;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,CAgBjD;AAKD;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,OAAO,CAAC,CAkC9D;AAGD,wBAAgB,QAAQ;;;;;;EASvB;AAGD,eAAO,MAAM,KAAK;;;;;;CAMjB,CAAC"} | ||
| {"version":3,"file":"nvda.d.ts","sourceRoot":"","sources":["../../../src/core/nvda.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAoEH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC;CACzB;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAcvC;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CASzC;AAED;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAsBtD;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC,CAYzD;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CA+C3F;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCtE;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,aAAa,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAgCtE;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAAC,QAAQ,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAuDlE;AAED;;GAEG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,CAgBjD;AAKD;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CAAC,YAAY,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAmClF;AAGD,wBAAgB,QAAQ;;;;;;EASvB;AAGD,eAAO,MAAM,KAAK;;;;;;CAMjB,CAAC"} |
@@ -353,7 +353,9 @@ /** | ||
| * | ||
| * @param forceInstall - bypass autoDownload config (for MCP screenshot when Electron detected) | ||
| * | ||
| * Respects config: | ||
| * - nvda.autoStart: if false, won't start NVDA automatically | ||
| * - nvda.autoDownload: if false, won't download NVDA automatically | ||
| * - nvda.autoDownload: if false, won't download NVDA automatically (unless forceInstall=true) | ||
| */ | ||
| export async function ensureNvdaForElectron() { | ||
| export async function ensureNvdaForElectron(forceInstall = false) { | ||
| if (process.platform !== 'win32') { | ||
@@ -363,4 +365,4 @@ return false; | ||
| const config = loadConfig(); | ||
| // Check if auto-start is disabled | ||
| if (!config.nvda.autoStart) { | ||
| // Check if auto-start is disabled (unless forceInstall) | ||
| if (!forceInstall && !config.nvda.autoStart) { | ||
| return false; | ||
@@ -374,2 +376,7 @@ } | ||
| if (!isNvdaInstalled()) { | ||
| // If forceInstall=true, bypass autoDownload check and install automatically | ||
| if (forceInstall || config.nvda.autoDownload) { | ||
| logger.info('Auto-installing NVDA for Electron app accessibility...'); | ||
| return startNvda(true); // autoInit=true triggers download | ||
| } | ||
| if (!nvdaWarningShown) { | ||
@@ -380,6 +387,2 @@ logger.warn('NVDA not installed - Electron apps may show limited UI elements.'); | ||
| } | ||
| // Try to init if autoDownload is enabled | ||
| if (config.nvda.autoDownload) { | ||
| return startNvda(true); | ||
| } | ||
| return false; | ||
@@ -386,0 +389,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"nvda.js","sourceRoot":"","sources":["../../../src/core/nvda.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"nvda.js","sourceRoot":"","sources":["../../../src/core/nvda.ts"],"names":[],"mappings":"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"} |
@@ -23,3 +23,3 @@ /** | ||
| windowClass: string; | ||
| strategy: 'native' | 'webview2' | 'electron' | 'uwp'; | ||
| strategy: 'native' | 'webview2' | 'electron' | 'uwp' | 'browser'; | ||
| elements: UIElement[]; | ||
@@ -31,2 +31,9 @@ /** Interactive UI elements only (buttons, inputs, etc.) - send this to AI */ | ||
| timestamp: string; | ||
| /** Window bounds (x, y, width, height) on screen - only for browser strategy */ | ||
| windowBounds?: { | ||
| x: number; | ||
| y: number; | ||
| width: number; | ||
| height: number; | ||
| }; | ||
| } | ||
@@ -33,0 +40,0 @@ /** |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"uiautomation.d.ts","sourceRoot":"","sources":["../../../src/core/uiautomation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA+CH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,CAAC;IACrD,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,6EAA6E;IAC7E,EAAE,EAAE,SAAS,EAAE,CAAC;IAChB,oEAAoE;IACpE,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AA6BD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsFzE;AA0ND;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;IAC9C,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC,CAuE/D;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAmFjE;AA8ED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAoB3B;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAsCvF"} | ||
| {"version":3,"file":"uiautomation.d.ts","sourceRoot":"","sources":["../../../src/core/uiautomation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2DH,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,SAAS,CAAC;IACjE,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,6EAA6E;IAC7E,EAAE,EAAE,SAAS,EAAE,CAAC;IAChB,oEAAoE;IACpE,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,YAAY,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE;AAqCD;;;GAGG;AACH,wBAAsB,aAAa,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBzE;AAmKD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;IAC9C,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,aAAa,CAAC,CAiB/D;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,CAiBjE;AA4bD;;GAEG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAoB3B;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAQvF"} |
+414
-321
@@ -10,7 +10,17 @@ /** | ||
| import { promisify } from 'node:util'; | ||
| import { readFileSync, writeFileSync, unlinkSync, existsSync } from 'node:fs'; | ||
| import { readFileSync, existsSync, appendFileSync } from 'node:fs'; | ||
| import { join, dirname } from 'node:path'; | ||
| import { fileURLToPath } from 'node:url'; | ||
| import { tmpdir } from 'node:os'; | ||
| // tmpdir import removed - not used | ||
| import { ensureNvdaForElectron } from './nvda.js'; | ||
| // Dynamic import to bust ESM cache (detectBrowser) | ||
| // import { detectBrowser } from './browser.js'; | ||
| import { connectCDP, disconnectCDP, getActiveTab } from './cdp-client.js'; | ||
| import { getInteractiveElements } from './cdp-elements.js'; | ||
| // Cache-busting dynamic import for detectBrowser | ||
| async function getDetectBrowser() { | ||
| const timestamp = Date.now(); | ||
| const module = await import(`./browser.js?t=${timestamp}`); | ||
| return module.detectBrowser; | ||
| } | ||
| const execAsync = promisify(exec); | ||
@@ -41,5 +51,12 @@ // Load window types config | ||
| */ | ||
| function detectStrategy(windowClass) { | ||
| function detectStrategy(windowClass, processName) { | ||
| const config = loadWindowTypesConfig(); | ||
| // Check exact match first | ||
| // Check process name first (more reliable for browsers) | ||
| if (processName) { | ||
| const procLower = processName.toLowerCase(); | ||
| if (config.processNames[procLower]) { | ||
| return config.processNames[procLower].strategy; | ||
| } | ||
| } | ||
| // Check exact match | ||
| if (config.windowClasses[windowClass]) { | ||
@@ -70,5 +87,31 @@ return config.windowClasses[windowClass].strategy; | ||
| export async function getUIElements(windowTitle) { | ||
| if (process.platform !== 'win32') { | ||
| throw new Error('UI Automation is only available on Windows'); | ||
| // Debug log to absolute path | ||
| const logFile = '/tmp/oscribe-uielem.log'; | ||
| try { | ||
| appendFileSync(logFile, `[${new Date().toISOString()}] getUIElements called: platform=${process.platform}, windowTitle=${windowTitle}\n`); | ||
| } | ||
| catch { | ||
| // Ignore log errors | ||
| } | ||
| // Platform-specific implementation | ||
| if (process.platform === 'darwin') { | ||
| try { | ||
| appendFileSync(logFile, `[${new Date().toISOString()}] Calling getUIElementsMacOS\n`); | ||
| } | ||
| catch { | ||
| // Ignore log errors | ||
| } | ||
| return getUIElementsMacOS(windowTitle); | ||
| } | ||
| else if (process.platform === 'win32') { | ||
| return getUIElementsWindows(windowTitle); | ||
| } | ||
| else { | ||
| throw new Error(`UI Automation is not yet supported on ${process.platform}`); | ||
| } | ||
| } | ||
| /** | ||
| * Windows implementation of UI Automation | ||
| */ | ||
| async function getUIElementsWindows(windowTitle) { | ||
| // Step 1: Get window info and detect strategy | ||
@@ -100,3 +143,14 @@ const windowInfo = await getWindowInfo(windowTitle); | ||
| let elements = []; | ||
| if (strategy === 'webview2' || strategy === 'electron') { | ||
| if (strategy === 'browser') { | ||
| // Browser strategy: try CDP first, fallback to native | ||
| try { | ||
| const { elements: browserElements } = await getBrowserElementsViaCDP(windowInfo.className, windowInfo.name); | ||
| elements = browserElements; | ||
| } | ||
| catch (error) { | ||
| console.warn('[uiautomation] CDP failed, falling back to native', { error: String(error) }); | ||
| elements = await findNativeElements(windowInfo.name); | ||
| } | ||
| } | ||
| else if (strategy === 'webview2' || strategy === 'electron') { | ||
| // Search for Document elements globally | ||
@@ -113,3 +167,4 @@ elements = await findDocumentElements(windowInfo.name); | ||
| // Ensure NVDA is running for Electron accessibility | ||
| await ensureNvdaForElectron(); | ||
| // forceInstall=true to auto-download NVDA when needed (40MB one-time) | ||
| await ensureNvdaForElectron(true); | ||
| const msaaElements = await findMsaaElements(windowInfo.name); | ||
@@ -150,32 +205,12 @@ if (msaaElements.length > elements.length) { | ||
| async function getWindowInfo(windowTitle) { | ||
| const scriptPath = join(__dirname, '..', '..', '..', 'scripts', 'windows', 'get-window-info.ps1'); | ||
| const windowFilter = windowTitle ? `"${windowTitle}"` : '""'; | ||
| const psScript = ` | ||
| Add-Type -AssemblyName UIAutomationClient; | ||
| $root = [System.Windows.Automation.AutomationElement]::RootElement; | ||
| $windowFilter = ${windowFilter}; | ||
| if ($windowFilter -ne "") { | ||
| # Search for Window type elements in descendants (includes modal dialogs) | ||
| $windowCondition = New-Object System.Windows.Automation.PropertyCondition( | ||
| [System.Windows.Automation.AutomationElement]::ControlTypeProperty, | ||
| [System.Windows.Automation.ControlType]::Window | ||
| ); | ||
| $windows = $root.FindAll([System.Windows.Automation.TreeScope]::Descendants, $windowCondition); | ||
| $window = $null; | ||
| foreach ($w in $windows) { | ||
| if ($w.Current.Name -like "*$windowFilter*") { $window = $w; break; } | ||
| try { | ||
| const { stdout } = await execAsync(`powershell -NoProfile -ExecutionPolicy Bypass -File "${scriptPath}" -WindowFilter ${windowFilter}`, { timeout: 5000 }); | ||
| return JSON.parse(stdout.trim()); | ||
| } | ||
| } else { | ||
| $window = [System.Windows.Automation.AutomationElement]::FocusedElement; | ||
| $walker = [System.Windows.Automation.TreeWalker]::ControlViewWalker; | ||
| while ($window -and $window.Current.ControlType -ne [System.Windows.Automation.ControlType]::Window -and $window -ne $root) { | ||
| $window = $walker.GetParent($window); | ||
| catch { | ||
| return { name: '', className: '' }; | ||
| } | ||
| } | ||
| if (-not $window -or $window -eq $root) { Write-Output '{"name":"","className":""}'; exit; } | ||
| @{ name = $window.Current.Name; className = $window.Current.ClassName } | ConvertTo-Json -Compress | ||
| `; | ||
| const encodedScript = Buffer.from(psScript, 'utf16le').toString('base64'); | ||
| const { stdout } = await execAsync(`powershell -NoProfile -ExecutionPolicy Bypass -EncodedCommand ${encodedScript}`, { timeout: 5000 }); | ||
| return JSON.parse(stdout.trim()); | ||
| } | ||
| /** | ||
@@ -185,45 +220,5 @@ * Find elements using native UI Automation on window | ||
| async function findNativeElements(windowName) { | ||
| const psScript = ` | ||
| Add-Type -AssemblyName UIAutomationClient; | ||
| $root = [System.Windows.Automation.AutomationElement]::RootElement; | ||
| # Search for Window type elements in descendants (includes modal dialogs like Save As) | ||
| $windowCondition = New-Object System.Windows.Automation.PropertyCondition( | ||
| [System.Windows.Automation.AutomationElement]::ControlTypeProperty, | ||
| [System.Windows.Automation.ControlType]::Window | ||
| ); | ||
| $windows = $root.FindAll([System.Windows.Automation.TreeScope]::Descendants, $windowCondition); | ||
| $window = $null; | ||
| foreach ($w in $windows) { | ||
| if ($w.Current.Name -like "*${windowName.replace(/"/g, '`"').replace(/[*?[\]]/g, '`$&')}*") { $window = $w; break; } | ||
| } | ||
| if (-not $window) { Write-Output '[]'; exit; } | ||
| $elements = @(); | ||
| $condition = New-Object System.Windows.Automation.PropertyCondition([System.Windows.Automation.AutomationElement]::IsEnabledProperty, $true); | ||
| $allElements = $window.FindAll([System.Windows.Automation.TreeScope]::Descendants, $condition); | ||
| foreach ($el in $allElements) { | ||
| const scriptPath = join(__dirname, '..', '..', '..', 'scripts', 'windows', 'find-native-elements.ps1'); | ||
| try { | ||
| $rect = $el.Current.BoundingRectangle; | ||
| if ($rect.Width -gt 0 -and $rect.Height -gt 0 -and -not [System.Double]::IsInfinity($rect.X)) { | ||
| $name = $el.Current.Name; | ||
| if ($name -match '[a-zA-Z0-9\\p{L}]') { | ||
| $elements += @{ | ||
| type = $el.Current.ControlType.ProgrammaticName -replace "ControlType.", ""; | ||
| name = $name; | ||
| description = $el.Current.HelpText; | ||
| automationId = $el.Current.AutomationId; | ||
| x = [int]$rect.X; y = [int]$rect.Y; | ||
| width = [int]$rect.Width; height = [int]$rect.Height; | ||
| isEnabled = $el.Current.IsEnabled | ||
| } | ||
| } | ||
| } | ||
| } catch {} | ||
| } | ||
| $elements | ConvertTo-Json -Depth 2 -Compress | ||
| `; | ||
| try { | ||
| const encodedScript = Buffer.from(psScript, 'utf16le').toString('base64'); | ||
| const { stdout } = await execAsync(`powershell -NoProfile -ExecutionPolicy Bypass -EncodedCommand ${encodedScript}`, { maxBuffer: 10 * 1024 * 1024, timeout: 10000 }); | ||
| const { stdout } = await execAsync(`powershell -NoProfile -ExecutionPolicy Bypass -File "${scriptPath}" -WindowName "${windowName.replace(/"/g, '\\"')}"`, { maxBuffer: 10 * 1024 * 1024, timeout: 10000 }); | ||
| const result = stdout.trim(); | ||
@@ -244,92 +239,5 @@ if (!result || result === '[]') | ||
| async function findDocumentElements(windowTitle) { | ||
| // Escape special regex chars for PowerShell -match | ||
| const safeTitle = windowTitle.replace(/[.*+?^${}()|[\]\\]/g, '.'); | ||
| const psScript = ` | ||
| Add-Type -AssemblyName UIAutomationClient | ||
| $root = [System.Windows.Automation.AutomationElement]::RootElement | ||
| # Find window by name | ||
| $windows = $root.FindAll([System.Windows.Automation.TreeScope]::Children, [System.Windows.Automation.Condition]::TrueCondition) | ||
| $window = $null | ||
| foreach ($w in $windows) { | ||
| if ($w.Current.Name -match '${safeTitle.substring(0, 30)}') { $window = $w; break } | ||
| } | ||
| if (-not $window) { Write-Output '[]'; exit } | ||
| $winRect = $window.Current.BoundingRectangle | ||
| $winL = $winRect.X; $winT = $winRect.Y | ||
| $winR = $winRect.X + $winRect.Width; $winB = $winRect.Y + $winRect.Height | ||
| $docCond = New-Object System.Windows.Automation.PropertyCondition([System.Windows.Automation.AutomationElement]::ControlTypeProperty, [System.Windows.Automation.ControlType]::Document) | ||
| $allDocs = $root.FindAll([System.Windows.Automation.TreeScope]::Descendants, $docCond) | ||
| $elements = @() | ||
| # Find the Document with HIGHEST overlap ratio (best match for this window) | ||
| $bestDoc = $null | ||
| $bestRatio = 0 | ||
| foreach ($doc in $allDocs) { | ||
| $r = $doc.Current.BoundingRectangle | ||
| if ([System.Double]::IsInfinity($r.X) -or $r.Width -lt 100) { continue } | ||
| $oL = [Math]::Max($r.X, $winL); $oT = [Math]::Max($r.Y, $winT) | ||
| $oR = [Math]::Min($r.X + $r.Width, $winR); $oB = [Math]::Min($r.Y + $r.Height, $winB) | ||
| $oArea = [Math]::Max(0, $oR - $oL) * [Math]::Max(0, $oB - $oT) | ||
| $docArea = $r.Width * $r.Height | ||
| $ratio = if ($docArea -gt 0) { $oArea / $docArea } else { 0 } | ||
| if ($ratio -gt $bestRatio) { $bestRatio = $ratio; $bestDoc = $doc } | ||
| } | ||
| # Only use the best Document if it has >50% overlap | ||
| $docs = @() | ||
| if ($bestDoc -and $bestRatio -gt 0.5) { $docs = @($bestDoc) } | ||
| if ($docs.Count -eq 0) { $docs = @($window) } | ||
| foreach ($doc in $docs) { | ||
| $walker = [System.Windows.Automation.TreeWalker]::RawViewWalker; | ||
| function Walk-Element { | ||
| param($el, $depth) | ||
| if ($depth -gt 25) { return } | ||
| try { | ||
| $rect = $el.Current.BoundingRectangle; | ||
| $name = $el.Current.Name; | ||
| $type = $el.Current.ControlType.ProgrammaticName -replace "ControlType.", ""; | ||
| $help = $el.Current.HelpText; | ||
| $autoId = $el.Current.AutomationId; | ||
| # Include interactive elements | ||
| if ($name -or $autoId -or $type -eq "Button" -or $type -eq "TabItem" -or $type -eq "Slider" -or $type -eq "CheckBox" -or $type -eq "Edit" -or $type -eq "ComboBox" -or $type -eq "ListItem" -or $type -eq "MenuItem") { | ||
| if ($rect.Width -gt 0 -and $rect.Height -gt 0 -and -not [System.Double]::IsInfinity($rect.X)) { | ||
| $script:elements += @{ | ||
| type = $type; | ||
| name = if ($name) { $name } else { $help }; | ||
| description = $help; | ||
| automationId = $autoId; | ||
| x = [int]$rect.X; y = [int]$rect.Y; | ||
| width = [int]$rect.Width; height = [int]$rect.Height; | ||
| isEnabled = $el.Current.IsEnabled | ||
| } | ||
| } | ||
| } | ||
| $child = $walker.GetFirstChild($el); | ||
| while ($child) { | ||
| Walk-Element $child ($depth + 1); | ||
| $child = $walker.GetNextSibling($child); | ||
| } | ||
| } catch {} | ||
| } | ||
| Walk-Element $doc 0; | ||
| } | ||
| if ($elements.Count -eq 0) { Write-Output '[]'; exit; } | ||
| $elements | ConvertTo-Json -Depth 2 -Compress | ||
| `; | ||
| const scriptPath = join(tmpdir(), `oscribe-ui-${Date.now()}.ps1`); | ||
| const scriptPath = join(__dirname, '..', '..', '..', 'scripts', 'windows', 'find-document-elements.ps1'); | ||
| try { | ||
| writeFileSync(scriptPath, psScript, 'utf8'); | ||
| const { stdout } = await execAsync(`powershell -NoProfile -ExecutionPolicy Bypass -File "${scriptPath}"`, { maxBuffer: 10 * 1024 * 1024, timeout: 15000 }); | ||
| const { stdout } = await execAsync(`powershell -NoProfile -ExecutionPolicy Bypass -File "${scriptPath}" -WindowTitle "${windowTitle.replace(/"/g, '\\"')}"`, { maxBuffer: 10 * 1024 * 1024, timeout: 15000 }); | ||
| const result = stdout.trim(); | ||
@@ -344,8 +252,2 @@ if (!result || result === '[]') | ||
| } | ||
| finally { | ||
| try { | ||
| unlinkSync(scriptPath); | ||
| } | ||
| catch { /* ignore */ } | ||
| } | ||
| } | ||
@@ -359,59 +261,5 @@ /** | ||
| } | ||
| const psScript = ` | ||
| Add-Type -AssemblyName UIAutomationClient; | ||
| $root = [System.Windows.Automation.AutomationElement]::RootElement; | ||
| # Find taskbar | ||
| $condition = New-Object System.Windows.Automation.PropertyCondition( | ||
| [System.Windows.Automation.AutomationElement]::ClassNameProperty, "Shell_TrayWnd" | ||
| ); | ||
| $taskbar = $root.FindFirst([System.Windows.Automation.TreeScope]::Children, $condition); | ||
| $result = @{ position = "bottom"; autoHide = $false; visible = $true } | ||
| if ($taskbar) { | ||
| $rect = $taskbar.Current.BoundingRectangle; | ||
| # Check visibility (if Y > screen height, it's hidden) | ||
| Add-Type -AssemblyName System.Windows.Forms | ||
| $screen = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds | ||
| # Determine position based on taskbar bounds | ||
| if ($rect.Width -gt $rect.Height) { | ||
| # Horizontal taskbar (top or bottom) | ||
| if ($rect.Y -lt $screen.Height / 2) { | ||
| $result.position = "top" | ||
| } else { | ||
| $result.position = "bottom" | ||
| } | ||
| } else { | ||
| # Vertical taskbar (left or right) | ||
| if ($rect.X -lt $screen.Width / 2) { | ||
| $result.position = "left" | ||
| } else { | ||
| $result.position = "right" | ||
| } | ||
| } | ||
| # Check if auto-hide is enabled (taskbar mostly off-screen) | ||
| if ($result.position -eq "bottom" -and $rect.Y -ge $screen.Height - 5) { | ||
| $result.autoHide = $true | ||
| $result.visible = $false | ||
| } elseif ($result.position -eq "top" -and $rect.Y -le -$rect.Height + 5) { | ||
| $result.autoHide = $true | ||
| $result.visible = $false | ||
| } elseif ($result.position -eq "left" -and $rect.X -le -$rect.Width + 5) { | ||
| $result.autoHide = $true | ||
| $result.visible = $false | ||
| } elseif ($result.position -eq "right" -and $rect.X -ge $screen.Width - 5) { | ||
| $result.autoHide = $true | ||
| $result.visible = $false | ||
| } | ||
| } | ||
| $result | ConvertTo-Json -Compress | ||
| `; | ||
| const scriptPath = join(__dirname, '..', '..', '..', 'scripts', 'windows', 'get-taskbar-config.ps1'); | ||
| try { | ||
| const encodedScript = Buffer.from(psScript, 'utf16le').toString('base64'); | ||
| const { stdout } = await execAsync(`powershell -NoProfile -ExecutionPolicy Bypass -EncodedCommand ${encodedScript}`, { timeout: 5000 }); | ||
| const { stdout } = await execAsync(`powershell -NoProfile -ExecutionPolicy Bypass -File "${scriptPath}"`, { timeout: 5000 }); | ||
| return JSON.parse(stdout.trim()); | ||
@@ -428,71 +276,5 @@ } | ||
| export async function findSystemUIElements() { | ||
| const psScript = ` | ||
| Add-Type -AssemblyName UIAutomationClient; | ||
| $root = [System.Windows.Automation.AutomationElement]::RootElement; | ||
| $elements = @(); | ||
| $walker = [System.Windows.Automation.TreeWalker]::RawViewWalker; | ||
| # System window classes to capture | ||
| $systemClasses = @( | ||
| "Shell_TrayWnd", # Taskbar | ||
| "Shell_SecondaryTrayWnd", # Secondary taskbar (multi-monitor) | ||
| "Progman", # Desktop | ||
| "WorkerW", # Desktop worker | ||
| "Windows.UI.Core.CoreWindow", # Start menu, Action center, etc. | ||
| "NotifyIconOverflowWindow", # System tray overflow | ||
| "TopLevelWindowForOverflowXamlIsland" # Windows 11 widgets | ||
| ) | ||
| function Walk-Element { | ||
| param($el, $depth, $source) | ||
| if ($depth -gt 20) { return } | ||
| const scriptPath = join(__dirname, '..', '..', '..', 'scripts', 'windows', 'find-system-ui-elements.ps1'); | ||
| try { | ||
| $rect = $el.Current.BoundingRectangle; | ||
| $name = $el.Current.Name; | ||
| $type = $el.Current.ControlType.ProgrammaticName -replace "ControlType.", ""; | ||
| $autoId = $el.Current.AutomationId; | ||
| $className = $el.Current.ClassName; | ||
| if ($rect.Width -gt 0 -and $rect.Height -gt 0 -and -not [System.Double]::IsInfinity($rect.X)) { | ||
| # Include interactive elements | ||
| if ($name -or $type -eq "Button" -or $type -eq "MenuItem" -or $type -eq "ListItem" -or $autoId) { | ||
| $script:elements += @{ | ||
| type = $type; | ||
| name = if ($name) { $name } else { $autoId }; | ||
| description = $el.Current.HelpText; | ||
| automationId = $autoId; | ||
| source = $source; | ||
| x = [int]$rect.X; y = [int]$rect.Y; | ||
| width = [int]$rect.Width; height = [int]$rect.Height; | ||
| isEnabled = $el.Current.IsEnabled | ||
| } | ||
| } | ||
| } | ||
| $child = $walker.GetFirstChild($el); | ||
| while ($child) { | ||
| Walk-Element $child ($depth + 1) $source; | ||
| $child = $walker.GetNextSibling($child); | ||
| } | ||
| } catch {} | ||
| } | ||
| # Find and walk all system windows | ||
| foreach ($className in $systemClasses) { | ||
| $condition = New-Object System.Windows.Automation.PropertyCondition( | ||
| [System.Windows.Automation.AutomationElement]::ClassNameProperty, $className | ||
| ); | ||
| $systemWindows = $root.FindAll([System.Windows.Automation.TreeScope]::Children, $condition); | ||
| foreach ($sysWin in $systemWindows) { | ||
| Walk-Element $sysWin 0 $className; | ||
| } | ||
| } | ||
| if ($elements.Count -eq 0) { Write-Output '[]'; exit; } | ||
| $elements | ConvertTo-Json -Depth 2 -Compress | ||
| `; | ||
| try { | ||
| const encodedScript = Buffer.from(psScript, 'utf16le').toString('base64'); | ||
| const { stdout } = await execAsync(`powershell -NoProfile -ExecutionPolicy Bypass -EncodedCommand ${encodedScript}`, { maxBuffer: 10 * 1024 * 1024, timeout: 15000 }); | ||
| const { stdout } = await execAsync(`powershell -NoProfile -ExecutionPolicy Bypass -File "${scriptPath}"`, { maxBuffer: 10 * 1024 * 1024, timeout: 15000 }); | ||
| const result = stdout.trim(); | ||
@@ -513,2 +295,101 @@ if (!result || result === '[]') | ||
| /** | ||
| * Get browser elements via Chrome DevTools Protocol (CDP) | ||
| * Works for Chromium browsers: Chrome, Edge, Brave, Arc, Opera | ||
| */ | ||
| /** | ||
| * Get window bounds for the active browser window (macOS) | ||
| */ | ||
| async function getBrowserWindowBounds(appName) { | ||
| if (process.platform !== 'darwin') { | ||
| return null; // Only macOS supported for now | ||
| } | ||
| try { | ||
| const script = ` | ||
| tell application "System Events" | ||
| set frontApp to first application process whose name is "${appName.replace(/"/g, '\\"')}" | ||
| tell frontApp | ||
| tell front window | ||
| set windowBounds to position | ||
| set windowSize to size | ||
| set x to item 1 of windowBounds as text | ||
| set y to item 2 of windowBounds as text | ||
| set w to item 1 of windowSize as text | ||
| set h to item 2 of windowSize as text | ||
| return x & "|" & y & "|" & w & "|" & h | ||
| end tell | ||
| end tell | ||
| end tell | ||
| `; | ||
| const { stdout } = await execAsync(`osascript -e '${script.replace(/'/g, "'\\''")}'`); | ||
| const parts = stdout.trim().split('|').map(Number); | ||
| if (parts.length === 4 && parts.every((n) => !isNaN(n))) { | ||
| return { | ||
| x: parts[0], | ||
| y: parts[1], | ||
| width: parts[2], | ||
| height: parts[3], | ||
| }; | ||
| } | ||
| return null; | ||
| } | ||
| catch { | ||
| return null; | ||
| } | ||
| } | ||
| async function getBrowserElementsViaCDP(windowClass, windowTitle) { | ||
| const event = { | ||
| action: 'cdp_get_elements', | ||
| windowClass, | ||
| windowTitle, | ||
| timestamp: new Date().toISOString(), | ||
| duration_ms: 0, | ||
| success: false, | ||
| elementsFound: 0, | ||
| }; | ||
| const start = Date.now(); | ||
| try { | ||
| // 1. Detect browser (with cache-busting) | ||
| // On macOS, windowClass is generic (AXWindow), so we need to get the app name | ||
| const { getActiveWindow } = await import('./windows.js'); | ||
| const activeWindow = await getActiveWindow(); | ||
| const appName = activeWindow?.app ?? ''; | ||
| const detectBrowser = await getDetectBrowser(); | ||
| const browserInfo = await detectBrowser(windowClass, appName); | ||
| if (!browserInfo) { | ||
| throw new Error('Browser not detected'); | ||
| } | ||
| if (!browserInfo.isDebuggingEnabled) { | ||
| throw new Error('Remote debugging not enabled on browser'); | ||
| } | ||
| // 2. Connect to CDP | ||
| const cdp = await connectCDP({ | ||
| port: browserInfo.debugPort || 9222, | ||
| host: 'localhost', | ||
| }); | ||
| // 3. Get active tab | ||
| const tab = await getActiveTab(cdp); | ||
| if (!tab) { | ||
| await disconnectCDP(cdp); | ||
| throw new Error('No active tab found'); | ||
| } | ||
| // 4. Get Chrome UI offset (exact toolbar height) | ||
| const { getChromeUIOffset } = await import('./cdp-elements.js'); | ||
| const chromeUIOffset = await getChromeUIOffset(cdp); | ||
| // 5. Extract interactive elements | ||
| const elements = await getInteractiveElements(cdp); | ||
| // 6. Cleanup | ||
| await disconnectCDP(cdp); | ||
| event.duration_ms = Date.now() - start; | ||
| event.success = true; | ||
| event.elementsFound = elements.length; | ||
| console.log('[uiautomation]', event); | ||
| return { elements, chromeUIOffset }; | ||
| } | ||
| catch (error) { | ||
| event.duration_ms = Date.now() - start; | ||
| console.warn('[uiautomation]', event); | ||
| throw error; | ||
| } | ||
| } | ||
| /** | ||
| * Find elements using MSAA (IAccessible) - fallback for Electron apps | ||
@@ -531,6 +412,6 @@ * Uses MsaaReader.exe to access the accessibility tree via COM | ||
| * | ||
| * TODO macOS: Create ax-reader (Swift binary) using AXUIElement API | ||
| * - macOS uses AXUIElement for accessibility, not MSAA | ||
| * - Need to compile: swiftc ax-reader.swift -o ax-reader | ||
| * - Output same JSON format as MsaaReader.exe | ||
| * macOS: Uses ax-reader (Swift binary) via AXUIElement API | ||
| * - Source: scripts/macos/ax-reader.swift | ||
| * - Compile: swiftc scripts/macos/ax-reader.swift -o bin/ax-reader | ||
| * - Output same JSON format as MsaaReader.exe on Windows | ||
| * - Check if Electron exposes accessibility better on macOS | ||
@@ -577,2 +458,212 @@ */ | ||
| /** | ||
| * macOS implementation using AXUIElement via ax-reader binary | ||
| */ | ||
| async function getUIElementsMacOS(windowTitle) { | ||
| // Path to ax-reader binary (bundled with oscribe) | ||
| const axReaderPath = join(__dirname, '..', '..', '..', 'bin', 'ax-reader'); | ||
| // Check if ax-reader exists | ||
| if (!existsSync(axReaderPath)) { | ||
| throw new Error('ax-reader binary not found. Run: swiftc scripts/macos/ax-reader.swift -o bin/ax-reader'); | ||
| } | ||
| // Get active window if no title specified | ||
| // Always get app name for Electron detection | ||
| const { getActiveWindow } = await import('./windows.js'); | ||
| const activeWindow = await getActiveWindow(); | ||
| const targetWindow = windowTitle || (activeWindow?.title ?? ''); | ||
| const appName = activeWindow?.app ?? ''; | ||
| // Debug log to file | ||
| const logFile = '/tmp/oscribe-uielem.log'; | ||
| try { | ||
| appendFileSync(logFile, `[${new Date().toISOString()}] macOS activeWindow: ${JSON.stringify({ title: activeWindow?.title, app: activeWindow?.app, appName })}\n`); | ||
| } | ||
| catch { | ||
| // Ignore log errors | ||
| } | ||
| if (!targetWindow) { | ||
| // No window focused - return empty for now | ||
| // TODO: Return Dock elements on macOS? | ||
| return { | ||
| window: 'Desktop', | ||
| windowClass: 'Desktop', | ||
| strategy: 'native', | ||
| elements: [], | ||
| ui: [], | ||
| content: [], | ||
| timestamp: new Date().toISOString(), | ||
| }; | ||
| } | ||
| // Check if this is a Chromium browser and CDP is available (with cache-busting) | ||
| const detectBrowser = await getDetectBrowser(); | ||
| try { | ||
| appendFileSync(logFile, `[${new Date().toISOString()}] Calling detectBrowser with appName: ${appName}\n`); | ||
| } | ||
| catch { | ||
| // Ignore log errors | ||
| } | ||
| const browserInfo = await detectBrowser('', appName); | ||
| try { | ||
| appendFileSync(logFile, `[${new Date().toISOString()}] Browser detected: ${JSON.stringify(browserInfo)}\n`); | ||
| } | ||
| catch { | ||
| // Ignore log errors | ||
| } | ||
| try { | ||
| appendFileSync(logFile, `[${new Date().toISOString()}] Checking CDP condition: browserInfo=${!!browserInfo}, isDebuggingEnabled=${browserInfo?.isDebuggingEnabled}\n`); | ||
| } | ||
| catch { | ||
| // Ignore log errors | ||
| } | ||
| if (browserInfo?.isDebuggingEnabled) { | ||
| try { | ||
| appendFileSync(logFile, `[${new Date().toISOString()}] β ENTERING CDP BLOCK - Calling getBrowserElementsViaCDP...\n`); | ||
| const { elements: browserElements, chromeUIOffset } = await getBrowserElementsViaCDP('', targetWindow); | ||
| appendFileSync(logFile, `[${new Date().toISOString()}] CDP returned ${browserElements.length} elements, Chrome UI offset: ${chromeUIOffset}px\n`); | ||
| // Get window bounds for coordinate conversion | ||
| const windowBounds = await getBrowserWindowBounds(appName); | ||
| if (windowBounds) { | ||
| appendFileSync(logFile, `[${new Date().toISOString()}] Window bounds: ${JSON.stringify(windowBounds)}\n`); | ||
| // Convert CDP coordinates to screen coordinates | ||
| // CDP coordinates are relative to the viewport, so we add: | ||
| // - window X/Y position | ||
| // - Chrome UI height (for Y only) | ||
| const offsetX = windowBounds.x; | ||
| const offsetY = windowBounds.y + chromeUIOffset; | ||
| appendFileSync(logFile, `[${new Date().toISOString()}] Applying offset: x+${offsetX}, y+${offsetY} (window.y=${windowBounds.y} + chromeUI=${chromeUIOffset})\n`); | ||
| browserElements.forEach((el) => { | ||
| el.x += offsetX; | ||
| el.y += offsetY; | ||
| }); | ||
| } | ||
| // Separate UI elements from content | ||
| const ui = browserElements.filter((el) => el.type !== 'Text' && el.type !== 'Image'); | ||
| const content = browserElements.filter((el) => el.type === 'Text'); | ||
| appendFileSync(logFile, `[${new Date().toISOString()}] Returning strategy=browser\n`); | ||
| const result = { | ||
| window: targetWindow, | ||
| windowClass: 'Browser', | ||
| strategy: 'browser', | ||
| elements: browserElements, | ||
| ui, | ||
| content, | ||
| timestamp: new Date().toISOString(), | ||
| }; | ||
| if (windowBounds) { | ||
| result.windowBounds = windowBounds; | ||
| } | ||
| return result; | ||
| } | ||
| catch (error) { | ||
| appendFileSync(logFile, `[${new Date().toISOString()}] CDP FAILED: ${error instanceof Error ? error.message : String(error)}\n`); | ||
| appendFileSync(logFile, `[${new Date().toISOString()}] Stack: ${error instanceof Error ? error.stack : 'N/A'}\n`); | ||
| console.warn('[uiautomation] CDP failed on macOS, falling back to native', { error: String(error) }); | ||
| // Fall through to native UI Automation | ||
| } | ||
| } | ||
| try { | ||
| // Escape window title for shell | ||
| const safeTitle = targetWindow.replace(/"/g, '\\"'); | ||
| const { stdout } = await execAsync(`"${axReaderPath}" "${safeTitle}"`, { | ||
| timeout: 15000, | ||
| maxBuffer: 10 * 1024 * 1024, | ||
| }); | ||
| const output = stdout.trim(); | ||
| // Check for empty output (permissions issue) | ||
| if (!output) { | ||
| throw new Error(`ax-reader returned no output. This usually means:\n` + | ||
| `1. Accessibility permissions are not granted\n` + | ||
| `2. The window "${targetWindow}" was not found\n\n` + | ||
| `To grant permissions:\n` + | ||
| `System Settings > Privacy & Security > Accessibility > Enable for your terminal/IDE`); | ||
| } | ||
| const result = JSON.parse(output); | ||
| if (result.error) { | ||
| throw new Error(result.error); | ||
| } | ||
| // Map to UIElement format | ||
| const elements = result.elements.map((el) => { | ||
| const element = { | ||
| type: el.type, | ||
| name: el.name || '', | ||
| x: el.x, | ||
| y: el.y, | ||
| width: el.width, | ||
| height: el.height, | ||
| isEnabled: el.isEnabled, | ||
| }; | ||
| if (el.description) { | ||
| element.description = el.description; | ||
| } | ||
| return element; | ||
| }); | ||
| // If few elements detected and this looks like an Electron app, try with VoiceOver | ||
| const isElectronApp = appName.toLowerCase().includes('electron') || | ||
| appName.toLowerCase().includes('code') || | ||
| appName.toLowerCase().includes('slack') || | ||
| appName.toLowerCase().includes('discord'); | ||
| if (elements.length < 10 && isElectronApp) { | ||
| // Try AXManualAccessibility first (preferred - no audio, faster) | ||
| const { enableElectronAccessibility } = await import('./axmanual.js'); | ||
| const axEnabled = await enableElectronAccessibility(appName); | ||
| if (axEnabled) { | ||
| // Wait a moment for Electron to apply the accessibility change | ||
| await new Promise((resolve) => setTimeout(resolve, 500)); | ||
| // Retry element detection | ||
| const { stdout: retryStdout } = await execAsync(`"${axReaderPath}" "${safeTitle}"`, { | ||
| timeout: 15000, | ||
| maxBuffer: 10 * 1024 * 1024, | ||
| }); | ||
| const retryResult = JSON.parse(retryStdout.trim()); | ||
| if (retryResult.elements.length > elements.length) { | ||
| // AXManualAccessibility helped - use new results | ||
| const newElements = retryResult.elements.map((el) => ({ | ||
| type: el.type, | ||
| name: el.name || '', | ||
| x: el.x, | ||
| y: el.y, | ||
| width: el.width, | ||
| height: el.height, | ||
| isEnabled: el.isEnabled, | ||
| ...(el.description ? { description: el.description } : {}), | ||
| })); | ||
| const ui = newElements.filter((el) => el.type !== 'Text' && el.type !== 'Image'); | ||
| const content = newElements.filter((el) => el.type === 'Text'); | ||
| return { | ||
| window: result.window, | ||
| windowClass: 'AXWindow', | ||
| strategy: 'native', | ||
| elements: newElements, | ||
| ui, | ||
| content, | ||
| timestamp: new Date().toISOString(), | ||
| }; | ||
| } | ||
| } | ||
| } | ||
| // Separate UI elements from content | ||
| const ui = elements.filter((el) => el.type !== 'Text' && el.type !== 'Image'); | ||
| const content = elements.filter((el) => el.type === 'Text'); | ||
| return { | ||
| window: result.window, | ||
| windowClass: 'AXWindow', // macOS uses AX roles | ||
| strategy: 'native', | ||
| elements, | ||
| ui, | ||
| content, | ||
| timestamp: new Date().toISOString(), | ||
| }; | ||
| } | ||
| catch { | ||
| // Return empty on error | ||
| return { | ||
| window: targetWindow, | ||
| windowClass: 'Unknown', | ||
| strategy: 'native', | ||
| elements: [], | ||
| ui: [], | ||
| content: [], | ||
| timestamp: new Date().toISOString(), | ||
| }; | ||
| } | ||
| } | ||
| /** | ||
| * Find a specific element by name or type | ||
@@ -595,26 +686,28 @@ */ | ||
| export async function getElementAtPoint(x, y) { | ||
| if (process.platform !== 'win32') { | ||
| throw new Error('UI Automation is only available on Windows'); | ||
| if (process.platform === 'darwin') { | ||
| return getElementAtPointMacOS(x, y); | ||
| } | ||
| const psScript = ` | ||
| Add-Type -AssemblyName UIAutomationClient; | ||
| Add-Type -AssemblyName PresentationCore; | ||
| $point = New-Object System.Windows.Point(${x}, ${y}); | ||
| $el = [System.Windows.Automation.AutomationElement]::FromPoint($point); | ||
| if ($el) { | ||
| $rect = $el.Current.BoundingRectangle; | ||
| @{ | ||
| type = $el.Current.ControlType.ProgrammaticName -replace "ControlType.", ""; | ||
| name = $el.Current.Name; | ||
| description = $el.Current.HelpText; | ||
| automationId = $el.Current.AutomationId; | ||
| x = [int]$rect.X; y = [int]$rect.Y; | ||
| width = [int]$rect.Width; height = [int]$rect.Height; | ||
| isEnabled = $el.Current.IsEnabled | ||
| } | ConvertTo-Json -Compress | ||
| } else { Write-Output 'null' } | ||
| `; | ||
| else if (process.platform === 'win32') { | ||
| return getElementAtPointWindows(x, y); | ||
| } | ||
| else { | ||
| throw new Error(`UI Automation is not yet supported on ${process.platform}`); | ||
| } | ||
| } | ||
| /** | ||
| * macOS: Get element at point (not yet implemented - returns null) | ||
| * TODO: Implement using AXUIElementCopyElementAtPosition | ||
| */ | ||
| async function getElementAtPointMacOS(_x, _y) { | ||
| // For now, return null - this would require extending ax-reader | ||
| // or using a separate Swift snippet | ||
| return null; | ||
| } | ||
| /** | ||
| * Windows: Get element at cursor position | ||
| */ | ||
| async function getElementAtPointWindows(x, y) { | ||
| const scriptPath = join(__dirname, '..', '..', '..', 'scripts', 'windows', 'get-element-at-point.ps1'); | ||
| try { | ||
| const encodedScript = Buffer.from(psScript, 'utf16le').toString('base64'); | ||
| const { stdout } = await execAsync(`powershell -NoProfile -ExecutionPolicy Bypass -EncodedCommand ${encodedScript}`, { timeout: 5000 }); | ||
| const { stdout } = await execAsync(`powershell -NoProfile -ExecutionPolicy Bypass -File "${scriptPath}" -X ${x} -Y ${y}`, { timeout: 5000 }); | ||
| const result = stdout.trim(); | ||
@@ -621,0 +714,0 @@ if (result === 'null') |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"uiautomation.js","sourceRoot":"","sources":["../../../src/core/uiautomation.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"uiautomation.js","sourceRoot":"","sources":["../../../src/core/uiautomation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,mCAAmC;AACnC,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,mDAAmD;AACnD,gDAAgD;AAChD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,iDAAiD;AACjD,KAAK,UAAU,gBAAgB;IAC7B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,kBAAkB,SAAS,EAAE,CAAC,CAAC;IAC3D,OAAO,MAAM,CAAC,aAAa,CAAC;AAC9B,CAAC;AAED,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC,2BAA2B;AAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,IAAI,iBAAiB,GAA6B,IAAI,CAAC;AAgBvD,SAAS,qBAAqB;IAC5B,IAAI,iBAAiB;QAAE,OAAO,iBAAiB,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QACxE,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QAClE,OAAO,iBAAkB,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;QAC1B,OAAO;YACL,UAAU,EAAE,EAAE;YACd,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,QAAQ,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;SACjC,CAAC;IACJ,CAAC;AACH,CAAC;AA6BD;;GAEG;AACH,SAAS,cAAc,CAAC,WAAmB,EAAE,WAAoB;IAC/D,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;IAEvC,wDAAwD;IACxD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,SAAS,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,OAAO,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC;QACjD,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC;IACpD,CAAC;IAED,wBAAwB;IACxB,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC;QACtE,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACvE,OAAO,KAAK,CAAC,QAAQ,CAAC;QACxB,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAAE,OAAO,UAAU,CAAC;IAChE,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,UAAU,CAAC;IACvD,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,UAAU,CAAC;IACrD,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAAE,OAAO,KAAK,CAAC;IAE3D,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,WAAoB;IACtD,6BAA6B;IAC7B,MAAM,OAAO,GAAG,yBAAyB,CAAC;IAC1C,IAAI,CAAC;QACH,cAAc,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,oCAAoC,OAAO,CAAC,QAAQ,iBAAiB,WAAW,IAAI,CAAC,CAAC;IAC5I,CAAC;IAAC,MAAM,CAAC;QACP,oBAAoB;IACtB,CAAC;IAED,mCAAmC;IACnC,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,cAAc,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,gCAAgC,CAAC,CAAC;QACxF,CAAC;QAAC,MAAM,CAAC;YACP,oBAAoB;QACtB,CAAC;QACD,OAAO,kBAAkB,CAAC,WAAW,CAAC,CAAC;IACzC,CAAC;SAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACxC,OAAO,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,oBAAoB,CAAC,WAAoB;IACtD,8CAA8C;IAC9C,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;IAEpD,yDAAyD;IACzD,8CAA8C;IAC9C,MAAM,eAAe,GAAG,CAAC,UAAU,CAAC,IAAI;QACtC,UAAU,CAAC,SAAS,KAAK,SAAS;QAClC,UAAU,CAAC,SAAS,KAAK,SAAS;QAClC,UAAU,CAAC,SAAS,KAAK,EAAE,CAAC;IAE9B,IAAI,eAAe,IAAI,CAAC,WAAW,EAAE,CAAC;QACpC,4CAA4C;QAC5C,MAAM,eAAe,GAAG,MAAM,mBAAmB,EAAE,CAAC;QAEpD,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QACrF,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAEnE,OAAO;YACL,MAAM,EAAE,iBAAiB;YACzB,WAAW,EAAE,eAAe;YAC5B,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,eAAe;YACzB,EAAE;YACF,OAAO;YACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAEtD,mCAAmC;IACnC,IAAI,QAAQ,GAAgB,EAAE,CAAC;IAE/B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,sDAAsD;QACtD,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,wBAAwB,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC;YAC5G,QAAQ,GAAG,eAAe,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,mDAAmD,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5F,QAAQ,GAAG,MAAM,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;SAAM,IAAI,QAAQ,KAAK,UAAU,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC9D,wCAAwC;QACxC,QAAQ,GAAG,MAAM,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEvD,0CAA0C;QAC1C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,QAAQ,GAAG,MAAM,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC;QAED,kEAAkE;QAClE,oEAAoE;QACpE,gEAAgE;QAChE,IAAI,QAAQ,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACzB,oDAAoD;YACpD,sEAAsE;YACtE,MAAM,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAElC,MAAM,YAAY,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC7D,IAAI,YAAY,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;gBAC1C,QAAQ,GAAG,YAAY,CAAC;YAC1B,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,kBAAkB;QAClB,QAAQ,GAAG,MAAM,kBAAkB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAErD,wDAAwD;QACxD,IAAI,QAAQ,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,MAAM,oBAAoB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAChE,IAAI,WAAW,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACzC,QAAQ,GAAG,WAAW,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,qDAAqD;IACrD,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAE5D,OAAO;QACL,MAAM,EAAE,UAAU,CAAC,IAAI;QACvB,WAAW,EAAE,UAAU,CAAC,SAAS;QACjC,QAAQ;QACR,QAAQ;QACR,EAAE;QACF,OAAO;QACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,WAAoB;IAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,qBAAqB,CAAC,CAAC;IAClG,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7D,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAChC,wDAAwD,UAAU,mBAAmB,YAAY,EAAE,EACnG,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC;QAEF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IACrC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAAC,UAAkB;IAClD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAC;IAEvG,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAChC,wDAAwD,UAAU,kBAAkB,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EACtH,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAChD,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAE1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,oBAAoB,CAAC,WAAmB;IACrD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,4BAA4B,CAAC,CAAC;IAEzG,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAChC,wDAAwD,UAAU,mBAAmB,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EACxH,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAChD,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAE1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAWD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAChE,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,wBAAwB,CAAC,CAAC;IAErG,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAChC,wDAAwD,UAAU,GAAG,EACrE,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC;QAEF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAkB,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAChE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB;IACxC,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,6BAA6B,CAAC,CAAC;IAE1G,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAChC,wDAAwD,UAAU,GAAG,EACrE,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAChD,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO,EAAE,CAAC;QAE1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAClC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,8BAA8B;AAC9B,KAAK,UAAU,mBAAmB;IAChC,OAAO,oBAAoB,EAAE,CAAC;AAChC,CAAC;AAED;;;GAGG;AACH;;GAEG;AACH,KAAK,UAAU,sBAAsB,CAAC,OAAe;IACnD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,CAAC,+BAA+B;IAC9C,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG;;mEAEgD,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC;;;;;;;;;;;;;KAa1F,CAAC;QAEF,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,iBAAiB,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QACtF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEnD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,OAAO;gBACL,CAAC,EAAE,KAAK,CAAC,CAAC,CAAE;gBACZ,CAAC,EAAE,KAAK,CAAC,CAAC,CAAE;gBACZ,KAAK,EAAE,KAAK,CAAC,CAAC,CAAE;gBAChB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAE;aAClB,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,wBAAwB,CAAC,WAAmB,EAAE,WAAmB;IAC9E,MAAM,KAAK,GAAG;QACZ,MAAM,EAAE,kBAAkB;QAC1B,WAAW;QACX,WAAW;QACX,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,WAAW,EAAE,CAAC;QACd,OAAO,EAAE,KAAK;QACd,aAAa,EAAE,CAAC;KACjB,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,IAAI,CAAC;QACH,yCAAyC;QACzC,8EAA8E;QAC9E,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACzD,MAAM,YAAY,GAAG,MAAM,eAAe,EAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,YAAY,EAAE,GAAG,IAAI,EAAE,CAAC;QAExC,MAAM,aAAa,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAC/C,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC9D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,oBAAoB;QACpB,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC;YAC3B,IAAI,EAAE,WAAW,CAAC,SAAS,IAAI,IAAI;YACnC,IAAI,EAAE,WAAW;SAClB,CAAC,CAAC;QAEH,oBAAoB;QACpB,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACzC,CAAC;QAED,iDAAiD;QACjD,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAChE,MAAM,cAAc,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAEpD,kCAAkC;QAClC,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,GAAG,CAAC,CAAC;QAEnD,aAAa;QACb,MAAM,aAAa,CAAC,GAAG,CAAC,CAAC;QAEzB,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACvC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACrB,KAAK,CAAC,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QAErC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,KAAK,UAAU,gBAAgB,CAAC,WAAmB;IACjD,gDAAgD;IAChD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,OAAO,EAAE,CAAC,CAAC,gCAAgC;IAC7C,CAAC;IAED,gDAAgD;IAChD,uEAAuE;IACvE,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,gBAAgB,CAAC,CAAC;IAElF,iCAAiC;IACjC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,2CAA2C;QAC3C,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEnD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,cAAc,MAAM,SAAS,GAAG,EAAE;YACvE,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;SAC5B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAEzC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,wCAAwC;QACxC,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAChC,CAAC,EAAuF,EAAE,EAAE,CAAC,CAAC;YAC5F,IAAI,EAAE,EAAE,CAAC,IAAI;YACb,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE;YACnB,CAAC,EAAE,EAAE,CAAC,CAAC;YACP,CAAC,EAAE,EAAE,CAAC,CAAC;YACP,KAAK,EAAE,EAAE,CAAC,KAAK;YACf,MAAM,EAAE,EAAE,CAAC,MAAM;YACjB,SAAS,EAAE,IAAI;SAChB,CAAC,CACH,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,kBAAkB,CAAC,WAAoB;IACpD,kDAAkD;IAClD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IAE3E,4BAA4B;IAC5B,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,wFAAwF,CAAC,CAAC;IAC5G,CAAC;IAED,0CAA0C;IAC1C,6CAA6C;IAC7C,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,MAAM,eAAe,EAAE,CAAC;IAE7C,MAAM,YAAY,GAAG,WAAW,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,YAAY,EAAE,GAAG,IAAI,EAAE,CAAC;IAExC,oBAAoB;IACpB,MAAM,OAAO,GAAG,yBAAyB,CAAC;IAC1C,IAAI,CAAC;QACH,cAAc,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,yBAAyB,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;IACpK,CAAC;IAAC,MAAM,CAAC;QACP,oBAAoB;IACtB,CAAC;IAED,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,2CAA2C;QAC3C,uCAAuC;QACvC,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,WAAW,EAAE,SAAS;YACtB,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,EAAE;YACZ,EAAE,EAAE,EAAE;YACN,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;IAED,gFAAgF;IAChF,MAAM,aAAa,GAAG,MAAM,gBAAgB,EAAE,CAAC;IAC/C,IAAI,CAAC;QACH,cAAc,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,yCAAyC,OAAO,IAAI,CAAC,CAAC;IAC5G,CAAC;IAAC,MAAM,CAAC;QACP,oBAAoB;IACtB,CAAC;IACD,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACrD,IAAI,CAAC;QACH,cAAc,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,uBAAuB,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9G,CAAC;IAAC,MAAM,CAAC;QACP,oBAAoB;IACtB,CAAC;IAED,IAAI,CAAC;QACH,cAAc,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,yCAAyC,CAAC,CAAC,WAAW,wBAAwB,WAAW,EAAE,kBAAkB,IAAI,CAAC,CAAC;IACzK,CAAC;IAAC,MAAM,CAAC;QACP,oBAAoB;IACtB,CAAC;IAED,IAAI,WAAW,EAAE,kBAAkB,EAAE,CAAC;QACpC,IAAI,CAAC;YACH,cAAc,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,gEAAgE,CAAC,CAAC;YACtH,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,MAAM,wBAAwB,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;YACvG,cAAc,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,kBAAkB,eAAe,CAAC,MAAM,gCAAgC,cAAc,MAAM,CAAC,CAAC;YAElJ,8CAA8C;YAC9C,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC,OAAO,CAAC,CAAC;YAC3D,IAAI,YAAY,EAAE,CAAC;gBACjB,cAAc,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,oBAAoB,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBAE1G,gDAAgD;gBAChD,2DAA2D;gBAC3D,wBAAwB;gBACxB,kCAAkC;gBAClC,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC;gBAC/B,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,GAAG,cAAc,CAAC;gBAEhD,cAAc,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,wBAAwB,OAAO,OAAO,OAAO,cAAc,YAAY,CAAC,CAAC,eAAe,cAAc,KAAK,CAAC,CAAC;gBAEjK,eAAe,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;oBAC7B,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC;oBAChB,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC;gBAClB,CAAC,CAAC,CAAC;YACL,CAAC;YAED,oCAAoC;YACpC,MAAM,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;YACrF,MAAM,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;YAEnE,cAAc,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,gCAAgC,CAAC,CAAC;YACtF,MAAM,MAAM,GAAW;gBACrB,MAAM,EAAE,YAAY;gBACpB,WAAW,EAAE,SAAS;gBACtB,QAAQ,EAAE,SAAS;gBACnB,QAAQ,EAAE,eAAe;gBACzB,EAAE;gBACF,OAAO;gBACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACpC,CAAC;YACF,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;YACrC,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,cAAc,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,iBAAiB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjI,cAAc,CAAC,OAAO,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,YAAY,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;YAClH,OAAO,CAAC,IAAI,CAAC,4DAA4D,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACrG,uCAAuC;QACzC,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,gCAAgC;QAChC,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEpD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,YAAY,MAAM,SAAS,GAAG,EAAE;YACrE,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;SAC5B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAE7B,6CAA6C;QAC7C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CACb,qDAAqD;gBACrD,gDAAgD;gBAChD,kBAAkB,YAAY,qBAAqB;gBACnD,yBAAyB;gBACzB,qFAAqF,CACtF,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAa/B,CAAC;QAEF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;QAED,0BAA0B;QAC1B,MAAM,QAAQ,GAAgB,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;YACvD,MAAM,OAAO,GAAc;gBACzB,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE;gBACnB,CAAC,EAAE,EAAE,CAAC,CAAC;gBACP,CAAC,EAAE,EAAE,CAAC,CAAC;gBACP,KAAK,EAAE,EAAE,CAAC,KAAK;gBACf,MAAM,EAAE,EAAE,CAAC,MAAM;gBACjB,SAAS,EAAE,EAAE,CAAC,SAAS;aACxB,CAAC;YACF,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACnB,OAAO,CAAC,WAAW,GAAG,EAAE,CAAC,WAAW,CAAC;YACvC,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;QAEH,mFAAmF;QACnF,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;YAC1C,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;YACvC,OAAO,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEhE,IAAI,QAAQ,CAAC,MAAM,GAAG,EAAE,IAAI,aAAa,EAAE,CAAC;YAC1C,iEAAiE;YACjE,MAAM,EAAE,2BAA2B,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;YAEtE,MAAM,SAAS,GAAG,MAAM,2BAA2B,CAAC,OAAO,CAAC,CAAC;YAE7D,IAAI,SAAS,EAAE,CAAC;gBACd,+DAA+D;gBAC/D,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;gBAEzD,0BAA0B;gBAC1B,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,SAAS,CAAC,IAAI,YAAY,MAAM,SAAS,GAAG,EAAE;oBAClF,OAAO,EAAE,KAAK;oBACd,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;iBAC5B,CAAC,CAAC;gBAEH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAkB,CAAC;gBAEpE,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAClD,iDAAiD;oBAC/C,MAAM,WAAW,GAAgB,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;wBACjE,IAAI,EAAE,EAAE,CAAC,IAAI;wBACb,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,EAAE;wBACnB,CAAC,EAAE,EAAE,CAAC,CAAC;wBACP,CAAC,EAAE,EAAE,CAAC,CAAC;wBACP,KAAK,EAAE,EAAE,CAAC,KAAK;wBACf,MAAM,EAAE,EAAE,CAAC,MAAM;wBACjB,SAAS,EAAE,EAAE,CAAC,SAAS;wBACvB,GAAG,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC3D,CAAC,CAAC,CAAC;oBAEJ,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;oBACjF,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;oBAEjE,OAAO;wBACL,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,WAAW,EAAE,UAAU;wBACvB,QAAQ,EAAE,QAAQ;wBAClB,QAAQ,EAAE,WAAW;wBACrB,EAAE;wBACF,OAAO;wBACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;qBACpC,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,oCAAoC;QACpC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAC9E,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAE5D,OAAO;YACL,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,WAAW,EAAE,UAAU,EAAE,sBAAsB;YAC/C,QAAQ,EAAE,QAAQ;YAClB,QAAQ;YACR,EAAE;YACF,OAAO;YACP,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,wBAAwB;QACxB,OAAO;YACL,MAAM,EAAE,YAAY;YACpB,WAAW,EAAE,SAAS;YACtB,QAAQ,EAAE,QAAQ;YAClB,QAAQ,EAAE,EAAE;YACZ,EAAE,EAAE,EAAE;YACN,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAAc,EACd,WAAoB;IAEpB,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAEzC,uBAAuB;IACvB,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAC5B,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CACrD,CAAC;IAEF,uBAAuB;IACvB,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAC1B,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC7D,CAAC;IAEF,sBAAsB;IACtB,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAC1B,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC5D,CAAC;IAEF,OAAO,KAAK,IAAI,IAAI,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,CAAS,EAAE,CAAS;IAC1D,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,OAAO,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC;SAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACxC,OAAO,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,yCAAyC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,sBAAsB,CAAC,EAAU,EAAE,EAAU;IAC1D,gEAAgE;IAChE,oCAAoC;IACpC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,wBAAwB,CAAC,CAAS,EAAE,CAAS;IAC1D,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,0BAA0B,CAAC,CAAC;IAEvG,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAChC,wDAAwD,UAAU,QAAQ,CAAC,OAAO,CAAC,EAAE,EACrF,EAAE,OAAO,EAAE,IAAI,EAAE,CAClB,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,MAAM,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC;QAEnC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAc,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"} |
@@ -258,5 +258,20 @@ /** | ||
| try { | ||
| const { stdout } = await execAsync(`osascript -e 'tell application "System Events" to get name of first application process whose frontmost is true'`); | ||
| const app = stdout.trim(); | ||
| return { id: '0', title: app, app }; | ||
| // Get frontmost app name AND window title | ||
| const script = ` | ||
| tell application "System Events" | ||
| set frontApp to first application process whose frontmost is true | ||
| set appName to name of frontApp | ||
| try | ||
| set windowTitle to name of front window of frontApp | ||
| return appName & "|" & windowTitle | ||
| on error | ||
| return appName & "|" | ||
| end try | ||
| end tell | ||
| `; | ||
| const { stdout } = await execAsync(`osascript -e '${script.replace(/'/g, "'\\''")}'`); | ||
| const parts = stdout.trim().split('|'); | ||
| const app = parts[0] ?? ''; | ||
| const windowTitle = parts[1] ?? app; // Fallback to app name if no window title | ||
| return { id: '0', title: windowTitle, app }; | ||
| } | ||
@@ -263,0 +278,0 @@ catch { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"windows.js","sourceRoot":"","sources":["../../../src/core/windows.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"windows.js","sourceRoot":"","sources":["../../../src/core/windows.ts"],"names":[],"mappings":"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"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,eAAe,CAAC;AA63BvB,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAIjD"} | ||
| {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,eAAe,CAAC;AA0oCvB,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBjD"} |
+272
-12
@@ -10,5 +10,6 @@ /** | ||
| import { z } from 'zod'; | ||
| import { readFileSync } from 'node:fs'; | ||
| import { readFileSync, appendFileSync } from 'node:fs'; | ||
| import { join, dirname } from 'node:path'; | ||
| import { fileURLToPath } from 'node:url'; | ||
| import { homedir } from 'node:os'; | ||
| import { captureScreen, listScreens } from '../core/screenshot.js'; | ||
@@ -19,4 +20,6 @@ import { click, typeText, hotkey, scroll, moveMouse, getMousePosition, clickAtCurrentPosition, mouseDown, mouseUp, drag } from '../core/input.js'; | ||
| import { isNvdaInstalled, isNvdaRunning, initNvda, startNvda, stopNvda, getNvdaStatus } from '../core/nvda.js'; | ||
| import { isVoiceOverRunning, startVoiceOver, stopVoiceOver, getVoiceOverStatus } from '../core/voiceover.js'; | ||
| import { restartBrowserWithCDP } from '../core/browser-restart.js'; | ||
| import { RestrictedActionError } from '../core/security.js'; | ||
| import { UserInterruptError } from '../core/killswitch.js'; | ||
| import { UserInterruptError, resetKillSwitch, checkResumeSignal } from '../core/killswitch.js'; | ||
| import { SessionRecorder } from '../core/session-recorder.js'; | ||
@@ -182,3 +185,13 @@ const CLIENT_IMAGE_LIMITS = { | ||
| Example: To click on Button "Enregistrer" center=(951,658) β use os_click_at(x=951, y=658)`, | ||
| Example: To click on Button "Enregistrer" center=(951,658) β use os_click_at(x=951, y=658) | ||
| π BROWSER SUPPORT (Chrome, Edge, Brave, Arc, Opera): | ||
| - For Chromium browsers, OScribe uses Chrome DevTools Protocol (CDP) to detect 200-300+ interactive elements | ||
| - CDP requires the browser to be launched with remote debugging enabled | ||
| - To enable CDP: Close the browser, then launch it with: --remote-debugging-port=9222 | ||
| - Chrome: google-chrome --remote-debugging-port=9222 | ||
| - Edge: msedge --remote-debugging-port=9222 | ||
| - Brave: brave --remote-debugging-port=9222 | ||
| - Without CDP, OScribe falls back to native UI Automation (detects only ~20-40 elements on macOS) | ||
| - The "Strategy" field in the response indicates which method was used: "browser" (CDP) or "native" (UI Automation)`, | ||
| inputSchema: { | ||
@@ -297,2 +310,51 @@ type: 'object', | ||
| { | ||
| name: 'os_voiceover_status', | ||
| description: 'Check VoiceOver screen reader status (macOS only). VoiceOver is needed for Electron app accessibility.', | ||
| inputSchema: { | ||
| type: 'object', | ||
| properties: {}, | ||
| }, | ||
| }, | ||
| { | ||
| name: 'os_voiceover_start', | ||
| description: 'Start VoiceOver screen reader in silent mode (no audio). Required for Electron app accessibility. macOS only.', | ||
| inputSchema: { | ||
| type: 'object', | ||
| properties: {}, | ||
| }, | ||
| }, | ||
| { | ||
| name: 'os_voiceover_stop', | ||
| description: 'Stop VoiceOver screen reader. macOS only.', | ||
| inputSchema: { | ||
| type: 'object', | ||
| properties: {}, | ||
| }, | ||
| }, | ||
| { | ||
| name: 'os_browser_restart_with_cdp', | ||
| description: `Restart Chromium browser (Chrome, Edge, Brave, Arc) with Chrome DevTools Protocol (CDP) enabled. | ||
| This tool: | ||
| 1. Saves all open tabs (URLs) | ||
| 2. Closes the browser gracefully | ||
| 3. Relaunches with --remote-debugging-port=9222 | ||
| 4. Restores all tabs | ||
| 5. Takes a screenshot automatically after restart to verify CDP is active | ||
| Use this when: | ||
| - Screenshot shows "Strategy: native (CDP not enabled β οΈ)" | ||
| - Browser warning suggests enabling CDP | ||
| - You need 200-300+ elements instead of 20-40 | ||
| After restart, the screenshot will show "Strategy: browser (CDP active β)" and detect 10x more elements.`, | ||
| inputSchema: { | ||
| type: 'object', | ||
| properties: { | ||
| port: { type: 'number', description: 'Remote debugging port (default: 9222)', default: 9222 }, | ||
| window: { type: 'string', description: 'Optional browser window/app name to target (e.g., "Google Chrome", "Microsoft Edge"). If not provided, uses active window.' }, | ||
| }, | ||
| }, | ||
| }, | ||
| { | ||
| name: 'os_mouse_down', | ||
@@ -340,2 +402,8 @@ description: 'Press and hold mouse button at current cursor position. For drag-and-drop, prefer os_drag which handles the complete operation. Use os_mouse_down + os_move + os_mouse_up only for complex multi-step drag scenarios.', | ||
| const recorder = getRecorder(); | ||
| // Check for user resume signal (from CLI: oscribe killswitch reset) | ||
| // This allows the user to manually signal "I'm ready, continue automation" | ||
| checkResumeSignal(); | ||
| // Reset kill switch at the start of each MCP call | ||
| // This prevents false positives from previous mouse movements | ||
| resetKillSwitch(); | ||
| try { | ||
@@ -482,3 +550,9 @@ switch (name) { | ||
| : ''; | ||
| // Check if this is a Chromium browser (needed for warnings and strategy info) | ||
| const { detectBrowser } = await import('../core/browser.js'); | ||
| const { getActiveWindow } = await import('../core/windows.js'); | ||
| const activeWindow = await getActiveWindow(); | ||
| const browserInfo = activeWindow ? await detectBrowser(tree.windowClass, activeWindow.app) : null; | ||
| // Build image info section with dimensions and ratio | ||
| const strategyInfo = `π§ Strategy: ${tree.strategy}${tree.strategy === 'browser' ? ' (CDP active β)' : tree.strategy === 'native' && browserInfo ? ' (CDP not enabled β οΈ)' : ''}`; | ||
| const imageInfo = `π Screenshot: ${width}x${height} | Client: ${clientType} | Ratio: ${ratio.toFixed(3)}${taskbarInfo}`; | ||
@@ -488,17 +562,58 @@ const ratioHint = ratio > 1 | ||
| : `β Image at full resolution (no resize)`; | ||
| // Check if this looks like an Electron app with limited accessibility | ||
| // Only warn if NVDA is not installed (if installed, it auto-starts) | ||
| let nvdaWarning = ''; | ||
| if (process.platform === 'win32' && | ||
| // Add window bounds info for CDP (coordinate conversion) | ||
| let windowBoundsInfo = ''; | ||
| if (tree.strategy === 'browser' && tree.windowBounds) { | ||
| const { x, y, width: winWidth, height: winHeight } = tree.windowBounds; | ||
| // Typical Chrome UI height on macOS: ~140px (window title bar ~28px + tab bar ~37px + address bar ~75px) | ||
| const chromeUIHeight = 140; | ||
| windowBoundsInfo = `\nπ Browser Window: position=(${x},${y}) size=${winWidth}x${winHeight}\nπ‘ CDP coordinates: Add viewport offset to convert CDP coords β screen coords\n - CDP coordinate (cx, cy) β Screen coordinate (${x} + cx, ${y + chromeUIHeight} + cy)\n - Viewport starts at approximately y=${y + chromeUIHeight} (after Chrome UI)`; | ||
| } | ||
| let accessibilityWarning = ''; | ||
| // 1. Check for Chromium browser without CDP (highest priority) | ||
| if (browserInfo && !browserInfo.isDebuggingEnabled && tree.strategy === 'native' && tree.ui.length < 50) { | ||
| const browserCommands = { | ||
| chrome: 'open -a "Google Chrome" --args --remote-debugging-port=9222', | ||
| edge: 'open -a "Microsoft Edge" --args --remote-debugging-port=9222', | ||
| brave: 'open -a "Brave Browser" --args --remote-debugging-port=9222', | ||
| arc: 'open -a "Arc" --args --remote-debugging-port=9222', | ||
| chromium: 'open -a "Chromium" --args --remote-debugging-port=9222', | ||
| }; | ||
| const command = browserCommands[browserInfo.type] || `${browserInfo.type} --remote-debugging-port=9222`; | ||
| let platformCommand = command; | ||
| if (process.platform === 'win32') { | ||
| platformCommand = `start ${browserInfo.type === 'chrome' ? 'chrome' : browserInfo.type === 'edge' ? 'msedge' : browserInfo.type} --remote-debugging-port=9222`; | ||
| } | ||
| else if (process.platform === 'linux') { | ||
| platformCommand = `${browserInfo.type === 'chrome' ? 'google-chrome' : browserInfo.type} --remote-debugging-port=9222 &`; | ||
| } | ||
| accessibilityWarning = `π CHROMIUM BROWSER DETECTED WITHOUT CDP - Only ${tree.ui.length} elements detected (native UI Automation) | ||
| β‘ ACTION REQUIRED: Enable Chrome DevTools Protocol (CDP) to detect 200-300+ elements instead | ||
| STEPS TO ENABLE CDP: | ||
| 1. Close ${browserInfo.type.charAt(0).toUpperCase() + browserInfo.type.slice(1)} completely | ||
| 2. Relaunch with remote debugging: ${platformCommand} | ||
| 3. Take another screenshot to verify CDP is active (Strategy should show "browser" instead of "native") | ||
| π‘ TIP: You should suggest this to the user immediately so they can enable CDP for better automation.`; | ||
| } | ||
| // 2. Check for Electron app with limited accessibility | ||
| // Only warn if NVDA/VoiceOver is not running | ||
| else if (process.platform === 'win32' && | ||
| (tree.strategy === 'electron' || tree.windowClass.includes('Chrome_WidgetWin')) && | ||
| tree.ui.length < 10 && | ||
| !isNvdaInstalled()) { | ||
| nvdaWarning = 'β οΈ ELECTRON APP DETECTED - NVDA not installed. Run os_nvda_install then os_nvda_start to see all UI elements.'; | ||
| accessibilityWarning = 'β οΈ ELECTRON APP DETECTED - NVDA not installed. Run os_nvda_install then os_nvda_start to see all UI elements.'; | ||
| } | ||
| // Return: 1) NVDA warning FIRST if needed, 2) Window name, 3) Image info, 4) Instructions, 5) Elements, 6) Image | ||
| else if (process.platform === 'darwin' && | ||
| (tree.strategy === 'electron' || tree.windowClass.includes('Electron')) && | ||
| tree.ui.length < 10 && | ||
| !(await isVoiceOverRunning())) { | ||
| accessibilityWarning = 'β οΈ ELECTRON APP DETECTED - VoiceOver not running. Run os_voiceover_start to see all UI elements (silent mode, no audio).'; | ||
| } | ||
| // Return: 1) Accessibility warning FIRST if needed, 2) Window name, 3) Image info, 4) Instructions, 5) Elements, 6) Image | ||
| const capturedWindow = `πΈ Captured window: "${tree.window}"`; | ||
| const focusReminder = `β If this is not the intended window, use os_focus("App Name") first, then take another screenshot.`; | ||
| const instruction = `β οΈ IMPORTANT: To click on elements, use center=(x,y) coordinates from the Elements list below with os_click_at(x, y). Do NOT estimate positions from the image.`; | ||
| // Put NVDA warning FIRST if Electron app detected without NVDA | ||
| const nvdaFirst = nvdaWarning ? `${nvdaWarning.trim()}\n\n` : ''; | ||
| // Put accessibility warning FIRST if Electron app detected without screen reader | ||
| const warningFirst = accessibilityWarning ? `${accessibilityWarning.trim()}\n\n` : ''; | ||
| return { | ||
@@ -508,3 +623,3 @@ content: [ | ||
| type: 'text', | ||
| text: `${nvdaFirst}${capturedWindow}\n${focusReminder}\n\n${imageInfo}\n${ratioHint}\n\n${instruction}\n\nCursor position: (${cursor.x}, ${cursor.y})\n\nElements (${tree.ui.length}):\n${elementsText || 'No interactive elements found'}${systemText}`, | ||
| text: `${warningFirst}${capturedWindow}\n${focusReminder}\n\n${strategyInfo}\n${imageInfo}\n${ratioHint}${windowBoundsInfo}\n\n${instruction}\n\nCursor position: (${cursor.x}, ${cursor.y})\n\nElements (${tree.ui.length}):\n${elementsText || 'No interactive elements found'}${systemText}`, | ||
| }, | ||
@@ -725,2 +840,130 @@ { | ||
| } | ||
| case 'os_voiceover_status': { | ||
| if (process.platform !== 'darwin') { | ||
| return { | ||
| content: [{ type: 'text', text: 'VoiceOver is only available on macOS.' }], | ||
| }; | ||
| } | ||
| const status = await getVoiceOverStatus(); | ||
| const statusText = status.running | ||
| ? 'β VoiceOver is running - Electron accessibility enabled' | ||
| : 'β οΈ VoiceOver not running. Use os_voiceover_start to enable Electron accessibility.'; | ||
| return { | ||
| content: [{ | ||
| type: 'text', | ||
| text: `VoiceOver Status:\n- Available: ${status.available ? 'Yes' : 'No'}\n- Running: ${status.running ? 'Yes' : 'No'}\n- Can control: ${status.canControl ? 'Yes' : 'No (grant Accessibility permissions)'}\n\n${statusText}`, | ||
| }], | ||
| }; | ||
| } | ||
| case 'os_voiceover_start': { | ||
| if (process.platform !== 'darwin') { | ||
| return { | ||
| content: [{ type: 'text', text: 'VoiceOver is only available on macOS.' }], | ||
| }; | ||
| } | ||
| const running = await isVoiceOverRunning(); | ||
| if (running) { | ||
| return { | ||
| content: [{ type: 'text', text: 'β VoiceOver is already running.' }], | ||
| }; | ||
| } | ||
| const success = await startVoiceOver(true); // silent=true | ||
| return { | ||
| content: [{ | ||
| type: 'text', | ||
| text: success | ||
| ? 'β VoiceOver started in silent mode (no audio). Electron apps will now expose their full UI tree.' | ||
| : 'β Failed to start VoiceOver.', | ||
| }], | ||
| isError: !success, | ||
| }; | ||
| } | ||
| case 'os_voiceover_stop': { | ||
| if (process.platform !== 'darwin') { | ||
| return { | ||
| content: [{ type: 'text', text: 'VoiceOver is only available on macOS.' }], | ||
| }; | ||
| } | ||
| const success = await stopVoiceOver(true); // restoreSpeech=true | ||
| return { | ||
| content: [{ | ||
| type: 'text', | ||
| text: success ? 'β VoiceOver stopped.' : 'β Failed to stop VoiceOver.', | ||
| }], | ||
| isError: !success, | ||
| }; | ||
| } | ||
| case 'os_browser_restart_with_cdp': { | ||
| const BrowserRestartSchema = z.object({ | ||
| port: z.number().optional().default(9222), | ||
| window: z.string().optional(), | ||
| }); | ||
| const { port, window } = BrowserRestartSchema.parse(args); | ||
| await recorder.recordAction('os_browser_restart_with_cdp', { port, window }, async () => { | ||
| // Action recorded in the function itself | ||
| }); | ||
| console.error(`Restarting browser with CDP on port ${port}${window ? ` (targeting: ${window})` : ''}...`); | ||
| const result = await restartBrowserWithCDP(port, window); | ||
| if (!result.success) { | ||
| return { | ||
| content: [{ | ||
| type: 'text', | ||
| text: `β Failed to restart browser with CDP: ${result.error || 'Unknown error'}`, | ||
| }], | ||
| isError: true, | ||
| }; | ||
| } | ||
| // Take a screenshot automatically after restart to verify CDP is active | ||
| console.error('Browser restarted, taking screenshot to verify CDP...'); | ||
| await new Promise((resolve) => setTimeout(resolve, 2000)); // Wait for browser to stabilize | ||
| const screenshot = await captureScreen({ screen: 0 }); | ||
| const cursor = getMousePosition(); | ||
| const tree = await getUIElements(); | ||
| // Calculate resize ratio | ||
| const width = screenshot.width ?? 0; | ||
| const height = screenshot.height ?? 0; | ||
| const clientVersion = server.getClientVersion(); | ||
| const { ratio, clientType } = calculateImageRatio(width, height, clientVersion?.name); | ||
| // Format elements (not used in output but kept for potential future use) | ||
| // const elementsText = tree.ui.map((el) => { | ||
| // const cx = el.x + Math.floor(el.width / 2); | ||
| // const cy = el.y + Math.floor(el.height / 2); | ||
| // return `- ${el.type}: "${el.name}" pos=(${el.x},${el.y}) center=(${cx},${cy}) [${el.width}x${el.height}]`; | ||
| // }).join('\n'); | ||
| const strategyInfo = `π§ Strategy: ${tree.strategy}${tree.strategy === 'browser' ? ' (CDP active β)' : ' (CDP not enabled β οΈ)'}`; | ||
| const successMessage = `β Browser restarted successfully with CDP enabled! | ||
| π Results: | ||
| - Browser: ${result.browser} | ||
| - Tabs saved: ${result.tabsSaved} | ||
| - Tabs restored: ${result.tabsRestored} | ||
| - CDP enabled: ${result.cdpEnabled ? 'Yes β' : 'No β'} | ||
| πΈ Screenshot after restart: | ||
| ${strategyInfo} | ||
| π Screenshot: ${width}x${height} | Client: ${clientType} | Ratio: ${ratio.toFixed(3)} | ||
| Cursor: (${cursor.x}, ${cursor.y}) | ||
| Elements detected: ${tree.ui.length} (was ~4 before, now ${tree.ui.length}!) | ||
| First 10 elements: | ||
| ${tree.ui.slice(0, 10).map((el) => { | ||
| const cx = el.x + Math.floor(el.width / 2); | ||
| const cy = el.y + Math.floor(el.height / 2); | ||
| return `- ${el.type}: "${el.name}" center=(${cx},${cy})`; | ||
| }).join('\n')}`; | ||
| return { | ||
| content: [ | ||
| { | ||
| type: 'text', | ||
| text: successMessage, | ||
| }, | ||
| { | ||
| type: 'image', | ||
| data: screenshot.base64, | ||
| mimeType: 'image/png', | ||
| }, | ||
| ], | ||
| }; | ||
| } | ||
| case 'os_mouse_down': { | ||
@@ -796,6 +1039,23 @@ const { button } = MouseToggleSchema.parse(args); | ||
| export async function startServer() { | ||
| // Note: VoiceOver auto-start removed - now using AXManualAccessibility for Electron apps | ||
| // AXManualAccessibility works WITHOUT VoiceOver, avoiding unwanted audio | ||
| // VoiceOver can still be started manually via os_voiceover_start if needed | ||
| // Test log file writing | ||
| const testLogFile = join(homedir(), 'Desktop', 'oscribe-mcp-server-test.log'); | ||
| try { | ||
| appendFileSync(testLogFile, `[${new Date().toISOString()}] MCP server starting...\n`, 'utf8'); | ||
| } | ||
| catch (err) { | ||
| console.error('Failed to write test log:', err); | ||
| } | ||
| const transport = new StdioServerTransport(); | ||
| await server.connect(transport); | ||
| console.error('OScribe MCP server started'); | ||
| try { | ||
| appendFileSync(testLogFile, `[${new Date().toISOString()}] MCP server started successfully\n`, 'utf8'); | ||
| } | ||
| catch (err) { | ||
| console.error('Failed to write test log:', err); | ||
| } | ||
| } | ||
| //# sourceMappingURL=server.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AACnG,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAClJ,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACnH,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC/G,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAmC,MAAM,6BAA6B,CAAC;AAS/F,MAAM,mBAAmB,GAAqC;IAC5D,oDAAoD;IACpD,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC7C,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;IAChD,gBAAgB;IAChB,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC7C,gBAAgB;IAChB,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC7C,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC7C,2CAA2C;IAC3C,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE;CAChD,CAAC;AAEF;;;GAGG;AACH,SAAS,mBAAmB,CAAC,KAAa,EAAE,MAAc,EAAE,UAAmB;IAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,YAAY,GAAqB,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAE9E,2CAA2C;IAC3C,IAAI,WAAW,GAAqB,YAAY,CAAC;IACjD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC/D,IAAI,GAAG,KAAK,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjD,WAAW,GAAG,KAAK,CAAC;gBACpB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,MAAM,KAAK,GAAG,QAAQ,GAAG,WAAW,CAAC,WAAW;QAC9C,CAAC,CAAC,QAAQ,GAAG,WAAW,CAAC,WAAW;QACpC,CAAC,CAAC,CAAC,CAAC;IAEN,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;AACjD,CAAC;AAED,gCAAgC;AAChC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,EAAE,OAAO,CAAC,CAGhE,CAAC;AAEF,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;IACE,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,WAAW,CAAC,OAAO;CAC7B,EACD;IACE,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;KACV;CACF,CACF,CAAC;AAEF,eAAe;AACf,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IACvD,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CACxD,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uEAAuE,CAAC;IAC1G,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uEAAuE,CAAC;IAC1G,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC1E,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CAC9F,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;CAC1C,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;CACrE,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;CACxD,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CAC1D,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CACxD,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,kCAAkC,CAAC;CAC9E,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;IACtC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;CACvC,CAAC,CAAC;AAEH,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;CACrG,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACnD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;IACnD,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC/C,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;IAC/C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACpG,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;CACpF,CAAC,CAAC;AAEH,iDAAiD;AACjD,IAAI,eAAe,GAA2B,IAAI,CAAC;AAEnD,SAAS,WAAW;IAClB,eAAe,KAAK,IAAI,eAAe,CAAC,aAAa,CAAC,CAAC;IACvD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED,uBAAuB;AACvB,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;IAC1D,OAAO;QACL,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,2CAA2C;gBACxD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;wBAC7D,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;qBAC9D;oBACD,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;iBACrB;aACF;YACD;gBACE,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,qKAAqK;gBAClL,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;wBAC3E,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,8BAA8B,EAAE;qBAC3G;iBACF;aACF;YACD;gBACE,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,kIAAkI;gBAC/I,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;wBAC3D,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;wBAC3D,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;wBAC3E,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,8BAA8B,EAAE;qBAC3G;oBACD,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;iBACrB;aACF;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,8BAA8B;gBAC3C,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;qBACtD;oBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;iBACnB;aACF;YACD;gBACE,IAAI,EAAE,eAAe;gBACrB,WAAW,EAAE;;;;;;;2FAOsE;gBACnF,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE;qBACtE;iBACF;aACF;YACD;gBACE,IAAI,EAAE,YAAY;gBAClB,WAAW,EAAE,uBAAuB;gBACpC,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE;iBACf;aACF;YACD;gBACE,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,qCAAqC;gBAClD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;qBACpE;oBACD,QAAQ,EAAE,CAAC,QAAQ,CAAC;iBACrB;aACF;YACD;gBACE,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,uBAAuB;gBACpC,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;wBACpE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,4BAA4B,EAAE;qBACtE;oBACD,QAAQ,EAAE,CAAC,WAAW,CAAC;iBACxB;aACF;YACD;gBACE,IAAI,EAAE,WAAW;gBACjB,WAAW,EAAE,2BAA2B;gBACxC,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;qBACtE;oBACD,QAAQ,EAAE,CAAC,MAAM,CAAC;iBACnB;aACF;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,mEAAmE;gBAChF,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;qBACxE;oBACD,QAAQ,EAAE,CAAC,IAAI,CAAC;iBACjB;aACF;YACD;gBACE,IAAI,EAAE,eAAe;gBACrB,WAAW,EAAE,4FAA4F;gBACzG,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;wBAClD,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;qBACnD;oBACD,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC;iBACrB;aACF;YACD;gBACE,IAAI,EAAE,cAAc;gBACpB,WAAW,EAAE,oPAAoP;gBACjQ,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE;iBACf;aACF;YACD;gBACE,IAAI,EAAE,gBAAgB;gBACtB,WAAW,EAAE,gGAAgG;gBAC7G,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE;iBACf;aACF;YACD;gBACE,IAAI,EAAE,iBAAiB;gBACvB,WAAW,EAAE,kFAAkF;gBAC/F,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE;iBACf;aACF;YACD;gBACE,IAAI,EAAE,eAAe;gBACrB,WAAW,EAAE,iGAAiG;gBAC9G,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE;iBACf;aACF;YACD;gBACE,IAAI,EAAE,cAAc;gBACpB,WAAW,EAAE,wCAAwC;gBACrD,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE,EAAE;iBACf;aACF;YACD;gBACE,IAAI,EAAE,eAAe;gBACrB,WAAW,EAAE,uNAAuN;gBACpO,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,8BAA8B,EAAE;qBAC3G;iBACF;aACF;YACD;gBACE,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,gKAAgK;gBAC7K,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,8BAA8B,EAAE;qBAC3G;iBACF;aACF;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,6OAA6O;gBAC1P,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;wBAC/D,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;wBAC/D,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;wBAC3D,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,qBAAqB,EAAE;wBAC3D,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,8BAA8B,EAAE;wBAC1G,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uCAAuC,EAAE;qBACnF;oBACD,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC;iBAC3C;aACF;SACF;KACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,oBAAoB;AACpB,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IACjD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAE/B,IAAI,CAAC;QACH,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAExC,MAAM,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;oBAC1D,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxB,CAAC,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC,GAAG;yBACpC;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,iDAAiD;gBACjD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjE,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;gBAE/B,MAAM,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,KAAK,IAAI,EAAE;oBACrG,IAAI,UAAU,EAAE,CAAC;wBACf,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;oBAChC,CAAC;oBACD,MAAM,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;gBAC3C,CAAC,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,yBAAyB,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG;yBAC9I;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,iCAAiC;gBACjC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAEvE,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;oBACvC,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;gBAC1G,CAAC;gBAED,MAAM,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,KAAK,IAAI,EAAE;oBAC1F,IAAI,UAAU,EAAE,CAAC;wBACf,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;oBAChC,CAAC;oBACD,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;gBAChC,CAAC,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,GAAG,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,QAAQ,CAAC,KAAK,CAAC,GAAG;yBACrH;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,EAAE,IAAI,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAExC,MAAM,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE;oBAC1D,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACvB,CAAC,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,WAAW,IAAI,GAAG;yBACzB;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAChD,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;gBACnD,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;gBAElC,sEAAsE;gBACtE,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC;gBACpC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC;gBACtC,MAAM,aAAa,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAChD,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;gBAEtF,sCAAsC;gBACtC,MAAM,IAAI,GAAG,MAAM,aAAa,EAAE,CAAC;gBAEnC,4DAA4D;gBAC5D,wEAAwE;gBACxE,4EAA4E;gBAC5E,IAAI,cAAc,GAAmB,EAAE,CAAC;gBACxC,IAAI,WAAW,GAAG,EAAE,CAAC;gBACrB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,IAAI,CAAC,WAAW,KAAK,eAAe,EAAE,CAAC;oBACzE,MAAM,aAAa,GAAG,MAAM,gBAAgB,EAAE,CAAC;oBAC/C,MAAM,WAAW,GAAG,MAAM,oBAAoB,EAAE,CAAC;oBACjD,uDAAuD;oBACvD,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CACzC,EAAE,CAAC,IAAI,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,IAAI,CAAE,EAA0B,CAAC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,CAC5F,CAAC;oBAEF,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;wBAC1B,WAAW,GAAG,iBAAiB,aAAa,CAAC,QAAQ,EAAE,CAAC;oBAC1D,CAAC;yBAAM,CAAC;wBACN,WAAW,GAAG,iBAAiB,aAAa,CAAC,QAAQ,4BAA4B,aAAa,CAAC,QAAQ,kBAAkB,CAAC;oBAC5H,CAAC;gBACH,CAAC;qBAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;oBACxC,uDAAuD;oBACvD,WAAW,GAAG,wCAAwC,CAAC;gBACzD,CAAC;gBAED,qDAAqD;gBACrD,MAAM,aAAa,GAAG,CAAC,EAAqB,EAAoB,EAAE,CAAC,CAAC;oBAClE,IAAI,EAAE,EAAE,CAAC,IAAI;oBACb,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACP,CAAC,EAAE,EAAE,CAAC,CAAC;oBACP,KAAK,EAAE,EAAE,CAAC,KAAK;oBACf,MAAM,EAAE,EAAE,CAAC,MAAM;oBACjB,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC;oBACxC,OAAO,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;oBACzC,GAAG,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC9C,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC7D,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACzC,CAAC,CAAC;gBAEH,4EAA4E;gBAC5E,MAAM,aAAa,GAAkB;oBACnC,MAAM,EAAE,IAAI,CAAC,MAAM;oBACnB,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;oBACpC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,cAAc,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC;iBACnE,CAAC;gBAEF,4CAA4C;gBAC5C,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;gBAC/B,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;gBAExE,sEAAsE;gBACtE,iDAAiD;gBACjD,MAAM,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;oBACtC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;oBAC3C,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC5C,OAAO,KAAK,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACzM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEd,8CAA8C;gBAC9C,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC;oBAC1C,CAAC,CAAC,sBAAsB,cAAc,CAAC,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;wBAC5E,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;wBAC3C,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBAC5C,OAAO,KAAK,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,IAAI,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;oBAC1I,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;oBACf,CAAC,CAAC,EAAE,CAAC;gBAEP,qDAAqD;gBACrD,MAAM,SAAS,GAAG,kBAAkB,KAAK,IAAI,MAAM,cAAc,UAAU,aAAa,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,WAAW,EAAE,CAAC;gBACzH,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC;oBACzB,CAAC,CAAC,6EAA6E,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;oBACjG,CAAC,CAAC,wCAAwC,CAAC;gBAE7C,sEAAsE;gBACtE,oEAAoE;gBACpE,IAAI,WAAW,GAAG,EAAE,CAAC;gBACrB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;oBAC5B,CAAC,IAAI,CAAC,QAAQ,KAAK,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;oBAC/E,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE;oBACnB,CAAC,eAAe,EAAE,EAAE,CAAC;oBACvB,WAAW,GAAG,+GAA+G,CAAC;gBAChI,CAAC;gBAED,iHAAiH;gBACjH,MAAM,cAAc,GAAG,wBAAwB,IAAI,CAAC,MAAM,GAAG,CAAC;gBAC9D,MAAM,aAAa,GAAG,qGAAqG,CAAC;gBAC5H,MAAM,WAAW,GAAG,iKAAiK,CAAC;gBAEtL,+DAA+D;gBAC/D,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBAEjE,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,GAAG,SAAS,GAAG,cAAc,KAAK,aAAa,OAAO,SAAS,KAAK,SAAS,OAAO,WAAW,yBAAyB,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,kBAAkB,IAAI,CAAC,EAAE,CAAC,MAAM,OAAO,YAAY,IAAI,+BAA+B,GAAG,UAAU,EAAE;yBACzP;wBACD;4BACE,IAAI,EAAE,OAAO;4BACb,IAAI,EAAE,UAAU,CAAC,MAAM;4BACvB,QAAQ,EAAE,WAAW;yBACtB;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;gBACpC,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAC;gBAEpC,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,aAAa,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,kBAAkB,iBAAiB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;yBAC/J;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,UAAU,CAAC,CAAC,CAAC;gBAChB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACvD,IAAI,OAAO,GAAG,KAAK,CAAC;gBAEpB,MAAM,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,KAAK,IAAI,EAAE;oBACzE,OAAO,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;gBAC1C,CAAC,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,UAAU,EAAE,CAAC,CAAC,CAAC,oBAAoB,UAAU,EAAE;yBAC5E;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAEvD,MAAM,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;oBACzE,MAAM,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;gBAClC,CAAC,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,YAAY,SAAS,OAAO,MAAM,EAAE;yBAC3C;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAErD,MAAM,QAAQ,CAAC,YAAY,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,IAAI,EAAE;oBAC5D,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;gBACxB,CAAC,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,YAAY,IAAI,EAAE;yBACzB;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,EAAE,EAAE,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAEtC,MAAM,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE;oBACxD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;gBAC1D,CAAC,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,UAAU,EAAE,IAAI;yBACvB;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAChD,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAE9C,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,wBAAwB,CAAC,KAAK,CAAC,GAAG;6BACzC;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAED,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC/G,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,eAAe,CAAC,KAAK,CAAC,eAAe,OAAO,CAAC,IAAI,cAAc,OAAO,CAAC,IAAI,iBAAiB,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,gBAAgB,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,gBAAgB,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAqB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;yBAC9S;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,MAAM,QAAQ,GAAG,MAAM,oBAAoB,EAAE,CAAC;gBAE9C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC1B,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAM;gCACZ,IAAI,EAAE,2EAA2E;6BAClF;yBACF;qBACF,CAAC;gBACJ,CAAC;gBAED,uDAAuD;gBACvD,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;oBACvC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;oBAC3C,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBAC5C,MAAM,MAAM,GAAI,EAA0B,CAAC,MAAM,IAAI,SAAS,CAAC;oBAC/D,OAAO,KAAK,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,IAAI,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,YAAY,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC3J,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEd,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,mCAAmC,QAAQ,CAAC,MAAM,yFAAyF,YAAY,EAAE;yBAChK;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;oBACjC,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC;qBACxE,CAAC;gBACJ,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;gBACrC,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS;oBACjC,CAAC,CAAC,MAAM,CAAC,OAAO;wBACd,CAAC,CAAC,oDAAoD;wBACtD,CAAC,CAAC,wFAAwF;oBAC5F,CAAC,CAAC,6EAA6E,CAAC;gBAElF,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,8BAA8B,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,gBAAgB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,eAAe,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,OAAO,UAAU,EAAE;yBAClM,CAAC;iBACH,CAAC;YACJ,CAAC;YAED,KAAK,iBAAiB,CAAC,CAAC,CAAC;gBACvB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;oBACjC,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC;qBACxE,CAAC;gBACJ,CAAC;gBAED,IAAI,eAAe,EAAE,EAAE,CAAC;oBACtB,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,2DAA2D,EAAE,CAAC;qBAC/F,CAAC;gBACJ,CAAC;gBAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB;gBAE3D,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,OAAO;gCACX,CAAC,CAAC,6FAA6F;gCAC/F,CAAC,CAAC,mEAAmE;yBACxE,CAAC;oBACF,OAAO,EAAE,CAAC,OAAO;iBAClB,CAAC;YACJ,CAAC;YAED,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;oBACjC,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC;qBACxE,CAAC;gBACJ,CAAC;gBAED,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,CAAC;gBACtC,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,4BAA4B,EAAE,CAAC;qBAChE,CAAC;gBACJ,CAAC;gBAED,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;oBACvB,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kDAAkD,EAAE,CAAC;wBACrF,OAAO,EAAE,IAAI;qBACd,CAAC;gBACJ,CAAC;gBAED,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,CAAC;gBAEvC,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,OAAO;gCACX,CAAC,CAAC,kFAAkF;gCACpF,CAAC,CAAC,yBAAyB;yBAC9B,CAAC;oBACF,OAAO,EAAE,CAAC,OAAO;iBAClB,CAAC;YACJ,CAAC;YAED,KAAK,cAAc,CAAC,CAAC,CAAC;gBACpB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;oBACjC,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,oCAAoC,EAAE,CAAC;qBACxE,CAAC;gBACJ,CAAC;gBAED,MAAM,OAAO,GAAG,MAAM,QAAQ,EAAE,CAAC;gBAEjC,OAAO;oBACL,OAAO,EAAE,CAAC;4BACR,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,wBAAwB;yBAC7D,CAAC;oBACF,OAAO,EAAE,CAAC,OAAO;iBAClB,CAAC;YACJ,CAAC;YAED,KAAK,eAAe,CAAC,CAAC,CAAC;gBACrB,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjD,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;gBAE/B,MAAM,QAAQ,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;oBACtF,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;gBAC1B,CAAC,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,SAAS,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG;yBAC/D;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,aAAa,CAAC,CAAC,CAAC;gBACnB,MAAM,EAAE,MAAM,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjD,MAAM,GAAG,GAAG,gBAAgB,EAAE,CAAC;gBAE/B,MAAM,QAAQ,CAAC,YAAY,CAAC,aAAa,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;oBACpF,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;gBACxB,CAAC,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,SAAS,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG;yBAChE;qBACF;iBACF,CAAC;YACJ,CAAC;YAED,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAE5E,MAAM,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,KAAK,IAAI,EAAE;oBAC9F,MAAM,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC3D,CAAC,CAAC,CAAC;gBAEH,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,iBAAiB,KAAK,KAAK,KAAK,SAAS,GAAG,KAAK,GAAG,GAAG;yBAC9D;qBACF;iBACF,CAAC;YACJ,CAAC;YAED;gBACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,qCAAqC;QACrC,IAAI,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE1E,mDAAmD;QACnD,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;YAC3C,YAAY,GAAG,gBAAgB,KAAK,CAAC,OAAO,EAAE,CAAC;QACjD,CAAC;aAAM,IAAI,KAAK,YAAY,kBAAkB,EAAE,CAAC;YAC/C,YAAY,GAAG,iBAAiB,KAAK,CAAC,OAAO,EAAE,CAAC;QAClD,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,UAAU,YAAY,EAAE;iBAC/B;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;AAC9C,CAAC"} | ||
| {"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"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"} |
+5
-2
| { | ||
| "name": "oscribe", | ||
| "version": "0.1.0", | ||
| "version": "0.2.0", | ||
| "description": "Vision-based desktop automation engine", | ||
@@ -18,3 +18,4 @@ "type": "module", | ||
| "scripts": { | ||
| "build": "tsc", | ||
| "build": "tsc && npm run copy-assets", | ||
| "copy-assets": "cp -r src/config/*.json dist/src/config/ 2>/dev/null || true", | ||
| "dev": "tsx watch bin/oscribe.ts", | ||
@@ -54,2 +55,3 @@ "start": "node dist/bin/oscribe.js", | ||
| "chalk": "^5.3.0", | ||
| "chrome-remote-interface": "^0.33.3", | ||
| "commander": "^12.1.0", | ||
@@ -63,2 +65,3 @@ "dotenv": "^16.4.7", | ||
| "devDependencies": { | ||
| "@types/chrome-remote-interface": "^0.33.0", | ||
| "@types/node": "^22.10.5", | ||
@@ -65,0 +68,0 @@ "@typescript-eslint/eslint-plugin": "^8.19.1", |
+86
-5
@@ -8,9 +8,73 @@ # OScribe | ||
| [](https://www.typescriptlang.org/) | ||
| [](https://github.com/mikealkeal/oscribe) | ||
| [](https://github.com/mikealkeal/oscribe) | ||
| <!-- Demo GIF placeholder - replace with actual demo --> | ||
| <!--  --> | ||
| ## Supported Platforms & Applications | ||
| <div align="center"> | ||
| ### Operating Systems | ||
| <table> | ||
| <tr> | ||
| <td align="center" width="150"> | ||
| <img src="img/macos-logo.png" width="48" height="48" alt="macOS"/><br/> | ||
| <b>macOS</b> | ||
| </td> | ||
| <td align="center" width="150"> | ||
| <img src="img/windows-logo.png" width="48" height="48" alt="Windows"/><br/> | ||
| <b>Windows</b> | ||
| </td> | ||
| </tr> | ||
| </table> | ||
| ### Native Applications | ||
| <table> | ||
| <tr> | ||
| <td align="center" width="150"> | ||
| <img src="img/finder-icon.png" width="48" height="48" alt="Finder"/><br/> | ||
| <b>Finder</b><br/> | ||
| <sub>File management</sub> | ||
| </td> | ||
| <td align="center" width="150"> | ||
| <img src="img/windows-folder-icon.png" width="48" height="48" alt="Windows Explorer"/><br/> | ||
| <b>Explorer</b><br/> | ||
| <sub>File operations</sub> | ||
| </td> | ||
| <td align="center" width="150"> | ||
| <img src="img/macos-settings-icon.png" width="48" height="48" alt="Settings"/><br/> | ||
| <b>System Settings</b><br/> | ||
| <sub>macOS & Windows</sub> | ||
| </td> | ||
| </tr> | ||
| </table> | ||
| ### Web Browsers (CDP-enhanced) | ||
| <table> | ||
| <tr> | ||
| <td align="center" width="150"> | ||
| <img src="img/chrome-logo.png" width="48" height="48" alt="Chrome"/><br/> | ||
| <b>Chrome</b><br/> | ||
| <sub>200-300+ elements</sub> | ||
| </td> | ||
| <td align="center" width="150"> | ||
| <img src="img/brave-logo.png" width="48" height="48" alt="Brave"/><br/> | ||
| <b>Brave</b><br/> | ||
| <sub>Full CDP support</sub> | ||
| </td> | ||
| <td align="center" width="150"> | ||
| <b>Edge, Arc, Opera</b><br/> | ||
| <sub>Chromium-based</sub> | ||
| </td> | ||
| </tr> | ||
| </table> | ||
| **Note:** Chrome 136+ requires automatic profile sync (~20-30s) due to [CDP security changes](https://github.com/browser-use/browser-use/issues/1520). | ||
| </div> | ||
| ## Table of Contents | ||
| - [Supported Platforms & Applications](#supported-platforms--applications) | ||
| - [Why OScribe?](#why-oscribe) | ||
@@ -83,4 +147,4 @@ - [Features](#features) | ||
| | -------- | ------ | | ||
| | Windows | β Tested | | ||
| | macOS | π§ Not tested yet | | ||
| | Windows | β Fully supported | | ||
| | macOS | β Supported | | ||
| | Linux | π§ Not tested yet | | ||
@@ -91,4 +155,21 @@ | ||
| - PowerShell (included) | ||
| - UI Automation via PowerShell + .NET | ||
| - NVDA support for Electron apps | ||
| - No additional dependencies needed | ||
| #### macOS | ||
| - Native screencapture command | ||
| - UI Automation via AXUIElement API (`ax-reader` binary) | ||
| - Requires: **Accessibility permissions** (System Settings β Privacy & Security β Accessibility) | ||
| - Add Terminal or your IDE to allowed apps | ||
| - **IMPORTANT for VSCode users**: You must also authorize VSCode in "App Management" (Login Items & Extensions) | ||
| 1. Open System Settings β General β Login Items & Extensions | ||
| 2. Find "Visual Studio Code" | ||
| 3. Toggle ON the switch | ||
| 4. Enter your password or use Touch ID to confirm | ||
| 5. This is required for OScribe MCP to control your system from Claude Code | ||
| - Native apps (Chrome, Safari, Finder) work well | ||
| - Electron apps (VS Code, etc.) have limited element detection (same as Windows without NVDA) | ||
| ## Usage | ||
@@ -95,0 +176,0 @@ |
Native code
Supply chain riskContains native code (e.g., compiled binaries or shared libraries). Including native code can obscure malicious behavior.
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Unidentified License
LicenseSomething that seems like a license was found, but its contents could not be matched with a known license.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Unidentified License
LicenseSomething that seems like a license was found, but its contents could not be matched with a known license.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
3732583
814.44%176
32.33%8114
42.53%562
16.84%10
11.11%10
11.11%14
27.27%6
100%+ Added
+ Added
+ Added