Инфраструктура и Orca
Securify состоит из шести независимых приложений:
| Папка | Роль |
|---|---|
api | Существующий read-only NestJS MCP stdio сервер |
app | Nuxt: основа клиентского приложения |
admin | Nuxt: основа административного приложения |
website | Nuxt: отдельная основа публичного сайта |
scanner | Самостоятельный Nest CLI каркас без выполнения сканирования |
docs | Существующий VitePress и опубликованный landing |
Источник и адаптация: CleanSlice foundation. Корневой package.json обслуживает Git hooks. Общие команды находятся в Makefile. Инструкции, автоматически читаемые агентами, — в корневом AGENTS.md; CLAUDE.md подключает тот же файл для Claude Code.
Подготовка нового checkout
Нужны Node.js 22.x и Bun 1.3.14. Docker Engine с Compose v2 требуется только для локальных FTP/SFTP-серверов и PostgreSQL. MCP stdio и unit-тесты API работают без базы; Redis не нужен.
sh
make setup
make doctor
make portsSetup устанавливает зависимости всех приложений по lock-файлам и завершается. Он не запускает watch-процессы, контейнеры и облачные ресурсы. Повторный запуск сохраняет выбранные порты. Шаблон административных ключей — корневой .env.example (без значений). Корневой .env не копируется и не передаётся в API, Nuxt или docs. Bun при установке корневых Git hooks может читать локальный .env; не добавляйте в root package.json команды запуска приложений.
Для каждого checkout создаётся игнорируемый .orca/local.json: отдельное имя Compose-проекта и локальные порты на 127.0.0.1. Основной checkout использует блок 4100–4139: app 4100, admin 4101, website 4103, docs 4106, docs preview 4107, PostgreSQL 4108, FTP 4110, SFTP 4111, локальная панель 4112, passive FTP 4120–4130. Для новых worktree выбирается блок из 4900–4999; общая инфраструктура (4028, 4029, 4030, 4068) исключена. При выделении worktree проверяется доступность портов и сохранённые резервации других Git worktree. Для основного checkout адреса фиксированы, доступность проверяется при запуске сервиса. Правильные адреса показывает make ports. Блокировка в общем Git-каталоге сериализует распределение портов. Для старых checkout setup добавляет admin/website, сохраняя прежние порты. Сохранённый порт может впоследствии занять другой процесс — выясните его владельца, не завершайте чужую сессию.
Существующие worktree сохраняют прежние назначения; смена основного checkout не переносит их процессы. Общие реестры на машине: /Users/dmitriyzhuk/Sites/PORTS.md и /Users/dmitriyzhuk/Sites/agentfy/PORTS.md. Они перечисляют владельцев и исключения, но не служат автоматической блокировкой.
Настройки Orca
Версионируемый orca.yaml:
yaml
scripts:
setup: bash ./orca/setup.sh
archive: make fixtures-down
setupAgentStartupPolicy: wait-for-setuporca/setup.sh выполняет make setup, а в рабочем пространстве агента ещё записывает его локальные настройки: запреты на merge, push в main, doctl и чтение корневого .env, модель по роли и необязательный граф graft. Цикл воркеров и ревьюеров по доске SECU описан в orca/README.md в корне репозитория.
В настройках репозитория Orca используются shared commands, запуск setup по умолчанию и ожидание его завершения перед стартом агента. Локальный override make dev нужно убрать: он перекрывает orca.yaml и никогда не завершает setup. Для уже существующего checkout выполните make setup один раз вручную.
Обычные команды из терминала Orca:
sh
make docs-dev # документация; URL из make ports
make app-dev # клиентский Nuxt scaffold
make admin-dev # административный scaffold
make website-dev # отдельный публичный сайт
make scanner-dev # Nest CLI watch, без HTTP-порта
make fixtures-up # локальные тестовые FTP/SFTP и PostgreSQL
make fixtures-logs
make fixtures-downОстанавливайте dev-серверы через Ctrl+C в их терминалах. Archive-hook удаляет контейнеры только своего Compose-проекта. При удалении через CLI укажите orca worktree rm --worktree <selector> --run-hooks: без --run-hooks Orca пропускает archive-hook. Альтернатива — заранее выполнить make fixtures-down. При недоступном Docker команда сообщает, что остановка не подтверждена; повторите команду после восстановления Docker. Данные fixture-сайта хранятся в docker/fixtures/site данного checkout. Фикстуры содержат заведомо подозрительные PHP-примеры; они не запускаются как веб-сайт.
PostgreSQL
Локальная база входит в тот же Compose-проект, порт — из make ports, доступы синтетические (securify/securify). Данные лежат в именованном volume и переживают перезапуск и make fixtures-down; volume удаляется только явным docker volume rm <compose-проект>_postgres-data.
sh
make fixtures-up
make db-deploy # prisma db migrate: применить миграции из api/prisma/migrations
make db-status # prisma migration status: показать неприменённые миграции
make db-test # интеграционные тесты БД во временной базе, удаляемой после прогонаСхема — Prisma 8 (RC): *.prisma в подслайсах api/src/slices/, рядом с gateway модели. Контракт генерирует prisma contract emit в игнорируемую api/generated/prisma (postinstall, build, test). Миграции — TypeScript-планы в Git; то, что PSL не выражает, добавлено в план операциями rawSql. Новую миграцию после правки моделей создаёт cd api && bun run db:plan --name <имя>; DATABASE_URL=<из make ports> bun run db:verify сверяет базу с контрактом. Production-база не настроена.
Локальная база, мигрированная до перехода на Prisma 8, содержит старую схему без маркера Prisma 8: make db-deploy на ней упадёт. Её нужно пересоздать (make fixtures-down, docker volume rm <compose-проект>_postgres-data, make fixtures-up, make db-deploy) — данные в ней синтетические.
MCP backend
sh
cd api
bun run build
node dist/main.jsСервер использует stdin/stdout, не открывает HTTP-порт. Для подключения из MCP-клиента задайте command node и абсолютный путь к api/dist/main.js. make dev запускает fixtures, docs, app, admin, website, backend watch и локальную панель на http://127.0.0.1:4112 (local/README.md); эта команда намеренно остаётся работать и не подходит для setup. Клиенту MCP, которому нужны stdin/stdout сервера, подходит make mcp.
Синтетические доступы fixtures: логин и пароль securify. Для SFTP rootPath /public_html, для FTP /home/securify/public_html. Хост 127.0.0.1, порты — из make ports. В API не передаются административные ключи DigitalOcean/GitHub.
Production
Сейчас опубликована только документация: security-docs.
| Параметр | Значение |
|---|---|
| DigitalOcean App ID | f27bce41-9a8f-4b54-a794-a8ac28841c6e |
| Приложение / компонент | security-docs / securify-docs |
| Репозиторий / ветка | Agentfy/securify / main |
| Source / build / output | docs / bun run build / .vitepress/dist |
| Автопубликация | При push в main |
Перед публикацией: cd docs && bun run build. После push проверить состояние развёртывания ACTIVE в существующем приложении и ответы главной, /documentation.html, /architecture/v0.1.0.html, /market/. Не создавать новое приложение для исправления существующего. Подробности — публикация.
Продакшен API, клиентский Nuxt-сайт, хранилище результатов и интеграция Agentfy ещё не развёрнуты. Создание этих ресурсов — отдельная задача с конкретной архитектурой; наличие ключей в .env не означает, что они уже настроены.
Проверка SECU-9 foundation
sh
make check-all # API tests/typecheck/boundaries; Nuxt types; scanner types/boundaries
make build-all # все шесть приложений
make smoke # MCP handshake, scanner boot, HTTP страниц каждого frontend и docs
make fixtures-configmake smoke требует завершённой сборки и свободных портов этого checkout. Он запускает только локальные процессы и завершает их после проверки. Для каждого Nuxt-приложения доступен bun run build; production server: HOST=127.0.0.1 PORT=<свободный порт> node .output/server/index.mjs из папки приложения. Scanner: cd scanner && bun run build && bun run start; выводит JSON ready и завершается с кодом 0. Очередь, БД, постоянный worker и реальные сканеры не добавлены. Файлы .env.example не содержат секретов; копировать их для каркасов не требуется. Website не заменяет VitePress landing и не включён в production deployment.