# Разработка Для разработки рекомендуется Node.js 24 и npm 11. Runtime CLI поддерживает Node.js ≥22.12. Зависимости фиксируются в `npm-shrinkwrap.json`. ```bash npm ci --ignore-scripts ``` Основные модули: `src/cli.ts` — команды; `src/mcp.ts` — транспорт; `src/filters.ts` — аргументы поиска; `src/output.ts` — текстовая выдача; `src/setup.ts` — установка skills; `src/npm.ts` — запуск и завершение дерева npm. Регистрация команд разделена по группам в `src/cli.ts`; `createSkillInstaller` позволяет детерминированно проверять отказы файловых операций при замене и откате. Схемы `src/schemas.ts` проверяют ответы без удаления дополнительных JSON-полей. CI запускает: ```bash npm run syntax npm run lint npm run typecheck npm run build npm test ``` Локально разрешена лёгкая `npm run syntax`: она проверяет только синтаксис исходников TypeScript, не запускает typecheck или build. Полные локальные прогоны и build не нужны агенту: используйте CI по текущему SHA. Тесты работают с loopback MCP-сервером и временными HOME, не требуют production, npm login или установленного AI-агента. Для тестового сервера установите `HIRESEEKER_MCP_URL=http://127.0.0.1:PORT/mcp`. Production smoke выполняется отдельно по запросу или перед доставкой: ```bash npm run smoke:live ``` Для проверки скачанного CI-артефакта установите его в отдельный npm prefix и передайте путь к его executable: ```bash node scripts/live-smoke.mjs /path/to/installed/hireseeker-cli/bin/hireseeker.js ``` Без аргумента smoke использует `bin/hireseeker.js` текущего checkout и требует готовый `dist/`. Перед выпуском проверяйте выбранный tarball из зелёного CI и сверяйте его `receipt.json`, как описано в [документации выпуска](release.md). Smoke читает каталог, географию, поиск, следующую страницу и карточку. Отсутствие курсора или пустая следующая страница завершают проверку с ошибкой; успешный отчёт всегда означает выполненный cursor-path. Он не устанавливает skills и не изменяет пользовательские настройки на сайте; поисковый снимок создаётся в краткоживущем серверном кеше. CLI не содержит ключей и не обходит гостевые ограничения контактов. Описание вакансии и ответы сервера не должны попадать в shell-команды. Добавляя опцию, проверьте реальные MCP schema и семантику витрины.