
Восстановление идентификаторов JavaScript нового поколения с помощью LLM.
Качество имён показывает долю имён, предпочтённых исключительно автоматической, некалиброванной оценкой Jev. Анимированный график → · Точные подсчёты, метод и ограничения →
Попробуйте FlowName в браузере → — введите свой JavaScript, API-ключ и модель; установка не требуется.
CLI: npx --yes --package=flowname@latest flowname input.js (сначала задайте GEMINI_API_KEY).
FlowName — это Semantic Identifier Recoverer нового поколения для обфусцированного JavaScript. Используя статический анализ на основе AST для группировки логически связанных переменных в запросы к LLM с ограниченным бюджетом, FlowName устраняет галлюцинации из-за потери контекста, характерные для наивных подходов со скользящим текстовым окном.
В двух прямых сравнениях с ведущим инструментом на основе символов (Humanify) на Cigar и GrobPaint FlowName показал следующие средние относительные результаты:
Во втором сравнении на 1 786 анонимизированных привязках GrobPaint FlowName использовал 408 против 1 786 вызовов API и на 29,36% меньше общего числа токенов; Jev с учётом исходного кода дал 512 против 274 исключительных предпочтений.
Изучите сводку бенчмарка и оба отчёта об именах с поиском. Оценки Jev автоматические и некалиброванные. В промпте Humanify для некоторых привязок отсутствовало целевое написание, а суффиксы, безопасные при коллизиях, могут влиять на оценки применённых имён. Подробности о разделении контекста и ограничениях см. в сводке.
Задайте GEMINI_API_KEY (или FLOWNAME_API_KEY) в окружении или в файле .env в текущем каталоге, затем выполните:
npx --yes --package=flowname@latest flowname input.js
Чтобы использовать другую конечную точку, совместимую с OpenAI, или пропустить переменные окружения, передайте всё в виде флагов:
npx --yes --package=flowname@latest flowname input.js --base-url https://api.openai.com/v1 --model MODEL --api-key YOUR_API_KEY
Флаги имеют приоритет, затем окружение, затем .env; CLI предупреждает, когда они расходятся. Ключ, переданный как флаг, может быть виден в истории оболочки и списке процессов.
Проверьте стоимость перед тем, как что-либо тратить, или сначала попробуйте небольшую часть большого файла:
flowname input.js --dry-run # planned API calls and prompt bytes; no key needed
flowname input.js --sample-requests 3 # send only the first 3 planned requests
flowname - -o - < input.js > output.js # standard input to standard output
CLI записывает восстановленный код в новый каталог flowname-output-TIMESTAMP-ID/output.js. Добавьте --report, чтобы отслеживать каждый запрос и предложенное имя в live HTML-отчёте. Для модели Gemini по умолчанию флаги не требуются. Требуется Node.js 22.8+.
Для браузера откройте playground, вставьте JavaScript, укажите собственный API-ключ и запустите восстановление. Запросы идут напрямую из вашего браузера к выбранному провайдеру; Stop прерывает выполнение.
FlowName именует идентификаторы; он не распаковывает бандлы и не отменяет структурную обфускацию. Используйте webcrack для поддерживаемых шаблонов обфускации или Wakaru для поддерживаемых бандлов, а затем передайте полученный JavaScript в FlowName. Он разрешает лексические привязки, использует лёгкие отношения и fallback в пределах одной области видимости для группировки целей и запрашивает у LLM несколько имён на каждый запрос. См. как работает группировка.
npm install flowname
import { readFile } from 'node:fs/promises';
import { recoverNames, createProvider } from 'flowname';
const sourceCode = await readFile('./input.js', 'utf8');
const provider = createProvider({
provider: 'gemini',
model: 'gemini-3.5-flash-lite',
apiKey: process.env.GEMINI_API_KEY,
});
const result = await recoverNames(sourceCode, { provider });
console.log(result.code);
Опции, отчёты CLI и полный пример использования библиотеки см. в руководстве по использованию. Индекс документации охватывает подход, архитектуру, ограничения, предыдущие работы и сравнение с Humanify.
Лицензировано под MIT. См. примечания к выпуску.