#!/usr/bin/env node /** * powershell-destructive — content-block для PowerShell-tool (V1-PS, правило 8 §4.1). * PS-нативные глаголы НЕ матчат unix-regex classify-destructive → отдельный набор. * Дополняет несущий пол: floor-decide зовёт это для name==='PowerShell' (Task 1.4). * Реоткрытие v3.8 F1: PowerShell-tool был полностью вне scope content-floor. */ const PS_CONTENT_BLOCK_RE = [ /\bRemove-Item\b[^\n]*-(?:Recurse|Force)\b/i, // рекурсивное/форс-удаление /\brm\b[^\n]*-[a-z]*r[a-z]*\s[^\n]*-[a-z]*f/i, // PS-алиас rm -r -fo /\b(?:Invoke-WebRequest|iwr|curl|wget|Invoke-RestMethod|irm)\b/i, // egress /\b(?:Invoke-Expression|iex)\b/i, // произвольное исполнение /\bStart-Process\b/i, // запуск интерпретатора/процесса /\bOut-File\b/i, // запись в файл /(?:^|[^0-9>&])>{1,2}(?![>&])/, // redirect >/>> ]; export function psContentBlock(command) { const cmd = String(command || ''); return PS_CONTENT_BLOCK_RE.some((re) => re.test(cmd)); }