fix(observer): v32 터미널 프롬프트 조기감지 — JUNK/PROMPT 필터 전에 명령어 추출 (v0.5.97)
근본원인: code 요소의 textContent '❯ project > command'가 PowerShell 키워드 (return, function, const)를 포함할 수 있어 JUNK_CODE_RE에 잘못 걸림. v32: ❯ 마커로 시작하는 code 텍스트는 JUNK/PROMPT 전에 명령어 직접 추출. 14/14 E2E 테스트 통과.
This commit is contained in:
52
extension/scratch/verify_v32.js
Normal file
52
extension/scratch/verify_v32.js
Normal file
@@ -0,0 +1,52 @@
|
||||
const {generateApprovalObserverScript} = require('../out/observer-script');
|
||||
let s = generateApprovalObserverScript(18080);
|
||||
|
||||
// Extract the terminal prompt regex from generated code
|
||||
let idx = s.indexOf('_termPromptMatch');
|
||||
let reCtx = s.substring(idx, s.indexOf(');', idx) + 1);
|
||||
console.log('v32 code:', reCtx.substring(0, 80));
|
||||
|
||||
// Extract regex
|
||||
let reMatch = reCtx.match(/\/(.+?)\//);
|
||||
let termRe = new RegExp(reMatch[1]);
|
||||
console.log('v32 regex:', termRe);
|
||||
|
||||
let stripRe = /\s*(content_copy|content_paste|play_arrow)\s*$/;
|
||||
|
||||
let tests = [
|
||||
// Should MATCH (terminal commands)
|
||||
['\u276f gravity_control > Start-Sleep 12', true, 'Start-Sleep'],
|
||||
['\u276f gravity_control > npm.cmd run compile', true, 'npm compile'],
|
||||
['\u276f gravity_control > $logFile = Join-Path $env:USERPROFILE', true, 'PS variable (had JUNK match)'],
|
||||
['\u276f gravity_control > git add -A; git commit -m "test"', true, 'git commit'],
|
||||
['\u276f gravity_control > node -e "const {gen}=require(\'./out\')"', true, 'node with const (was JUNK)'],
|
||||
['\u276f extension > npm.cmd run compile', true, 'extension npm'],
|
||||
['\u276f gravity_control > Start-Sleep 12 content_copy', true, 'with icon (strip)'],
|
||||
['\u276f gravity_control > Get-Content f.txt | Select-Object -Last 5', true, 'Get-Content'],
|
||||
// Should NOT match (prompt only, no command)
|
||||
['\u276f gravity_control > ', false, 'prompt only'],
|
||||
['\u276f extension > ', false, 'prompt only ext'],
|
||||
// Should NOT match (not terminal - JS code)
|
||||
['function test() { return 1; }', false, 'JS function'],
|
||||
['const x = require("fs")', false, 'JS const'],
|
||||
['import { foo } from "bar"', false, 'JS import'],
|
||||
// Should NOT match (no prompt marker)
|
||||
['gravity_control > dir', false, 'no ❯ marker'],
|
||||
];
|
||||
|
||||
console.log('\n=== v32 TERMINAL PROMPT REGEX TESTS ===');
|
||||
let pass = 0, fail = 0;
|
||||
for (let [text, shouldMatch, desc] of tests) {
|
||||
let m = termRe.exec(text);
|
||||
let matched = false;
|
||||
let cmdV = null;
|
||||
if (m && m[1] && m[1].trim().length > 2) {
|
||||
cmdV = m[1].trim().replace(stripRe, '').trim();
|
||||
matched = cmdV.length > 2;
|
||||
}
|
||||
let ok = matched === shouldMatch;
|
||||
if (ok) pass++; else fail++;
|
||||
console.log((ok ? 'PASS' : 'FAIL') + ' | ' + (matched ? 'MATCH' : 'SKIP ').padEnd(5) + ' | ' + desc);
|
||||
if (matched && cmdV) console.log(' cmd: "' + cmdV + '"');
|
||||
}
|
||||
console.log('\nResult: ' + pass + '/' + (pass+fail) + ' passed' + (fail > 0 ? ' (' + fail + ' FAILED!)' : ' ALL OK'));
|
||||
Reference in New Issue
Block a user