github Leadaxe/singbox-launcher v0.3.2
singbox-launcher v0.3.2 (Windows)

one month ago

Add: https://github.com/Leadaxe/singbox-launcher/blob/main/docs/ParserConfig.md

📋 Русское описание релиза

🚀 Singbox Launcher - Заметки о релизе

⚠️ Важное: Переход на версию 3 конфигурации

📋 Обновление формата конфигурации

В этом релизе произошел переход на версию 3 формата конфигурации парсера подписок. Это важное изменение, которое улучшает структуру конфигурации и упрощает её использование.

✨ Что изменилось:

  1. 📦 Плоская структура outbounds (версия 3)

    • Поля filters, addOutbounds и preferredDefault теперь находятся на верхнем уровне объекта outbound
    • Убрана вложенная структура outbounds.proxies из версии 2
    • Конфигурация стала более читаемой и простой
  2. 🔄 Автоматическая миграция

    • Старые конфигурации версий 1 и 2 автоматически мигрируют в версию 3 при загрузке
    • Миграция происходит прозрачно, без участия пользователя
    • Все данные сохраняются при миграции
  3. 📝 Обновление шаблона конфигурации

    • Файл bin/config_template.json обновлен до версии 3
    • Все примеры конфигураций используют новый формат
    • Добавлены комментарии и описания всех полей

📊 Пример изменений:

Версия 2 (устарела):

{
  "outbounds": {
    "proxies": { "tag": "!/(🇷🇺)/i" },
    "addOutbounds": ["direct-out"],
    "preferredDefault": { "tag": "/🇳🇱/i" }
  }
}

Версия 3 (текущая):

{
  "filters": { "tag": "!/(🇷🇺)/i" },
  "addOutbounds": ["direct-out"],
  "preferredDefault": { "tag": "/🇳🇱/i" }
}

✅ Что нужно сделать:

  1. 🆕 Для новых установок: ничего не требуется, используется версия 3 по умолчанию
  2. 🔄 Для существующих установок:
    • При первом запуске конфигурация автоматически мигрирует в версию 3
    • Проверьте, что все настройки сохранились корректно
    • При необходимости обновите config_template.json вручную

📚 Документация:

Подробная документация по формату конфигурации версии 3 и логике миграции доступна в файле docs/ParserConfig.md.


🤖 Автоматическое обновление конфигурации

✨ Новая функциональность

Реализован механизм автоматического обновления конфигурации на основе подписок. Приложение теперь может автоматически проверять и обновлять конфигурацию через заданные интервалы времени.

🎯 Основные возможности:

  1. ⏱️ Динамический интервал проверки

    • Минимальный интервал: 10 минут (константа)
    • Используется значение max(10 минут, parser.reload) из конфигурации
    • Если parser.reload не указан, используется значение по умолчанию 4 часа
    • Интервал пересчитывается при каждой проверке, что позволяет изменять его "на лету"
  2. 🚀 Автоматическая проверка при запуске

    • При запуске приложения сразу проверяется необходимость обновления
    • Если с момента последнего обновления (last_updated) прошло достаточно времени, обновление запускается немедленно
    • Не требуется ждать полный интервал перед первой проверкой
  3. 🛡️ Умная обработка ошибок

    • При ошибке обновления выполняется до 10 попыток с интервалом 10 секунд между попытками
    • Счетчик последовательных неудач отслеживается глобально
    • После 10 последовательных неудачных попыток автоматические обновления останавливаются
    • Пользователь получает уведомление о остановке автоматических обновлений
  4. ♻️ Возобновление после успешного обновления

    • После успешного ручного обновления (кнопка или визард) автоматические обновления автоматически возобновляются
    • Счетчик ошибок сбрасывается при любом успешном обновлении (даже после предыдущих неудач)
    • Это позволяет восстановить автоматические обновления после исправления проблем
  5. 🔒 Защита от конфликтов

    • Автоматическое обновление не запускается, если уже выполняется ручное обновление
    • Проверка выполняется перед каждой попыткой обновления
⚙️ Настройка

Автоматическое обновление настраивается через поле parser.reload в секции @ParserConfig:

{
  "ParserConfig": {
    "parser": {
      "reload": "1h",  // Интервал обновления (будет использован max(10m, 1h) = 1h)
      "last_updated": "2025-12-16T02:33:21Z"  // Обновляется автоматически
    }
  }
}

⚠️ Важно:

  • Минимальный интервал всегда 10 минут, даже если указано меньшее значение
  • Поле last_updated обновляется автоматически при каждом успешном обновлении
  • Формат времени: RFC3339 в UTC
📝 Логирование

Все действия автоматического обновления логируются в logs/singbox-launcher.log:

  • Auto-update: Starting auto-update loop - запуск горутины
  • Auto-update: Calculated interval: ... - рассчитанный интервал проверки
  • Auto-update: Checking if update needed - проверка необходимости обновления
  • Auto-update: Update needed, attempting update... - запуск обновления
  • Auto-update: Attempting update (attempt X/10) - попытка обновления
  • Auto-update: Completed successfully - успешное завершение
  • Auto-update: Stopped after 10 consecutive failed attempts - остановка после ошибок
