sync: update from private repo (6c4d482)
CI / build-and-test (push) Has been cancelled

This commit is contained in:
oss-sync
2026-06-08 01:01:47 +00:00
parent caa0d03900
commit 03be80f036
21 changed files with 1140 additions and 15 deletions
+43
View File
@@ -0,0 +1,43 @@
import { describe, it, expect } from 'vitest';
import { makeNonce, makeMarkerCommand, parseMarker, extractOutput, detectWaitingForInput, shouldGuardInterrupt } from './console-run-lib.js';
describe('console-run-lib', () => {
it('makeNonce is long, hex, and unique', () => {
const a = makeNonce(), b = makeNonce();
expect(a).toMatch(/^[0-9a-f]{24,}$/);
expect(a).not.toBe(b);
});
it('makeMarkerCommand wraps the command with a nonce echo of $?', () => {
const { text, marker } = makeMarkerCommand('ls -la', 'deadbeef');
expect(text).toBe('ls -la; echo "__MAESTRO_DONE_deadbeef:$?__"\n');
expect(marker).toBe('__MAESTRO_DONE_deadbeef:');
});
it('parseMarker finds the exit code from output text', () => {
expect(parseMarker('foo\n__MAESTRO_DONE_deadbeef:0__\n', 'deadbeef')).toEqual({ found: true, exitCode: 0 });
expect(parseMarker('foo\n__MAESTRO_DONE_deadbeef:130__\n', 'deadbeef')).toEqual({ found: true, exitCode: 130 });
expect(parseMarker('still running...', 'deadbeef')).toEqual({ found: false, exitCode: null });
// a different nonce in the stream must NOT match (anti-spoof)
expect(parseMarker('__MAESTRO_DONE_otheronce:0__', 'deadbeef')).toEqual({ found: false, exitCode: null });
});
it('extractOutput strips the echoed command line and the marker line', () => {
const raw = 'ls -la; echo "__MAESTRO_DONE_dead:$?__"\nfile1\nfile2\n__MAESTRO_DONE_dead:0__\n';
const out = extractOutput(raw, 'ls -la', 'dead');
expect(out).toContain('file1');
expect(out).toContain('file2');
expect(out).not.toContain('__MAESTRO_DONE_');
});
it('detectWaitingForInput spots common prompts in the screen tail', () => {
expect(detectWaitingForInput('Password: ')).toBe(true);
expect(detectWaitingForInput('Continue? [y/N] ')).toBe(true);
expect(detectWaitingForInput('Are you sure (yes/no)? ')).toBe(true);
expect(detectWaitingForInput('just some output')).toBe(false);
});
it('shouldGuardInterrupt: guards when alive, allows when idle or confirmed', () => {
const now = 1_000_000;
const alive = { idleMs: 200, msSinceAiInput: 300, sessionAgeMs: 1000 };
const idle = { idleMs: 60_000, msSinceAiInput: 60_000, sessionAgeMs: 60_000 };
expect(shouldGuardInterrupt(alive, false)).toBe(true); // block
expect(shouldGuardInterrupt(alive, true)).toBe(false); // confirmed -> allow
expect(shouldGuardInterrupt(idle, false)).toBe(false); // idle -> allow
});
});