system/config/platform-vars.sh
#!/bin/bash
# ═══════════════════════════════════════════════════════════════════════════════
# ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ ПЛАТФОРМЫ
# Единый источник правды для всех компонентов
# ═══════════════════════════════════════════════════════════════════════════════
#
# Версия: 1.0.0
# Дата: 2026-02-14
#
# ПРОБЛЕМА (до этого файла):
# - Хардкод путей в стандартах, скриптах, документации
# - Дублирование путей в разных местах
# - Сложно изменить конфигурацию
#
# РЕШЕНИЕ:
# - Один файл для ВСЕХ переменных платформы
# - Автозагрузка при старте bash
# - Использование переменных вместо хардкода
#
# ИСПОЛЬЗОВАНИЕ:
#   source /opt/claude-workspace/system/config/platform-vars.sh
#
# АВТОЗАГРУЗКА (добавить в ~/.bashrc):
#   [ -f /opt/claude-workspace/system/config/platform-vars.sh ] && \
#     source /opt/claude-workspace/system/config/platform-vars.sh
#
# ═══════════════════════════════════════════════════════════════════════════════

# ═══════════════════════════════════════════════════════════════════════════════
# БАЗОВЫЕ ПРОСТРАНСТВА
# ═══════════════════════════════════════════════════════════════════════════════

# Workspace — код, документация, конфигурация (Git)
export WORKSPACE=${WORKSPACE:-/opt/claude-workspace}

# Dataspace — данные проектов (S3 mount)
export DATASPACE=${DATASPACE:-/mnt/beget-s3}

# Infra — инфраструктура, бекапы, логи
export INFRA=${INFRA:-/mnt/beget-infra}
export INFRA_SERVER=${INFRA_SERVER:-/mnt/beget-infra/dev-pro}

# ═══════════════════════════════════════════════════════════════════════════════
# СТРУКТУРА ПЛАТФОРМЫ
# ═══════════════════════════════════════════════════════════════════════════════

# Методология, стандарты, теория
export ARCHITECT=$WORKSPACE/architect

# Ядро платформы (агенты, скрипты, сервисы)
export SYSTEM=$WORKSPACE/system

# Библиотека переиспользуемого кода
export LIBRARY=$WORKSPACE/library

# Инфраструктура
export INFRASTRUCTURE=$WORKSPACE/infra

# Очередь задач
export QUEUE=$WORKSPACE/.queue

# Контекст (протокол, словари)
export CONTEXT=$WORKSPACE/.context

# ═══════════════════════════════════════════════════════════════════════════════
# ПРОЕКТЫ
# ═══════════════════════════════════════════════════════════════════════════════

# Namespace проектов (одинаковый в workspace и dataspace!)
export PROJECTS_NAMESPACE="projects/org"

# Корневая папка проектов в workspace
export PROJECTS_WS=$WORKSPACE/$PROJECTS_NAMESPACE

# Корневая папка проектов в dataspace
export PROJECTS_DATA=$DATASPACE/$PROJECTS_NAMESPACE

# Корневая папка проектов в infra
export PROJECTS_INFRA=$INFRA/$PROJECTS_NAMESPACE

# ═══════════════════════════════════════════════════════════════════════════════
# ВЕБ-СЕРВИСЫ
# ═══════════════════════════════════════════════════════════════════════════════

# Просмотр документации (.md файлов)
export DOCS_URL="http://docs.0kt.ru"

# Загрузка файлов в _inbox
export UPLOAD_URL="http://upload.0kt.ru"

# Публикация файлов на скачивание
export SHARE_URL="http://share.0kt.ru"
export SHARE_IP="91.218.142.168"
export SHARE_PORT="8897"

# NocoDB (управление данными)
export NOCODB_URL="http://docs.0kt.ru:8085"

# ═══════════════════════════════════════════════════════════════════════════════
# СИСТЕМНЫЕ КОМПОНЕНТЫ
# ═══════════════════════════════════════════════════════════════════════════════

# Конфигурация
export PLATFORM_CONFIG=$SYSTEM/config