🔧 Технические детали
  • Автоматическое обновление выполняется в отдельной горутине, не блокируя UI
  • Используется контекст для корректной остановки при завершении приложения
  • Все операции с состоянием защищены мьютексами
  • Обновления UI выполняются через fyne.Do() для безопасности

📌 Константы

Все параметры автоматического обновления вынесены в глобальные константы пакета core:

  • autoUpdateMinInterval = 10 * time.Minute - минимальный интервал проверки
  • autoUpdateRetryInterval = 10 * time.Second - интервал между попытками при ошибке
  • autoUpdateMaxRetries = 10 - максимальное количество попыток
  • autoUpdateDefaultReload = "4h" - значение по умолчанию для parser.reload

🎨 Улучшения и исправления

🔨 Рефакторинг системы конфигурации
  • 🔄 Переход на версию 3 конфигурации с плоской структурой outbounds
  • Разделение логики миграции конфигурации в отдельный модуль config_migrator.go
  • Реализация подхода "строка → строка" для миграций между версиями (v1 → v2 → v3)
  • Автоматическая миграция старых конфигураций при загрузке
  • Очистка основного кода от legacy-структур (v1ParserConfig, v2ParserConfig используются только в миграторе)
  • Оптимизация файловых операций: обновление last_updated и запись конфигурации в одной операции
  • Обновление bin/config_template.json до версии 3 с подробными комментариями
🪄 Исправления Config Wizard
  • Исправлена логика загрузки конфигурации: приоритет outbounds из шаблона, proxies из текущего конфига
  • Исправлена обработка outbounds без явного поля filters (теперь filters: {} означает "без фильтров")
  • Улучшена генерация селекторов для urltest и selector типов
📚 Документация
  • Создана подробная документация docs/ParserConfig.md с описанием всех полей и логики работы
  • Обновлены README файлы с ссылками на новую документацию
  • Добавлены примеры конфигураций и описания миграций

💡 Рекомендации по использованию

📖 Советы и рекомендации

1. ⏰ Настройка интервала обновления

  • Для активного использования рекомендуется интервал 1-4 часа
  • Для редкого использования можно установить 24 часа или больше
  • Помните: минимальный интервал всегда 10 минут

2. 👀 Мониторинг

  • Регулярно проверяйте логи на наличие ошибок автоматического обновления
  • При остановке автоматических обновлений используйте ручное обновление для восстановления

3. 🔧 Устранение проблем

  • Если автоматические обновления остановились, проверьте:
    • ✅ Доступность URL подписок
    • ✅ Наличие интернет-соединения
    • ✅ Корректность формата конфигурации
  • После исправления проблем выполните ручное обновление - автоматические обновления возобновятся

📊 Техническая информация

🔍 Спецификации
  • Версия конфигурации: 3
  • Минимальный интервал: 10 минут
  • Максимальное количество попыток: 10
  • Интервал между попытками: 10 секунд
  • Формат времени: RFC3339 (UTC)

📅 Дата релиза: 16 декабря 2025



🚀 Singbox Launcher - Release Notes


⚠️ Important: Migration to Configuration Version 3

📋 Configuration Format Update

This release introduces version 3 of the subscription parser configuration format. This is an important change that improves the configuration structure and simplifies its usage.

✨ What Changed:

  1. 📦 Flat outbounds Structure (Version 3)

    • Fields filters, addOutbounds, and preferredDefault are now at the top level of the outbound object
    • Removed nested outbounds.proxies structure from version 2
    • Configuration is now more readable and simpler
  2. 🔄 Automatic Migration

    • Old configurations from versions 1 and 2 automatically migrate to version 3 on load
    • Migration happens transparently, without user intervention
    • All data is preserved during migration
  3. 📝 Configuration Template Update

    • File bin/config_template.json updated to version 3
    • All configuration examples use the new format
    • Added comments and descriptions for all fields

📊 Example Changes:

Version 2 (deprecated):

{
  "outbounds": {
    "proxies": { "tag": "!/(🇷🇺)/i" },
    "addOutbounds": ["direct-out"],
    "preferredDefault": { "tag": "/🇳🇱/i" }
  }
}

Version 3 (current):

{
  "filters": { "tag": "!/(🇷🇺)/i" },
  "addOutbounds": ["direct-out"],
  "preferredDefault": { "tag": "/🇳🇱/i" }
}

✅ What You Need to Do:

  1. 🆕 For New Installations: nothing required, version 3 is used by default
  2. 🔄 For Existing Installations:
    • Configuration automatically migrates to version 3 on first launch
    • Verify that all settings were preserved correctly
    • Update config_template.json manually if needed

📚 Documentation:

Detailed documentation on version 3 configuration format and migration logic is available in docs/ParserConfig.md.


