mirror of
https://github.com/pbakaus/impeccable.git
synced 2026-09-12 06:06:37 +03:00
Scope headless detection to the path that opens a browser
The new self-detection ran before mode dispatch, so it also caught --wait, --stop, and --schema. CI failed on the start/wait cycle test: --wait returned 2 (no browser) where the documented poll loop expects 3 (WAITING). Under CI=1 the suite went 4 pass / 2 fail; it is 6 / 0 now. Two of those modes were user-facing bugs, not just test breakage. --stop exited 2 without killing the daemon it was asked to kill, leaking a server process (verified: one daemon running, CI=1 --stop, still one). --schema only prints a payload example, and new-work.md tells the agent to read it before building a payload. Detection can only tell whether this process can auto-open a browser, not whether the user has one: SSH with a forwarded port and a harness with an in-app browser both have a browser and no DISPLAY. The file already treats serve-without-opening as first class, since --start spawns its own daemon with --no-open. So the check now gates acquiring a session, not managing or ending one. The blocking serve path still exits 2 on a headless box, with a test pinning that. Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -75,9 +75,14 @@ if (process.env.IMPECCABLE_QUESTION_DISABLED) {
|
||||
console.log('serve-question: disabled in this session (no browser); use the structured question tool instead.');
|
||||
process.exit(2);
|
||||
}
|
||||
// Headless self-detection: --no-open means the caller opens the URL itself,
|
||||
// so only environments that would need a browser opened for them are checked.
|
||||
if (!process.argv.includes('--no-open') && !process.env.IMPECCABLE_QUESTION_FORCE) {
|
||||
// Headless self-detection, applied only where a browser is actually wanted.
|
||||
// --no-open means the caller opens the URL itself, and --wait / --stop /
|
||||
// --schema never open anything: --wait polls a daemon whose browser question
|
||||
// was already settled at --start, --stop kills one, --schema prints text. A
|
||||
// spurious exit 2 from those breaks the documented loop, which polls --wait
|
||||
// while it exits 3 and reads --schema before building a payload.
|
||||
const wantsBrowser = !hasFlag('no-open') && !hasFlag('wait') && !hasFlag('stop') && !hasFlag('schema');
|
||||
if (wantsBrowser && !process.env.IMPECCABLE_QUESTION_FORCE) {
|
||||
const headless =
|
||||
process.env.CI ||
|
||||
(process.env.SSH_CONNECTION && !process.env.DISPLAY) ||
|
||||
|
||||
Reference in New Issue
Block a user