# Агенты
export PLATFORM_AGENTS=$SYSTEM/agents

# Планировщик
export PLATFORM_SCHEDULER=$SYSTEM/scheduler

# Мониторинг
export PLATFORM_MONITOR=$SYSTEM/monitor

# Сервисы
export PLATFORM_SERVICES=$SYSTEM/services

# Скрипты
export PLATFORM_SCRIPTS=$SYSTEM/scripts

# ═══════════════════════════════════════════════════════════════════════════════
# ИНФРАСТРУКТУРА
# ═══════════════════════════════════════════════════════════════════════════════

# Скрипты инфраструктуры
export INFRA_SCRIPTS=$INFRASTRUCTURE/scripts

# Конфигурация сервисов
export INFRA_CONFIG=$INFRASTRUCTURE/config

# Логи (архив в S3)
export INFRA_LOGS=$INFRA/logs

# Бэкапы
export INFRA_BACKUPS=$INFRA/dev-pro/backup
export INFRA_GOLDEN=$INFRA_BACKUPS/golden
export INFRA_RECOVERY=$INFRA_BACKUPS/RECOVERY
export INFRA_LATEST=$INFRA_BACKUPS/L5-STATE/latest

# Скрипты бэкапов
export BACKUP_SCRIPTS=$WORKSPACE/infra/@backup.service/scripts

# ═══════════════════════════════════════════════════════════════════════════════
# PLATFORM V2 — ТРЁХСЕРВЕРНАЯ АРХИТЕКТУРА (ПЕРЕХОДНЫЙ ПЕРИОД)
# ═══════════════════════════════════════════════════════════════════════════════
#
# Сейчас: всё на одном сервере, переменные указывают на текущие пути
# При разделении: меняем только значения переменных, код не трогаем
#
# Подробнее: architect/concept/PLATFORM_V2.md
#
# ─── Architect сервер (методология, стандарты, библиотека) ───────────────────
#   Сейчас: $WORKSPACE (монорепо)
#   После разделения: отдельный сервер
export ARCHITECT_HOME=${ARCHITECT_HOME:-$WORKSPACE}

# ─── Platform сервер (разработка проектов, Claude) ───────────────────────────
#   Сейчас: $WORKSPACE (монорепо)
#   После разделения: /opt/platform или аналог
export PLATFORM_HOME=${PLATFORM_HOME:-$WORKSPACE}

# ─── Проекты в разработке (на Platform сервере) ──────────────────────────────
#   Сейчас: $PROJECTS_WS
#   После разделения: $PLATFORM_HOME/projects или отдельная папка
export PROJECTS_DEV=${PROJECTS_DEV:-$PROJECTS_WS}

# ─── Management сервер (проекты в production) ────────────────────────────────
#   Сейчас: $WORKSPACE (монорепо)
#   После разделения: отдельный сервер для запущенных проектов
export MANAGEMENT_HOME=${MANAGEMENT_HOME:-$WORKSPACE}

# ─── ProCoder проекты в production ───────────────────────────────────────────
#   ProCoder = проекты на собственном кодере платформы (не на внешних стеках)
#   Сейчас: $PROJECTS_WS
#   После разделения: $MANAGEMENT_HOME/procoder
export PROCODER_HOME=${PROCODER_HOME:-$PROJECTS_WS}

# ─── Git-серверы ─────────────────────────────────────────────────────────────
#   Сейчас: локальный git ($WORKSPACE)
#   После разделения: отдельные git-серверы (Gitea self-hosted или аналог)
export GIT_PLATFORM_URL=${GIT_PLATFORM_URL:-"local:$WORKSPACE"}
export GIT_PROJECTS_URL=${GIT_PROJECTS_URL:-"local:$PROJECTS_DEV"}

# ═══════════════════════════════════════════════════════════════════════════════
# ИМПОРТ ФУНКЦИЙ ДЛЯ ПРОЕКТОВ
# ═══════════════════════════════════════════════════════════════════════════════

