Перейти к содержимому

Инфраструктура и Orca ​

Securify состоит из шести независимых приложений:

ПапкаРоль
apiСуществующий read-only NestJS MCP stdio сервер
appNuxt: основа клиентского приложения
adminNuxt: основа административного приложения
websiteNuxt: отдельная основа публичного сайта
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 ports

Setup устанавливает зависимости всех приложений по 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-setup

orca/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 IDf27bce41-9a8f-4b54-a794-a8ac28841c6e
Приложение / компонентsecurity-docs / securify-docs
Репозиторий / веткаAgentfy/securify / main
Source / build / outputdocs / 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-config

make 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.

Securify · Документация проекта · Прототип → MVP