🤖 Automatic Configuration Update

✨ New Feature

Implemented automatic configuration update mechanism based on subscriptions. The application can now automatically check and update configuration at specified time intervals.

🎯 Key Features:

  1. ⏱️ Dynamic Check Interval

    • Minimum interval: 10 minutes (constant)
    • Uses max(10 minutes, parser.reload) value from configuration
    • If parser.reload is not specified, defaults to 4 hours
    • Interval is recalculated on each check, allowing "on-the-fly" changes
  2. 🚀 Automatic Check on Startup

    • Application immediately checks if update is needed on startup
    • If enough time has passed since last update (last_updated), update starts immediately
    • No need to wait for full interval before first check
  3. 🛡️ Smart Error Handling

    • On update error, performs up to 10 attempts with 10 seconds between attempts
    • Consecutive failure counter is tracked globally
    • After 10 consecutive failed attempts, automatic updates are stopped
    • User receives notification about automatic updates being stopped
  4. ♻️ Resume After Successful Update

    • After successful manual update (button or wizard), automatic updates automatically resume
    • Error counter resets on any successful update (even after previous failures)
    • This allows restoring automatic updates after fixing issues
  5. 🔒 Conflict Protection

    • Automatic update does not start if manual update is already in progress
    • Check is performed before each update attempt
⚙️ Configuration

Automatic update is configured via parser.reload field in @ParserConfig section:

{
  "ParserConfig": {
    "parser": {
      "reload": "1h",  // Update interval (will use max(10m, 1h) = 1h)
      "last_updated": "2025-12-16T02:33:21Z"  // Updated automatically
    }
  }
}

⚠️ Important:

  • Minimum interval is always 10 minutes, even if smaller value is specified
  • last_updated field is automatically updated on each successful update
  • Time format: RFC3339 in UTC
📝 Logging

All automatic update actions are logged in logs/singbox-launcher.log:

  • Auto-update: Starting auto-update loop - goroutine startup
  • Auto-update: Calculated interval: ... - calculated check interval
  • Auto-update: Checking if update needed - checking if update is needed
  • Auto-update: Update needed, attempting update... - starting update
  • Auto-update: Attempting update (attempt X/10) - update attempt
  • Auto-update: Completed successfully - successful completion
  • Auto-update: Stopped after 10 consecutive failed attempts - stopped after errors
🔧 Technical Details
  • Automatic update runs in separate goroutine, not blocking UI
  • Context is used for graceful shutdown on application exit
  • All state operations are protected by mutexes
  • UI updates are performed via fyne.Do() for safety

📌 Constants

All automatic update parameters are extracted to global constants in core package:

  • autoUpdateMinInterval = 10 * time.Minute - minimum check interval
  • autoUpdateRetryInterval = 10 * time.Second - interval between retry attempts on error
  • autoUpdateMaxRetries = 10 - maximum number of attempts
  • autoUpdateDefaultReload = "4h" - default value for parser.reload

🎨 Improvements and Fixes

🔨 Configuration System Refactoring
  • 🔄 Migration to version 3 configuration with flat outbounds structure
  • Separation of configuration migration logic into separate module config_migrator.go
  • Implementation of "string → string" approach for migrations between versions (v1 → v2 → v3)
  • Automatic migration of old configurations on load
  • Cleanup of main code from legacy structures (v1ParserConfig, v2ParserConfig used only in migrator)
  • Optimization of file operations: last_updated update and configuration write in single operation
  • Update of bin/config_template.json to version 3 with detailed comments
🪄 Config Wizard Fixes
  • Fixed configuration loading logic: priority of outbounds from template, proxies from current config
  • Fixed handling of outbounds without explicit filters field (now filters: {} means "no filters")
  • Improved selector generation for urltest and selector types
📚 Documentation
  • Created detailed documentation docs/ParserConfig.md with description of all fields and logic
  • Updated README files with links to new documentation
  • Added configuration examples and migration descriptions

💡 Usage Recommendations

📖 Tips and Recommendations

1. ⏰ Update Interval Configuration

  • For active use, recommended interval is 1-4 hours
  • For occasional use, can set 24 hours or more
  • Remember: minimum interval is always 10 minutes

2. 👀 Monitoring

  • Regularly check logs for automatic update errors
  • If automatic updates stopped, use manual update to restore

3. 🔧 Troubleshooting

  • If automatic updates stopped, check:
    • ✅ Subscription URL availability
    • ✅ Internet connection
    • ✅ Configuration format correctness
  • After fixing issues, perform manual update - automatic updates will resume

📊 Technical Information

🔍 Specifications
  • Configuration Version: 3
  • Minimum Interval: 10 minutes
  • Maximum Attempts: 10
  • Interval Between Attempts: 10 seconds
  • Time Format: RFC3339 (UTC)

📅 Release Date: December 16, 2025

Don't miss a new singbox-launcher release

NewReleases is sending notifications on new releases.