# Импортируем функции для работы с проектами
if [ -f "$PLATFORM_CONFIG/project-paths.sh" ]; then
  source "$PLATFORM_CONFIG/project-paths.sh"
fi

# ═══════════════════════════════════════════════════════════════════════════════
# HELP
# ═══════════════════════════════════════════════════════════════════════════════

platform_vars_help() {
  cat << 'EOF'
═══════════════════════════════════════════════════════════════════════════════
ПЕРЕМЕННЫЕ ОКРУЖЕНИЯ ПЛАТФОРМЫ
═══════════════════════════════════════════════════════════════════════════════

ИСПОЛЬЗОВАНИЕ:
  source /opt/claude-workspace/system/config/platform-vars.sh

БАЗОВЫЕ ПРОСТРАНСТВА:
  $WORKSPACE          /opt/claude-workspace    (Код, документация)
  $DATASPACE          /mnt/beget-s3            (Данные проектов)
  $INFRA              /mnt/beget-infra         (Инфра, бекапы)

СТРУКТУРА ПЛАТФОРМЫ:
  $ARCHITECT          $WORKSPACE/architect
  $SYSTEM             $WORKSPACE/system
  $LIBRARY            $WORKSPACE/library
  $INFRASTRUCTURE     $WORKSPACE/infra
  $QUEUE              $WORKSPACE/.queue
  $CONTEXT            $WORKSPACE/.context

ПРОЕКТЫ:
  $PROJECTS_NAMESPACE projects/org
  $PROJECTS_WS        $WORKSPACE/projects/org
  $PROJECTS_DATA      $DATASPACE/projects/org
  $PROJECTS_INFRA     $INFRA/projects/org

ВЕБ-СЕРВИСЫ:
  $DOCS_URL           http://docs.0kt.ru
  $UPLOAD_URL         http://upload.0kt.ru
  $SHARE_URL          http://share.0kt.ru
  $NOCODB_URL         http://docs.0kt.ru:8085

СИСТЕМНЫЕ КОМПОНЕНТЫ:
  $PLATFORM_CONFIG    $SYSTEM/config
  $PLATFORM_AGENTS    $SYSTEM/agents
  $PLATFORM_SCHEDULER $SYSTEM/scheduler
  $PLATFORM_MONITOR   $SYSTEM/monitor
  $PLATFORM_SERVICES  $SYSTEM/services
  $PLATFORM_SCRIPTS   $SYSTEM/scripts

ИНФРАСТРУКТУРА:
  $INFRA_SCRIPTS      $INFRASTRUCTURE/scripts
  $INFRA_CONFIG       $INFRASTRUCTURE/config
  $INFRA_LOGS         $INFRA/logs
  $INFRA_BACKUPS      $INFRA/backups

ФУНКЦИИ ПРОЕКТОВ (из project-paths.sh):
  project_ws NAME       Путь в workspace
  project_data NAME     Путь в dataspace
  project_infra NAME    Путь в infra
  set_project NAME      Экспортировать переменные проекта

ПРИМЕРЫ:
  # Использовать в скриптах вместо хардкода
  echo "Конфиг: $PLATFORM_CONFIG/telegram.yaml"
  echo "Проект: $(project_ws pirotehnika)"

  # Ссылки в документации
  echo "Документ: $DOCS_URL/projects/pirotehnika/PROJECT.md"
  echo "NocoDB: $NOCODB_URL/dashboard/#/nc/{base_id}/table/Products"

АВТОЗАГРУЗКА:
  Добавить в ~/.bashrc:
  [ -f /opt/claude-workspace/system/config/platform-vars.sh ] && \
    source /opt/claude-workspace/system/config/platform-vars.sh

═══════════════════════════════════════════════════════════════════════════════
EOF
}

# ═══════════════════════════════════════════════════════════════════════════════
# INIT
# ═══════════════════════════════════════════════════════════════════════════════

# Если вызван как скрипт (не source)
if [ "${BASH_SOURCE[0]}" = "${0}" ]; then
  platform_vars_help
fi