Template tests / tests (pull_request) Failing after 33s
Phase 3 groundwork of the improvement plan (PR 7 of the sequence). The Linux
work is a platform rewrite, so this first establishes the interface boundary
and moves an OS-specific piece behind it with Windows behavior preserved — no
new process.platform branches in shared code.
- app/platform/index.js is the single factory that selects a platform
implementation; shared code asks it for adapters and never inspects
process.platform itself.
- app/platform/interfaces.js documents the adapter contracts
(WindowContextProvider, ClickSource, PowerPolicy) and the explicit click-
source vocabulary.
- Extracted the foreground-window/element detection into per-OS adapters,
verbatim from text-intel.js:
app/platform/windows/window-context.js (PowerShell UIAutomation)
app/platform/linux/window-context.js (xprop)
app/platform/darwin/window-context.js (AppleScript)
text-intel.js now delegates to the injected provider and its three
platform-branching methods (and the now-dead child_process import) are gone.
- app/platform/linux/diagnostics.js detects session type, portal/PipeWire,
xinput, readable input devices, and the resulting click/screen-capture
profile, returning actionable messages for the UI. Exposed via a new
platform:capabilities IPC + preload method.
This is behavior-preserving: the Windows/macOS/Linux window-context code is
the same, just relocated behind the factory, and the capture pipeline is
untouched.
Tests: platform selection for every OS, provider validity + null-object for
unsupported OS, the shared service delegating to an injected provider, Linux
capability detection (x11/xinput, Wayland-without-PipeWire messaging, no-click
fallback, evdev), the capability facade, and a guard that text-intel no longer
branches on process.platform. 268 unit tests pass; startup smoke passes and
the click self-test is unchanged (stream source, markers 3/3, burst 8/8).
Co-Authored-By: Claude Fable 5 <[email protected]>
44 lines
1.3 KiB
JavaScript
44 lines
1.3 KiB
JavaScript
'use strict';
|
|
|
|
const { execFileSync } = require('node:child_process');
|
|
|
|
/**
|
|
* macOS WindowContextProvider using AppleScript / System Events. Extracted
|
|
* verbatim from text-intel.js. macOS is not a primary support target, but the
|
|
* adapter is kept so the shared code has no `process.platform` branch and the
|
|
* behavior is preserved where it exists. Never throws.
|
|
*/
|
|
function createDarwinWindowContextProvider() {
|
|
return {
|
|
async collect() {
|
|
const script = `
|
|
set appName to ""
|
|
set windowTitle to ""
|
|
tell application "System Events"
|
|
try
|
|
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
|
|
end try
|
|
end try
|
|
end tell
|
|
return appName & linefeed & windowTitle
|
|
`;
|
|
try {
|
|
const result = execFileSync('osascript', ['-e', script], {
|
|
encoding: 'utf8',
|
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
timeout: 1200,
|
|
}).trimEnd();
|
|
const [appName = '', windowTitle = ''] = result.split(/\r?\n/);
|
|
return { appName, windowTitle };
|
|
} catch {
|
|
return { appName: '', windowTitle: '' };
|
|
}
|
|
},
|
|
};
|
|
}
|
|
|
|
module.exports = { createDarwinWindowContextProvider };
|