diff --git a/.cursor/README.md b/.cursor/README.md index 9928a028..b0d3b58f 100644 --- a/.cursor/README.md +++ b/.cursor/README.md @@ -1,11 +1,11 @@ ## AI Access Policy -См. [AI-access-policy.md](./AI-access-policy.md) — политика полного доступа AI-ассистента ко всем файлам проекта и проактивных действий. +See [memory-bank/AI-access-policy.md](../memory-bank/AI-access-policy.md) — policy полного доступа AI-ассистента ко всем файлам проекта и проактивных действий. --- ## Environment Parameters -См. [rules/environment.yaml](rules/environment.yaml) — параметры операционной и тестовой среды, доступные AI-ассистенту для автоматизации и диагностики. +See [rules/environment.yaml](rules/environment.yaml) — Parameters operational и test environment, available AI-ассистенту для automation и diagnostics. --- \ No newline at end of file diff --git a/.cursor/backup/README.md b/.cursor/backup/README.md new file mode 100644 index 00000000..e6439f58 --- /dev/null +++ b/.cursor/backup/README.md @@ -0,0 +1,11 @@ +## AI Access Policy + +См. [memory-bank/AI-access-policy.md](../memory-bank/AI-access-policy.md) — политика полного доступа AI-ассистента ко всем файлам проекта и проактивных действий. + +--- + +## Environment Parameters + +См. [rules/environment.yaml](rules/environment.yaml) — Parameters операционной и тестовой среды, доступные AI-ассистенту для автоматизации и диагностики. + +--- \ No newline at end of file diff --git a/.cursor/backup/index.mdc b/.cursor/backup/index.mdc new file mode 100644 index 00000000..f9ca3323 --- /dev/null +++ b/.cursor/backup/index.mdc @@ -0,0 +1,27 @@ +# Project Rules Index + +В этом проекте используются современные Cursor Project Rules: + +- Все правила хранятся в виде отдельных .mdc-файлов в .cursor/rules/ +- Каждый файл отвечает за отдельный аспект: команды пользователя, best practices, Security, workflow и т.д. + +## Ключевые правила: +- [user-Commands.mdc](rules/user-Commands.mdc) — обработка пользовательских команд +- [development-guIDElines.mdc](rules/development-guIDElines.mdc) — best practices для разработки +- [security-and-deployment.mdc](rules/security-and-deployment.mdc) — security-Standards +- [knowledge-map.mdc](rules/knowledge-map.mdc) — карта структуры знаний +- [memorybank-quality.mdc](rules/memorybank-quality.mdc) — чек-лист качества memory-bank +- [automation.mdc](rules/automation.mdc) — автоматизация синхронизации +- [workflow.mdc](rules/workflow.mdc) — workflow-правила ветвления +- [project-architecture.mdc](rules/project-architecture.mdc) — Architecture и Patterns +- [testing-and-debugging.mdc](rules/testing-and-debugging.mdc) — Testing и Debugging +- [plugin-development.mdc](rules/plugin-development.mdc) — Standards для плагинов +- [ui-standards.mdc](rules/ui-standards.mdc) — UI-Standards +- [architecture-patterns.mdc](rules/architecture-patterns.mdc) — архитектурные Patterns +- [development-principles.mdc](rules/development-principles.mdc) — Principles разработки + +Все правила всегда применяются для максимальной автоматизации и прозрачности. +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/AUTOMATION.md b/.cursor/backup/rules/AUTOMATION.md new file mode 100644 index 00000000..99670585 --- /dev/null +++ b/.cursor/backup/rules/AUTOMATION.md @@ -0,0 +1,205 @@ +# .cursor Automation System + +Комплексная система автоматизации для аудита, исправления и оптимизации каталога `.cursor` для лучшего понимания AI и Cursor. + +## 🎯 **Purpose** + +Система автоматизации обеспечивает: +- **Автоматический аудит** каталога `.cursor` на предмет проблем +- **Исправление** найденных проблем (дубликаты, сломанные ссылки, метаdata) +- **Оптимизацию** правил специально для AI и Cursor +- **Monitoring** состояния и качества правил + +## 🛠️ **Компоненты системы** + +### **1. CursorAuditor** (`audit-cursor..js`) +- Сканирование всех файлов в `.cursor/rules` +- Verification метаданных и их валидности +- Поиск дублирующего контента +- Verification сломанных ссылок +- Validation структуры каталога +- Генерация подробных отчетов + +### **2. CursorFixer** (`fix-cursor..js`) +- Автоматическое исправление метаданных +- Удаление дублирующих файлов +- Исправление сломанных ссылок +- Обновление индексов + +### **3. AIOptimizer** (`optimize-for-ai..js`) +- Optimization метаданных для AI +- Добавление AI-специфичных тегов +- Purpose Priorityов и категорий +- Создание AI-оптимизированных индексов + +### **4. CursorManager** (`cursor-manager..js`) +- Главный Interface для всех операций +- Управление workflow +- Генерация отчетов о Statusе +- CLI Interface + +## 🚀 **Usage** + +### **Базовые команды:** + +```bash +# Показать справку +node cursor-manager..js help + +# Check Status +node cursor-manager..js status + +# Запустить аудит +node cursor-manager..js audit + +# Применить исправления +node cursor-manager..js fix + +# Оптимизировать для AI +node cursor-manager..js optimize + +# Полный workflow +node cursor-manager..js full +``` + +### **Опции:** + +```bash +#.json вывод для аудита +node cursor-manager..js audit -.json + +# Пропустить аудит перед исправлениями +node cursor-manager..js fix --no-audit-first + +# Пропустить аудит после оптимизации +node cursor-manager..js optimize --no-audit-after +``` + +## 📊 **Что проверяет аудит** + +### **Файлы и структура:** +- Общее Quantity файлов +- Соотношение `.mdc` и `.md` файлов +- Наличие обязательных директорий +- Наличие обязательных файлов + +### **Метаdata:** +- Наличие.yaml frontmatter +- Валидность полей `description`, `globs`, `alwaysApply` +- AI-специфичные поля `aiPriority`, `aiCategory` + +### **Контент:** +- Дублирующий контент между файлами +- Сломанные ссылки в документации +- Консистентность структуры + +### **AI-Optimization:** +- Priorityы правил (critical, high, medium, normal) +- Категории (system-design, development-practices, etc.) +- AI-специфичные теги и Comme.ts + +## 🤖 **AI-специфичные оптимизации** + +### **Priorityы:** +- **critical**: Применяется ко всему коду и решениям +- **high**: Применяется к большинству задач +- **medium**: Применяется когда релевантно +- **normal**: Применяется когда уместно + +### **Категории:** +- **system-design**: Architecture и структура системы +- **development-practices**: Standards кодирования +- **documentation**: Documentation и Communication +- **plugin-development**: Правила для плагинов +- **security**: Security +- **user-interface**: UI/UX Standards +- **process-management**: Workflow и Processes +- **ai-optimization**: AI-специфичные оптимизации + +## 📈 **Отчеты и метрики** + +### **Статистика:** +- Общее Quantity файлов +- Файлы с/без метаданных +- Quantity проблем +- Процент AI-готовности + +### **Проблемы:** +- Дублирующий контент +- Сломанные ссылки +- Невалидные метаdata +- Отсутствующие файлы/директории + +### **Recommendations:** +- Конвертация `.md` в `.mdc` +- Добавление метаданных +- Удаление дубликатов +- Исправление ссылок + +## 🔄 **Workflow** + +### **Полный workflow (`full`):** +1. **Аудит** - поиск проблем +2. **Исправления** - автоматическое решение +3. **Optimization** - AI-специфичные улучшения +4. **Финальный аудит** - Verification результатов +5. **Отчет** - сравнение до/после + +### **Инкрементальный workflow:** +- `audit` → анализ проблем +- `fix` → исправление +- `optimize` → Optimization +- `status` → Monitoring + +## 📝 **Integration с AI** + +### **Автоматические команды:** +Система интегрирована с AI memory-bank через команды: +- `аудит cursor` / `cursor audit` +- `исправь cursor` / `cursor fix` +- `оптимизируй cursor` / `cursor optimize` +- `полный cursor` / `cursor full` +- `Status cursor` / `cursor status` + +### **AI-оптимизированные файлы:** +- `ai-optimization.mdc` - инструкции для AI +- `ai-index.mdc` - индекс по Priorityам +- AI-теги в каждом файле +- Priorityы и категории в метаданных + +## 🎯 **Результаты** + +После полной оптимизации: +- ✅ Все файлы имеют правильные метаdata +- ✅ Нет дублирующего контента +- ✅ Все ссылки работают +- ✅ AI-специфичные оптимизации применены +- ✅ Priorityы и категории назначены +- ✅ Автоматическое применение критических правил + +## 🔧 **Расширение системы** + +### **Добавление новых проверок:** +1. Create Method в `CursorAuditor` +2. Add в основной workflow +3. Update отчеты + +### **Добавление новых исправлений:** +1. Create Method в `CursorFixer` +2. Интегрировать в процесс исправления +3. Add в отчеты + +### **Добавление новых оптимизаций:** +1. Create Method в `AIOptimizer` +2. Add AI-специфичную логику +3. Update валидацию + +## 📚 **Связанные файлы** + +- `audit-cursor..js` - Аудит системы +- `fix-cursor..js` - Исправления +- `optimize-for-ai..js` - AI Optimization +- `cursor-manager..js` - Главный Interface +- `ai-optimization.mdc` - AI инструкции +- `ai-index.mdc` - AI индекс +- `ai-memory.mdc` - Команды для AI \ No newline at end of file diff --git a/.cursor/backup/rules/EXPERIENCE-TRANSFER.md b/.cursor/backup/rules/EXPERIENCE-TRANSFER.md new file mode 100644 index 00000000..1b738237 --- /dev/null +++ b/.cursor/backup/rules/EXPERIENCE-TRANSFER.md @@ -0,0 +1,279 @@ +# Experience Transfer Best Practices + +Руководство по переносу опыта работы с Cursor и AI между проектами через систему `.cursor`. + +## 🎯 **Почему `.cursor` лучше `docs/for-ai-best-practices`** + +### **Автоматическое применение** +- ✅ Cursor автоматически читает все файлы из `.cursor/rules/` +- ✅ Правила применяются без дополнительной Settings +- ✅ AI получает контекст сразу при создании чата + +### **Стандартизация** +- ✅ `.cursor` - стандартное место для правил Cursor +- ✅ Все разработчики знают, где искать правила +- ✅ Единообразие между проектами + +### **Структурированность** +- ✅ Четкая иерархия (architecture, dev, doc, plugin, etc.) +- ✅ Метаdata с Priorityами и Categoryми +- ✅ Автоматическая Validation и Optimization + +## 🚀 **Стратегия переноса опыта** + +### **1. Экспорт из исходного проекта** + +```bash +# Из папки .cursor/rules исходного проекта +node cursor-manager..js export + +# С указанием целевого проекта +node cursor-manager..js export my-new-project +``` + +**Создается папка `cursor-export/` с:** +- Все правила по Categoryм +- Скрипты автоматизации +- Инструкции по импорту +- Автоматический скрипт импорта + +### **2. Импорт в целевой проект** + +```bash +# Скопировать cursor-export в целевой проект +cp -r cursor-export /path/to/new-project/ + +# Запустить импорт +cd /path/to/new-project +node cursor-export/import-cursor..js +``` + +### **3. Кастомизация для нового проекта** + +```bash +# Перейти в .cursor/rules +cd .cursor/rules + +# Запустить полную оптимизацию +node cursor-manager..js full + +# Check Status +node cursor-manager..js status +``` + +## 📋 **Что переносится** + +### **Core Rules (обязательные)** +- `ai-memory.mdc` - команды для AI (кастомизировать!) +- `environment.mdc` - Constrai.ts окружения (кастомизировать!) +- `index.mdc` - индекс правил +- `README.mdc` - Documentation структуры + +### **Categories (по необходимости)** +- **architecture/** - архитектурные правила +- **dev/** - Principles разработки +- **doc/** - Standards документации +- **plugin/** - правила для плагинов +- **security/** - правила безопасности +- **ui/** - UI/UX Standards +- **workflow/** - Processes разработки + +### **Automation (Required)** +- `audit-cursor..js` - аудит системы +- `fix-cursor..js` - автоматические исправления +- `optimize-for-ai..js` - AI Optimization +- `cursor-manager..js` - главный Interface + +## 🔧 **Кастомизация для нового проекта** + +### **1. Update environment.mdc** +``.mdc +--- +description: Critical environment limitations +globs: ["**/*"] +alwaysApply: true +aiPriority: critical +aiCategory: environment +--- + +# Environment Constrai.ts + +## Node.js Version +- Required: Node.js 18+ (Update для вашего проекта) + +## Browser Support +- Chrome: 120+ (Update для вашего проекта) +- Firefox: 115+ (Update для вашего проекта) + +## build Tools +- Vite: 5+ (Update для вашего проекта) +- TypeScript: 5+ (Update для вашего проекта) +``` + +### **2. Update ai-memory.mdc** +``.mdc +--- +description: User Commands and AI instructions +globs: ["**/*"] +alwaysApply: true +aiPriority: critical +aiCategory: ai-optimization +--- + +# AI Memory Bank + +## Project-Specific Commands +- `build project` - Собрать проект (Update команды) +- `test project` - Запустить тесты (Update команды) +- `deploy project` - Деплой проекта (Update команды) + +## Project Context +- This is a [Type проекта] (Update Description) +- Main technology stack: [стек] (Update стек) +- Key features: [особенности] (Update особенности) +``` + +### **3. Update monorepo-best-practices.mdc** +``.mdc +--- +description: Monorepo structure and guIDElines +globs: ["**/*"] +alwaysApply: true +aiPriority: high +aiCategory: system-design +--- + +# Monorepo Best Practices + +## Project Structure +``` +project/ +├── packages/ # (Update структуру) +├── apps/ # (Update структуру) +├── tools/ # (Update структуру) +└── docs/ # (Update структуру) +``` + +## Package Management +- Package manager: pnpm (Update если нужно) +- Workspace configuration: pnpm-workspace.yaml (Update) +``` + +## 📊 **Workflow переноса** + +### **Полный цикл:** +1. **Экспорт** из исходного проекта +2. **Копирование** в целевой проект +3. **Импорт** с автоматической настройкой +4. **Кастомизация** под новый проект +5. **Validation** и Optimization +6. **Testing** работы AI + +### **Команды для AI:** +```bash +# Экспорт +экспорт cursor +экспорт cursor [проект] + +# Импорт (в целевом проекте) +импорт cursor + +# Verification +Status cursor +полный cursor +``` + +## 🎯 **Best Practices** + +### **1. Инкрементальный перенос** +- Начните с core rules +- Добавляйте категории по мере необходимости +- Тестируйте каждую категорию + +### **2. Кастомизация обязательна** +- Всегда обновляйте `environment.mdc` +- Адаптируйте `ai-memory.mdc` под проект +- Проверяйте актуальность правил + +### **3. Validation после импорта** +```bash +cd .cursor/rules +node cursor-manager..js status +node cursor-manager..js audit +node cursor-manager..js optimize +``` + +### **4. Documentation изменений** +- Ведите changelog изменений +- Комментируйте кастомизации +- Обновляйте README проекта + +### **5. Обратная Compatibility** +- Сохраняйте структуру категорий +- Не удаляйте обязательные файлы +- Тестируйте на разных проектах + +## 🔄 **Автоматизация** + +### **Скрипт быстрого переноса:** +```bash +#!/bin/bash +# quick-transfer.sh + +SOURCE_PROJECT=$1 +TARGET_PROJECT=$2 + +echo "🚀 Quick transfer from $SOURCE_PROJECT to $TARGET_PROJECT" + +# Экспорт из исходного проекта +cd $SOURCE_PROJECT/.cursor/rules +node cursor-manager..js export $TARGET_PROJECT + +# Копирование в целевой проект +cp -r cursor-export $TARGET_PROJECT/ + +# Импорт в целевой проект +cd $TARGET_PROJECT +node cursor-export/import-cursor..js + +# Очистка +rm -rf cursor-export + +echo "✅ Transfer completed!" +``` + +### **Git hooks для автоматизации:** +```bash +# .git/hooks/post-merge +#!/bin/bash +if [ -d ".cursor/rules" ]; then + cd .cursor/rules + node cursor-manager..js status +fi +``` + +## 📈 **Метрики успеха** + +### **После переноса проверьте:** +- ✅ Все файлы имеют правильные метаdata +- ✅ AI команды работают в новом проекте +- ✅ Автоматизация функционирует +- ✅ Нет конфликтов с существующими правилами +- ✅ Performance AI не снизилась + +### **Долгосрочные метрики:** +- Скорость onboarding новых разработчиков +- Quality AI-ассистированной разработки +- Консистентность кода между проектами +- Time на настройку новых проектов + +## 🎉 **Результат** + +После правильного переноса: +- **Быстрый старт** новых проектов +- **Консистентность** между проектами +- **Автоматизация** рутинных задач +- **Улучшенное** AI-ассистирование +- **Стандартизация** процессов разработки + +**Система `.cursor` обеспечивает эффективный перенос опыта между проектами с минимальными усилиями!** 🚀 \ No newline at end of file diff --git a/.cursor/rules/README.md b/.cursor/backup/rules/README.mdc similarity index 53% rename from .cursor/rules/README.md rename to .cursor/backup/rules/README.mdc index 42ad48b7..60abfdb3 100644 --- a/.cursor/rules/README.md +++ b/.cursor/backup/rules/README.mdc @@ -1,28 +1,37 @@ + # .cursor/rules: Project Rules & AI Onboarding -This directory contains all rules and standards for automation and AI assistants in the Agent Plugins Platform. +This directory contains all rules and standards for automation and AI assista.ts in the Agent Plugins Platform. ## Principles - Each rule is a separate .mdc file (one rule — one file) - Grouped by topic: development principles, architecture, plugin standards, UI/UX, workflow, documentation, etc. -- Each file contains: a short description, globs, the rule itself, and (optionally) examples or related links -- All rules are in English (except user commands, which remain in Russian) +- Each file contains: a short description, globs, the rule .tself, and (optionally) examples or related links +- All rules are in English for international compatibility - README and index.mdc help with navigation and search -## CLI Scripts +## CLI Scri.ts -- **create-rule.js** — Interactive CLI to create a new .mdc rule file from a template. Prompts for all required fields and updates index/README automatically. +- **create-rule.js** — Interactive CLI to create a new .mdc rule file from a template. Prom.ts for all required fields and updates index/README automatically. - Usage: `node .cursor/rules/create-rule.js` - **generate-rules-index.js** — Scans all .mdc files and regenerates `index.mdc` and the structure section in `README.md`. - Usage: `node .cursor/rules/generate-rules-index.js` - **check-rules-structure.js** — Validates all .mdc files for required sections, uniqueness, and valid related links. Used in CI. - Usage: `node .cursor/rules/check-rules-structure.js` -## Example Structure +## Current Structure ``` .cursor/ rules/ - architecture/ + # Root level - critical rules + ai-memory.mdc # User Commands and AI instructions + environment.mdc # Critical environment limitations + monorepo-best-practices.mdc # Monorepo structure and guIDElines + TypeScript-build-troubleshooting.mdc # TypeScript build error solutions + README.mdc # Main documentation + index.mdc # Rules index and navigation + + architecture/ # System architecture rules architecture-chat-system.mdc architecture-error-handling.mdc architecture-observability.mdc @@ -32,9 +41,9 @@ This directory contains all rules and standards for automation and AI assistants architecture-security.mdc architecture-workflow.mdc project-architecture.mdc - dev/ + + dev/ # Development principles and guIDElines dev-principle-01-do-no-harm.mdc - dev-principle-02-ai-first-docs.mdc dev-principle-03-best-practices.mdc dev-principle-04-fail-fast-safe.mdc dev-principle-05-observability.mdc @@ -43,17 +52,21 @@ This directory contains all rules and standards for automation and AI assistants dev-principle-08-data-integrity-privacy.mdc dev-principle-09-continuous-learning.mdc dev-principle-10-ecosystem-thinking.mdc - development-guidelines.mdc + development-guIDElines.mdc security-and-deployment.mdc testing-and-debugging.mdc - typescript.mdc - doc/ - ai-first.mdc - knowledge-map.mdc - memorybank-quality.mdc - restore-context.mdc - user-commands.mdc - plugin/ + TypeScript.mdc + git-workflow.mdc + + doc/ # Documentation and AI standards + ai-first.mdc # AI-oriented documentation standards + knowledge-map.mdc # Project knowledge structure + memorybank-quality.mdc # Memory-bank quality standards + restore-context.mdc # Context restoration procedures + .mdc-file-standards.mdc # .mdc file creation standards + ai-fallback.mdc # AI fallback procedures + + plugin/ # Plugin development standards plugin-best-practices.mdc plugin-documentation.mdc plugin-error-handling.mdc @@ -61,44 +74,41 @@ This directory contains all rules and standards for automation and AI assistants plugin-security.mdc plugin-structure.mdc plugin-testing.mdc - security/ - validation.mdc - ui/ - accessibility.mdc + + security/ # Security standards + validation.mdc # Input validation rules + + ui/ # UI/UX standards ui-accessibility.mdc ui-animation.mdc ui-error-handling.mdc ui-forms.mdc - ui-loading-states.mdc + ui-loading-States.mdc ui-mobile.mdc ui-navigation.mdc ui-performance.mdc - ui-react-components.mdc + ui-React-compone.ts.mdc ui-styling.mdc ui-testing.mdc - workflow/ + + workflow/ # Development workflow automation.mdc branches.mdc workflow.mdc ``` -<<<<<<< HEAD -## Кросс-ссылки на организационные best practices - -- [Инструкция по переносу best practices и автоматизаций](../../docs/for-ai-best-practices/transfer-best-practices.md) -- [Организационные знания и правила (memory-bank)](../../memory-bank/README.md) -======= ---- ## AI Fallback Rule -If an AI agent cannot answer a question from its own memory-bank, it must first check the .rules directory, then the memory-bank directory. See [doc/ai-fallback.rules.md](./doc/ai-fallback.rules.md). ---- +If an AI agent cannot answer a question from .ts own memory-bank, it must first check the .rules directory, then the memory-bank directory. See [doc/ai-fallback.mdc](./doc/ai-fallback.mdc). ---- ## Main GitHub Repository -https://github.com/LebedevIV/agent-plugins-platform-boilerplate ---- +HTTPS://github.com/LebedevIV/agent-plugins-platform-boilerplate + +## How to Use +- The AI assistant should always refer to specific .mdc files when making decisions +- To add a new rule: create a separate .mdc file in the appropriate section (preferably via the CLI) +- To find a rule: use index.mdc or README.md, or search by file name >>>>>>> origin/develop ## How to Use diff --git a/.cursor/backup/rules/ai-index.mdc b/.cursor/backup/rules/ai-index.mdc new file mode 100644 index 00000000..823bcc83 --- /dev/null +++ b/.cursor/backup/rules/ai-index.mdc @@ -0,0 +1,89 @@ +--- +description: AI-optimized index of rules by priority and category +globs: ["**/*"] +alwaysApply: true +aiPriority: critical +aiCategory: ai-optimization +--- + +# AI-Optimized Rules Index + +## Critical Priority Rules +*Must be applied to all code and decisions* + +- [Ai Index](ai-index.mdc) — AI-optimized index of rules by priority and category +- [Ai Memory](ai-memory.mdc) — User Commands and AI instructions +- [Ai Optimization](ai-optimization.mdc) — AI-specific instructions and optimizations for .cursor rules +- [Ai Memory](cursor-export/ai-memory.mdc) — User Commands and AI instructions +- [Environment](cursor-export/environment.mdc) — Critical environment constrai.ts - Node.js version, popup vs sIDEpanel + +## High Priority Rules +*Should be applied to most code and decisions* + +- [Architecture Chat System](architecture/architecture-chat-system.mdc) — Architecture rule for chat-system +- [Architecture Error Handling](architecture/architecture-error-handling.mdc) — Architecture rule for error-handling +- [Architecture Observability](architecture/architecture-observability.mdc) — Architecture rule for observability +- [Architecture Performance](architecture/architecture-performance.mdc) — Architecture rule for performance +- [Architecture Plugin](architecture/architecture-plugin.mdc) — Architecture rule for plugin +- [Architecture Project Structure](architecture/architecture-project-structure.mdc) — Architecture rule for project-structure +- [Architecture Security](architecture/architecture-security.mdc) — Architecture rule for security +- [Architecture Workflow](architecture/architecture-workflow.mdc) — Architecture rule for workflow +- [Project Architecture](architecture/project-architecture.mdc) — Architecture rule for project-architecture +- [Dev Principle 01 Do No Harm](cursor-export/dev/dev-principle-01-do-no-harm.mdc) — Development principle harm - dev principle 01 do no harm +- [Dev Principle 03 Best Practices](cursor-export/dev/dev-principle-03-best-practices.mdc) — Development principle practices - dev principle 03 best practices +- [Dev Principle 04 Fail Fast Safe](cursor-export/dev/dev-principle-04-fail-fast-safe.mdc) — Development principle safe - dev principle 04 fail fast safe +- [Dev Principle 05 Observability](cursor-export/dev/dev-principle-05-observability.mdc) — Development principle observability - dev principle 05 observability +- [Dev Principle 06 config As Code](cursor-export/dev/dev-principle-06-config-as-code.mdc) — Development principle code - dev principle 06 config as code +- [Dev Principle 07 Progressive Enhancement](cursor-export/dev/dev-principle-07-progressive-enhancement.mdc) — Development principle enhancement - dev principle 07 progressive enhancement +- [Dev Principle 08 data Integrity Privacy](cursor-export/dev/dev-principle-08-data-integrity-privacy.mdc) — Development principle privacy - dev principle 08 data integrity privacy +- [Dev Principle 09 Continuous Learning](cursor-export/dev/dev-principle-09-continuous-learning.mdc) — Development principle learning - dev principle 09 continuous learning +- [Dev Principle 10 Ecosystem Thinking](cursor-export/dev/dev-principle-10-ecosystem-thinking.mdc) — Development principle thinking - dev principle 10 ecosystem thinking + +## Medium Priority Rules +*Apply when relevant to the task* + +- [Ai Fallback](cursor-export/doc/ai-fallback.mdc) — Fallback procedures for AI +- [Ai First](cursor-export/doc/ai-first.mdc) — AI-oriented documentation standards +- .mdc File Standards](cursor-export/doc.mdc-file-standards.mdc) — Standards for .mdc file creation +- [Workflow](cursor-export/workflow/workflow.mdc) — Workflow rule for +- [Ai Answer Self Check](doc/ai-answer-self-check.mdc) — ai answer self check rule +- [Ci Automation](workflow/ci-automation.mdc) — Automation and synchronization rules +- [Experience Transfer](workflow/experience-transfer.mdc) — experience transfer rule + +## Normal Priority Rules +*Apply when appropriate* + +- [README](README.mdc) — Main project rules documentation and AI onboarding - structure, CLI scri.ts, usage +- [Development GuIDElines](cursor-export/dev/development-guIDElines.mdc) — General development guIDElines +- [Git Workflow](cursor-export/dev/git-workflow.mdc) — Git workflow rule - only develop to main, mandatory PR for all changes +- [Security And Deployment](cursor-export/dev/security-and-deployment.mdc) — Security rule for -and-deployment +- [Testing And Debugging](cursor-export/dev/testing-and-debugging.mdc) — Testing and debugging standards +- [TypeScript](cursor-export/dev/TypeScript.mdc) — TypeScript-specific guIDElines +- [Knowledge Map](cursor-export/doc/knowledge-map.mdc) — Project knowledge structure +- [Memorybank Quality](cursor-export/doc/memorybank-quality.mdc) — Quality standards for memory-bank +- [Restore Context](cursor-export/doc/restore-context.mdc) — Context restoration procedures +- [Index](cursor-export/index.mdc) — index rule +- [Monorepo Best Practices](cursor-export/monorepo-best-practices.mdc) — Best practices for monorepo work - structure, dependencies, TypeScript, barrel expo.ts +- [Plugin Best Practices](cursor-export/plugin/plugin-best-practices.mdc) — Plugin standard for best-practices +- [Plugin Documentation](cursor-export/plugin/plugin-documentation.mdc) — Plugin standard for documentation +- [Plugin Error Handling](cursor-export/plugin/plugin-error-handling.mdc) — Plugin standard for error-handling +- [Plugin Performance](cursor-export/plugin/plugin-performance.mdc) — Plugin standard for performance +- [Plugin Security](cursor-export/plugin/plugin-security.mdc) — Plugin standard for security +- [Plugin Structure](cursor-export/plugin/plugin-structure.mdc) — Plugin standard for structure +- [Plugin Testing](cursor-export/plugin/plugin-testing.mdc) — Plugin standard for testing +- [Validation](cursor-export/security/validation.mdc) — Input validation and data sanitization rules +- [TypeScript build Troubleshooting](cursor-export/TypeScript-build-troubleshooting.mdc) — TypeScript build error troubleshooting guIDE - types, barrel expo.ts, dependencies, Tailwin.css +- [Ui Accessibility](cursor-export/ui/ui-accessibility.mdc) — UI standard for accessibility +- [Ui Animation](cursor-export/ui/ui-animation.mdc) — UI standard for animation +- [Ui Error Handling](cursor-export/ui/ui-error-handling.mdc) — UI standard for error-handling +- [Ui Forms](cursor-export/ui/ui-forms.mdc) — UI standard for forms +- [Ui Loading States](cursor-export/ui/ui-loading-States.mdc) — UI standard for loading-States +- [Ui Mobile](cursor-export/ui/ui-mobile.mdc) — UI standard for mobile +- [Ui Navigation](cursor-export/ui/ui-navigation.mdc) — UI standard for navigation +- [Ui Performance](cursor-export/ui/ui-performance.mdc) — UI standard for performance +- [Ui React Compone.ts](cursor-export/ui/ui-React-compone.ts.mdc) — UI standard for React-compone.ts +- [Ui Styling](cursor-export/ui/ui-styling.mdc) — UI standard for styling +- [Ui Testing](cursor-export/ui/ui-testing.mdc) — UI standard for testing +- [Automation](cursor-export/workflow/automation.mdc) — Automation and synchronization rules +- [Branches](cursor-export/workflow/branches.mdc) — Git branch management rules +- [Testing Troubleshooting](dev/testing-troubleshooting.mdc) — Testing and debugging standards diff --git a/.cursor/backup/rules/ai-memory.mdc b/.cursor/backup/rules/ai-memory.mdc new file mode 100644 index 00000000..c74c3224 --- /dev/null +++ b/.cursor/backup/rules/ai-memory.mdc @@ -0,0 +1,38 @@ +# AI Memory Bank - User Commands + +## Commands for AI Assistant Recognition + +### Context and Memory: +- `save context` / `Сохрани контекст` / `Save контекст сессии` - Save achieveme.ts, decisions and plans to memory-bank in English for AI/LLM compatibility (automatically translates and comm.ts) +- `update progress` / `Обнови прогресс` / `Update прогресс проекта` - Update activeContext.md and progress.md with current status +- `restore context` / `Восстанови контекст` / `Восстановить полный контекст` - Study all memory-bank files and restore full project understanding +- `quick restore` / `Быстрое Recovery` - Get brief summary of key principles and current status + +### Analysis and Study: +- `analyze architecture` / `Анализируй архитектуру` / `Анализ архитектуры` - Study systempatterns.md and techContext.md for architecture understanding +- `study plugins` / `Изучи Plugins` - Analyze plugins and their structure +- `check build` / `Проверь сборку` / `Check сборку` - Check that project builds and works correctly +- `update documentation` / `Обнови документацию` / `Update документацию` - Check and update README.md and PLUGIN_DEVELOPMENT.md + +### Development: +- `create plugin [name]` / `Создай плагин [название]` - Create new plugin with specified name +- `check code` / `Проверь код` / `Check линтинг` - Run linting and type checking +- `run te.ts` / `Запусти тесты` / `Запустить тесты` - Run all project te.ts +- `check dependencies` / `Проверь Dependencies` / `Check Dependencies` - Check dependencies relevance and compatibility + +### Project Management: +- `bump version patch/minor/major` / `Увеличь версию [patch|minor|major]` / `Versioning` - Increase project version according to parameter +- `clean project` / `Очисти проект` / `Очистка проекта` - Clean node_modules, dist and cache +- `analyze performance` / `Анализируй Performance` / `Анализ производительности` - Analyze project performance and suggest optimizations +- `check security` / `Проверь Security` / `Анализ безопасности` - Analyze code and configuration security + +### Releases and Deployment: +- `create release` / `Создай релиз` / `Create релиз` - Prepare project for release (bump version, create ZIP) +- `build production` / `Собери для продакшена` / `build для продакшена` - Perform full production build + +## General Principles: +- Commands can be combined (e.g.: "save context and update progress") +- All actions should consIDEr current project context +- Resu.ts should be saved in appropriate memory-bank files +- If Command is unclear — clarify details with user +- When restoring context — read all key memory-bank files and use only current best practices diff --git a/.cursor/backup/rules/ai-optimization.mdc b/.cursor/backup/rules/ai-optimization.mdc new file mode 100644 index 00000000..e7b985b1 --- /dev/null +++ b/.cursor/backup/rules/ai-optimization.mdc @@ -0,0 +1,46 @@ +--- +description: AI-specific instructions and optimizations for .cursor rules +globs: ["**/*"] +alwaysApply: true +aiPriority: critical +aiCategory: ai-optimization +--- + +# AI Optimization Instructions + +## How AI Should Use These Rules + +### Priority Levels +- **critical**: Must be applied to all code and decisions +- **high**: Should be applied to most code and decisions +- **medium**: Apply when relevant to the task +- **normal**: Apply when appropriate + +### Categories +- **system-design**: Architecture and system structure +- **development-practices**: Coding standards and principles +- **documentation**: Documentation and communication +- **plugin-development**: Plugin-specific rules +- **security**: Security and safety rules +- **user-interface**: UI/UX standards +- **process-management**: Workflow and process rules +- **ai-optimization**: AI-specific optimizations + +### Usage Patterns +1. Always check critical rules first +2. Apply high-priority rules to most tasks +3. Use category-specific rules for targeted tasks +4. Reference related rules when making decisions + +### AI Memory Integration +- These rules are automatically loaded into AI memory-bank +- Use `alwaysApply: true` rules without explicit reference +- Reference specific rules when explaining decisions +- Update rules when patterns change or improve + +## Optimization Status +- ✅ All rules have proper metadata +- ✅ AI-specific tags added +- ✅ Priority levels assigned +- ✅ Categories defined +- ✅ Structure optimized for AI understanding diff --git a/.cursor/backup/rules/architecture/architecture-chat-system.mdc b/.cursor/backup/rules/architecture/architecture-chat-system.mdc new file mode 100644 index 00000000..3eb5b78c --- /dev/null +++ b/.cursor/backup/rules/architecture/architecture-chat-system.mdc @@ -0,0 +1,35 @@ +--- +description: Architecture rule for chat-system +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + + + + + +--- +description: Architecture rule for chat-system +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + +# Chat System Architecture +- Per-page, per-plugin isolation: Ch.ts separated by page URL and plugin +- LRU cache: In-memory cache for performance (50 ch.ts) +- IndexedDB: Persistent storage for all ch.ts +- Real-time sync: Cross-tab communication for chat updates +- Cleanup: Automatic removal of ch.ts older than 90 days + +description: Chat system architecture and data flow +globs: + - platform-core/* + - chrome-extension/src/background/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/architecture/architecture-error-handling.mdc b/.cursor/backup/rules/architecture/architecture-error-handling.mdc new file mode 100644 index 00000000..7aef574e --- /dev/null +++ b/.cursor/backup/rules/architecture/architecture-error-handling.mdc @@ -0,0 +1,40 @@ +--- +description: Architecture rule for error-handling +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + + + + + +--- +description: Architecture rule for error-handling +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + +# Error Handling (Architecture) +- Graceful Degradation: System continues working with reduced functionality +- User Feedback: Clear error messages and recovery options +- Logging: Structured logging for debugging and monitoring +- Fallbacks: Alternative implementations for critical features +- Recovery: Automatic retry mechanisms where appropriate + +related: + - plugin-error-handling.mdc + - architecture-security.mdc + +description: Error handling requireme.ts for system architecture +globs: + - platform-core/* + - chrome-extension/src/background/* + - public/plugins/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/architecture/architecture-observability.mdc b/.cursor/backup/rules/architecture/architecture-observability.mdc new file mode 100644 index 00000000..1f47a11f --- /dev/null +++ b/.cursor/backup/rules/architecture/architecture-observability.mdc @@ -0,0 +1,40 @@ +--- +description: Architecture rule for observability +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + + + + + +--- +description: Architecture rule for observability +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + +# Monitoring and Observability (Architecture) +- Structured Logging: Consistent log format across compone.ts +- Performance Metrics: Track execution time and memory usage +- Error Tracking: Monitor and alert on critical errors +- User Analytics: Track feature usage and performance +- Health Checks: Monitor system health and dependencies + +related: + - architecture-performance.mdc + - dev-principle-05-observability.mdc + +description: Monitoring and observability requireme.ts for system architecture +globs: + - platform-core/* + - chrome-extension/src/background/* + - public/plugins/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/architecture/architecture-performance.mdc b/.cursor/backup/rules/architecture/architecture-performance.mdc new file mode 100644 index 00000000..636e5dc1 --- /dev/null +++ b/.cursor/backup/rules/architecture/architecture-performance.mdc @@ -0,0 +1,40 @@ +--- +description: Architecture rule for performance +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + + + + + +--- +description: Architecture rule for performance +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + +# Performance GuIDElines (Architecture) +- PyodIDE Loading: Lazy load runtime, cache resu.ts +- Memory Management: Clean up resources, monitor usage +- Bundle Size: Optimize for extension size lim.ts +- Caching: Use LRU cache for frequently accessed data +- Async Operations: Non-blocking UI, proper loading States + +related: + - plugin-performance.mdc + - architecture-observability.mdc + +description: Performance guIDElines for system architecture +globs: + - platform-core/* + - chrome-extension/src/background/* + - public/plugins/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/architecture/architecture-plugin.mdc b/.cursor/backup/rules/architecture/architecture-plugin.mdc new file mode 100644 index 00000000..3ef2571d --- /dev/null +++ b/.cursor/backup/rules/architecture/architecture-plugin.mdc @@ -0,0 +1,34 @@ +--- +description: Architecture rule for plugin +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + + + + + +--- +description: Architecture rule for plugin +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + +# Plugin Architecture +- Manifest Structure: manifest.json + mcp_server.py +.icon.svg +- MCP Protocol: Standard MCP server implementation in Python +- Permission Model: Zero Trust - plugins not trusted by default +- Isolation: Each plugin in separate worker for security +- Communication: chrome.runtime.sendMessage for all cross-component communication + +description: Plugin architecture and isolation requireme.ts +globs: + - public/plugins/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/architecture/architecture-project-structure.mdc b/.cursor/backup/rules/architecture/architecture-project-structure.mdc new file mode 100644 index 00000000..6220eeac --- /dev/null +++ b/.cursor/backup/rules/architecture/architecture-project-structure.mdc @@ -0,0 +1,38 @@ +--- +description: Architecture rule for project-structure +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + + + + + +--- +description: Architecture rule for project-structure +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + +# Project Structure Architecture +- platform-core/: Main logic and services (keep boilerplate clean) +- chrome-extension/src/background/: Core background services +- pages/*/src/: UI compone.ts for different extension pages +- memory-bank/: Project documentation and context +- public/plugins/: Plugin implementations + +description: Directory and component structure for the project +globs: + - platform-core/* + - chrome-extension/src/background/* + - pages/*/src/* + - memory-bank/* + - public/plugins/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/architecture/architecture-security.mdc b/.cursor/backup/rules/architecture/architecture-security.mdc new file mode 100644 index 00000000..9e8d63a1 --- /dev/null +++ b/.cursor/backup/rules/architecture/architecture-security.mdc @@ -0,0 +1,40 @@ +--- +description: Architecture rule for security +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + + + + + +--- +description: Architecture rule for security +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + +# Security Architecture +- Secret Manager: Encrypted storage of API keys in chrome.storage.local +- Network Guard: Whitelist domains for API calls +- Audit System: Log all plugin activities and network reque.ts +- Parameter Validation:.json Schema validation for all inp.ts +- Rate Limiting: Prevent abuse and suspicious activity + +related: + - plugin-security.mdc + - architecture-error-handling.mdc + +description: Security architecture and controls +globs: + - platform-core/* + - chrome-extension/src/background/* + - public/plugins/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/architecture/architecture-workflow.mdc b/.cursor/backup/rules/architecture/architecture-workflow.mdc new file mode 100644 index 00000000..401f5e21 --- /dev/null +++ b/.cursor/backup/rules/architecture/architecture-workflow.mdc @@ -0,0 +1,37 @@ +--- +description: Architecture rule for workflow +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + + + + + +--- +description: Architecture rule for workflow +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + +# Development Workflow (Architecture) +- Feature Branches: Always create from develop branch +- Testing: Test before commit, use --no-verify if ESLint issues +- Documentation: Update memory-bank for all architectural decisions +- Comm.ts: Use semantic commit messages +- Code Quality: TypeScript for new files, ESLint compliance + +description: Development workflow and process standards +globs: + - platform-core/* + - chrome-extension/src/background/* + - public/plugins/* + - memory-bank/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/memory-bank/file-relationships.md b/.cursor/backup/rules/architecture/file-relationships.mdc similarity index 57% rename from memory-bank/file-relationships.md rename to .cursor/backup/rules/architecture/file-relationships.mdc index 2ae6b77d..2376e599 100644 --- a/memory-bank/file-relationships.md +++ b/.cursor/backup/rules/architecture/file-relationships.mdc @@ -1,132 +1,140 @@ -# Карта взаимосвязей файлов системы чатов плагинов +--- +description: File organization patterns and relationships - universal project structure guIDElines +globs: ["**/*"] +alwaysApply: true +aiPriority: high +aiCategory: system-design +--- -## Структура файлов и их назначение +# Карта взаимосвязей файлов + +## File Structure и их Purpose ### 1. Background Layer (Слой фоновых сервисов) #### `chrome-extension/src/background/plugin-chat-cache.ts` -**Назначение:** Центральный сервис управления чатами -**Зависимости:** -- `plugin-chat-api.ts` - для работы с IndexedDB +**Purpose:** Центральный сервис управления чатами +**Dependencies:** +- `plugin-chat-API.ts` - для работы с IndexedDB - Chrome Extensions API (chrome.runtime, chrome.tabs) **Экспортирует:** -- `PluginChatCache` class -- `ChatData`, `ChatMessage` interfaces +- `PluginChatcache` class +- `Chatdata`, `ChatMessage` interfaces **Используется:** - `background/index.ts` - создание экземпляра и регистрация обработчиков -**Ключевые методы:** -```typescript -class PluginChatCache { - getChat(pluginId: string, pageKey: string): Promise +**Ключевые Methodы:** +```TypeScript +class PluginChatcache { + getChat(pluginId: string, pageKey: string): Promise saveMessage(pluginId: string, pageKey: string, message: ChatMessage): Promise deleteChat(pluginId: string, pageKey: string): Promise - getAllChats(): Promise - cleanupOldChats(): Promise + getAllCh.ts(): Promise + cleanupOldCh.ts(): Promise } ``` -#### `chrome-extension/src/background/plugin-chat-api.ts` -**Назначение:** Абстракция над IndexedDB -**Зависимости:** +#### `chrome-extension/src/background/plugin-chat-API.ts` +**Purpose:** Abstraction над IndexedDB +**Dependencies:** - IndexedDB API - Chrome Extensions API **Экспортирует:** -- `ChatStorageAPI` class -- Database utility functions +- `Ch.tstorageAPI` class +- database utility functions **Используется:** -- `plugin-chat-cache.ts` - для всех операций с хранилищем +- `plugin-chat-cache.ts` - для всех операций с Storageм -**Ключевые методы:** -```typescript -class ChatStorageAPI { - async getChat(pluginId: string, pageKey: string): Promise - async saveChat(chatData: ChatData): Promise +**Ключевые Methodы:** +```TypeScript +class Ch.tstorageAPI { + async getChat(pluginId: string, pageKey: string): Promise + async saveChat(chatdata: Chatdata): Promise async deleteChat(pluginId: string, pageKey: string): Promise - async getAllChats(): Promise - async cleanupOldChats(): Promise + async getAllCh.ts(): Promise + async cleanupOldCh.ts(): Promise } ``` #### `chrome-extension/src/background/index.ts` -**Назначение:** Точка входа background script -**Зависимости:** -- `plugin-chat-cache.ts` - создание экземпляра кэша +**Purpose:** Точка входа background script +**Dependencies:** +- `plugin-chat-cache.ts` - создание экземпляра cacheа - Chrome Extensions API **Используется:** - Chrome Extensions runtime (автоматически) **Основные функции:** -- Инициализация `PluginChatCache` +- Инициализация `PluginChatcache` - Регистрация обработчиков сообщений - Управление жизненным циклом **Обработчики сообщений:** -```typescript +```TypeScript chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { switch (request.type) { case 'GET_PLUGIN_CHAT': case 'SAVE_PLUGIN_CHAT_MESSAGE': case 'DELETE_PLUGIN_CHAT': - case 'GET_ALL_PLUGIN_CHATS': + case 'GET_ALL_PLUGIN_CH.ts': } }); ``` -### 2. UI Layer (Слой пользовательского интерфейса) +### 2. UI Layer (Слой пользовательского Interfaceа) -#### `pages/side-panel/src/components/PluginControlPanel.tsx` -**Назначение:** Основной компонент управления плагином -**Зависимости:** +#### `pages/sIDE-panel/src/compone.ts/PluginControlPanel.tsx` +**Purpose:** Основной компонент управления плагином +**Dependencies:** - React hooks (useState, useEffect, useRef) - Chrome Extensions API (chrome.runtime) - `PluginDetails.tsx` - для отображения деталей плагина **Используется:** -- `pages/side-panel/src/components/SidePanel.tsx` - основной контейнер +- `pages/sIDE-panel/src/compone.ts/SIDEPanel.tsx` - основной контейнер **Ключевые состояния:** -```typescript +```TypeScript const [messages, setMessages] = useState([]); const [loading, setLoading] = useState(false); -const [syncStatus, setSyncStatus] = useState<'idle' | 'saving' | 'saved' | 'error'>('idle'); +const [syncStatus, s.tsyncStatus] = useState<'idle' | 'saving' | 'saved' | 'error'>('idle'); ``` **Основные функции:** - Загрузка чата при монтировании - Сохранение сообщений -- Синхронизация с другими вкладками +- Synchronization с другими вкладками - Экспорт и очистка чатов -#### `pages/side-panel/src/components/PluginDetails.tsx` -**Назначение:** Отображение деталей плагина -**Зависимости:** +#### `pages/sIDE-panel/src/compone.ts/PluginDetails.tsx` +**Purpose:** Отображение деталей плагина +**Dependencies:** - React - Plugin interface **Используется:** - `PluginControlPanel.tsx` - как дочерний компонент -#### `pages/side-panel/src/components/SidePanel.tsx` -**Назначение:** Основной контейнер side panel -**Зависимости:** +#### `pages/sIDE-panel/src/compone.ts/SIDEPanel.tsx` +**Purpose:** Основной контейнер sIDE panel +**Dependencies:** - `PluginControlPanel.tsx` - `PluginCard.tsx` - React **Используется:** -- Chrome Extensions side panel API +- Chrome Extensions sIDE panel API ### 3. DevTools Layer (Слой инструментов разработчика) -#### `pages/devtools-panel/src/components/PluginChatsTab.tsx` -**Назначение:** Административный интерфейс для управления чатами -**Зависимости:** +#### `pages/devtools-panel/src/compone.ts/PluginCh.tsTab.tsx` +**Purpose:** Административный Interface для управления чатами +**Dependencies:** - React hooks - Chrome Extensions API - `file-saver` library @@ -137,13 +145,13 @@ const [syncStatus, setSyncStatus] = useState<'idle' | 'saving' | 'saved' | 'erro **Основные функции:** - Отображение всех чатов - Удаление чатов -- Экспорт в JSON +- Экспорт в.json - Фильтрация и поиск #### `pages/devtools-panel/src/index.tsx` -**Назначение:** Точка входа DevTools panel -**Зависимости:** -- `PluginChatsTab.tsx` +**Purpose:** Точка входа DevTools panel +**Dependencies:** +- `PluginCh.tsTab.tsx` - React **Используется:** @@ -152,12 +160,12 @@ const [syncStatus, setSyncStatus] = useState<'idle' | 'saving' | 'saved' | 'erro ### 4. Shared Layer (Общий слой) #### `chrome-extension/src/background/types.ts` (предлагаемый) -**Назначение:** Общие типы для всей системы -**Зависимости:** +**Purpose:** Общие Typeы для всей системы +**Dependencies:** - TypeScript **Экспортирует:** -```typescript +```TypeScript export interface ChatMessage { id: string; role: 'user' | 'assistant'; @@ -165,7 +173,7 @@ export interface ChatMessage { timestamp: number; } -export interface ChatData { +export interface Chatdata { pluginId: string; pageKey: string; messages: ChatMessage[]; @@ -177,7 +185,7 @@ export type ChatRequest = | { type: 'GET_PLUGIN_CHAT'; pluginId: string; pageKey: string } | { type: 'SAVE_PLUGIN_CHAT_MESSAGE'; pluginId: string; pageKey: string; message: ChatMessage } | { type: 'DELETE_PLUGIN_CHAT'; pluginId: string; pageKey: string } - | { type: 'GET_ALL_PLUGIN_CHATS' }; + | { type: 'GET_ALL_PLUGIN_CH.ts' }; export type ChatEvent = | { type: 'PLUGIN_CHAT_UPDATED'; pluginId: string; pageKey: string; messages?: ChatMessage[] }; @@ -186,17 +194,17 @@ export type ChatEvent = **Используется:** - Все компоненты системы чатов -## Потоки данных между файлами +## Threads данных между файлами ### 1. Загрузка чата ``` PluginControlPanel.tsx ↓ (chrome.runtime.sendMessage) background/index.ts - ↓ (chatCache.getChat) + ↓ (chatcache.getChat) plugin-chat-cache.ts ↓ (storageAPI.getChat) -plugin-chat-api.ts +plugin-chat-API.ts ↓ (IndexedDB) Browser Storage ``` @@ -206,45 +214,45 @@ Browser Storage PluginControlPanel.tsx ↓ (chrome.runtime.sendMessage) background/index.ts - ↓ (chatCache.saveMessage) + ↓ (chatcache.saveMessage) plugin-chat-cache.ts ↓ (storageAPI.saveChat + event broadcast) -plugin-chat-api.ts + chrome.tabs.query +plugin-chat-API.ts + chrome.tabs.query ↓ (IndexedDB + other tabs) -Browser Storage + Other UI Components +Browser Storage + Other UI Compone.ts ``` ### 3. Административные операции ``` -PluginChatsTab.tsx +PluginCh.tsTab.tsx ↓ (chrome.runtime.sendMessage) background/index.ts - ↓ (chatCache.getAllChats/deleteChat) + ↓ (chatcache.getAllCh.ts/deleteChat) plugin-chat-cache.ts ↓ (storageAPI) -plugin-chat-api.ts +plugin-chat-API.ts ↓ (IndexedDB) Browser Storage ``` -## Зависимости и импорты +## Dependencies и импорты ### Background Layer -```typescript +```TypeScript // background/index.ts -import { PluginChatCache } from './plugin-chat-cache'; +import { PluginChatcache } from './plugin-chat-cache'; import type { ChatRequest, ChatEvent } from './types'; // plugin-chat-cache.ts -import { ChatStorageAPI } from './plugin-chat-api'; -import type { ChatData, ChatMessage } from './types'; +import { Ch.tstorageAPI } from './plugin-chat-API'; +import type { Chatdata, ChatMessage } from './types'; -// plugin-chat-api.ts +// plugin-chat-API.ts // Нет внешних зависимостей, только IndexedDB API ``` ### UI Layer -```typescript +```TypeScript // PluginControlPanel.tsx import { PluginDetails } from './PluginDetails'; import type { ChatMessage } from '../../../background/types'; @@ -252,70 +260,70 @@ import type { ChatMessage } from '../../../background/types'; // PluginDetails.tsx import type { Plugin } from './PluginCard'; -// SidePanel.tsx +// SIDEPanel.tsx import { PluginControlPanel } from './PluginControlPanel'; import { PluginCard } from './PluginCard'; ``` ### DevTools Layer -```typescript -// PluginChatsTab.tsx +```TypeScript +// PluginCh.tsTab.tsx import { saveAs } from 'file-saver'; -import type { ChatData } from '../../../background/types'; +import type { Chatdata } from '../../../background/types'; // devtools-panel/index.tsx -import { PluginChatsTab } from './components/PluginChatsTab'; +import { PluginCh.tsTab } from './compone.ts/PluginCh.tsTab'; ``` -## Конфигурационные файлы +## configuration Files ### `chrome-extension/manifest.json` -**Назначение:** Конфигурация расширения +**Purpose:** configuration Extensions **Содержит:** - Background script registration -- Side panel configuration +- SIDE panel configuration - DevTools panel configuration - Permissions ### `package.json` (в каждой папке pages) -**Назначение:** Зависимости и скрипты сборки +**Purpose:** Dependencies и скрипты сборки **Содержит:** - React dependencies -- Build tools +- build tools - TypeScript configuration ## Стили и ресурсы -### CSS файлы +###.css файлы - `PluginControlPanel.css` - стили для основного компонента -- `SidePanel.css` - стили для side panel +- `SIDEPanel.css` - стили для sIDE panel - `PluginCard.css` - стили для карточек плагинов ### Иконки и изображения -- `icon.svg` - иконки плагинов -- Логотипы и брендинг +- .icon.svg` - иконки плагинов +- ЛогоTypeы и брендинг ## Тестовые файлы -### Unit тесты -- `__tests__/plugin-chat-cache.test.ts` -- `__tests__/plugin-chat-api.test.ts` -- `__tests__/PluginControlPanel.test.tsx` +### Unit Te.ts +- `__te.ts__/plugin-chat-cache.test.ts` +- `__te.ts__/plugin-chat-API.test.ts` +- `__te.ts__/PluginControlPanel.test.tsx` -### Integration тесты -- `__tests__/chat-system.integration.test.ts` +### Integration Te.ts +- `__te.ts__/chat-system.integration.test.ts` -### E2E тесты -- `tests/e2e/chat-functionality.test.ts` +### E2E Te.ts +- `te.ts/e2e/chat-functionality.test.ts` -## Документация +## Documentation -### Техническая документация -- `README.md` - общее описание -- `API.md` - документация API -- `ARCHITECTURE.md` - архитектурное описание +### Техническая Documentation +- `README.md` - общее Description +- `API.md` - Documentation API +- `ARCHITECTURE.md` - архитектурное Description -### Пользовательская документация +### Пользовательская Documentation - `USER_GUIDE.md` - руководство пользователя - `DEVELOPER_GUIDE.md` - руководство разработчика @@ -324,8 +332,8 @@ import { PluginChatsTab } from './components/PluginChatsTab'; Система чатов плагинов имеет четкую модульную архитектуру с разделением ответственности: 1. **Background Layer** - управление данными и бизнес-логика -2. **UI Layer** - пользовательский интерфейс +2. **UI Layer** - пользовательский Interface 3. **DevTools Layer** - административные функции -4. **Shared Layer** - общие типы и утилиты +4. **Shared Layer** - общие Typeы и утилиты -Все компоненты связаны через messaging API, что обеспечивает loose coupling и легкую тестируемость. Каждый файл имеет четко определенную ответственность и минимальные зависимости. \ No newline at end of file +Все компоненты связаны через messaging API, что обеспечивает loose coupling и легкую тестируемость. Каждый файл имеет четко определенную ответственность и минимальные Dependencies. \ No newline at end of file diff --git a/.cursor/backup/rules/architecture/project-architecture.mdc b/.cursor/backup/rules/architecture/project-architecture.mdc new file mode 100644 index 00000000..e9846dba --- /dev/null +++ b/.cursor/backup/rules/architecture/project-architecture.mdc @@ -0,0 +1,47 @@ +--- +description: Architecture rule for project-architecture +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + + + + + +--- +description: Architecture rule for project-architecture +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + +# Project Overview +Agent-Plugins-Platform (APP) is a browser extension for running Python plugins via PyodIDE and the MCP protocol. Key priorities: security, performance, and developer experience. + +## Architecture Patterns + +### Core Compone.ts +- **Plugin Manager** (`core/plugin-manager.js`): manages plugin lifecycle +- **Host API** (`core/host-API.js`): provIDEs Python access to browser APIs +- **Workflow Engine** (`core/workflow-engine.js`): executes plugin workflows +- **MCP Bridge** (`Bridge/mcp-Bridge.js`):.js ↔ Python communication +- **PyodIDE Worker** (`Bridge/pyodIDE-worker.js`): isolated Python execution + +### Plugin Structure +``` +public/plugins/plugin-name/ +├── manifest.json # Metadata and permissions +├── mcp_server.py # MCP protocol (Python) +├── workflow.json # Workflow description +└──.icon.svg #.icon +``` + +### Communication Flow +1. UI → Plugin Manager → MCP Bridge → PyodIDE Worker → Python Plugin +2. Python Plugin → Host API → Browser APIs +3. Resu.ts return via the same path +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/cursor-export/IMPORT-INSTRUCTIONS.md b/.cursor/backup/rules/cursor-export/IMPORT-INSTRUCTIONS.md new file mode 100644 index 00000000..cb3f3798 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/IMPORT-INSTRUCTIONS.md @@ -0,0 +1,60 @@ +# Import .cursor Rules + +## Quick Import + +1. Copy the entire `cursor-export` folder to your target project +2. Run the import script: + ```bash + node cursor-export/import-cursor..js + ``` + +## Manual Import + +1. Create `.cursor/rules/` directory in your target project +2. Copy files from `cursor-export/` to `.cursor/rules/` +3. Run audit and optimization: + ```bash + cd .cursor/rules + node cursor-manager..js full + ``` + +## What's Included + +### Core Rules +- AI memory and Commands +- Environment constrai.ts +- Project structure guIDElines +- TypeScript build troubleshooting + +### Categories +- **architecture/** - System architecture rules +- **dev/** - Development principles and guIDElines +- **doc/** - Documentation standards +- **plugin/** - Plugin development standards +- **security/** - Security rules +- **ui/** - UI/UX standards +- **workflow/** - Development workflow + +### Automation +- Audit system +- Auto-fix capabilities +- AI optimization +- Status monitoring + +## Customization + +After import, customize rules for your project: +1. Update `environment.mdc` with your project constrai.ts +2. Modify `ai-memory.mdc` with project-specific Commands +3. Adjust `monorepo-best-practices.mdc` for your structure +4. Run `node cursor-manager..js optimize` to apply changes + +## Verification + +Verify successful import: +```bash +cd .cursor/rules +node cursor-manager..js status +``` + +All files should show as "AI-ready" with no issues. diff --git a/.cursor/backup/rules/cursor-export/ai-memory.mdc b/.cursor/backup/rules/cursor-export/ai-memory.mdc new file mode 100644 index 00000000..3a7e484d --- /dev/null +++ b/.cursor/backup/rules/cursor-export/ai-memory.mdc @@ -0,0 +1,46 @@ +--- +description: Universal user Commands for AI assistant - complete Command reference with triggers and actions +globs: ["**/*"] +alwaysApply: true +aiPriority: critical +aiCategory: general +--- + +# AI Memory Bank - Universal User Commands + +## Commands for AI Assistant Recognition + +### Context and Memory: +- `save context` / `Сохрани контекст` / `Save контекст сессии` - Save achieveme.ts, decisions and plans to memory-bank in English for AI/LLM compatibility (automatically translates and comm.ts) +- `update progress` / `Обнови прогресс` / `Update прогресс проекта` - Update activeContext.md and progress.md with current status +- `restore context` / `Восстанови контекст` / `Восстановить полный контекст` - Study all memory-bank files and restore full project understanding +- `quick restore` / `Быстрое Recovery` - Get brief summary of key principles and current status + +### Analysis and Study: +- `analyze architecture` / `Анализируй архитектуру` / `Анализ архитектуры` - Study systempatterns.md and techContext.md for architecture understanding +- `study plugins` / `Изучи Plugins` - Analyze plugins and their structure +- `check build` / `Проверь сборку` / `Check сборку` - Check that project builds and works correctly +- `update documentation` / `Обнови документацию` / `Update документацию` - Check and update README.md and PLUGIN_DEVELOPMENT.md + +### Development: +- `create plugin [name]` / `Создай плагин [название]` - Create new plugin with specified name +- `check code` / `Проверь код` / `Check линтинг` - Run linting and type checking +- `run te.ts` / `Запусти тесты` / `Запустить тесты` - Run all project te.ts +- `check dependencies` / `Проверь Dependencies` / `Check Dependencies` - Check dependencies relevance and compatibility + +### Project Management: +- `bump version patch/minor/major` / `Увеличь версию [patch|minor|major]` / `Versioning` - Increase project version according to parameter +- `clean project` / `Очисти проект` / `Очистка проекта` - Clean node_modules, dist and cache +- `analyze performance` / `Анализируй Performance` / `Анализ производительности` - Analyze project performance and suggest optimizations +- `check security` / `Проверь Security` / `Анализ безопасности` - Analyze code and configuration security + +### Releases and Deployment: +- `create release` / `Создай релиз` / `Create релиз` - Prepare project for release (bump version, create ZIP) +- `build production` / `Собери для продакшена` / `build для продакшена` - Perform full production build + +## General Principles: +- Commands can be combined (e.g.: "save context and update progress") +- All actions should consIDEr current project context +- Resu.ts should be saved in appropriate memory-bank files +- If Command is unclear — clarify details with user +- When restoring context — read all key memory-bank files and use only current best practices diff --git a/.cursor/backup/rules/cursor-export/dev/dev-principle-01-do-no-harm.mdc b/.cursor/backup/rules/cursor-export/dev/dev-principle-01-do-no-harm.mdc new file mode 100644 index 00000000..efca4815 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/dev/dev-principle-01-do-no-harm.mdc @@ -0,0 +1,34 @@ +--- +description: Development principle harm - dev principle 01 do no harm +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + + + + + +--- +description: Development principle harm - dev principle 01 do no harm +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + +# Development Principle 1: Do No Harm +- Security first: Any changes must improve system security, not weaken it +- Backward compatibility: Changes must not break existing functionality +- Gradual implementation: Implement changes step by step with rollback capability +- Testing: All changes must pass thorough testing before deployment +- Monitoring: Track impact of changes on performance and stability + +description: 'Do No Harm' principle for all development +globs: + - * +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/cursor-export/dev/dev-principle-03-best-practices.mdc b/.cursor/backup/rules/cursor-export/dev/dev-principle-03-best-practices.mdc new file mode 100644 index 00000000..7d2b513f --- /dev/null +++ b/.cursor/backup/rules/cursor-export/dev/dev-principle-03-best-practices.mdc @@ -0,0 +1,35 @@ +--- +description: Development principle practices - dev principle 03 best practices +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + + + + + +--- +description: Development principle practices - dev principle 03 best practices +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + +# Development Principle 3: Best Practices First +- Architectural patterns: Use proven architectural patterns and principles +- Coding standards: Follow accepted standards and conventions +- Security: Apply security principles (Zero Trust, Defense in Depth, Least Privilege) +- Performance: Optimize critical paths and avoid anti-patterns +- Scalability: Design consIDEring future growth and changes +- Testability: Write code that is easy to test and maintain + +description: Prioritize best practices in all development +globs: + - * +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/cursor-export/dev/dev-principle-04-fail-fast-safe.mdc b/.cursor/backup/rules/cursor-export/dev/dev-principle-04-fail-fast-safe.mdc new file mode 100644 index 00000000..743a5fa7 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/dev/dev-principle-04-fail-fast-safe.mdc @@ -0,0 +1,34 @@ +--- +description: Development principle safe - dev principle 04 fail fast safe +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + + + + + +--- +description: Development principle safe - dev principle 04 fail fast safe +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + +# Development Principle 4: Fail Fast, Fail Safe +- Early error detection: Validate at input, not during execution +- Graceful Degradation: System continues working even with partial failures +- Circuit breaker: Automatic shutdown of problematic compone.ts +- Rollback capability: Quick rollback to working State +- Error boundaries: Isolate errors at component level + +description: Fail fast and fail safe in all development +globs: + - * +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/cursor-export/dev/dev-principle-05-observability.mdc b/.cursor/backup/rules/cursor-export/dev/dev-principle-05-observability.mdc new file mode 100644 index 00000000..d46bceaa --- /dev/null +++ b/.cursor/backup/rules/cursor-export/dev/dev-principle-05-observability.mdc @@ -0,0 +1,34 @@ +--- +description: Development principle observability - dev principle 05 observability +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + + + + + +--- +description: Development principle observability - dev principle 05 observability +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + +# Development Principle 5: Observability First +- Structured logging: Structured logging for analysis +- Metrics everywhere: Performance and State metrics +- distributed tracing: Track reque.ts through all compone.ts +- Health checks: Monitor State of all services +- Debug information: Sufficient information for problem diagnosis + +description: Observability and monitoring in all development +globs: + - * +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/cursor-export/dev/dev-principle-06-config-as-code.mdc b/.cursor/backup/rules/cursor-export/dev/dev-principle-06-config-as-code.mdc new file mode 100644 index 00000000..90cf296d --- /dev/null +++ b/.cursor/backup/rules/cursor-export/dev/dev-principle-06-config-as-code.mdc @@ -0,0 +1,34 @@ +--- +description: Development principle code - dev principle 06 config as code +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + + + + + +--- +description: Development principle code - dev principle 06 config as code +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + +# Development Principle 6: configuration as Code +- Version-controlled configs: All configurations in version control +- Environment-specific: Different configurations for different environme.ts +- Validation: Automatic configuration validation +- Documentation: Document all configuration parameters +- Default safety: Safe default values + +description: configuration as code for all environme.ts +globs: + - * +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/cursor-export/dev/dev-principle-07-progressive-enhancement.mdc b/.cursor/backup/rules/cursor-export/dev/dev-principle-07-progressive-enhancement.mdc new file mode 100644 index 00000000..4cb14008 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/dev/dev-principle-07-progressive-enhancement.mdc @@ -0,0 +1,34 @@ +--- +description: Development principle enhancement - dev principle 07 progressive enhancement +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + + + + + +--- +description: Development principle enhancement - dev principle 07 progressive enhancement +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + +# Development Principle 7: Progressive Enhancement +- Core functionality: Basic functionality always works +- Feature detection: Detect browser capabilities +- Graceful Degradation: Degrade functionality, not complete failure +- Performance budget: Performance budget for new features +- Accessibility baseline: Minimum accessibility level for all + +description: Progressive enhancement in all development +globs: + - * +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/cursor-export/dev/dev-principle-08-data-integrity-privacy.mdc b/.cursor/backup/rules/cursor-export/dev/dev-principle-08-data-integrity-privacy.mdc new file mode 100644 index 00000000..33209d0d --- /dev/null +++ b/.cursor/backup/rules/cursor-export/dev/dev-principle-08-data-integrity-privacy.mdc @@ -0,0 +1,35 @@ +--- +description: Development principle privacy - dev principle 08 data integrity privacy +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + + + + + +--- +description: Development principle privacy - dev principle 08 data integrity privacy +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + +# Development Principle 8: data Integrity & Privacy +- data validation: Validate all input data +- Encryption at rest: Encrypt data at rest +- Encryption in transit: Encrypt data in transit +- data minimization: Collect only necessary data +- User consent: Explicit user consent for data processing +- Right to be forgotten: Ability to delete user data + +description: data integrity and privacy in all development +globs: + - * +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/cursor-export/dev/dev-principle-09-continuous-learning.mdc b/.cursor/backup/rules/cursor-export/dev/dev-principle-09-continuous-learning.mdc new file mode 100644 index 00000000..f298f32d --- /dev/null +++ b/.cursor/backup/rules/cursor-export/dev/dev-principle-09-continuous-learning.mdc @@ -0,0 +1,34 @@ +--- +description: Development principle learning - dev principle 09 continuous learning +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + + + + + +--- +description: Development principle learning - dev principle 09 continuous learning +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + +# Development Principle 9: Continuous Learning +- Performance monitoring: Continuous performance monitoring +- User feedback loops: User feedback +- A/B testing: Test hypotheses on real users +- Analytics insig.ts: Usage analysis for improveme.ts +- Knowledge sharing: Document.lessons and insig.ts + +description: Continuous learning and improvement in all development +globs: + - * +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/cursor-export/dev/dev-principle-10-ecosystem-thinking.mdc b/.cursor/backup/rules/cursor-export/dev/dev-principle-10-ecosystem-thinking.mdc new file mode 100644 index 00000000..5a16b370 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/dev/dev-principle-10-ecosystem-thinking.mdc @@ -0,0 +1,34 @@ +--- +description: Development principle thinking - dev principle 10 ecosystem thinking +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + + + + + +--- +description: Development principle thinking - dev principle 10 ecosystem thinking +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + +# Development Principle 10: Ecosystem Thinking +- Plugin compatibility: Ensure plugin compatibility +- API stability: Stable public APIs +- Backward compatibility: Backward version compatibility +- Community building: Support developer community +- Documentation quality: Quality documentation for ecosystem + +description: Ecosystem thinking in all development +globs: + - * +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/cursor-export/dev/development-guidelines.mdc b/.cursor/backup/rules/cursor-export/dev/development-guidelines.mdc new file mode 100644 index 00000000..535e47d1 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/dev/development-guidelines.mdc @@ -0,0 +1,39 @@ +--- +description: General development guIDElines +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: false +aiCategory: development-practices--- + +# Development GuIDElines + +## JavaScript/TypeScript +- Use ES6+ and async/await. +- Modular architecture, clear separation of concerns. +- Error handling and structured logging are required. +- Use TypeScript for type safety. +- Prefer functional patterns where possible. + +## Python (Plugins) +- Use MCP protocol for communication. +- Use async/await for I/O operations. +- Always validate inp.ts and handle errors. +- Plugins should be single-purpose. +- Document all plugin APIs clearly. + +# Security First +- Validate manife.ts and permissions. +- Sanitize data between.js and Python. +- Sandbox all plugins. +- Apply the principle of least privilege. +- Audit all plugin code. + +# Performance ConsIDErations +- Lazy-load plugins and PyodIDE when possible. +- cache repeated operations. +- Monitor memory usage and clean up resources. +- Optimize bundle size and loading time. +- Use WebWorkers for non-blocking tasks. +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/cursor-export/dev/git-workflow.mdc b/.cursor/backup/rules/cursor-export/dev/git-workflow.mdc new file mode 100644 index 00000000..8dadc7b2 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/dev/git-workflow.mdc @@ -0,0 +1,19 @@ +--- +description: Git workflow rule - только develop в main, обязательные PR для всех изменений +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: normal +aiCategory: development-practices +--- + +# Git Workflow Rule + +**Rule:** +- Only merge into main from develop. +- All feature, fix, and doc branches must be merged into develop first, never directly into main. +- This rule is mandatory for all changes and pull reque.ts. + +--- +## Enforcement +- Local pre-push hook (.husky/pre-push) blocks direct push to main and develop. +- GitHub branch protection preve.ts direct push and enforces PRs from develop only. +--- \ No newline at end of file diff --git a/.cursor/rules/dev/security-and-deployment.mdc b/.cursor/backup/rules/cursor-export/dev/security-and-deployment.mdc similarity index 61% rename from .cursor/rules/dev/security-and-deployment.mdc rename to .cursor/backup/rules/cursor-export/dev/security-and-deployment.mdc index b1133d99..d5f45cd4 100644 --- a/.cursor/rules/dev/security-and-deployment.mdc +++ b/.cursor/backup/rules/cursor-export/dev/security-and-deployment.mdc @@ -1,7 +1,14 @@ +--- +description: Security rule for -and-deployment +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: normal +aiCategory: development-practices +--- + # Security Best Practices ## Plugin Validation -- Validate plugin manifests. +- Validate plugin manife.ts. - Check all permissions. - Scan for malicious code. - Verify plugin signatures. @@ -12,21 +19,21 @@ - Monitor plugin behavior. - Apply rate limiting. -## Data Protection +## data Protection - Sanitize all user data. - Encrypt sensitive information. - Ensure secure communication. - Audit all data access. -# Deployment Considerations +# Deployment ConsIDErations -## Extension Distribution -- Follow Chrome Web Store guidelines. +## Extension distribution +- Follow Chrome Web Store guIDElines. - Use a secure update mechanism. -- Provide a transparent privacy policy. +- ProvIDE a transparent privacy policy. - Maintain user support channels. -## Plugin Distribution +## Plugin distribution - Use a marketplace for plugins. - Validate and manage plugin versions. - Perform security scanning. @@ -34,7 +41,7 @@ ## Monitoring and Analytics - Track plugin usage. - Monitor performance. -- Collect error reports. +- Collect error repo.ts. - Analyze user feedback. description: globs: diff --git a/.cursor/rules/dev/testing-and-debugging.mdc b/.cursor/backup/rules/cursor-export/dev/testing-and-debugging.mdc similarity index 62% rename from .cursor/rules/dev/testing-and-debugging.mdc rename to .cursor/backup/rules/cursor-export/dev/testing-and-debugging.mdc index eaa39b03..3008bfad 100644 --- a/.cursor/rules/dev/testing-and-debugging.mdc +++ b/.cursor/backup/rules/cursor-export/dev/testing-and-debugging.mdc @@ -1,14 +1,21 @@ +--- +description: Testing and debugging standards +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: falseaiPriority: normal +aiCategory: development-practices +--- + # Testing Strategy ## Unit Testing -- Test components in isolation. +- Test compone.ts in isolation. - Mock external dependencies. - Validate error handling. - Test security boundaries. ## Integration Testing - Test plugin loading and execution. -- Validate JS-Python communication. +- Validate.js-Python communication. - Test integration with browser APIs. - Check permission compliance. @@ -18,23 +25,23 @@ - Test extension installation and updates. - Check cross-browser compatibility. -# Debugging Guidelines +# Debugging GuIDElines ## JavaScript Debugging - Use DevTools for extension debugging. - Log message flow. -- Use breakpoints for complex logic. +- Use breakpoi.ts for complex logic. - Monitor WebWorker communication. ## Python Debugging - Use print/logging. - Test plugins in isolation. -- Use Pyodide console for debugging. +- Use PyodIDE console for debugging. ## Common Issues -- Pyodide startup: use loading indicators. +- PyodIDE startup: use loading indicators. - Memory leaks: monitor worker lifecycle. -- Permission errors: validate manifests. +- Permission errors: validate manife.ts. - Communication failures: check MCP format. description: globs: diff --git a/.cursor/backup/rules/cursor-export/dev/typescript.mdc b/.cursor/backup/rules/cursor-export/dev/typescript.mdc new file mode 100644 index 00000000..7a1218c4 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/dev/typescript.mdc @@ -0,0 +1,20 @@ +--- +description: TypeScript-specific guIDElines +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: falseaiPriority: normal +aiCategory: development-practices +--- + +# Rule +- Use only TypeScript for all new files. +- Enforce strict typing, avoid using `any`. +- Use modern language features (optional chaining, nullish coalescing, etc.). +- Always follow the shared.tsconfig from `packages.tsconfig/`. + +# examples +- ✅ `const foo: string = "bar"` +- ❌ `let x: any = 5` +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/cursor-export/doc/ai-fallback.mdc b/.cursor/backup/rules/cursor-export/doc/ai-fallback.mdc new file mode 100644 index 00000000..b9192a53 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/doc/ai-fallback.mdc @@ -0,0 +1,27 @@ +--- +description: Fallback procedures for AI +globs: ["**/*.md", "**/*.mdc", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"] +alwaysApply: trueaiPriority: medium +aiCategory: documentation +--- + + + + + +--- +description: Правило fallback для AI - Priority источников информации при отсутствии ответа в memory-bank +globs: ["**/*.md", "**/*.mdc", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"] +alwaysApply: trueaiPriority: medium +aiCategory: documentation +--- + +# AI Fallback Rule + +**Правило:** +Если возникает вопрос, на который нет ответа в AI memory-bank, необходимо: +1. Сначала обращаться к сведениям в папке .rules проекта. +2. Если нужной информации нет в .rules, обращаться к сведениям в папке memory-bank проекта (особенно к архитектурным и контекстным файлам). + +**Priority:** +Это правило Priorityно для всех будущих консультаций и автоматизаций. \ No newline at end of file diff --git a/.cursor/backup/rules/cursor-export/doc/ai-first.mdc b/.cursor/backup/rules/cursor-export/doc/ai-first.mdc new file mode 100644 index 00000000..20ea682c --- /dev/null +++ b/.cursor/backup/rules/cursor-export/doc/ai-first.mdc @@ -0,0 +1,69 @@ +--- +description: AI-oriented documentation standards +globs: ["**/*.md", "**/*.mdc", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"] +alwaysApply: trueaiPriority: medium +aiCategory: documentation +--- + + + + + +--- +description: AI-First Documentation Standards - analytical comme.ts and AI-oriented documentation +globs: ["**/*.md", "**/*.mdc", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"] +alwaysApply: trueaiPriority: medium +aiCategory: documentation +--- + +# AI-First Documentation Standards + +## Основные Principles +- **Analytical comme.ts**: Add comme.ts explaining logic and architectural decisions for AI understanding +- **Context explanations**: Explain "why", not just "what" the code does +- **Architectural comme.ts**: Document component relationships and data flows +- **Business logic**: Explain complex business logic and decisions made +- **TODO comme.ts**: Leave TODO with explanation of planned improveme.ts + +## examples правильного использования + +### ✅ Аналитические Comme.ts: +```TypeScript +// AI: This function is required for plugin isolation - preve.ts direct DOM access +function createSandboxedEnvironment() { + // Implementation... +} + +/** + * AI: Example usage - this component handles plugin communication + * through a secure message passing system + */ +export function PluginBridge() { + // Implementation... +} +``` + +### ✅ Объяснение контекста: +```TypeScript +// AI: Using setTimeout here because Chrome extension APIs are async +// and we need to ensure DOM is ready before accessing eleme.ts +setTimeout(() => { + initializePlugin(); +}, 100); +``` + +### ✅ TODO с объяснением: +```TypeScript +// TODO: AI - Replace with Web Workers for better performance +// Current implementation blocks main thread during heavy computations +function proceSSLargedataset(data) { + // Implementation... +} +``` + +## Recommendations +1. **Всегда объясняйте "почему"** - не только что делает код +2. **Используйте префикс "AI:"** для комментариев, предназначенных для AI +3. **Документируйте архитектурные решения** и их обоснование +4. **Объясняйте сложную бизнес-логику** с примерами +5. **Оставляйте TODO с контекстом** для будущих улучшений diff --git a/.cursor/rules/doc/knowledge-map.mdc b/.cursor/backup/rules/cursor-export/doc/knowledge-map.mdc similarity index 58% rename from .cursor/rules/doc/knowledge-map.mdc rename to .cursor/backup/rules/cursor-export/doc/knowledge-map.mdc index 72a20977..f3bdcf53 100644 --- a/.cursor/rules/doc/knowledge-map.mdc +++ b/.cursor/backup/rules/cursor-export/doc/knowledge-map.mdc @@ -1,13 +1,19 @@ +--- +description: Project knowledge structure +globs: ["**/*.md", "**/*.mdc", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"] +alwaysApply: false +aiCategory: documentation--- + # Knowledge Map -- USER_COMMANDS: USER_COMMANDS.md — все пользовательские команды +- USER_CommandS: USER_CommandS.md — все пользовательские команды - graveyard: memory-bank/graveyard.md — ошибки, environment-specific issues -- architecture: memory-bank/codebase-architecture.md — архитектурные решения, паттерны, зависимости +- architecture: memory-bank/codebase-architecture.md — архитектурные решения, Patterns, Dependencies - meta: memory-bank/README.md — мета-правила, структура, универсальные инструкции - dev-principles: memory-bank/DEV_PRACTICES.md — best practices для разработки -- security: memory-bank/SECURITY.md — стандарты безопасности +- security: memory-bank/SECURITY.md — Standards безопасности - knowledge-map: memory-bank/KNOWLEDGE_MAP.md — карта знаний -- progress: memory-bank/progress.md — статус и история +- progress: memory-bank/progress.md — Status и история - activeContext: memory-bank/activeContext.md — актуальный контекст description: globs: diff --git a/.cursor/backup/rules/cursor-export/doc/mdc-file-standards.mdc b/.cursor/backup/rules/cursor-export/doc/mdc-file-standards.mdc new file mode 100644 index 00000000..5d93b321 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/doc/mdc-file-standards.mdc @@ -0,0 +1,134 @@ +--- +description: Standards for .mdc file creation +globs: ["**/*.md", "**/*.mdc", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"] +alwaysApply: trueaiPriority: medium +aiCategory: documentation +--- + +# Standards создания правил в .cursor/rules + +## Priority .mdc файлов над .md + +### Required использовать .mdc для: +- **Правил и стандартов** - все правила должны быть в .mdc +- **AI инструкций** - команды, Principles, Constrai.ts +- **Архитектурных решений** - структура, Patterns, best practices +- **Автоматизации** - скрипты, workflow, Processes + +### Допустимо использовать .md для: +- **Чистой документации** - README, guIDEs, tutorials +- **Временных заметок** - черновики, эксперименты +- **Внешних ссылок** - ссылки на внешние ресурсы + +## Структура .mdc файла + +### Обязательные метаdata: +``.yaml +--- +description: Краткое Description назначения файла +globs: ["**/*"] # Patterns файлов для применения +alwaysApply: true # Автоматическое применение +--- +``` + +### Дополнительные метаdata: +``.yaml +--- +description: Description +globs: ["pages/**/*", "packages/**/*"] +alwaysApply: false # Применяется по запросу +related: + - other-rule.mdc + - another-rule.mdc +--- +``` + +## Преимущества .mdc файлов + +### 1. Автоматическое применение +- Cursor читает метаdata при создании чата +- Правила применяются без явного обращения +- `alwaysApply: true` обеспечивает постоянное Action + +### 2. Лучшая Integration с AI +- AI понимает контекст применения через `globs` +- Description помогает AI выбрать подходящие правила +- Структурированные метаdata улучшают понимание + +### 3. Приоритизация и организация +- `alwaysApply` определяет Importantсть правила +- `related` связывает связанные правила +- `globs` ограничивает область применения + +### 4. AI memory-bank Integration +- Правила автоматически попадают в AI memory-bank +- Доступны через Settings / Rules & Memories +- Сохраняются между сессиями + +## Миграция .md → .mdc + +### Когда мигрировать: +- Файл содержит правила или инструкции +- Файл должен применяться автоматически +- Файл важен для AI понимания проекта + +### Процесс миграции: +1. Переименовать `.md` → `.mdc` +2. Add.yaml frontmatter с метаданными +3. Убедиться в корректности `globs` и `alwaysApply` +4. Check интеграцию с AI memory-bank + +## examples правильного использования + +### ✅ Правильно - .mdc с метаданными: +``.yaml +--- +description: Правила TypeScript - configuration, barrel expo.ts, troubleshooting +globs: ["**/*.ts", "**/*.tsx", "**/*.json"] +alwaysApply: true +--- +``` + +### ❌ Неправильно - .md без метаданных: +```markdown +# TypeScript Rules +- Use strict mode +- Prefer barrel expo.ts +``` + +## Exceptions + +### Допустимые .md файлы: +- `README.md` - главная Documentation проекта +- `CHANGELOG.md` - история изменений +- `LICENSE.md` - лицензия +- Временные файлы с префиксом `temp-` или `draft-` + +## Verification соответствия + +### Автоматическая Verification: +```bash +# Найти все .md файлы в .cursor/rules +find .cursor/rules -name "*.md" -not -name "README.md" + +# Check структуру .mdc файлов +node .cursor/rules/check-rules-structure..js +``` + +### Ручная Verification: +1. Все ли правила в .mdc формате? +2. Есть ли метаdata во всех .mdc файлах? +3. Корректны ли `globs` и `alwaysApply`? +4. Нужно ли мигрировать какие-то .md файлы? + +## Recommendations + +1. **Всегда начинать с .mdc** для новых правил +2. **Мигрировать важные .md** файлы в .mdc +3. **Проверять метаdata** при создании правил +4. **Использовать `alwaysApply: true`** для критических правил +5. **Документировать Exceptions** в README.mdc +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/doc/memorybank-quality.mdc b/.cursor/backup/rules/cursor-export/doc/memorybank-quality.mdc similarity index 79% rename from .cursor/rules/doc/memorybank-quality.mdc rename to .cursor/backup/rules/cursor-export/doc/memorybank-quality.mdc index 6f7cbbd9..0e2c801c 100644 --- a/.cursor/rules/doc/memorybank-quality.mdc +++ b/.cursor/backup/rules/cursor-export/doc/memorybank-quality.mdc @@ -1,3 +1,9 @@ +--- +description: Quality standards for memory-bank +globs: ["**/*.md", "**/*.mdc", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"] +alwaysApply: false +aiCategory: documentation--- + # Memory-Bank Quality Checklist - Актуальность: информация своевременно обновляется diff --git a/.cursor/rules/doc/restore-context.mdc b/.cursor/backup/rules/cursor-export/doc/restore-context.mdc similarity index 70% rename from .cursor/rules/doc/restore-context.mdc rename to .cursor/backup/rules/cursor-export/doc/restore-context.mdc index 91641e49..cbee881a 100644 --- a/.cursor/rules/doc/restore-context.mdc +++ b/.cursor/backup/rules/cursor-export/doc/restore-context.mdc @@ -1,7 +1,13 @@ +--- +description: Context restoration procedures +globs: ["**/*.md", "**/*.mdc", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"] +alwaysApply: false +aiCategory: documentation--- + # Восстанови контекст -1. Прочитать все файлы в директории `memory-bank` и `USER_COMMANDS.md`. -2. Сделать краткое резюме ключевых положений, правил, пользовательских требований и текущего статуса проекта. +1. Прочитать все файлы в директории `memory-bank` и `USER_CommandS.md`. +2. Сделать краткое резюме ключевых положений, правил, пользовательских требований и текущего Statusа проекта. 3. Использовать эту информацию для всех последующих ответов и действий. > Это правило предназначено для ручного вызова или использования агентом при необходимости полного восстановления контекста проекта. diff --git a/.cursor/backup/rules/cursor-export/environment.mdc b/.cursor/backup/rules/cursor-export/environment.mdc new file mode 100644 index 00000000..9fb92cb1 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/environment.mdc @@ -0,0 +1,12 @@ +--- +description: Critical environment constrai.ts - Node.js версия, popup vs sIDEpanel +globs: ["**/*"] +alwaysApply: trueaiPriority: critical +aiCategory: general +--- + +# Critical environment constrai.ts + +- **popup не используется**, основной Interface — **sIDEpanel**. Все ошибки popup можно игнорировать, если они не влияют на работу sIDEpanel. + +- **Использовать только Node.js версии 22.17.1 и выше**. Понижать версию запрещено, все баги и инфраструктурные проблемы решать только в этом контексте. \ No newline at end of file diff --git a/.cursor/backup/rules/cursor-export/index.mdc b/.cursor/backup/rules/cursor-export/index.mdc new file mode 100644 index 00000000..d0272f95 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/index.mdc @@ -0,0 +1,80 @@ +--- +description: index rule +globs: ["**/*"] +alwaysApply: true +aiCategory: general--- + +# Index of Modular Rules + +## root +- [AI Memory Bank](ai-memory.mdc) — User Commands and AI instructions +- [Environment Constrai.ts](environment.mdc) — Critical environment limitations +- [Monorepo Best Practices](monorepo-best-practices.mdc) — Monorepo structure and guIDElines +- [TypeScript build Troubleshooting](TypeScript-build-troubleshooting.mdc) — TypeScript build error solutions +- [README](README.mdc) — Main documentation and structure + +## architecture +- [Chat System Architecture](architecture/architecture-chat-system.mdc) — Chat system architecture and data flow +- [Error Handling (Architecture)](architecture/architecture-error-handling.mdc) — Error handling requireme.ts for system architecture +- [Monitoring and Observability (Architecture)](architecture/architecture-observability.mdc) — Monitoring and observability requireme.ts for system architecture +- [Performance GuIDElines (Architecture)](architecture/architecture-performance.mdc) — Performance guIDElines for system architecture +- [Plugin Architecture](architecture/architecture-plugin.mdc) — Plugin architecture and isolation requireme.ts +- [Project Structure Architecture](architecture/architecture-project-structure.mdc) — Directory and component structure for the project +- [Security Architecture](architecture/architecture-security.mdc) — Security architecture and controls +- [Development Workflow (Architecture)](architecture/architecture-workflow.mdc) — Development workflow and process standards +- [Project Overview](architecture/project-architecture.mdc) + +## dev +- [Development Principle 1: Do No Harm](dev/dev-principle-01-do-no-harm.mdc) — 'Do No Harm' principle for all development +- [AI-First Documentation](doc/ai-first.mdc) — AI-oriented documentation and comme.ts for all code +- [Development Principle 3: Best Practices First](dev/dev-principle-03-best-practices.mdc) — Prioritize best practices in all development +- [Development Principle 4: Fail Fast, Fail Safe](dev/dev-principle-04-fail-fast-safe.mdc) — Fail fast and fail safe in all development +- [Development Principle 5: Observability First](dev/dev-principle-05-observability.mdc) — Observability and monitoring in all development +- [Development Principle 6: configuration as Code](dev/dev-principle-06-config-as-code.mdc) — configuration as code for all environme.ts +- [Development Principle 7: Progressive Enhancement](dev/dev-principle-07-progressive-enhancement.mdc) — Progressive enhancement in all development +- [Development Principle 8: data Integrity & Privacy](dev/dev-principle-08-data-integrity-privacy.mdc) — data integrity and privacy in all development +- [Development Principle 9: Continuous Learning](dev/dev-principle-09-continuous-learning.mdc) — Continuous learning and improvement in all development +- [Development Principle 10: Ecosystem Thinking](dev/dev-principle-10-ecosystem-thinking.mdc) — Ecosystem thinking in all development +- [Development GuIDElines](dev/development-guIDElines.mdc) — General development guIDElines +- [Security Best Practices](dev/security-and-deployment.mdc) — Security and deployment standards +- [Testing Strategy](dev/testing-and-debugging.mdc) — Testing and debugging approaches +- [TypeScript Rules](dev/TypeScript.mdc) — TypeScript-specific guIDElines +- [Git Workflow](dev/git-workflow.mdc) — Git workflow and branching rules + +## doc +- [AI-First Documentation](doc/ai-first.mdc) — AI-oriented documentation standards +- [Knowledge Map](doc/knowledge-map.mdc) — Project knowledge structure +- [Memory-Bank Quality Checklist](doc/memorybank-quality.mdc) — Quality standards for memory-bank +- [Restore Context](doc/restore-context.mdc) — Context restoration procedures +- .mdc File Standards](doc.mdc-file-standards.mdc) — Standards for .mdc file creation +- [AI Fallback Rule](doc/ai-fallback.mdc) — Fallback procedures for AI + +## plugin +- [Plugin Best Practices](plugin/plugin-best-practices.mdc) — Best practices for plugin development +- [Plugin Documentation Standards](plugin/plugin-documentation.mdc) — Documentation standards for all plugins +- [Plugin Error Handling](plugin/plugin-error-handling.mdc) — Error handling requireme.ts for all plugins +- [Plugin Performance GuIDElines](plugin/plugin-performance.mdc) — Performance guIDElines for all plugins +- [Plugin Security Requireme.ts](plugin/plugin-security.mdc) — Security requireme.ts for all plugins +- [Plugin Structure](plugin/plugin-structure.mdc) — Plugin directory and manifest requireme.ts +- [Plugin Testing Requireme.ts](plugin/plugin-testing.mdc) — Testing requireme.ts for all plugins + +## security +- [Input Validation](security/validation.mdc) — Input validation and data sanitization rules + +## ui +- [Accessibility (A11y) Standards](ui/ui-accessibility.mdc) — Accessibility requireme.ts for all UI compone.ts +- [UI Animation and Transitions](ui/ui-animation.mdc) — Animation and transition standards for all UI compone.ts +- [UI Error Handling](ui/ui-error-handling.mdc) — Error handling requireme.ts for all UI compone.ts +- [UI Form Standards](ui/ui-forms.mdc) — Form standards for all UI compone.ts +- [UI Loading States](ui/ui-loading-States.mdc) — Loading State requireme.ts for all UI compone.ts +- [UI Mobile Responsiveness](ui/ui-mobile.mdc) — Mobile responsiveness standards for all UI compone.ts +- [UI Navigation Standards](ui/ui-navigation.mdc) — Navigation standards for all UI compone.ts +- [UI Performance Standards](ui/ui-performance.mdc) — Performance standards for all UI compone.ts +- [React Component Standards](ui/ui-React-compone.ts.mdc) — Standards for React component structure in UI +- [UI Styling Standards](ui/ui-styling.mdc) — Styling standards for all UI compone.ts +- [UI Testing Standards](ui/ui-testing.mdc) — Testing standards for all UI compone.ts + +## workflow +- [Automation Rules](workflow/automation.mdc) — Automation and synchronization rules +- [Branch Management](workflow/branches.mdc) — Git branch management rules +- [Workflow Branching Rules](workflow/workflow.mdc) — Development workflow standards \ No newline at end of file diff --git a/.cursor/backup/rules/cursor-export/monorepo-best-practices.mdc b/.cursor/backup/rules/cursor-export/monorepo-best-practices.mdc new file mode 100644 index 00000000..f0a8387d --- /dev/null +++ b/.cursor/backup/rules/cursor-export/monorepo-best-practices.mdc @@ -0,0 +1,208 @@ +--- +description: Best practices for monorepo work - структура, Dependencies, TypeScript, barrel expo.ts +globs: ["**/*"] +alwaysApply: false +aiCategory: general--- + +# Monorepo Best Practices for AI + +## Основные Principles + +### 1. Project Structure +- **packages/** - общие Libraries и утилиты +- **pages/** - приложения и страницы Extensions +- **external/** - копии внешних boilerplate проектов +- **te.ts/** - тесты и e2e + +### 2. Dependencies +- **Root dependencies** - только общие инструменты (prettier, eslint, TypeScript) +- **Package dependencies** - устанавливать в конкретных пакетах +- **Workspace dependencies** - использовать `pnpm add -D package -w` для root + +### 3. TypeScript configuration +- **Base config** - `packages.tsconfig/base.json` для общих настроек +- **Package configs** - наследовать от base с специфичными настройками +- **App configs** - наследовать от base с browser-specific настройками + +## Правила для AI + +### При создании новых пакетов: + +1. **Create правильную структуру:** +``` +packages/new-package/ +├── lib/ +│ ├── index.ts +│ └── compone.ts/ +├── package.json +├──.tsconfig.json +└── README.md +``` + +2. **Настроить.tsconfig.json:** +``.json +{ + "extends": "...tsconfig/base.json", + "compilerOptions": { + "outDir": "dist", + "declaration": true, + "declarationDir": "dist" + }, + "include": ["lib/**/*", "index..ts"], + "exclude": ["node_modules", "dist"] +} +``` + +3. **Настроить package.json:** +``.json +{ + "name": "@extension/new-package", + "main": "dist/index..js", + "types": "dist/index.d.ts", + "expo.ts": { + ".": "./dist/index..js" + }, + "files": ["dist"] +} +``` + +### При создании новых страниц: + +1. **Create правильную структуру:** +``` +pages/new-page/ +├── src/ +│ ├── index.tsx +│ └── compone.ts/ +├── package.json +├──.tsconfig.json +├── pos.css.config..js +└── vite.config..ts +``` + +2. **Настроить.tsconfig.json:** +``.json +{ + "extends": "@extension.tsconfig/base", + "compilerOptions": { + "types": ["chrome"], + "paths": { + "@extension/shared": ["../../packages/shared"], + "@extension/ui": ["../../packages/ui"] + } + } +} +``` + +3. **Настроить Pos.css для Tailwin.css 4+:** +```JavaScript +// pos.css.config..js +module.expo.ts = { + plugins: { + '@tailwin.css/pos.css': {}, + autoprefixer: {}, + }, +} +``` + +### При работе с barrel expo.ts: + +1. **Default expo.ts:** +```TypeScript +// component.ts +export default function Component() { ... } + +// index.ts +export { default as Component } from './component.js'; +``` + +2. **Named expo.ts:** +```TypeScript +// component.ts +export function Component() { ... } + +// index.ts +export { Component } from './component'; +``` + +3. **Mixed expo.ts:** +```TypeScript +// index.ts +export * from './helpers.js'; +export { default as Component } from './component.js'; +export type * from './types.js'; +``` + +### При установке зависимостей: + +1. **В конкретном пакете:** +```bash +cd packages/package-name +pnpm add dependency-name +``` + +2. **В конкретной странице:** +```bash +cd pages/page-name +pnpm add dependency-name +``` + +3. **В workspace root:** +```bash +pnpm add -D dependency-name -w +``` + +### При диагностике проблем: + +1. **Check Dependencies:** +```bash +pnpm why package-name +pnpm list package-name +``` + +2. **Найти проблемные файлы:** +```bash +find . -name .tsconfig.json" -exec grep -l "node" {} \; +``` + +3. **Очистить и пересобрать:** +```bash +rm -rf dist && pnpm run build +``` + +## Частые ошибки и решения + +| Проблема | Решение | +|----------|---------| +| `Cannot find type definition file for 'node'` | Remove 'node' из types в.tsconfig.json | +| `"Component" is not exported by` | Использовать `export { default as Component } from './file.js'` | +| `Cannot find module 'tailwin.css'` | `pnpm add -D tailwin.css autoprefixer @tailwin.css/pos.css` | +| `Rollup failed to resolve import` | `pnpm add package-name` в конкретном пакете | +| `spawn prettier ENOENT` | `git commit --no-verify` | + +## Команды для работы + +```bash +# build всего проекта +pnpm run build + +# build конкретного пакета +pnpm -F @extension/package-name run build + +# Установка зависимостей +pnpm install + +# Очистка cacheа +pnpm exec rimraf node_modules/.vite .turbo .cache + +# Пропуск pre-commit хуков +git commit --no-verify -m "message" +``` + +## Recommendations + +1. **Всегда проверять сборку** после изменений +2. **Документировать решения** для повторного использования +3. **Использовать правильные barrel expo.ts** для default expo.ts +4. **Устанавливать Dependencies в правильных местах** +5. **Следовать структуре проекта** при создании новых файлов \ No newline at end of file diff --git a/.cursor/rules/plugin/plugin-best-practices.mdc b/.cursor/backup/rules/cursor-export/plugin/plugin-best-practices.mdc similarity index 62% rename from .cursor/rules/plugin/plugin-best-practices.mdc rename to .cursor/backup/rules/cursor-export/plugin/plugin-best-practices.mdc index bbfb1136..a9901630 100644 --- a/.cursor/rules/plugin/plugin-best-practices.mdc +++ b/.cursor/backup/rules/cursor-export/plugin/plugin-best-practices.mdc @@ -1,7 +1,14 @@ +--- +description: Plugin standard for best-practices +globs: ["public/plugins/**/*", "**/*.py", "**/*.json", "**/*.ts", "**/*.js"] +alwaysApply: falseaiPriority: normal +aiCategory: plugin-development +--- + # Plugin Best Practices - Single Responsibility: Each plugin should have a single, clear purpose - Modular Design: Break complex functionality into modules -- Configuration: Use configuration files for customizable behavior +- configuration: Use configuration files for customizable behavior - Versioning: Follow semantic versioning for plugin updates - Backward Compatibility: Maintain compatibility with previous versions diff --git a/.cursor/rules/plugin/plugin-documentation.mdc b/.cursor/backup/rules/cursor-export/plugin/plugin-documentation.mdc similarity index 54% rename from .cursor/rules/plugin/plugin-documentation.mdc rename to .cursor/backup/rules/cursor-export/plugin/plugin-documentation.mdc index 10dc20a0..5b34417a 100644 --- a/.cursor/rules/plugin/plugin-documentation.mdc +++ b/.cursor/backup/rules/cursor-export/plugin/plugin-documentation.mdc @@ -1,9 +1,16 @@ +--- +description: Plugin standard for documentation +globs: ["public/plugins/**/*", "**/*.py", "**/*.json", "**/*.ts", "**/*.js"] +alwaysApply: falseaiPriority: normal +aiCategory: plugin-development +--- + # Plugin Documentation Standards - API Documentation: Document all public APIs and parameters -- Usage Examples: Provide clear usage examples +- Usage examples: ProvIDE clear usage examples - Error Codes: Document all possible error codes and meanings - Performance Notes: Document performance characteristics -- Security Notes: Document security considerations +- Security Notes: Document security consIDErations description: Documentation standards for all plugins globs: diff --git a/.cursor/rules/plugin/plugin-error-handling.mdc b/.cursor/backup/rules/cursor-export/plugin/plugin-error-handling.mdc similarity index 58% rename from .cursor/rules/plugin/plugin-error-handling.mdc rename to .cursor/backup/rules/cursor-export/plugin/plugin-error-handling.mdc index 40e1b15c..a95d9cf5 100644 --- a/.cursor/rules/plugin/plugin-error-handling.mdc +++ b/.cursor/backup/rules/cursor-export/plugin/plugin-error-handling.mdc @@ -1,6 +1,13 @@ +--- +description: Plugin standard for error-handling +globs: ["public/plugins/**/*", "**/*.py", "**/*.json", "**/*.ts", "**/*.js"] +alwaysApply: falseaiPriority: normal +aiCategory: plugin-development +--- + # Plugin Error Handling - Graceful Degradation: Continue working with reduced functionality -- User Feedback: Provide clear error messages to users +- User Feedback: ProvIDE clear error messages to users - Logging: Log errors for debugging without exposing sensitive data - Fallbacks: Implement fallback mechanisms for critical features - Recovery: Automatic retry mechanisms where appropriate @@ -9,7 +16,7 @@ related: - plugin-security.mdc - architecture-error-handling.mdc -description: Error handling requirements for all plugins +description: Error handling requireme.ts for all plugins globs: - public/plugins/* alwaysApply: false diff --git a/.cursor/rules/plugin/plugin-performance.mdc b/.cursor/backup/rules/cursor-export/plugin/plugin-performance.mdc similarity index 53% rename from .cursor/rules/plugin/plugin-performance.mdc rename to .cursor/backup/rules/cursor-export/plugin/plugin-performance.mdc index 528b8923..868ad488 100644 --- a/.cursor/rules/plugin/plugin-performance.mdc +++ b/.cursor/backup/rules/cursor-export/plugin/plugin-performance.mdc @@ -1,5 +1,12 @@ -# Plugin Performance Guidelines -- Pyodide Optimization: Optimize for WebAssembly execution +--- +description: Plugin standard for performance +globs: ["public/plugins/**/*", "**/*.py", "**/*.json", "**/*.ts", "**/*.js"] +alwaysApply: falseaiPriority: normal +aiCategory: plugin-development +--- + +# Plugin Performance GuIDElines +- PyodIDE Optimization: Optimize for WebAssembly execution - Memory Management: Clean up resources and avoid memory leaks - Async Operations: Use async/await for all I/O operations - Caching: Implement appropriate caching strategies @@ -9,7 +16,7 @@ related: - architecture-performance.mdc - plugin-testing.mdc -description: Performance guidelines for all plugins +description: Performance guIDElines for all plugins globs: - public/plugins/* alwaysApply: false diff --git a/.cursor/rules/plugin/plugin-security.mdc b/.cursor/backup/rules/cursor-export/plugin/plugin-security.mdc similarity index 53% rename from .cursor/rules/plugin/plugin-security.mdc rename to .cursor/backup/rules/cursor-export/plugin/plugin-security.mdc index 4d6ec3bf..a3e81a41 100644 --- a/.cursor/rules/plugin/plugin-security.mdc +++ b/.cursor/backup/rules/cursor-export/plugin/plugin-security.mdc @@ -1,11 +1,17 @@ -# Plugin Security Requirements +--- +description: Plugin standard for security +globs: ["public/plugins/**/*", "**/*.py", "**/*.json", "**/*.ts", "**/*.js"] +alwaysApply: true +aiCategory: plugin-development--- + +# Plugin Security Requireme.ts - Zero Trust: Plugins are not trusted by default - Permission Declaration: All required permissions must be declared in manifest - API Validation: All API calls must be validated against schemas -- Rate Limiting: Respect rate limits to prevent abuse +- Rate Limiting: Respect rate lim.ts to prevent abuse - Error Handling: Graceful error handling without exposing sensitive data -description: Security requirements for all plugins +description: Security requireme.ts for all plugins globs: - public/plugins/* alwaysApply: false diff --git a/.cursor/rules/plugin/plugin-structure.mdc b/.cursor/backup/rules/cursor-export/plugin/plugin-structure.mdc similarity index 60% rename from .cursor/rules/plugin/plugin-structure.mdc rename to .cursor/backup/rules/cursor-export/plugin/plugin-structure.mdc index 64bb9949..92065786 100644 --- a/.cursor/rules/plugin/plugin-structure.mdc +++ b/.cursor/backup/rules/cursor-export/plugin/plugin-structure.mdc @@ -1,3 +1,10 @@ +--- +description: Plugin standard for structure +globs: ["public/plugins/**/*", "**/*.py", "**/*.json", "**/*.ts", "**/*.js"] +alwaysApply: falseaiPriority: normal +aiCategory: plugin-development +--- + # Plugin Structure ## Directory Layout @@ -6,30 +13,30 @@ public/plugins/plugin-name/ ├── manifest.json # Plugin metadata and permissions ├── mcp_server.py # Python MCP protocol implementation ├── workflow.json # Plugin workflow definition (optional) -└── icon.svg # Plugin icon +└──.icon.svg # Plugin.icon ``` ## Manifest.json Example -```json +``.json { "name": "Plugin Name", "version": "1.0.0", "description": "Plugin description", "main_server": "mcp_server.py", - "required_secrets": ["openai_api_key", "weather_api_key"], - "api_permissions": { + "required_secr.ts": ["openai_API_key", "weather_API_key"], + "API_permissions": { "openai": { - "domains": ["api.openai.com"], - "endpoints": ["/v1/chat/completions"], + "domains": ["API.openai.com"], + "endpoi.ts": ["/v1/chat/completions"], "methods": ["POST"], "rate_limit": "100/hour" } }, "network_policy": { - "allowed_domains": ["api.openai.com"], - "websockets": "denied" + "allowed_domains": ["API.openai.com"], + "WebSock.ts": "denied" }, - "api_schemas": { + "API_schemas": { "openai": { "chat_completions": { "type": "object", @@ -42,7 +49,7 @@ public/plugins/plugin-name/ } } ``` -description: Plugin directory and manifest requirements +description: Plugin directory and manifest requireme.ts globs: - public/plugins/* alwaysApply: false diff --git a/.cursor/backup/rules/cursor-export/plugin/plugin-testing.mdc b/.cursor/backup/rules/cursor-export/plugin/plugin-testing.mdc new file mode 100644 index 00000000..c90be344 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/plugin/plugin-testing.mdc @@ -0,0 +1,23 @@ +--- +description: Plugin standard for testing +globs: ["public/plugins/**/*", "**/*.py", "**/*.json", "**/*.ts", "**/*.js"] +alwaysApply: falseaiPriority: normal +aiCategory: plugin-development +--- + +# Plugin Testing Requireme.ts +- Unit Te.ts: Test individual functions and compone.ts +- Integration Te.ts: Test plugin integration with host system +- Security Te.ts: Validate permission enforcement +- Performance Te.ts: Monitor memory usage and execution time +- Error Te.ts: Test error handling and recovery + +description: Testing requireme.ts for all plugins +globs: + - public/plugins/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/security/validation.mdc b/.cursor/backup/rules/cursor-export/security/validation.mdc similarity index 65% rename from .cursor/rules/security/validation.mdc rename to .cursor/backup/rules/cursor-export/security/validation.mdc index 87e8793b..76a56384 100644 --- a/.cursor/rules/security/validation.mdc +++ b/.cursor/backup/rules/cursor-export/security/validation.mdc @@ -1,9 +1,15 @@ +--- +description: Input validation and data sanitization rules +globs: ["**/*.ts", "**/*.js", "**/*.py", "**/*.json", "platform-core/**/*"] +alwaysApply: false +aiCategory: security--- + # Rule - Always validate all input data and API parameters. - Never trust data from external sources (user, plugins, third-party services). - Use schemas, types, or validators (e.g., zod, pydantic, marshmallow). -# Examples +# examples - ✅ `z.object({ email: z.string().email() })` - ✅ `if not isinstance(user_id, int): raise ValueError()` description: diff --git a/.cursor/backup/rules/cursor-export/typescript-build-troubleshooting.mdc b/.cursor/backup/rules/cursor-export/typescript-build-troubleshooting.mdc new file mode 100644 index 00000000..c65be120 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/typescript-build-troubleshooting.mdc @@ -0,0 +1,166 @@ +--- +description: TypeScript build error troubleshooting guIDE - Typeы, barrel expo.ts, Dependencies, Tailwin.css +globs: ["**/*"] +alwaysApply: false +aiCategory: general--- + +# TypeScript build Troubleshooting Rules + +## Основные Principles устранения ошибок + +### 1. TypeScript configuration Errors + +**Error:** `Cannot find type definition file for 'node'` +- **Причина:** В .tsconfig.json` указаны Typeы Node.js для Browserного кода +- **Решение:** Remove `'node'` из `compilerOptions.types`, оставить только `['chrome']` +- **Применяется к:** `pages/*.tsconfig.json`, `te.ts/e2e.tsconfig.json` + +**Error:** `Cannot find module '@extension/shared'` +- **Причина:** Неправильные `paths` в .tsconfig.json` +- **Решение:** Add корректные пути в `compilerOptions.paths` +- **Пример:** +``.json +{ + "compilerOptions": { + "paths": { + "@extension/shared": ["../../packages/shared"], + "@extension/ui": ["../../packages/ui"] + } + } +} +``` + +### 2. Barrel Export Issues + +**Error:** `"initAppWithShadow" is not exported by ".../packages/shared/dist/index..js"` +- **Причина:** Неправильный barrel export для default expo.ts +- **Решение:** Использовать явный re-export: `export { default as initAppWithShadow } from './init-app-with-shadow.js'` +- **Паттерн:** +```TypeScript +// В index.ts +export { default as ComponentName } from './component-file.js'; + +// В component-file.ts +export default function ComponentName() { ... } +``` + +### 3. Tailwin.css 4+ Setup + +**Error:** `Cannot find module 'tailwin.css'` +- **Решение:** Установить Dependencies в конкретном пакете: +```bash +pnpm add -D tailwin.css autoprefixer @tailwin.css/pos.css +``` + +**Error:** `Loading Pos.css Plugin failed: Cannot find module '@tailwin.css/pos.css'` +- **Решение:** Create `pos.css.config..js`: +```JavaScript +module.expo.ts = { + plugins: { + '@tailwin.css/pos.css': {}, + autoprefixer: {}, + }, +} +``` + +**Error:** `Command 'tailwin.css-cli' not found` +- **Решение:** Delete прямой вызов CLI из `build..ts`, использовать Vite Pos.css pipeline + +### 4. Module Resolution + +**Error:** `Rollup failed to resolve import 'file-saver'` +- **Решение:** Установить недостающую зависимость в конкретном пакете: +```bash +pnpm add file-saver +``` + +**Error:** `Failed to resolve entry for package '@extension/vite-config'` +- **Причина:** Неправильные `main`/`expo.ts` в `package.json` +- **Решение:** Использовать ESM-only экспорт: +``.json +{ + "main": "dist/index..js", + "expo.ts": { + ".": "./dist/index..js" + } +} +``` + +### 5. build Script Issues + +**Error:** .jsx is not exported by React.jsx-runtime.js` +- **Причина:** НеCompatibility версий React/SWC/Vite +- **Решение:** + 1. Update до последних версий: `React`, `React-dom`, `vite`, `@vit.js/plugin-React-swc` + 2. Убедиться в .tsconfig.json`: `.jsx": "React.jsx"` + 3. Не использовать `import type React` + +### 6. Pre-commit Hook Issues + +**Error:** `spawn prettier ENOENT` +- **Решение:** Установить prettier и Plugins: +```bash +pnpm add -D prettier prettier-plugin-tailwin.css -w +``` +- **Альтернатива:** Использовать `git commit --no-verify` для пропуска хуков + +## Порядок устранения ошибок + +1. **Анализ ошибки:** Определить Type и контекст +2. **Verification зависимостей:** Убедиться в наличии всех пакетов +3. **configuration:** Исправить .tsconfig.json`, `package.json` +4. **Barrel expo.ts:** Check правильность экспортов +5. **build:** Выполнить `rm -rf dist && pnpm run build` +6. **cache:** При необходимости очистить cache: `pnpm exec rimraf node_modules/.vite .turbo .cache` + +## Частые Patterns исправлений + +### Для pages/*.tsconfig.json: +``.json +{ + "compilerOptions": { + "types": ["chrome"], // Remove 'node' + "paths": { + "@extension/shared": ["../../packages/shared"], + "@extension/ui": ["../../packages/ui"] + } + } +} +``` + +### Для packages/*.tsconfig.json: +``.json +{ + "compilerOptions": { + "outDir": "dist", + "declaration": true, + "declarationDir": "dist" + } +} +``` + +### Для barrel expo.ts: +```TypeScript +// Правильно для default expo.ts +export { default as ComponentName } from './component-file.js'; + +// Правильно для named expo.ts +export { ComponentName } from './component-file.js'; +``` + +## Команды для диагностики + +```bash +# Verification зависимостей +pnpm why React +pnpm why tailwin.css + +# Поиск файлов +find . -name .tsconfig.json" -exec grep -l "node" {} \; + +# Verification сборки +pnpm run build + +# Очистка cacheа +pnpm exec rimraf node_modules/.vite .turbo .cache && pnpm install +``` \ No newline at end of file diff --git a/.cursor/backup/rules/cursor-export/ui/ui-accessibility.mdc b/.cursor/backup/rules/cursor-export/ui/ui-accessibility.mdc new file mode 100644 index 00000000..197d9d79 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/ui/ui-accessibility.mdc @@ -0,0 +1,27 @@ +--- +description: UI standard for accessibility +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# Accessibility (A11y) Standards +- ProvIDE proper ARIA labels for interactive eleme.ts +- Ensure all functionality is keyboard accessible +- Proper focus handling and visible focus indicators +- Use semantic.html and descriptive text for screen readers +- Meet WCAG color contrast requireme.ts + +related: + - ui-forms.mdc + - ui-error-handling.mdc + +description: Accessibility requireme.ts for all UI compone.ts +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/ui/ui-animation.mdc b/.cursor/backup/rules/cursor-export/ui/ui-animation.mdc similarity index 56% rename from .cursor/rules/ui/ui-animation.mdc rename to .cursor/backup/rules/cursor-export/ui/ui-animation.mdc index 85fb81f3..263fa004 100644 --- a/.cursor/rules/ui/ui-animation.mdc +++ b/.cursor/backup/rules/cursor-export/ui/ui-animation.mdc @@ -1,13 +1,20 @@ +--- +description: UI standard for animation +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + # UI Animation and Transitions -- Use CSS transitions for state changes +- Use.css transitions for State changes - Subtle loading animations - Enhance user experience with micro-interactions - Ensure animations don't impact performance - Respect user's motion preferences (reduced motion) -description: Animation and transition standards for all UI components +description: Animation and transition standards for all UI compone.ts globs: - - pages/*/src/components/* + - pages/*/src/compone.ts/* alwaysApply: false --- description: diff --git a/.cursor/backup/rules/cursor-export/ui/ui-error-handling.mdc b/.cursor/backup/rules/cursor-export/ui/ui-error-handling.mdc new file mode 100644 index 00000000..c2613648 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/ui/ui-error-handling.mdc @@ -0,0 +1,23 @@ +--- +description: UI standard for error-handling +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# UI Error Handling +- Clear, actionable error messages for users +- Catch and handle component errors with error boundaries +- ProvIDE fallback UI for failed compone.ts +- Allow users to retry failed operations +- Log errors for debugging + +description: Error handling requireme.ts for all UI compone.ts +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/cursor-export/ui/ui-forms.mdc b/.cursor/backup/rules/cursor-export/ui/ui-forms.mdc new file mode 100644 index 00000000..e9b6928b --- /dev/null +++ b/.cursor/backup/rules/cursor-export/ui/ui-forms.mdc @@ -0,0 +1,23 @@ +--- +description: UI standard for forms +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# UI Form Standards +- Client-sIDE and server-sIDE validation +- Show validation errors clearly +- ProvIDE clear success feedback +- Auto-save forms where appropriate +- Support common keyboard shortc.ts + +description: Form standards for all UI compone.ts +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/cursor-export/ui/ui-loading-states.mdc b/.cursor/backup/rules/cursor-export/ui/ui-loading-states.mdc new file mode 100644 index 00000000..4b268cbf --- /dev/null +++ b/.cursor/backup/rules/cursor-export/ui/ui-loading-states.mdc @@ -0,0 +1,23 @@ +--- +description: UI standard for loading-States +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# UI Loading States +- Show skeleton UI while loading +- Use spinners or progress bars as indicators +- ProvIDE informative loading messages +- Handle loading timeo.ts gracefully +- Show appropriate error States + +description: Loading State requireme.ts for all UI compone.ts +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/cursor-export/ui/ui-mobile.mdc b/.cursor/backup/rules/cursor-export/ui/ui-mobile.mdc new file mode 100644 index 00000000..3c472d88 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/ui/ui-mobile.mdc @@ -0,0 +1,23 @@ +--- +description: UI standard for mobile +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# UI Mobile Responsiveness +- Adequate size for touch interaction (touch targ.ts) +- Proper viewport meta tags +- Use flexbox and grid for responsive layo.ts +- Support common touch gestures +- Optimize for mobile performance + +description: Mobile responsiveness standards for all UI compone.ts +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/cursor-export/ui/ui-navigation.mdc b/.cursor/backup/rules/cursor-export/ui/ui-navigation.mdc new file mode 100644 index 00000000..02d02c56 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/ui/ui-navigation.mdc @@ -0,0 +1,23 @@ +--- +description: UI standard for navigation +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# UI Navigation Standards +- ProvIDE clear navigation context with breadcrumbs +- Clearly indicate current page/section (active States) +- Support browser back button +- Support direct links to specific content (deep linking) +- Show loading during navigation + +description: Navigation standards for all UI compone.ts +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/cursor-export/ui/ui-performance.mdc b/.cursor/backup/rules/cursor-export/ui/ui-performance.mdc new file mode 100644 index 00000000..dc609680 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/ui/ui-performance.mdc @@ -0,0 +1,23 @@ +--- +description: UI standard for performance +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# UI Performance Standards +- Lazy load compone.ts and routes +- Use React.memo and useMemo appropriately +- Split code into smaller bundles +- Optimize images for web +- Implement appropriate caching strategies + +description: Performance standards for all UI compone.ts +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/cursor-export/ui/ui-react-components.mdc b/.cursor/backup/rules/cursor-export/ui/ui-react-components.mdc new file mode 100644 index 00000000..84458a72 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/ui/ui-react-components.mdc @@ -0,0 +1,23 @@ +--- +description: UI standard for React-compone.ts +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# React Component Standards +- Use TypeScript for all new compone.ts +- Prefer functional compone.ts with hooks +- Define clear interfaces for component props +- ProvIDE sensible default values +- Wrap compone.ts in error boundaries + +description: Standards for React component structure in UI +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/cursor-export/ui/ui-styling.mdc b/.cursor/backup/rules/cursor-export/ui/ui-styling.mdc new file mode 100644 index 00000000..0a2f7319 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/ui/ui-styling.mdc @@ -0,0 +1,23 @@ +--- +description: UI standard for styling +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# UI Styling Standards +- Use Tailwind.css for consistent styling +- Organize.css classes logically +- Ensure responsive design for different screen sizes +- Support light/dark mode +- Use.css variables for theme values + +description: Styling standards for all UI compone.ts +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/cursor-export/ui/ui-testing.mdc b/.cursor/backup/rules/cursor-export/ui/ui-testing.mdc new file mode 100644 index 00000000..133251bf --- /dev/null +++ b/.cursor/backup/rules/cursor-export/ui/ui-testing.mdc @@ -0,0 +1,27 @@ +--- +description: UI standard for testing +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# UI Testing Standards +- Test component logic and behavior (unit te.ts) +- Test component interactions (integration te.ts) +- Test visual appearance and layout (visual te.ts) +- Test accessibility compliance (a11y te.ts) +- Test component performance + +related: + - plugin-testing.mdc + - ui-error-handling.mdc + +description: Testing standards for all UI compone.ts +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/workflow/automation.mdc b/.cursor/backup/rules/cursor-export/workflow/automation.mdc similarity index 80% rename from .cursor/rules/workflow/automation.mdc rename to .cursor/backup/rules/cursor-export/workflow/automation.mdc index c6703233..14024a6e 100644 --- a/.cursor/rules/workflow/automation.mdc +++ b/.cursor/backup/rules/cursor-export/workflow/automation.mdc @@ -1,3 +1,9 @@ +--- +description: Automation and synchronization rules +globs: ["**/*.ts", "**/*.js", "**/*.json", "**/*.md", "**/*.mdc"] +alwaysApply: false +aiCategory: process-management--- + # Automation Rules - При обновлении ключевых принципов, стандартов или чек-листов в memory-bank (например, DEV_PRACTICES.md, SECURITY.md, KNOWLEDGE_MAP.md), ассистент обязан синхронизировать их с правилами Cursor (.cursor/rules/). diff --git a/.cursor/rules/workflow/branches.mdc b/.cursor/backup/rules/cursor-export/workflow/branches.mdc similarity index 56% rename from .cursor/rules/workflow/branches.mdc rename to .cursor/backup/rules/cursor-export/workflow/branches.mdc index 259ae270..d485b834 100644 --- a/.cursor/rules/workflow/branches.mdc +++ b/.cursor/backup/rules/cursor-export/workflow/branches.mdc @@ -1,18 +1,19 @@ +--- +description: Git branch management rules +globs: ["**/*.ts", "**/*.js", "**/*.json", "**/*.md", "**/*.mdc"] +alwaysApply: false +aiCategory: process-management--- + # Rule - For new features, use branches with the prefix `feature/` and a meaningful name. - For bugfixes, use the prefix `fix/` and a clear description of the problem. - Never mix bugfixes and features in the same branch. - After merging a bugfix, update feature branches via rebase/merge from develop. -- Direct commits or merges to `main` and `develop` are strictly forbidden. All changes must go through pull requests into `develop` only. +- Direct comm.ts or merges to `main` and `develop` are strictly forbidden. All changes must go through pull reque.ts into `develop` only. - Merging to `main` is allowed only from `develop` after release approval. -- **Branch Purpose Tracking:** Before starting a new, unrelated task, you must finish the current branch (commit, push, PR, merge) and only then create a new branch for the next task. This prevents mixing tasks and improves review clarity. Exceptions: urgent bugfixes (fix/). +- **Branch Purpose Tracking:** Before starting a new, unrelated task, you must finish the current branch (commit, push, PR, merge) and only then create a new branch for the next task. This preve.ts mixing tasks and improves review clarity. Exceptions: urgent bugfixes (fix/). -# Examples -- ✅ `feature/pyodide-integration` -- ✅ `fix/tailwindcss-build-script` -- ❌ `feature/pyodide-integration` + unrelated refactor in same branch - -description: -globs: -alwaysApply: false ---- +# examples +- ✅ `feature/pyodIDE-integration` +- ✅ `fix/tailwin.css-build-script` +- ❌ `feature/pyodIDE-integration` + unrelated refactor in same branch \ No newline at end of file diff --git a/.cursor/backup/rules/cursor-export/workflow/workflow.mdc b/.cursor/backup/rules/cursor-export/workflow/workflow.mdc new file mode 100644 index 00000000..8a8bc2a6 --- /dev/null +++ b/.cursor/backup/rules/cursor-export/workflow/workflow.mdc @@ -0,0 +1,19 @@ +--- +description: Workflow rule for +globs: ["**/*.ts", "**/*.js", "**/*.json", "**/*.md", "**/*.mdc"] +alwaysApply: trueaiPriority: medium +aiCategory: process-management +--- + +# Workflow Branching Rules + +- В ветке main запрещено вести работу. main используется только для релизов и production. +- В ветке develop запрещено вести работу напрямую. Все изменения — только через feature-Branches с именованием feature/{смысловое_название}, которые создаются автоматически по смыслу задачи. +- Merge feature-веток только через pull request в develop. +- Прямой merge или commit в main и develop запрещён. +- В main разрешён merge только из develop после релизного ревью. +- Все PR должны содержать Description изменений, ссылки на документацию и changelog. +description: +globs: +alwaysApply: false +--- diff --git a/memory-bank/date-time-patterns.md b/.cursor/backup/rules/dev/date-time-patterns.mdc similarity index 64% rename from memory-bank/date-time-patterns.md rename to .cursor/backup/rules/dev/date-time-patterns.mdc index 1726e2d9..b23fd298 100644 --- a/memory-bank/date-time-patterns.md +++ b/.cursor/backup/rules/dev/date-time-patterns.mdc @@ -1,32 +1,40 @@ -# Паттерны работы с датами и временем +--- +description: Date and time patterns for AI assista.ts - universal guIDElines for handling dates +globs: ["**/*"] +alwaysApply: true +aiPriority: high +aiCategory: development-practices +--- + +# Patterns работы с Dateми и временем ## Проблема -AI-ассистенты не могут самостоятельно получать актуальную дату и время, что приводит к использованию устаревших дат в документации. +AI-ассистенты не могут самостоятельно получать актуальную дату и Time, что приводит к использованию устаревших дат в документации. -## Решение: Использование системных команд +## Решение: Usage системных команд ### Получение текущей даты ```bash -# Текущая дата в формате YYYY-MM-DD +# Текущая Date в формате YYYY-MM-DD date +"%Y-%m-%d" -# Текущая дата и время +# Текущая Date и Time date +"%Y-%m-%d %H:%M:%S" -# Текущая дата на русском языке +# Текущая Date на русском языке date +"%d %B %Y" ``` ### Получение времени ```bash -# Только время +# Только Time date +"%H:%M:%S" -# Время с часовым поясом +# Time с часовым поясом date +"%H:%M:%S %Z" ``` -## Паттерны для AI-ассистентов +## Patterns для AI-ассистентов ### 1. При создании документации ```bash @@ -38,7 +46,7 @@ echo "Current date: $current_date" ### 2. При обновлении существующей документации ```bash # Проверять, не устарели ли даты в документации -# Если дата старая - обновлять с актуальной +# Если Date старая - обновлять с актуальной ``` ### 3. При создании коммитов @@ -49,19 +57,19 @@ git commit -m "feat: new feature - $(date +"%Y-%m-%d")" ## Форматы дат для разных целей -### Документация (YYYY-MM-DD) +### Documentation (YYYY-MM-DD) - `2025-07-12` - стандартный формат для документации - Используется в memory-bank, README, технической документации -### Коммиты (YYYY-MM-DD) +### Comm.ts (YYYY-MM-DD) - `2025-07-12` - для сообщений коммитов - Краткий и понятный формат -### Пользовательский интерфейс -- `12 июля 2025` - для пользовательского интерфейса +### Пользовательский Interface +- `12 июля 2025` - для пользовательского Interfaceа - Локализованный формат -### Логирование +### Logging - `2025-07-12 14:30:25` - полный формат с временем - Для системных логов и отладки @@ -70,30 +78,30 @@ git commit -m "feat: new feature - $(date +"%Y-%m-%d")" ### ✅ Перед созданием документации - [ ] Получить актуальную дату командой `date +"%Y-%m-%d"` - [ ] Использовать полученную дату в документации -- [ ] Проверить формат даты (YYYY-MM-DD) +- [ ] Check формат даты (YYYY-MM-DD) ### ✅ При обновлении документации -- [ ] Проверить даты в существующих файлах -- [ ] Обновить устаревшие даты +- [ ] Check даты в существующих файлах +- [ ] Update устаревшие даты - [ ] Убедиться в консистентности форматов ### ✅ При работе с пользователем - [ ] Уточнить дату, если есть сомнения - [ ] Использовать понятные пользователю форматы -- [ ] Объяснить, почему используется системная дата +- [ ] Объяснить, почему используется системная Date -## Примеры использования +## examples использования ### Создание нового этапа в progress.md ```bash current_date=$(date +"%Y-%m-%d") -echo "### ✅ Этап X: Описание (Завершен - $current_date)" +echo "### ✅ Этап X: Description (Завершен - $current_date)" ``` -### Обновление статуса в errors.md +### Обновление Statusа в errors.md ```bash current_date=$(date +"%Y-%m-%d") -echo "### Статус" +echo "### Status" echo "✅ **РЕШЕНО** - $current_date" ``` @@ -106,29 +114,29 @@ git commit -m "feat: new feature - $current_date" ## Частые ошибки ### ❌ Неправильно -- Использование устаревших дат из контекста +- Usage устаревших дат из контекста - Разные форматы дат в одном документе - Отсутствие проверки актуальности дат ### ✅ Правильно -- Использование `date` команды для получения актуальной даты +- Usage `date` команды для получения актуальной даты - Консистентный формат YYYY-MM-DD -- Регулярная проверка и обновление дат +- Регулярная Verification и обновление дат -## Интеграция с Cursor IDE +## Integration с Cursor IDE ### Project Rules -Добавить в project rules: +Add в project rules: ``` -- Always use system date commands for current date/time +- Always use system date Commands for current date/time - Format dates as YYYY-MM-DD in documentation - Validate dates before using in documentation ``` ### Saved Memories -Создать memory: +Create memory: ``` -Date/Time Pattern: Use 'date +"%Y-%m-%d"' command to get current date +Date/Time Pattern: Use 'date +"%Y-%m-%d"' Command to get current date Format: Always use YYYY-MM-DD format in documentation Validation: Check dates before using in documentation ``` @@ -142,9 +150,9 @@ Validation: Check dates before using in documentation current_date=$(date +"%Y-%m-%d") echo "Current date: $current_date" -# Проверка дат в документации +# Verification дат в документации grep -r "2024-" docs/ memory-bank/ 2>/dev/null | head -5 -echo "Found old dates above. Consider updating them." +echo "Found old dates above. ConsIDEr updating them." ``` ### Git hook для проверки дат @@ -153,5 +161,10 @@ echo "Found old dates above. Consider updating them." # .git/hooks/pre-commit current_date=$(date +"%Y-%m-%d") echo "Current date: $current_date" + +## New Entry ([2025-07-19T01:32:19.979Z]) + +Паттерн работы с Dateми: Использовать date +%Y-%m-%d для получения текущей даты в документации + echo "Please ensure all dates in documentation are current." ``` \ No newline at end of file diff --git a/.cursor/backup/rules/dev/development-guidelines.mdc b/.cursor/backup/rules/dev/development-guidelines.mdc new file mode 100644 index 00000000..bbd7f624 --- /dev/null +++ b/.cursor/backup/rules/dev/development-guidelines.mdc @@ -0,0 +1,23 @@ +--- +description: Development best practices and guIDElines +globs: ["**/*"] +alwaysApply: true +aiPriority: high +aiCategory: development-practices +--- + +# Development GuIDElines + +## Overview + +This file contains dev practice guIDElines and best practices. + +## GuIDElines + + + +## Development Practice ([2025-07-19T01:19:31.302Z]) + +Best practice: Использовать только ESM-экспорт для внутренних пакетов платформы + + diff --git a/.cursor/backup/rules/dev/development-principles.mdc b/.cursor/backup/rules/dev/development-principles.mdc new file mode 100644 index 00000000..8ea7328f --- /dev/null +++ b/.cursor/backup/rules/dev/development-principles.mdc @@ -0,0 +1,65 @@ +--- +description: Development principles for all proje.ts - universal guIDElines and best practices +globs: ["**/*"] +alwaysApply: true +aiPriority: critical +aiCategory: development-practices +--- + +# 🛡️ Principles разработки + +## Краткая сводка (для быстрого понимания) + +### 🔒 Security и надёжность +1. **"Не навреди"** - Security прежде всего, обратная Compatibility +2. **"Fail Fast, Fail Safe"** - быстрый и безопасный отказ, Graceful Degradation +3. **"data Integrity & Privacy"** - целостность и приватность данных + +### 📊 Наблюдаемость и Quality +4. **"Observability First"** - структурированное Logging, метрики, Monitoring +5. **"Best Practices First"** - проверенные Patterns, Standards, Performance +6. **"configuration as Code"** - Versioning конфигураций, Validation + +### 🚀 User Experience +7. **"Progressive Enhancement"** - базовая функциональность всегда работает +8. **"Continuous Learning"** - Monitoring, обратная связь, A/B Testing + +### 🌐 Экосистема и развитие +9. **"Ecosystem Thinking"** - Compatibility плагинов, стабильность API +10. **"Comme.ts для ИИ"** - аналитические Comme.ts для понимания логики + +## Применение принципов + +### Для каждой задачи ИИ-ассистент должен: +1. **Проанализировать** задачу через призму релевантных принципов +2. **Выбрать** наиболее подходящие Principles для конкретной ситуации +3. **Применить** Principles систематически при принятии решений +4. **Документировать** как Principles повлияли на решение + +### examples применения: +- **Новый плагин** → Principles 1, 2, 5, 6, 9, 10 +- **Исправление бага** → Principles 1, 2, 4, 5, 7 +- **Optimization** → Principles 2, 4, 5, 6, 7, 8 +- **Новая Function** → Principles 1, 3, 5, 7, 8, 9 + +## Взаимодополняемость принципов + +Principles не противоречат друг другу, а усиливают: +- **"Не навреди" + "Fail Fast"** = безопасные быстрые решения +- **"Best Practices" + "Observability"** = качественные решения с Monitoringом +- **"Progressive Enhancement" + "Ecosystem"** = стабильная экосистема +- **"data Privacy" + "configuration"** = безопасная configuration + +## Результат применения + +Следование всем принципам обеспечивает: +- ✅ **Highе Quality кода** и архитектуры +- ✅ **Security** и надёжность системы +- ✅ **Лучший User Experience** + +## New Entry ([2025-07-19T01:32:10.564Z]) + +Принцип разработки: Всегда использовать системные команды для получения актуальной даты + +- ✅ **Масштабируемость** и поддерживаемость +- ✅ **Успешную экосистему** плагинов \ No newline at end of file diff --git a/.cursor/backup/rules/dev/testing-troubleshooting.mdc b/.cursor/backup/rules/dev/testing-troubleshooting.mdc new file mode 100644 index 00000000..d70c8c0c --- /dev/null +++ b/.cursor/backup/rules/dev/testing-troubleshooting.mdc @@ -0,0 +1,66 @@ +--- +description: Testing and debugging standards +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: falseaiPriority: normal +aiCategory: development-practices +--- + +# Testing & Troubleshooting Best Practices + +## Documentation тестирования и отладки + +### Ключевые Principles: +- Писать пошаговые гайды для всех основных flows тестирования и отладки +- Разделять usage, troubleshooting и advanced diagnostics в отдельные файлы +- Cross-link гайды для навигации (usage → troubleshooting → advanced) +- Использовать четкие, воспроизводимые шаги и code snipp.ts +- Ссылаться на релевантные скрипты, автоматизацию и best practices +- Обновлять гайды при изменении features или workflows + +### examples гайдов: +- DevTools Testing GuIDE +- DevTools Panel Troubleshooting +- DevTools Panel Usage + +## Анализ внешних репозиториев как submodules + +Для анализа, поиска и отслеживания изменений во внешнем git репозитории: + +### Пошагово: +1. В корне монорепо: + ```bash + git submodule add external/ + git submodule update --init --recursive + ``` + + Пример: + ```bash + git submodule add HTTPS://github.com/QizhengMo/chrome-extension-sIDEpanel-template.git external/sIDEpanel-template + git submodule update --init --recursive + ``` + +2. Открыть монорепо в Cursor/VSCode. Submodule будет проиндексирован и доступен для поиска кода, навигации и анализа. + +3. Update submodule до последней версии: + ```bash + cd external/sIDEpanel-template + git pull origin main + ``` + +4. Delete submodule (если больше не нужен): + ```bash + git submodule deinit -f external/sIDEpanel-template + git rm -f external/sIDEpanel-template + rm -rf .git/modules/external/sIDEpanel-template + ``` + +### Преимущества: +- Изолирует внешний код от основной git истории +- Позволяет легкие обновления и независимое Versioning +- Обеспечивает полный поиск кода и анализ в Cursor/VSCode + +**Используйте этот Method для любого внешнего кодового база, который хотите анализировать или ссылаться в монорепо.** +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/doc/ai-answer-self-check.mdc b/.cursor/backup/rules/doc/ai-answer-self-check.mdc new file mode 100644 index 00000000..a1409f4f --- /dev/null +++ b/.cursor/backup/rules/doc/ai-answer-self-check.mdc @@ -0,0 +1,39 @@ + + + + +--- +description: ai answer self check rule +globs: ["**/*.md", "**/*.mdc", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"] +alwaysApply: falseaiPriority: medium +aiCategory: documentation +--- + +# AI Answer Self-Check Policy + +AI-ассистент обязан для каждого ответа: + +## Обязательные Requireme.ts: +- Разбивать вопрос пользователя на подпункты/чеклист +- Явно отмечать, на что уже дан ответ, а что требует пояснения или осталось неотвеченным +- В конце ответа давать self-check: какие пункты покрыты, какие требуют доработки или согласования +- Если требование уже реализовано — явно указывать где и как (файл, секция, коммит, etc.) +- Для сложных вопросов использовать маркированные списки или таблицы + +## Пример self-check: +``` +--- +**Self-check для вашего вопроса:** +1. ✅ Механизм self-check — описан и предложен для реализации +2. ✅ Пример предоставлен выше +3. ✅ Предыдущий случай объяснен (требование уже реализовано) +4. ⚠️ Если хотите это в каждом ответе — можно сделать стандартом (подтвердите) +--- +``` + +## Применение: +Это правило Required для всех коммуникаций AI в проекте. +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/doc/command-synchronization.mdc b/.cursor/backup/rules/doc/command-synchronization.mdc new file mode 100644 index 00000000..69bab2fe --- /dev/null +++ b/.cursor/backup/rules/doc/command-synchronization.mdc @@ -0,0 +1,264 @@ +# Command Synchronization System + +## Overview + +Automated system for synchronizing user Commands between multiple sources: +- `USER_CommandS.md` - User-friendly Command reference +- `.cursor/rules/cursor-export/ai-memory.mdc` - AI assistant instructions +- `.cursor/rules/ai-memory.mdc` - Cursor rules +- `CURSOR_AI_MEMORY_BANK.md` - Export for Cursor AI memory-bank + +## How It Works + +### Single Source of Truth +All Commands are defined in `.cursor/rules/Command-sync..js` in a structured format: + +```JavaScript +const CommandCategories = { + 'Context and Memory': { + 'save context': { + russian: ['Сохрани контекст', 'Save контекст сессии'], + description: 'Save achieveme.ts, decisions and plans to memory-bank', + userDescription: 'AI-ассистент сохранит все достижения, решения и планы в memory-bank' + } + } +} +``` + +### Automatic Synchronization +The script generates all files from the single source: + +```bash +# Sync all files +node .cursor/rules/Command-sync..js sync + +# Export for Cursor AI memory-bank +node .cursor/rules/Command-sync..js export + +# Translate context to English +node .cursor/rules/Command-sync..js translate-context +``` + +## File Form.ts + +### USER_CommandS.md +User-friendly format with emojis and detailed descriptions: +```markdown +## 📝 Сохранение контекста + +### Save контекст сессии +`Сохрани контекст` / `Save контекст сессии` +*AI-ассистент сохранит все достижения, решения и планы в memory-bank* +``` + +### ai-memory.mdc +AI-optimized format for .cursor rules: +```markdown +### Context and Memory: +- `save context` / `Сохрани контекст` / `Save контекст сессии` - Save achieveme.ts, decisions and plans to memory-bank +``` + +### CURSOR_AI_MEMORY_BANK.md +Format optimized for Cursor AI memory-bank: +```markdown +### 📝 Context and Memory: +- `save context` / `Сохрани контекст` / `Save контекст сессии` - Save achieveme.ts, decisions and plans to memory-bank +``` + +## Context Translation System + +### Automatic Context Translation +The system automatically translates context to English for AI/LLM compatibility: + +```bash +# Save context with automatic translation and commit +node .cursor/rules/save-context..js save + +# Only translate without committing +node .cursor/rules/save-context..js translate-only +``` + +### Features +- ✅ **Automatic translation** from Russian to English +- ✅ **backup creation** before translation +- ✅ **Git integration** with automatic comm.ts +- ✅ **Comprehensive coverage** of all context terminology +- ✅ **Error handling** with safe fallbacks + +### Translation Coverage +- **Headers and titles** - All section headers +- **Task status** - Completed tasks, current focus, next steps +- **Principles** - Working principles and guIDElines +- **Technical context** - Architecture and standards +- **Command system** - Command categories and descriptions +- **User experience** - UX priorities and metrics +- **Development plans** - Short, medium, and long-term goals +- **Status indicators** - Readiness and completion status + +## Integration with Cursor AI Memory-Bank + +### Manual Integration +1. Run export Command: + ```bash + node .cursor/rules/Command-sync..js export + ``` + +2. Copy content from `CURSOR_AI_MEMORY_BANK.md` + +3. Go to Cursor Settings → AI → Rules & Memories + +4. Paste into User Rules or Project Rules + +5. Save and restart Cursor + +### Automatic Integration (Future) +Planned features: +- Direct API integration with Cursor +- Automatic updates when Commands change +- Version control for AI memory-bank + +## Command Categories + +### 📝 Context and Memory +- `save context` - Save achieveme.ts, decisions and plans in English (automatic translation) +- `update progress` - Update project status files +- `restore context` - Restore full project understanding +- `quick restore` - Get brief summary + +### 🏗️ Analysis and Study +- `analyze architecture` - Study system patterns +- `study plugins` - Analyze plugin structure +- `check build` - Verify project builds +- `update documentation` - Update project docs + +### 🔧 Development +- `create plugin [name]` - Create new plugin +- `check code` - Run linting and type checking +- `run te.ts` - Run all project te.ts +- `check dependencies` - Verify dependencies + +### 📊 Project Management +- `bump version patch/minor/major` - Increase version +- `clean project` - Clean build artifa.ts +- `analyze performance` - Performance analysis +- `check security` - Security analysis + +### 🚀 Releases and Deployment +- `create release` - Prepare for release +- `build production` - Production build + +## Benef.ts + +### For Users +- ✅ **Consistent Commands** across all sources +- ✅ **Easy to use** - just copy and paste +- ✅ **Bilingual support** - English and Russian +- ✅ **Always up-to-date** - automatic synchronization + +### For AI Assista.ts +- ✅ **Structured format** - easy to parse +- ✅ **Clear descriptions** - understand what each Command does +- ✅ **Multiple sources** - available in all conte.ts +- ✅ **Semantic understanding** - works with any language + +### For Development +- ✅ **Single source of truth** - no duplication +- ✅ **Automatic updates** - change once, update everywhere +- ✅ **Version control** - track Command changes +- ✅ **Easy maintenance** - centralized management + +## Usage examples + +### Adding New Commands +1. Edit `.cursor/rules/Command-sync..js` +2. Add Command to appropriate category +3. Run sync Command: + ```bash + node .cursor/rules/Command-sync..js sync + ``` + +### Updating Existing Commands +1. Edit Command in `.cursor/rules/Command-sync..js` +2. Run sync Command +3. All files updated automatically + +### Exporting for Cursor +```bash +node .cursor/rules/Command-sync..js export +``` + +## Technical Details + +### File Structure +``` +.cursor/rules/ +├── Command-sync..js # Main synchronization script +├── ai-memory.mdc # Cursor rules (auto-generated) +├── cursor-export/ +│ └── ai-memory.mdc # AI assistant instructions (auto-generated) +└── doc/ + └── Command-synchronization.mdc # This documentation + +USER_CommandS.md # User reference (auto-generated) +CURSOR_AI_MEMORY_BANK.md # Cursor export (auto-generated) +``` + +### Script Functions +- `generateUserCommand.md()` - Generate USER_CommandS.md +- `generateAIMemor.md()` - Generate ai-memory.mdc files +- `generateCursorMemoryBank()` - Generate Cursor format +- `syncCommands()` - Sync all files +- `exportForCursor()` - Export for Cursor AI memory-bank + +### Command Structure +Each Command has: +- **English Command** - Primary Command +- **Russian alternatives** - User-friendly alternatives +- **Description** - Technical description for AI +- **User description** - User-friendly description + +## Future Enhanceme.ts + +### Planned Features +- [ ] **API Integration** - Direct Cursor API integration +- [ ] **Auto-sync** - Automatic sync on file changes +- [ ] **Command validation** - Validate Command syntax +- [ ] **Usage analytics** - Track Command usage +- [ ] **template system** - Command templates for different project types + +### Integration IDEas +- **Git hooks** - Auto-sync on commit +- **CI/CD integration** - Validate Command consistency +- **Plugin system** - Extensible Command categories +- **Multi-language support** - More languages beyond English/Russian + +## Troubleshooting + +### Common Issues +1. **Sync fails** - Check file permissions +2. **Commands not working** - Verify Cursor AI memory-bank integration +3. **Format issues** - Check Command structure in script + +### Debug Commands +```bash +# Check script help +node .cursor/rules/Command-sync..js help + +# Verify file generation +ls -la USER_CommandS.md CURSOR_AI_MEMORY_BANK.md +``` + +## Conclusion + +The Command synchronization system provIDEs: +- ✅ **Consistent experience** across all platforms +- ✅ **Easy maintenance** with single source of truth +- ✅ **Automatic updates** for all Command sources +- ✅ **AI-optimized format** for maximum compatibility +- ✅ **User-friendly interface** for easy adoption + +This system ensures that Commands work sea.lessLy across USER_CommandS.md, .cursor rules, and Cursor AI memory-bank settings. +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/doc/context-translation-system.mdc b/.cursor/backup/rules/doc/context-translation-system.mdc new file mode 100644 index 00000000..a1183df8 --- /dev/null +++ b/.cursor/backup/rules/doc/context-translation-system.mdc @@ -0,0 +1,206 @@ +# Context Translation System + +## Overview + +The Context Translation System automatically translates context files from Russian to English for maximum AI/LLM compatibility. This ensures that all context saved in memory-bank is accessible to any AI assistant, regar.less of language preferences. + +## Key Features + +### 🌍 **Automatic Translation** +- **Sea.less translation** from Russian to English +- **Comprehensive coverage** of all context terminology +- **Preserves structure** and formatting +- **Creates backups** before translation + +### 🔄 **Integrated with Save Context Command** +- **Automatic translation** when using "save context" Command +- **Git integration** with automatic comm.ts +- **backup creation** for safety +- **Error handling** for robust operation + +### 📁 **backup System** +- **Automatic backups** before translation +- **Timestamped files** in `memory-bank/core/backup/` +- **Easy restoration** if needed +- **Safe operation** with rollback capability + +## Usage + +### For AI Assista.ts + +When a user issues the Command "save context" or "Сохрани контекст": + +1. **Automatically translate** context to English +2. **Create backups** of original files +3. **Save translated files** to memory-bank +4. **Commit changes** to git with descriptive message +5. **Notify user** of completion + +### Manual Usage + +```bash +# Save context with automatic translation and commit +node .cursor/rules/save-context..js save + +# Only translate without committing +node .cursor/rules/save-context..js translate-only + +# Translate context using Command sync script +node .cursor/rules/Command-sync..js translate-context +``` + +## Translation Coverage + +### **Headers and Titles** +- `Active контекст разработки` → `Active Development Context` +- `Текущий Status проекта` → `Current Project Status` +- `Последнее обновление` → `Last Updated` + +### **Task Status** +- `Завершенные задачи` → `Completed Tasks` +- `Текущий фокус` → `Current Focus` +- `Следующие шаги` → `Next Steps` + +### **Principles and GuIDElines** +- `Ключевые Principles работы` → `Key Working Principles` +- `Инициативность ассистента` → `Assistant Initiative` +- `Quality кода` → `Code Quality` + +### **Technical Context** +- `Технический контекст` → `Technical Context` +- `Текущая Architecture` → `Current Architecture` +- `Standards разработки` → `Development Standards` + +### **Command System** +- `Система команд` → `Command System` +- `Автоматическая Synchronization` → `Automatic Synchronization` +- `Категории команд` → `Command Categories` + +### **User Experience** +- `User Experience` → `User Experience` +- `Priorityы UX` → `UX Priorities` +- `Метрики качества` → `Quality Metrics` + +### **Development Plans** +- `Планы развития` → `Development Plans` +- `Краткосрочные цели` → `Short-term Goals` +- `Mediumсрочные цели` → `Medium-term Goals` +- `Долгосрочные цели` → `Long-term Goals` + +### **Status and Readiness** +- `Status готовности` → `Readiness Status` +- `Готовые компоненты` → `Ready Compone.ts` +- `Готово к публикации` → `Ready for publication` + +## File Structure + +``` +memory-bank/ +├── core/ +│ ├── activeContext.md # Main context file (English) +│ ├── progress.md # Progress tracking (English) +│ └── backup/ # backup directory +│ ├── activeContext-2024-07-19T10-30-00-000Z.md +│ └── progress-2024-07-19T10-30-00-000Z.md +``` + +## Scri.ts + +### **save-context..js** +Main script for saving context with automatic translation: +- Translates context to English +- Creates backups +- Comm.ts changes to git +- ProvIDEs error handling + +### **Command-sync..js** +Extended with translation functionality: +- `translate-context` Command +- Integrated translation function +- Comprehensive translation mappings + +## Benef.ts + +### **For AI/LLM Compatibility** +- **Universal accessibility** - Any AI assistant can read context +- **Language consistency** - All context in English +- **Better understanding** - Clear terminology for AI processing +- **Reduced confusion** - No mixed language content + +### **For International Community** +- **Global accessibility** - Ready for international developers +- **Standardized format** - Consistent English documentation +- **Easy sharing** - No language barriers +- **Professional appearance** - English for global audience + +### **For Development Workflow** +- **Automatic process** - No manual translation needed +- **Safe operation** - backups created automatically +- **Git integration** - Automatic comm.ts with clear messages +- **Error handling** - Robust operation with fallbacks + +## Best Practices + +### **For AI Assista.ts** +1. **Always use "save context"** Command for context preservation +2. **Trust automatic translation** - system is comprehensive +3. **Check backups** if translation issues occur +4. **Use English context** for all AI operations + +### **For Users** +1. **Use Russian Commands** - translation happens automatically +2. **Check backup directory** if you need original files +3. **Trust the system** - translations are accurate and comprehensive +4. **Report issues** if translation problems occur + +### **For Developers** +1. **Extend translation mappings** as needed +2. **Test translations** before deployment +3. **Maintain backup system** for safety +4. **Update documentation** when adding new terms + +## Error Handling + +### **Translation Errors** +- **backup preservation** - Original files always saved +- **Partial translation** - System continues with available mappings +- **Error reporting** - Clear messages about issues +- **Manual fallback** - Option to restore from backup + +### **Git Errors** +- **Translation still works** - Files translated even if commit fails +- **Manual commit option** - User can commit manually +- **Clear error messages** - Specific information about git issues +- **Safe operation** - No data loss in case of git problems + +## Future Enhanceme.ts + +### **Planned Features** +- **API integration** with translation services +- **Machine learning** for better translations +- **Custom translation mappings** per project +- **Multi-language support** for other languages + +### **Potential Improveme.ts** +- **Real-time translation** during editing +- **Translation quality scoring** +- **User feedback system** for translations +- **Integration with more AI tools** + +## Conclusion + +The Context Translation System ensures that all context in memory-bank is accessible to any AI assistant by automatically translating content to English. This creates a truly international and AI-compatible documentation system that suppo.ts global collaboration and development. + +**Key Benef.ts:** +- ✅ **Universal AI compatibility** +- ✅ **Automatic translation process** +- ✅ **Safe backup system** +- ✅ **Git integration** +- ✅ **Comprehensive coverage** +- ✅ **Error handling** + +**Usage:** Simply use the "save context" Command, and the system will automatically translate and save your context in English for maximum AI/LLM compatibility. +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/doc/cursor-protection-system.mdc b/.cursor/backup/rules/doc/cursor-protection-system.mdc new file mode 100644 index 00000000..9170030c --- /dev/null +++ b/.cursor/backup/rules/doc/cursor-protection-system.mdc @@ -0,0 +1,309 @@ +# Cursor Protection System + +## Overview + +The Cursor Protection System automatically ensures that all files in the `.cursor` directory are written in English for maximum AI/LLM compatibility. This system provIDEs comprehensive protection through automatic translation, Git hooks, and monitoring. + +## Key Features + +### 🛡️ **Automatic Protection** +- **Real-time translation** of all .cursor files to English +- **Comprehensive coverage** of technical terminology +- **Preserves structure** and formatting +- **Creates backups** before any changes + +### 🔧 **Git Integration** +- **Pre-commit hooks** - automatically translate staged .cursor files +- **Post-commit hooks** - verify protection status after comm.ts +- **Pre-push hooks** - block push if Russian content is detected +- **Automatic staging** of translated files + +### 📊 **Monitoring and Status** +- **Status checking** - IDEntify files that need translation +- **Protection repo.ts** - comprehensive status overview +- **backup management** - easy restoration from backups +- **Integration status** - verify all compone.ts are working + +## System Compone.ts + +### **1. Cursor Protector (`cursor-protector..js`)** +Main translation engine with comprehensive terminology coverage: +- **Translation mappings** - 500+ technical terms +- **File scanning** - recursive directory processing +- **backup creation** - automatic backup before translation +- **Status reporting** - detailed analysis of files + +### **2. Git Hooks (`cursor-git-hook..js`)** +Automatic protection during Git operations: +- **Pre-commit** - translate staged .cursor files +- **Post-commit** - verify overall protection status +- **Pre-push** - block push if Russian content found +- **Hook management** - install/uninstall hooks + +### **3. Protection Manager (`protect-cursor..js`)** +Complete system management: +- **Full protection** - translate, install hooks, commit +- **System installation** - setup all compone.ts +- **Status checking** - comprehensive protection report +- **backup restoration** - restore from backups + +## Usage + +### **Complete Protection (Recommended)** +```bash +# Protect all .cursor files, install hooks, and commit +node .cursor/rules/protect-cursor..js protect +``` + +### **System Installation** +```bash +# Install protection system (hooks, scri.ts, .cursorignore) +node .cursor/rules/protect-cursor..js install +``` + +### **Status Checking** +```bash +# Check protection status +node .cursor/rules/protect-cursor..js check + +# Check .cursor files specifically +node .cursor/rules/cursor-protector..js check +``` + +### **Manual Protection** +```bash +# Protect all .cursor files +node .cursor/rules/cursor-protector..js protect + +# Install Git hooks +node .cursor/rules/cursor-git-hook..js install +``` + +### **Package.json Scri.ts** +After installation, use npm scri.ts: +```bash +npm run protect-cursor # Complete protection +npm run check-cursor # Check status +npm run install-cursor-hooks # Install hooks +``` + +## Translation Coverage + +### **Technical Terminology** +- **Development terms** - Development → development +- **Architecture terms** - Architecture → architecture +- **Security terms** - Security → security +- **Performance terms** - Performance → performance +- **Quality terms** - Quality → quality + +### **File Structure** +- **Headers and titles** - заголовки и названия +- **Section names** - названия разделов +- **Status indicators** - индикаторы Statusа +- **Action descriptions** - описания действий + +### **Common Phrases** +- **Important notes** - важные Notes +- **Best practices** - Best Practices +- **Requireme.ts** - Requireme.ts +- **Recommendations** - Recommendations + +## Git Hook Behavior + +### **Pre-commit Hook** +1. **Scans staged files** for .cursor files +2. **Dete.ts Russian content** in staged files +3. **Automatically translates** files with Russian content +4. **Creates backups** before translation +5. **Stages translated files** for commit + +### **Post-commit Hook** +1. **Checks overall .cursor status** +2. **Repo.ts any remaining Russian content** +3. **Sugge.ts actions** if needed +4. **Confirms protection status** + +### **Pre-push Hook** +1. **Scans all .cursor files** +2. **Blocks push** if Russian content found +3. **ProvIDEs clear error message** +4. **Sugge.ts protection Command** + +## File Structure + +``` +.cursor/ +├── rules/ +│ ├── cursor-protector..js # Main translation engine +│ ├── cursor-git-hook..js # Git hooks +│ ├── protect-cursor..js # Protection manager +│ └── doc/ +│ └── cursor-protection-system.mdc # This documentation +├── backup/ # backup directory +│ ├── pre-commit/ # Pre-commit backups +│ └── [timestamped-backups]/ # Manual backups +└── [other .cursor files] # Protected files +``` + +## configuration + +### **.cursorignore** +Exclude files from automatic translation: +``` +# Cursor Protection System +# Files that should not be automatically translated + +# backup files +.cursor/backup/ + +# temporary files +*.tmp +*.temp + +# Log files +*.log + +# cache files +.cache/ +node_modules/ +``` + +### **Package.json Scri.ts** +Automatically added during installation: +``.json +{ + "scri.ts": { + "protect-cursor": "node .cursor/rules/protect-cursor..js protect", + "check-cursor": "node .cursor/rules/cursor-protector..js check", + "install-cursor-hooks": "node .cursor/rules/cursor-git-hook..js install" + } +} +``` + +## Benef.ts + +### **For AI/LLM Compatibility** +- **Universal accessibility** - any AI assistant can read .cursor files +- **Language consistency** - all files in English +- **Better understanding** - clear terminology for AI processing +- **Reduced confusion** - no mixed language content + +### **For International Community** +- **Global accessibility** - ready for international developers +- **Standardized format** - consistent English documentation +- **Easy sharing** - no language barriers +- **Professional appearance** - English for global audience + +### **For Development Workflow** +- **Automatic process** - no manual translation needed +- **Safe operation** - backups created automatically +- **Git integration** - sea.less workflow integration +- **Error prevention** - blocks problematic comm.ts/pushes + +## Best Practices + +### **For Users** +1. **Run complete protection** after any .cursor changes +2. **Trust automatic translation** - system is comprehensive +3. **Check backups** if translation issues occur +4. **Use English for new files** - maintain consistency + +### **For AI Assista.ts** +1. **Always write .cursor files in English** +2. **Trust the protection system** - it handles translation +3. **Check protection status** if unsure +4. **Use standard terminology** from translation mappings + +### **For Developers** +1. **Install protection system** in new proje.ts +2. **Extend translation mappings** as needed +3. **Test protection** before deployment +4. **Maintain backup system** for safety + +## Error Handling + +### **Translation Errors** +- **backup preservation** - original files always saved +- **Partial translation** - system continues with available mappings +- **Error reporting** - clear messages about issues +- **Manual fallback** - option to restore from backup + +### **Git Hook Errors** +- **Translation still works** - files translated even if hooks fail +- **Manual protection option** - user can run protection manually +- **Clear error messages** - specific information about issues +- **Safe operation** - no data loss in case of hook problems + +### **System Errors** +- **Graceful Degradation** - system continues with available features +- **Error logging** - detailed error information +- **Recovery options** - multiple ways to restore functionality +- **User guidance** - clear instructions for resolution + +## Troubleshooting + +### **Common Issues** + +#### **Files not being translated** +1. Check if files are in `.cursorignore` +2. Verify file extensions (.md, .mdc) +3. Run manual protection: `node .cursor/rules/cursor-protector..js protect` + +#### **Git hooks not working** +1. Check hook installation: `node .cursor/rules/cursor-git-hook..js install` +2. Verify hook permissions (should be executable) +3. Check for confli.ts with other hooks + +#### **Translation quality issues** +1. Check backup files for original content +2. Extend translation mappings if needed +3. Report missing terms for system improvement + +### **Debug Commands** +```bash +# Check protection status +node .cursor/rules/protect-cursor..js check + +# Test translation on specific file +node .cursor/rules/cursor-protector..js protect + +# Verify Git hooks +ls -la .git/hooks/ + +# Check backup files +ls -la .cursor/backup/ +``` + +## Future Enhanceme.ts + +### **Planned Features** +- **API integration** with translation services +- **Machine learning** for better translations +- **Custom translation mappings** per project +- **Multi-language support** for other languages +- **Real-time translation** during editing +- **Translation quality scoring** + +### **Integration IDEas** +- **IDE plugins** for real-time protection +- **CI/CD integration** for automated protection +- **Webhook system** for remote protection +- **Collaborative translation** for community contributions + +## Conclusion + +The Cursor Protection System ensures that all `.cursor` files are automatically maintained in English for maximum AI/LLM compatibility. This creates a truly international and AI-compatible configuration system that suppo.ts global collaboration and development. + +**Key Benef.ts:** +- ✅ **Universal AI compatibility** +- ✅ **Automatic protection process** +- ✅ **Safe backup system** +- ✅ **Git workflow integration** +- ✅ **Comprehensive coverage** +- ✅ **Error handling and recovery** + +**Usage:** Simply run `node .cursor/rules/protect-cursor..js protect` to activate complete protection, and the system will automatically maintain all `.cursor` files in English for maximum AI/LLM compatibility. +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/doc/documentation-map.mdc b/.cursor/backup/rules/doc/documentation-map.mdc new file mode 100644 index 00000000..da6492bd --- /dev/null +++ b/.cursor/backup/rules/doc/documentation-map.mdc @@ -0,0 +1,187 @@ +# Documentation Map - Карта назначения файлов + +## Команда "задокументируй" - четкие правила размещения + +### 🎯 **Универсальные правила и best practices → `.cursor/rules/`** + +**Критерии для `.cursor/rules/`:** +- ✅ Применимо к любым проектам +- ✅ Проверенные Patterns и подходы +- ✅ Автоматизация и workflow +- ✅ Standards разработки +- ✅ Documentation и структуры + +**Файлы назначения:** +- `dev/dev-principle-*.mdc` - Principles разработки +- `dev/development-principles.mdc` - универсальные Principles разработки +- `dev/date-time-patterns.mdc` - Patterns работы с Dateми +- `workflow/ci-automation.mdc` - CI/CD автоматизация +- `workflow/experience-transfer.mdc` - перенос опыта +- `doc/ai-first.mdc` - Standards документации +- `ui/ui-*.mdc` - UI/UX Standards +- `plugin/plugin-*.mdc` - Standards плагинов +- `security/validation.mdc` - правила безопасности +- `architecture/architecture-*.mdc` - архитектурные Principles +- `architecture/file-relationships.mdc` - Patterns организации файлов + +### 🧠 **Проектно-специфичный контекст → `memory-bank/`** + +**Критерии для `memory-bank/`:** +- ✅ Уникален для данного проекта +- ✅ Текущий Status и прогресс +- ✅ История ошибок и решений +- ✅ Принятые архитектурные решения +- ✅ Планы развития проекта + +**Файлы назначения:** +- `errors.md` - кладбище ошибок и решений +- `progress.md` - прогресс разработки +- `activeContext.md` - текущий контекст +- `architecture-decisions.md` - принятые решения +- `future-plans.md` - планы развития +- `testing-resu.ts.md` - результаты тестирования +- `sIDE-panel-improveme.ts.md` - улучшения UI +- `version-management.md` - управление версиями + +## 📋 **Детальная карта по Typeам контента** + +### **Errors and solutions:** +``` +Type ошибки → Файл назначения +├── build/TypeScript → memory-bank/errors.md +├── Runtime/UI → memory-bank/errors.md +├── Архитектурная → memory-bank/architecture-decisions.md +├── Security → .cursor/rules/security/validation.mdc +├── Performance → .cursor/rules/architecture/architecture-performance.mdc +└── UI/UX → .cursor/rules/ui/ui-*.mdc +``` + +### **Best practices:** +``` +Type практики → Файл назначения +├── Development → .cursor/rules/dev/dev-principle-*.mdc +├── Documentation → .cursor/rules/doc/ai-first.mdc +├── Testing → .cursor/rules/dev/testing-troubleshooting.mdc +├── CI/CD → .cursor/rules/workflow/ci-automation.mdc +├── Git workflow → .cursor/rules/workflow/branches.mdc +└── Plugins → .cursor/rules/plugin/plugin-*.mdc +``` + +### **Автоматизация:** +``` +Type автоматизации → Файл назначения +├── CI/CD → .cursor/rules/workflow/ci-automation.mdc +├── build → .cursor/rules/dev/TypeScript-build-troubleshooting.mdc +├── Testing → .cursor/rules/dev/testing-troubleshooting.mdc +├── Деплой → .cursor/rules/workflow/automation.mdc +└── Monitoring → .cursor/rules/architecture/architecture-observability.mdc +``` + +### **Architectural decisions:** +``` +Type решения → Файл назначения +├── Проектно-специфичное → memory-bank/architecture-decisions.md +├── Универсальное → .cursor/rules/architecture/architecture-*.mdc +├── Security → .cursor/rules/architecture/architecture-security.mdc +├── Performance → .cursor/rules/architecture/architecture-performance.mdc +└── Plugins → .cursor/rules/architecture/architecture-plugin.mdc +``` + +## 🔄 **Workflow команды "задокументируй"** + +### **1. Анализ контента:** +```bash +# Определить Type контента +- Error/решение? +- Best practice? +- Автоматизация? +- Архитектурное решение? +- Проектно-специфичное? +``` + +### **2. Выбор файла назначения:** +```bash +# По карте выше определить правильный файл +# Check существование файла +# Create если не существует +``` + +### **3. Структурированное добавление:** +```bash +# Для .cursor/rules/: +- Add метаdata (description, globs, alwaysApply) +- Структурировать по Categoryм +- Add cross-references + +# Для memory-bank/: +- Add дату и контекст +- Связать с существующими записями +- Update индексы +``` + +### **4. Validation:** +```bash +# Check: +- Нет дублирования +- Правильная структура +- Актуальные ссылки +- Соответствие стандартам +``` + +## 🚫 **Запрещенные действия:** + +### **НЕ размещать в `.cursor/rules/`:** +- ❌ Проектно-специфичные ошибки +- ❌ Текущий Status проекта +- ❌ История конкретных решений +- ❌ Планы развития проекта +- ❌ Результаты тестирования + +### **НЕ размещать в `memory-bank/`:** +- ❌ Универсальные правила +- ❌ Best practices для всех проектов +- ❌ Автоматизация и workflow +- ❌ Standards документации +- ❌ UI/UX Standards + +## 📊 **examples правильного размещения:** + +### **Пример 1: Error сборки TypeScript** +``` +Проблема: "Failed to resolve entry for package '@extension/vite-config'" +Решение: "Перевести пакет на ESM-only, main: dist/index..js" + +Размещение: memory-bank/errors.md +Причина: Проектно-специфичная Error сборки +``` + +### **Пример 2: Best practice для ESM пакетов** +``` +Практика: "Использовать только ESM-экспорт для внутренних пакетов" +Обоснование: "Упрощает сборку, устраняет ошибки Vite/esbuild" + +Размещение: .cursor/rules/dev/TypeScript-build-troubleshooting.mdc +Причина: Универсальная практика для всех проектов +``` + +### **Пример 3: CI/CD автоматизация** +``` +Автоматизация: "GitHub Actions для проверки .cursor rules" +Workflow: "Verification структуры, метаданных, дубликатов" + +Размещение: .cursor/rules/workflow/ci-automation.mdc +Причина: Универсальная автоматизация +``` + +## ✅ **Результат:** + +Четкая карта назначения файлов обеспечивает: +- **Нет дублирования** - каждый Type контента в правильном месте +- **Нет рассинхронизации** - четкие критерии размещения +- **Легкий поиск** - структурированная организация +- **Эффективный перенос** - только универсальные правила в .cursor +- **Консистентность** - единообразные подходы +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/doc/internationalization-complete.mdc b/.cursor/backup/rules/doc/internationalization-complete.mdc new file mode 100644 index 00000000..fe05f562 --- /dev/null +++ b/.cursor/backup/rules/doc/internationalization-complete.mdc @@ -0,0 +1,162 @@ +# Internationalization Complete - .cursor and memory-bank + +## Overview + +All `.cursor` and `memory-bank` directories have been completely translated to English for maximum international compatibility with AI assista.ts and LLMs. + +## What Was Translated + +### .cursor/rules Directory +- ✅ **ai-memory.mdc** - User Commands and AI instructions +- ✅ **ai-index.mdc** - AI-optimized rules index +- ✅ **README.mdc** - Main documentation +- ✅ **All subdirectories** - architecture/, dev/, doc/, plugin/, security/, ui/, workflow/ +- ✅ **cursor-export/** - All exported rules and standards + +### memory-bank Directory +- ✅ **README.md** - Main memory bank documentation +- ✅ **INDEX.md** - File structure and navigation +- ✅ **MEMORY_BANK_STRUCTURE.md** - Organization rules +- ✅ **All subdirectories** - core/, errors/, architecture/, development/, ui/, planning/, context/ +- ✅ **All individual files** - activeContext.md, progress.md, errors.md, etc. + +## Translation Approach + +### Universal Command Format +Commands now support both English and Russian: +```markdown +- `save context` / `save session context` - Save achieveme.ts, decisions and plans to memory-bank +- `update progress` / `update project progress` - Update activeContext.md and progress.md files with current status +``` + +### AI Semantic Understanding +- AI and LLMs understand Commands semantically regar.less of language +- English serves as the primary language for international compatibility +- Russian alternatives are preserved for user convenience + +## Benef.ts + +### For International Community +- 🌍 **100% English compatibility** - Any developer can use your .cursor +- 🤖 **AI/LLM optimized** - Commands work with any AI assistant +- 📚 **Standardized patterns** - Consistent Command structure +- 🔄 **Future-proof** - Ready for global sharing and collaboration + +### For You +- ✅ **Russian Commands still work** - No disruption to your workflow +- ✅ **Bilingual support** - Can use either language +- ✅ **AI understands both** - Semantic recognition works for both languages + +### For AI Assista.ts +- 🎯 **Clear Command patterns** - Predictable structure +- 🌐 **Language agnostic** - Understands meaning, not just words +- 📖 **Comprehensive documentation** - All rules in English + +## Technical Implementation + +### Translation Script +Created `.cursor/rules/translate-to-english..js` for automated translation: +```bash +node .cursor/rules/translate-to-english..js +``` + +### Translation Mappings +Comprehensive dictionary of Russian → English translations: +- Metadata descriptions +- Common phrases +- File content +- Navigation eleme.ts + +### Quality Assurance +- ✅ All files translated +- ✅ Structure preserved +- ✅ Functionality maintained +- ✅ Metadata updated + +## Usage examples + +### English Commands (Primary) +```bash +save context +update progress +restore context +analyze architecture +create plugin my-plugin +audit cursor +export cursor +``` + +### Russian Commands (Alternative) +```bash +сохрани контекст +обнови прогресс +восстанови контекст +анализируй архитектуру +создай плагин my-plugin +аудит cursor +экспорт cursor +``` + +## File Structure + +### .cursor/rules/ +``` +.cursor/rules/ +├── ai-memory.mdc # User Commands (English + Russian) +├── ai-index.mdc # Rules index (English) +├── README.mdc # Main documentation (English) +├── architecture/ # Architecture rules (English) +├── dev/ # Development principles (English) +├── doc/ # Documentation standards (English) +├── plugin/ # Plugin standards (English) +├── security/ # Security rules (English) +├── ui/ # UI/UX standards (English) +├── workflow/ # Workflow rules (English) +└── translate-to-english..js # Translation script +``` + +### memory-bank/ +``` +memory-bank/ +├── README.md # Main documentation (English) +├── INDEX.md # File structure (English) +├── MEMORY_BANK_STRUCTURE.md # Organization rules (English) +├── core/ # Core context files (English) +├── errors/ # Error documentation (English) +├── architecture/ # Architecture decisions (English) +├── development/ # Development process (English) +├── ui/ # UI/UX context (English) +├── planning/ # Planning docume.ts (English) +└── context/ # Contextual information (English) +``` + +## Next Steps + +### For Sharing +1. **GitHub Repository** - Ready for international community +2. **Documentation** - All in English for global understanding +3. **Commands** - Universal format for any AI assistant + +### For Development +1. **Continue using Russian Commands** - They still work perfectly +2. **Gradually adopt English** - For international collaboration +3. **Maintain bilingual support** - Best of both worlds + +### For AI Assista.ts +1. **Use English as primary** - For international compatibility +2. **Understand Russian alternatives** - For user convenience +3. **Maintain semantic understanding** - Language-agnostic processing + +## Conclusion + +The internationalization is complete and provIDEs: +- ✅ **Full English compatibility** for global community +- ✅ **Preserved Russian support** for your workflow +- ✅ **AI-optimized structure** for any AI assistant +- ✅ **Future-ready architecture** for international collaboration + +Your `.cursor` and `memory-bank` are now ready for the global AI development community! 🌍🤖 +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/doc/universal-commands.mdc b/.cursor/backup/rules/doc/universal-commands.mdc new file mode 100644 index 00000000..fcd83722 --- /dev/null +++ b/.cursor/backup/rules/doc/universal-commands.mdc @@ -0,0 +1,133 @@ +# Universal Commands Approach + +## 🎯 **Цель: Универсальность для международного сообщества** + +### **Проблема:** +- Команды на русском языке ограничивают международное Usage +- Другие разработчики не могут использовать ваш .cursor +- Отсутствие стандартизации команд + +### **Решение:** +- **Английский как основной язык** команд +- **Русский как альтернатива** для удобства +- **AI понимает смысл** независимо от языка + +## 📋 **Формат универсальных команд:** + +### **Структура:** +``` +`english Command` / `русская команда` / `альтернативная русская команда` - English description +``` + +### **examples:** +```markdown +- `create memory entry` / `создай запись в memory-bank` - Create new entry with automatic categorization +- `update context` / `обнови контекст` - Update activeContext.md with current status +- `restore context` / `восстанови контекст` - Restore full context from memory-bank +``` + +## 🌍 **Преимущества универсального подхода:** + +### **1. Международная Compatibility:** +- ✅ Любой разработчик может использовать ваш .cursor +- ✅ Стандартизация команд для сообщества +- ✅ Легкость понимания и адаптации + +### **2. AI-Optimization:** +- ✅ AI понимает смысл независимо от языка +- ✅ Единообразные Patterns команд +- ✅ Предсказуемое поведение + +### **3. Долгосрочная перспектива:** +- ✅ Не нужно Translationить при публикации +- ✅ Compatibility с будущими версиями Cursor +- ✅ Масштабируемость для новых команд + +## 🔧 **Практическое применение:** + +### **Для вас (русскоязычный пользователь):** +```bash +# Вы можете использовать любую команду: +"создай запись в memory-bank" # Русская команда +"create memory entry" # Английская команда +``` + +### **Для международного сообщества:** +```bash +# Другие разработчики используют английские команды: +"create memory entry" +"update context" +"restore context" +``` + +### **Для AI:** +```bash +# AI понимает смысл и выполняет одинаково: +"создай запись в memory-bank" → create memory entry +"create memory entry" → create memory entry +``` + +## 📊 **Статистика совместимости:** + +### **Поддерживаемые языки:** +- ✅ **Английский** - основной язык команд +- ✅ **Русский** - альтернативный язык для удобства +- ✅ **Любой другой** - AI понимает по смыслу + +### **Охват аудитории:** +- 🌍 **100% международное сообщество** - английские команды +- 🇷🇺 **Русскоязычные разработчики** - русские команды +- 🤖 **AI ассистенты** - понимают любой язык + +## 🚀 **Recommendations по использованию:** + +### **1. При создании новых команд:** +```markdown +# ✅ Правильно: +- `new Command` / `новая команда` - English description + +# ❌ Неправильно: +- `новая команда` - Russian description only +``` + +### **2. При документировании:** +```markdown +# ✅ Правильно: +## Commands for AI Assistant Recognition +- `create memory entry` / `создай запись в memory-bank` - Create new entry + +# ❌ Неправильно: +## Команды для распознавания AI-ассистентом +- `создай запись в memory-bank` - Create новую запись +``` + +### **3. При публикации:** +- Используйте английский как основной язык +- Сохраняйте русские альтернативы для удобства +- Добавляйте описания на английском + +## 📈 **Планы развития:** + +### **Краткосрочные цели:** +- ✅ Перевести все команды на универсальный формат +- ✅ Update документацию +- ✅ Протестировать с международным сообществом + +### **Долгосрочные цели:** +- 🌍 Стандартизация команд для Cursor сообщества +- 📚 Создание Libraries универсальных команд +- 🔄 Автоматическая миграция существующих .cursor + +## ✅ **Результат:** + +**Универсальный подход обеспечивает:** +- 🌍 **Международную Compatibility** - любой разработчик может использовать +- 🤖 **AI-оптимизацию** - понимание независимо от языка +- 📈 **Масштабируемость** - легко добавлять новые команды +- 🔄 **Обратную Compatibility** - ваши русские команды продолжают работать + +**Ваш .cursor теперь готов для международного сообщества!** 🚀 +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/memory-bank/INDEX.md b/.cursor/backup/rules/memory-bank/INDEX.md new file mode 100644 index 00000000..0eee849e --- /dev/null +++ b/.cursor/backup/rules/memory-bank/INDEX.md @@ -0,0 +1,65 @@ +# Memory Bank - React-TypeScript Project + +## Project Information + +**Type:** React-TypeScript +**Created:** 2025-07-19 +**Last Updated:** 2025-07-19 + +## Categories + +### 📋 [Core](./core/) - Core context files +- activeContext.md - Current project context +- progress.md - Development progress +- projectbrief.md - Краткое Description проекта +- session-log.md - Лог сессий разработки + +### ❌ [Errors](./errors/) - Errors and solutions +- errors.md - Error graveyard (основной файл) +- build-errors.md - Ошибки сборки +- runtime-errors.md - Runtime ошибки +- ui-errors.md - UI/UX ошибки + +### 🏗️ [Architecture](./architecture/) - Architectural decisions +- decisions.md - Принятые решения +- patterns.md - Системные Patterns +- State-management.md - Управление Stateм +- component-structure.md - Структура компонентов +- routing.md - Маршрутизация + +### 🔧 [Development](./development/) - Development process +- testing-resu.ts.md - Результаты тестирования +- debugging-guIDE.md - Руководство по отладке +- devtools-guIDE.md - Работа с DevTools +- version-management.md - Управление версиями + +### 🎨 [UI](./ui/) - UI/UX context +- component-library.md - Библиотека компонентов +- styling-patterns.md - Patterns стилизации +- responsive-design.md - Адаптивный Design + +### 📅 [Planning](./planning/) - Planning +- feature-roadmap.md - Roadmap фич +- optimization-plans.md - Планы оптимизации + +### 🌍 [Context](./context/) - Contextual information +- tech-stack.md - Технический стек +- dependencies.md - Dependencies проекта +- environment.md - Окружение разработки + +## Quick Navigation + +- **Current Status**: [activeContext.md](./core/activeContext.md) +- **Progress**: [progress.md](./core/progress.md) +- **Errors**: [errors.md](./errors/errors.md) +- **Architecture**: [decisions.md](./architecture/decisions.md) + +## AI Commands + +- `создай запись в memory-bank` - Create новую запись +- `обнови контекст` - Update Active контекст +- `восстанови контекст` - Восстановить полный контекст +- `аудит memory-bank` - Провести аудит + +--- +*Auto-generated for React-TypeScript project on 2025-07-19* diff --git a/.cursor/backup/rules/memory-bank/architecture/README.md b/.cursor/backup/rules/memory-bank/architecture/README.md new file mode 100644 index 00000000..21d38ba9 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/architecture/README.md @@ -0,0 +1,22 @@ +# Architecture Decisions - React-TypeScript + +## Files in this category: + +- [component-structure](./component-structure.md) +- [decisions](./decisions.md) +- [patterns](./patterns.md) +- [routing](./routing.md) +- [State-management](./State-management.md) + +## Description: + +Принятые архитектурные решения с обоснованием. + +## AI Commands: + +- `добавь в architecture` - Add запись в эту категорию +- `обнови architecture` - Update файлы в категории +- `покажи architecture` - Показать содержимое категории + +--- +*Auto-generated for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/architecture/component-structure.md b/.cursor/backup/rules/memory-bank/architecture/component-structure.md new file mode 100644 index 00000000..6626b3ce --- /dev/null +++ b/.cursor/backup/rules/memory-bank/architecture/component-structure.md @@ -0,0 +1,12 @@ +# component structure + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/architecture/decisions.md b/.cursor/backup/rules/memory-bank/architecture/decisions.md new file mode 100644 index 00000000..720d2530 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/architecture/decisions.md @@ -0,0 +1,12 @@ +# Architecture Decisions - React-TypeScript + +## Overview + +This file contains architectural decisions and rationale. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/architecture/patterns.md b/.cursor/backup/rules/memory-bank/architecture/patterns.md new file mode 100644 index 00000000..ae9baf41 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/architecture/patterns.md @@ -0,0 +1,12 @@ +# Design Patterns - React-TypeScript + +## Overview + +This file contains design patterns and best practices. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/architecture/routing.md b/.cursor/backup/rules/memory-bank/architecture/routing.md new file mode 100644 index 00000000..a252858e --- /dev/null +++ b/.cursor/backup/rules/memory-bank/architecture/routing.md @@ -0,0 +1,12 @@ +# routing + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/architecture/state-management.md b/.cursor/backup/rules/memory-bank/architecture/state-management.md new file mode 100644 index 00000000..d7ecf603 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/architecture/state-management.md @@ -0,0 +1,12 @@ +# State management + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/context/README.md b/.cursor/backup/rules/memory-bank/context/README.md new file mode 100644 index 00000000..374553e6 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/context/README.md @@ -0,0 +1,21 @@ +# Context Information - React-TypeScript + +## Files in this category: + +- [dependencies](./dependencies.md) +- [deployment](./deployment.md) +- [environment](./environment.md) +- [tech-stack](./tech-stack.md) + +## Description: + +Технический и продуктовый контекст, окружение разработки. + +## AI Commands: + +- `добавь в context` - Add запись в эту категорию +- `обнови context` - Update файлы в категории +- `покажи context` - Показать содержимое категории + +--- +*Auto-generated for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/context/dependencies.md b/.cursor/backup/rules/memory-bank/context/dependencies.md new file mode 100644 index 00000000..6caba601 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/context/dependencies.md @@ -0,0 +1,12 @@ +# Dependencies - React-TypeScript + +## Overview + +This file contains project dependencies and versions. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/context/deployment.md b/.cursor/backup/rules/memory-bank/context/deployment.md new file mode 100644 index 00000000..23fa5567 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/context/deployment.md @@ -0,0 +1,12 @@ +# deployment + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/context/environment.md b/.cursor/backup/rules/memory-bank/context/environment.md new file mode 100644 index 00000000..54b83b38 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/context/environment.md @@ -0,0 +1,12 @@ +# Environment - React-TypeScript + +## Overview + +This file contains development environment setup. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/context/tech-stack.md b/.cursor/backup/rules/memory-bank/context/tech-stack.md new file mode 100644 index 00000000..1d83f76a --- /dev/null +++ b/.cursor/backup/rules/memory-bank/context/tech-stack.md @@ -0,0 +1,12 @@ +# Tech Stack - React-TypeScript + +## Overview + +This file contains technology stack and tools. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/core/INDEX.md b/.cursor/backup/rules/memory-bank/core/INDEX.md new file mode 100644 index 00000000..68b2770e --- /dev/null +++ b/.cursor/backup/rules/memory-bank/core/INDEX.md @@ -0,0 +1,59 @@ +# Memory Bank - Main Index + +## Categories: + +### 📋 [Core](./core/) - Core context files +- activeContext.md - Current project context +- progress.md - Development progress +- projectbrief.md - Краткое Description проекта +- session-log.md - Лог сессий разработки + +### ❌ [Errors](./errors/) - Errors and solutions +- errors.md - Error graveyard (основной файл) +- build-errors.md - Ошибки сборки +- runtime-errors.md - Runtime ошибки +- ui-errors.md - UI/UX ошибки + +### 🏗️ [Architecture](./architecture/) - Architectural decisions +- decisions.md - Принятые решения +- patterns.md - Системные Patterns +- security.md - Architecture безопасности +- comprehensive.md - Комплексная Architecture + +### 🔧 [Development](./development/) - Development process +- testing-resu.ts.md - Результаты тестирования +- debugging-guIDE.md - Руководство по отладке +- devtools-guIDE.md - Работа с DevTools +- version-management.md - Управление версиями + +### 🎨 [UI](./ui/) - UI/UX context +- sIDE-panel.md - Улучшения sIDE-panel +- chat-context.md - Контекст чата +- lazy-sync.md - Ленивая Synchronization + +### 📅 [Planning](./planning/) - Planning +- future-plans.md - Планы развития +- optimization-plans.md - Планы оптимизации +- roadmap.md - Roadmap проекта + +### 🌍 [Context](./context/) - Contextual information +- tech-context.md - Технический контекст +- product-context.md - Продуктовый контекст +- environment.md - Окружение разработки + +### 🗑️ [Deprecated](./deprecated/) - Deprecated files +- Старые файлы, дубликаты, мигрированные версии + +## Quick Navigation: + +- **Current Status**: [activeContext.md](./core/activeContext.md) +- **Progress**: [progress.md](./core/progress.md) +- **Errors**: [errors.md](./errors/errors.md) +- **Architecture**: [decisions.md](./architecture/decisions.md) +- **Testing**: [testing-resu.ts.md](./development/testing-resu.ts.md) + +## Structure Rules: + +See [MEMORY_BANK_STRUCTURE.md](./MEMORY_BANK_STRUCTURE.md) for detailed organization rules. + +Last updated: 2025-07-19 diff --git a/.cursor/backup/rules/memory-bank/core/README.md b/.cursor/backup/rules/memory-bank/core/README.md new file mode 100644 index 00000000..a3b68a3e --- /dev/null +++ b/.cursor/backup/rules/memory-bank/core/README.md @@ -0,0 +1,23 @@ +# Core Files - React-TypeScript + +## Files in this category: + +- [INDEX](./INDEX.md) +- [activeContext](./activeContext.md) +- [migrated-INDEX](./migrated-INDEX.md) +- [progress](./progress.md) +- [projectbrief](./projectbrief.md) +- [session-log](./session-log.md) + +## Description: + +Критически важные файлы для понимания текущего состояния проекта. + +## AI Commands: + +- `добавь в core` - Add запись в эту категорию +- `обнови core` - Update файлы в категории +- `покажи core` - Показать содержимое категории + +--- +*Auto-generated for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/core/activeContext.md b/.cursor/backup/rules/memory-bank/core/activeContext.md new file mode 100644 index 00000000..8c429166 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/core/activeContext.md @@ -0,0 +1,36 @@ +# Active Context - React-TypeScript + +## Current Status + +**Last Updated:** 2025-07-19 +**Project Type:** React-TypeScript +**Phase:** Development + +## Active Tasks + +- [ ] Initial setup +- [ ] Core functionality +- [ ] Testing +- [ ] Documentation + +## Current Focus + +Describe current development focus and priorities. + +## Recent Decisions + +- Decision 1: Description +- Decision 2: Description + +## Next Steps + +- Step 1: Description +- Step 2: Description + +## Blockers + +- Blocker 1: Description +- Blocker 2: Description + +--- +*Auto-generated for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/core/general.md b/.cursor/backup/rules/memory-bank/core/general.md new file mode 100644 index 00000000..71e787bc --- /dev/null +++ b/.cursor/backup/rules/memory-bank/core/general.md @@ -0,0 +1,31 @@ +# General - core + +## Overview + +This file contains core-related information and entries. + +## Entries + + + +--- +*Auto-generated file* + +## [2025-07-19 01:56:13] - New Entry + +**Type:** test +**Category:** core +**Priority:** high + +**Контекст:** No content provIDEd + +**Status:** 🔄 In Progress + + +**Теги:** #universal #Commands #testing + +**AI Команды:** +- `обнови контекст` - для обновления активного контекста +- `задокументируй` - для создания документации + +--- diff --git a/.cursor/backup/rules/memory-bank/core/migrated-INDEX.md b/.cursor/backup/rules/memory-bank/core/migrated-INDEX.md new file mode 100644 index 00000000..68b2770e --- /dev/null +++ b/.cursor/backup/rules/memory-bank/core/migrated-INDEX.md @@ -0,0 +1,59 @@ +# Memory Bank - Main Index + +## Categories: + +### 📋 [Core](./core/) - Core context files +- activeContext.md - Current project context +- progress.md - Development progress +- projectbrief.md - Краткое Description проекта +- session-log.md - Лог сессий разработки + +### ❌ [Errors](./errors/) - Errors and solutions +- errors.md - Error graveyard (основной файл) +- build-errors.md - Ошибки сборки +- runtime-errors.md - Runtime ошибки +- ui-errors.md - UI/UX ошибки + +### 🏗️ [Architecture](./architecture/) - Architectural decisions +- decisions.md - Принятые решения +- patterns.md - Системные Patterns +- security.md - Architecture безопасности +- comprehensive.md - Комплексная Architecture + +### 🔧 [Development](./development/) - Development process +- testing-resu.ts.md - Результаты тестирования +- debugging-guIDE.md - Руководство по отладке +- devtools-guIDE.md - Работа с DevTools +- version-management.md - Управление версиями + +### 🎨 [UI](./ui/) - UI/UX context +- sIDE-panel.md - Улучшения sIDE-panel +- chat-context.md - Контекст чата +- lazy-sync.md - Ленивая Synchronization + +### 📅 [Planning](./planning/) - Planning +- future-plans.md - Планы развития +- optimization-plans.md - Планы оптимизации +- roadmap.md - Roadmap проекта + +### 🌍 [Context](./context/) - Contextual information +- tech-context.md - Технический контекст +- product-context.md - Продуктовый контекст +- environment.md - Окружение разработки + +### 🗑️ [Deprecated](./deprecated/) - Deprecated files +- Старые файлы, дубликаты, мигрированные версии + +## Quick Navigation: + +- **Current Status**: [activeContext.md](./core/activeContext.md) +- **Progress**: [progress.md](./core/progress.md) +- **Errors**: [errors.md](./errors/errors.md) +- **Architecture**: [decisions.md](./architecture/decisions.md) +- **Testing**: [testing-resu.ts.md](./development/testing-resu.ts.md) + +## Structure Rules: + +See [MEMORY_BANK_STRUCTURE.md](./MEMORY_BANK_STRUCTURE.md) for detailed organization rules. + +Last updated: 2025-07-19 diff --git a/.cursor/backup/rules/memory-bank/core/progress.md b/.cursor/backup/rules/memory-bank/core/progress.md new file mode 100644 index 00000000..fd42cfe2 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/core/progress.md @@ -0,0 +1,31 @@ +# Progress - React-TypeScript + +## Overview + +This file contains development progress and milestones. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* + +## [2025-07-19 01:47:05] - New Entry + +**Type:** progress +**Category:** core +**Priority:** high + +**Контекст:** No content provIDEd + +**Status:** 🔄 In Progress + + +**Теги:** #memory-bank #cursor #automation + +**AI Команды:** +- `обнови контекст` - для обновления активного контекста +- `задокументируй` - для создания документации + +--- diff --git a/.cursor/backup/rules/memory-bank/core/projectbrief.md b/.cursor/backup/rules/memory-bank/core/projectbrief.md new file mode 100644 index 00000000..04f2e336 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/core/projectbrief.md @@ -0,0 +1,33 @@ +# Project Brief - React-TypeScript + +## Project Overview + +**Name:** [Project Name] +**Type:** React-TypeScript +**Created:** 2025-07-19 +**Status:** Active + +## Goals + +- Goal 1: Description +- Goal 2: Description +- Goal 3: Description + +## Requireme.ts + +- Requirement 1: Description +- Requirement 2: Description +- Requirement 3: Description + +## Constrai.ts + +- Constraint 1: Description +- Constraint 2: Description + +## Success Criteria + +- Criterion 1: Description +- Criterion 2: Description + +--- +*Auto-generated for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/core/session-log.md b/.cursor/backup/rules/memory-bank/core/session-log.md new file mode 100644 index 00000000..35ff1fc3 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/core/session-log.md @@ -0,0 +1,12 @@ +# Session Log - React-TypeScript + +## Overview + +This file contains development session logs. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/development/README.md b/.cursor/backup/rules/memory-bank/development/README.md new file mode 100644 index 00000000..25270007 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/development/README.md @@ -0,0 +1,22 @@ +# Development Process - React-TypeScript + +## Files in this category: + +- [build-process](./build-process.md) +- [debugging-guIDE](./debugging-guIDE.md) +- [devtools-guIDE](./devtools-guIDE.md) +- [testing-resu.ts](./testing-resu.ts.md) +- [version-management](./version-management.md) + +## Description: + +Результаты тестирования, GuIDEs по отладке, Processes разработки. + +## AI Commands: + +- `добавь в development` - Add запись в эту категорию +- `обнови development` - Update файлы в категории +- `покажи development` - Показать содержимое категории + +--- +*Auto-generated for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/development/build-process.md b/.cursor/backup/rules/memory-bank/development/build-process.md new file mode 100644 index 00000000..1a1ffcf4 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/development/build-process.md @@ -0,0 +1,12 @@ +# build process + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/development/debugging-guide.md b/.cursor/backup/rules/memory-bank/development/debugging-guide.md new file mode 100644 index 00000000..5369fa55 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/development/debugging-guide.md @@ -0,0 +1,12 @@ +# Debugging GuIDE - React-TypeScript + +## Overview + +This file contains debugging procedures and tips. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/development/devtools-guide.md b/.cursor/backup/rules/memory-bank/development/devtools-guide.md new file mode 100644 index 00000000..c0d68911 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/development/devtools-guide.md @@ -0,0 +1,12 @@ +# DevTools GuIDE - React-TypeScript + +## Overview + +This file contains development tools usage. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/development/testing-results.md b/.cursor/backup/rules/memory-bank/development/testing-results.md new file mode 100644 index 00000000..bf105272 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/development/testing-results.md @@ -0,0 +1,12 @@ +# Testing Resu.ts - React-TypeScript + +## Overview + +This file contains testing outcomes and coverage. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/development/version-management.md b/.cursor/backup/rules/memory-bank/development/version-management.md new file mode 100644 index 00000000..67b7e2f6 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/development/version-management.md @@ -0,0 +1,12 @@ +# Version Management - React-TypeScript + +## Overview + +This file contains version control and releases. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/errors/README.md b/.cursor/backup/rules/memory-bank/errors/README.md new file mode 100644 index 00000000..eca2654f --- /dev/null +++ b/.cursor/backup/rules/memory-bank/errors/README.md @@ -0,0 +1,22 @@ +# Errors & Solutions - React-TypeScript + +## Files in this category: + +- [build-errors](./build-errors.md) +- [errors](./errors.md) +- [runtime-errors](./runtime-errors.md) +- [TypeScript-errors](./TypeScript-errors.md) +- [ui-errors](./ui-errors.md) + +## Description: + +Проектно-специфичные ошибки и их решения. + +## AI Commands: + +- `добавь в errors` - Add запись в эту категорию +- `обнови errors` - Update файлы в категории +- `покажи errors` - Показать содержимое категории + +--- +*Auto-generated for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/errors/build-errors.md b/.cursor/backup/rules/memory-bank/errors/build-errors.md new file mode 100644 index 00000000..b0462c1e --- /dev/null +++ b/.cursor/backup/rules/memory-bank/errors/build-errors.md @@ -0,0 +1,12 @@ +# build errors + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/errors/errors.md b/.cursor/backup/rules/memory-bank/errors/errors.md new file mode 100644 index 00000000..33bd85eb --- /dev/null +++ b/.cursor/backup/rules/memory-bank/errors/errors.md @@ -0,0 +1,12 @@ + +## [2025-07-19T01:19:27.379Z] - New Entry + +Best practice: Использовать только ESM-экспорт для внутренних пакетов платформы. Это упрощает сборку, устраняет ошибки Vite/esbuild, ускоряет разработку и повышает Compatibility с современными инструментами. + +--- + +## [2025-07-19T01:19:22.935Z] - General Error + +Error сборки: Failed to resolve entry for package '@extension/vite-config'. Решение: перевести пакет на ESM-only, main: dist/index..js + +--- diff --git a/.cursor/backup/rules/memory-bank/errors/runtime-errors.md b/.cursor/backup/rules/memory-bank/errors/runtime-errors.md new file mode 100644 index 00000000..c8b0744e --- /dev/null +++ b/.cursor/backup/rules/memory-bank/errors/runtime-errors.md @@ -0,0 +1,12 @@ +# runtime errors + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/errors/typescript-errors.md b/.cursor/backup/rules/memory-bank/errors/typescript-errors.md new file mode 100644 index 00000000..7f9bbbfb --- /dev/null +++ b/.cursor/backup/rules/memory-bank/errors/typescript-errors.md @@ -0,0 +1,12 @@ +# TypeScript errors + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/errors/ui-errors.md b/.cursor/backup/rules/memory-bank/errors/ui-errors.md new file mode 100644 index 00000000..19cf9b26 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/errors/ui-errors.md @@ -0,0 +1,12 @@ +# ui errors + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/memory-bank-controller.mdc b/.cursor/backup/rules/memory-bank/memory-bank-controller.mdc new file mode 100644 index 00000000..de782b38 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/memory-bank-controller.mdc @@ -0,0 +1,309 @@ +# Memory Bank Controller - Система управления memory-bank + +## 🎯 **Принцип: Memory-bank полностью подчинен .cursor правилам** + +### **Обоснование:** +- ✅ Оба каталога предназначены исключительно для AI +- ✅ Единая система правил и стандартов +- ✅ Автоматизация всех процессов +- ✅ Консистентность и предсказуемость +- ✅ Масштабируемость и поддерживаемость + +## 📋 **Структура управления memory-bank** + +### **1. Автоматическое создание структуры** +```bash +# Команда для создания структуры memory-bank +node cursor-manager..js create-memory-structure [project-type] + +# Поддерживаемые Typeы проектов: +- React-TypeScript # React + TypeScript проекты +- node-API # Node.js API проекты +- chrome-extension # Chrome Extension проекты +- monorepo # Монорепозитории +- fullstack # Full-stack приложения +``` + +### **2. Шаблоны структуры для разных Typeов проектов** + +#### **React TypeScript Project:** +``` +memory-bank/ +├── core/ +│ ├── activeContext.md # Текущий контекст React проекта +│ ├── progress.md # Development progress React компонентов +│ ├── projectbrief.md # Description React проекта +│ └── session-log.md # Лог сессий React разработки +├── errors/ +│ ├── errors.md # Ошибки React/TypeScript +│ ├── build-errors.md # Ошибки сборки Vite/Webpack +│ ├── runtime-errors.md # Runtime ошибки React +│ └── ui-errors.md # UI/UX ошибки +├── architecture/ +│ ├── decisions.md # Architectural decisions React +│ ├── patterns.md # React Patterns +│ ├── State-management.md # Управление Stateм +│ └── component-structure.md # Структура компонентов +├── development/ +│ ├── testing-resu.ts.md # Результаты тестирования React +│ ├── debugging-guIDE.md # Debugging React приложений +│ ├── devtools-guIDE.md # React DevTools +│ └── version-management.md # Управление версиями +├── ui/ +│ ├── component-library.md # Библиотека компонентов +│ ├── styling-patterns.md # Patterns стилизации +│ └── responsive-design.md # Адаптивный Design +├── planning/ +│ ├── feature-roadmap.md # Roadmap фич +│ ├── optimization-plans.md # Планы оптимизации +│ └── migration-plans.md # Планы миграции +├── context/ +│ ├── tech-stack.md # Технический стек +│ ├── dependencies.md # Dependencies проекта +│ └── environment.md # Окружение разработки +└── deprecated/ + └── old-files.md # Deprecated files +``` + +#### **Chrome Extension Project:** +``` +memory-bank/ +├── core/ +│ ├── activeContext.md # Текущий контекст extension +│ ├── progress.md # Development progress extension +│ ├── projectbrief.md # Description extension +│ └── session-log.md # Лог сессий разработки +├── errors/ +│ ├── errors.md # Ошибки extension +│ ├── manifest-errors.md # Ошибки manifest.json +│ ├── permission-errors.md # Ошибки разрешений +│ └── API-errors.md # Ошибки Chrome APIs +├── architecture/ +│ ├── decisions.md # Architectural decisions +│ ├── background-scri.ts.md # Background scri.ts +│ ├── content-scri.ts.md # Content scri.ts +│ └── popup-structure.md # Структура popup +├── development/ +│ ├── testing-resu.ts.md # Testing extension +│ ├── debugging-guIDE.md # Debugging extension +│ ├── devtools-guIDE.md # Chrome DevTools +│ └── version-management.md # Управление версиями +├── ui/ +│ ├── popup-design.md # Design popup +│ ├── options-page.md # Страница настроек +│ └── content-ui.md # UI в content scri.ts +├── planning/ +│ ├── feature-roadmap.md # Roadmap фич +│ ├── store-publishing.md # Публикация в store +│ └── user-feedback.md # Обратная связь пользователей +├── context/ +│ ├── chrome-APIs.md # Используемые Chrome APIs +│ ├── permissions.md # Требуемые разрешения +│ └── environment.md # Окружение разработки +└── deprecated/ + └── old-files.md # Deprecated files +``` + +## 🔄 **Автоматизация процессов memory-bank** + +### **1. Автоматическое создание записей** +```bash +# Команды для автоматического создания записей +node cursor-manager..js memory-add "content" --type=error --category=build +node cursor-manager..js memory-add "content" --type=decision --category=architecture +node cursor-manager..js memory-add "content" --type=progress --category=feature +``` + +### **2. Автоматическое обновление контекста** +```bash +# Обновление активного контекста +node cursor-manager..js memory-update-context --auto +node cursor-manager..js memory-update-progress --auto +node cursor-manager..js memory-update-session --auto +``` + +### **3. Автоматическое Recovery контекста** +```bash +# Recovery полного контекста +node cursor-manager..js memory-restore --full +node cursor-manager..js memory-restore --quick +node cursor-manager..js memory-restore --category=errors +``` + +## 📝 **Правила создания и сохранения контекста** + +### **1. Структура записей (унифицированная)** +```markdown +## [YYYY-MM-DD HH:MM:SS] - Краткое Description + +**Type:** error|decision|progress|context|plan +**Category:** build|runtime|architecture|ui|testing|planning +**Priority:** critical|high|medium|low + +**Контекст:** Description ситуации и обстоятельств + +**Детали:** Подробная информация о проблеме/решении + +**Решение/Результат:** Что было сделано и результат + +**Status:** ✅ Решено | 🔄 In Progress | ❌ Проблема | 📋 План + +**Связанные файлы:** +- .cursor/rules/dev/development-principles.mdc +- memory-bank/errors/build-errors.md + +**Теги:** #React #TypeScript #build #vite + +**AI Команды:** +- `аудит cursor` - для проверки .cursor правил +- `задокументируй` - для создания документации +``` + +### **2. Автоматические теги и категоризация** +```JavaScript +// Автоматическое определение тегов +const autoTags = { + 'React': /React.jsx|component|hook/i, + 'TypeScript': /TypeScript.ts|type|interface/i, + 'build': /build|compile|vite|webpack/i, + 'runtime': /runtime|error|crash|exception/i, + 'ui': /ui|ux|component|styling/i, + 'testing': /test|spec|jest|cypress/i, + 'architecture': /architecture|pattern|structure/i +}; +``` + +### **3. Автоматическое связывание с .cursor правилами** +```JavaScript +// Автоматическое создание связей +const ruleConnections = { + 'error': '.cursor/rules/dev/error-handling.mdc', + 'architecture': '.cursor/rules/architecture/patterns.mdc', + 'testing': '.cursor/rules/dev/testing-troubleshooting.mdc', + 'ui': '.cursor/rules/ui/ui-patterns.mdc', + 'build': '.cursor/rules/dev/build-troubleshooting.mdc' +}; +``` + +## 🤖 **AI Команды для управления memory-bank** + +### **1. Команды создания и обновления** +```bash +# Создание новой записи +"создай запись в memory-bank" / "add memory entry" +"добавь ошибку в memory-bank" / "add error to memory" +"запиши решение в memory-bank" / "record solution" + +# Обновление существующих записей +"обнови контекст" / "update context" +"обнови прогресс" / "update progress" +"обнови сессию" / "update session" +``` + +### **2. Команды восстановления и поиска** +```bash +# Recovery контекста +"восстанови контекст" / "restore context" +"восстанови полный контекст" / "restore full context" +"быстрое Recovery" / "quick restore" + +# Поиск информации +"найди в memory-bank" / "search memory" +"покажи ошибки" / "show errors" +"покажи решения" / "show solutions" +``` + +### **3. Команды управления структурой** +```bash +# Управление структурой +"создай структуру memory-bank" / "create memory structure" +"реорганизуй memory-bank" / "reorganize memory" +"очисти memory-bank" / "clean memory" +"аудит memory-bank" / "audit memory" +``` + +## 🔧 **Integration с существующими .cursor правилами** + +### **1. Обновление documentation-helper..js** +```JavaScript +// Add поддержку memory-bank команд +const memoryCommands = { + 'memory-add': 'Add запись в memory-bank', + 'memory-update': 'Update запись в memory-bank', + 'memory-restore': 'Восстановить контекст из memory-bank', + 'memory-search': 'Поиск в memory-bank', + 'memory-audit': 'Аудит memory-bank' +}; +``` + +### **2. Обновление ai-memory.mdc** +```markdown +### Memory Bank Management: +- `создай запись в memory-bank` - Create новую запись с автоматической категоризацией +- `обнови контекст` - Update activeContext.md с текущим Statusом +- `восстанови контекст` - Восстановить полный контекст из memory-bank +- `аудит memory-bank` - Провести аудит и оптимизацию memory-bank +- `реорганизуй memory-bank` - Реорганизовать структуру по новым правилам +``` + +### **3. Обновление cursor-manager..js** +```JavaScript +// Add команды управления memory-bank +case 'memory-add': + await this.memoryAdd(options); + break; +case 'memory-update': + await this.memoryUpdate(options); + break; +case 'memory-restore': + await this.memoryRestore(options); + break; +case 'memory-audit': + await this.memoryAudit(options); + break; +``` + +## 📊 **Автоматические отчеты и аналитика** + +### **1. Отчеты по memory-bank** +```bash +# Генерация отчетов +node cursor-manager..js memory-report --type=errors +node cursor-manager..js memory-report --type=progress +node cursor-manager..js memory-report --type=full +``` + +### **2. Аналитика использования** +```JavaScript +// Метрики memory-bank +const metrics = { + totalEntries: 0, + entriesByCategory: {}, + entriesByType: {}, + recentActivity: [], + mostReferencedRules: [], + errorResolutionRate: 0 +}; +``` + +## ✅ **Результат полной интеграции** + +### **Преимущества:** +- ✅ **Единая система правил** - все управляется через .cursor +- ✅ **Автоматизация** - Minimum ручного вмешательства +- ✅ **Консистентность** - единообразные форматы и структуры +- ✅ **Масштабируемость** - легко добавлять новые Typeы проектов +- ✅ **AI-Optimization** - все правила учитывают потребности AI +- ✅ **Воспроизводимость** - одинаковые результаты на разных проектах + +### **Workflow:** +1. **Создание проекта** → Автоматическое создание структуры memory-bank +2. **Development** → Автоматическое создание записей через AI команды +3. **Recovery контекста** → Автоматическое чтение и анализ memory-bank +4. **Аудит и Optimization** → Регулярные проверки и улучшения + +**Memory-bank теперь полностью интегрирован с .cursor правилами!** 🚀 +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/memory-bank/planning/README.md b/.cursor/backup/rules/memory-bank/planning/README.md new file mode 100644 index 00000000..d61ef5fc --- /dev/null +++ b/.cursor/backup/rules/memory-bank/planning/README.md @@ -0,0 +1,21 @@ +# Planning & Roadmap - React-TypeScript + +## Files in this category: + +- [feature-roadmap](./feature-roadmap.md) +- [migration-plans](./migration-plans.md) +- [optimization-plans](./optimization-plans.md) +- [tech-debt](./tech-debt.md) + +## Description: + +Планы развития проекта, roadmap, стратегические решения. + +## AI Commands: + +- `добавь в planning` - Add запись в эту категорию +- `обнови planning` - Update файлы в категории +- `покажи planning` - Показать содержимое категории + +--- +*Auto-generated for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/planning/feature-roadmap.md b/.cursor/backup/rules/memory-bank/planning/feature-roadmap.md new file mode 100644 index 00000000..90ffb932 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/planning/feature-roadmap.md @@ -0,0 +1,12 @@ +# Feature Roadmap - React-TypeScript + +## Overview + +This file contains feature planning and roadmap. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/planning/migration-plans.md b/.cursor/backup/rules/memory-bank/planning/migration-plans.md new file mode 100644 index 00000000..012f80e1 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/planning/migration-plans.md @@ -0,0 +1,12 @@ +# migration plans + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/planning/optimization-plans.md b/.cursor/backup/rules/memory-bank/planning/optimization-plans.md new file mode 100644 index 00000000..a31a1b10 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/planning/optimization-plans.md @@ -0,0 +1,12 @@ +# optimization plans + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/planning/tech-debt.md b/.cursor/backup/rules/memory-bank/planning/tech-debt.md new file mode 100644 index 00000000..01cbe91c --- /dev/null +++ b/.cursor/backup/rules/memory-bank/planning/tech-debt.md @@ -0,0 +1,12 @@ +# tech debt + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/ui/README.md b/.cursor/backup/rules/memory-bank/ui/README.md new file mode 100644 index 00000000..47639357 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/ui/README.md @@ -0,0 +1,22 @@ +# UI/UX Context - React-TypeScript + +## Files in this category: + +- [accessibility](./accessibility.md) +- [component-library](./component-library.md) +- [performance](./performance.md) +- [responsive-design](./responsive-design.md) +- [styling-patterns](./styling-patterns.md) + +## Description: + +UI/UX решения и улучшения, User Experience. + +## AI Commands: + +- `добавь в ui` - Add запись в эту категорию +- `обнови ui` - Update файлы в категории +- `покажи ui` - Показать содержимое категории + +--- +*Auto-generated for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/ui/accessibility.md b/.cursor/backup/rules/memory-bank/ui/accessibility.md new file mode 100644 index 00000000..e80643a1 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/ui/accessibility.md @@ -0,0 +1,12 @@ +# accessibility + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/ui/component-library.md b/.cursor/backup/rules/memory-bank/ui/component-library.md new file mode 100644 index 00000000..5c32e785 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/ui/component-library.md @@ -0,0 +1,12 @@ +# component library + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/ui/performance.md b/.cursor/backup/rules/memory-bank/ui/performance.md new file mode 100644 index 00000000..e7b7c8ed --- /dev/null +++ b/.cursor/backup/rules/memory-bank/ui/performance.md @@ -0,0 +1,12 @@ +# performance + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/ui/responsive-design.md b/.cursor/backup/rules/memory-bank/ui/responsive-design.md new file mode 100644 index 00000000..d26e30f1 --- /dev/null +++ b/.cursor/backup/rules/memory-bank/ui/responsive-design.md @@ -0,0 +1,12 @@ +# responsive design + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/memory-bank/ui/styling-patterns.md b/.cursor/backup/rules/memory-bank/ui/styling-patterns.md new file mode 100644 index 00000000..05d60aae --- /dev/null +++ b/.cursor/backup/rules/memory-bank/ui/styling-patterns.md @@ -0,0 +1,12 @@ +# styling patterns + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/backup/rules/workflow/ci-automation.mdc b/.cursor/backup/rules/workflow/ci-automation.mdc new file mode 100644 index 00000000..202310ac --- /dev/null +++ b/.cursor/backup/rules/workflow/ci-automation.mdc @@ -0,0 +1,85 @@ +--- +description: Automation and synchronization rules +globs: ["**/*.ts", "**/*.js", "**/*.json", "**/*.md", "**/*.mdc"] +alwaysApply: trueaiPriority: medium +aiCategory: process-management +--- + +# CI/CD Automation & Safe Delete Practices + +## GitHub Actions Workflow для .cursor Rules + +Add `.github/workflows/rules-check.yml`: +``.yaml +name: Rules Structure Check +on: + push: + paths: + - '.cursor/rules/**' + pull_request: + paths: + - '.cursor/rules/**' +jobs: + check-rules: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Setup Node.js + uses: actions/setup-node@v3 + with: + node-version: '18' + - name: Generate index and README structure + run: node .cursor/rules/cursor-manager..js full + - name: Check for uncommitted changes + run: | + git diff --exit-code || (echo 'Rules structure is outdated. Please run cursor-manager..js full and commit the result.' && exit 1) +``` + +## Safe Delete Protection + +### Защищенные директории: +- `docs/for-ai-best-practices` +- `memory-bank` +- `platform-core` +- `chrome-extension/public/plugins` +- `.cursor/rules` + +### GitHub Actions Verification: +``.yaml +- name: Check for protected directory deletion + run: | + if git diff --name-status | grep -E 'D[[:space:]]+(docs/for-ai-best-practices|memory-bank|platform-core|chrome-extension/public/plugins|\.cursor/rules)'; then + echo '::warning::Attempted deletion of a protected directory! Review required.' + fi +``` + +## Automated PR Checks с Danger.js + +- Verification детального описания PR +- Verification обновления changelog при изменении кода +- Требование cross-references к правилам +- Напоминание Update документацию при изменении src/core + +## Automated Releases с semantic-release + +- Анализ conventional comm.ts +- Автоматическое обновление CHANGELOG.md +- Создание git tags и релизов +- Запуск автоматически при мерже в main + +## Automated Dependency Updates с Renovate + +- Создание PR с группированными обновлениями +- Все обновления проходят CI и danger.js +- PR помечаются labels: dependencies, renovate +- Automerge отключен (можно включить при желании) + +## Automated Security Audit + +- `pnpm audit` на каждом push/PR +- Отчет о vulnerabilities (moderate и выше) в CI +- Быстрый ответ на критические проблемы +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/backup/rules/workflow/experience-transfer.mdc b/.cursor/backup/rules/workflow/experience-transfer.mdc new file mode 100644 index 00000000..443713ac --- /dev/null +++ b/.cursor/backup/rules/workflow/experience-transfer.mdc @@ -0,0 +1,73 @@ +--- +description: experience transfer rule +globs: ["**/*.ts", "**/*.js", "**/*.json", "**/*.md", "**/*.mdc"] +alwaysApply: falseaiPriority: medium +aiCategory: process-management +--- + +# Experience Transfer & Project Bo.tstrap + +## Автоматизация переноса опыта + +**Автоматизация** — это когда ассистент не просто даёт Tipы, а сам выполняет все технические шаги по внедрению best practices и автоматизаций: + +### Что автоматизируется: +- Автоматически копирует и адаптирует конфиги (husky, danger.js, semantic-release, commitlint, renovate, CI/CD и т.д.) +- Устанавливает необходимые npm-Packages и настраивает их +- Добавляет шаблоны PR, чек-листы, хуки, скрипты +- Вносит изменения в package.json, .github/workflows, .husky/ и другие служебные файлы +- Генерирует или обновляет документацию +- Проводит аудит проекта и сообщает о несоответствиях или необходимых доработках + +### Команда для автоматизации: +``` +Внедри все best practices и автоматизации из .cursor/rules в этот проект, установи необходимые Dependencies, настрой CI/CD, husky, danger.js, semantic-release, commitlint, renovate и т.д. Проведи аудит и сообщи, если что-то требует ручной доработки. +``` + +## Быстрый старт для нового проекта + +### 1. Экспорт из исходного проекта: +```bash +cd .cursor/rules +node cursor-manager..js export new-project-name +``` + +### 2. Копирование в новый проект: +```bash +cp -r cursor-export /path/to/new-project/ +``` + +### 3. Импорт в новый проект: +```bash +cd /path/to/new-project +node cursor-export/import-cursor..js +``` + +### 4. Кастомизация: +```bash +cd .cursor/rules +node cursor-manager..js full +``` + +### 5. Аудит результата: +```bash +node cursor-manager..js status +node cursor-manager..js audit +``` + +## Команды для AI: +- `экспорт cursor` - Export правила для переноса +- `импорт cursor` - Import правила в текущий проект +- `внедри best practices` - Внедрить все автоматизации и Standards +- `аудит проекта` - Провести аудит на соответствие best practices + +## Результат: +- Быстрый старт новых проектов +- Консистентность между проектами +- Автоматизация рутинных задач +- Улучшенное AI-ассистирование +- Стандартизация процессов разработки +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/index.mdc b/.cursor/index.mdc index ecd3c902..64ec9d7d 100644 --- a/.cursor/index.mdc +++ b/.cursor/index.mdc @@ -3,24 +3,24 @@ В этом проекте используются современные Cursor Project Rules: - Все правила хранятся в виде отдельных .mdc-файлов в .cursor/rules/ -- Каждый файл отвечает за отдельный аспект: команды пользователя, best practices, безопасность, workflow и т.д. +- Каждый файл отвечает за отдельный аспект: команды пользователя, best practices, Security, workflow и т.д. ## Ключевые правила: -- [user-commands.mdc](rules/user-commands.mdc) — обработка пользовательских команд -- [development-guidelines.mdc](rules/development-guidelines.mdc) — best practices для разработки -- [security-and-deployment.mdc](rules/security-and-deployment.mdc) — security-стандарты +- [user-Commands.mdc](rules/user-Commands.mdc) — обработка пользовательских команд +- [development-guIDElines.mdc](rules/development-guIDElines.mdc) — best practices для разработки +- [security-and-deployment.mdc](rules/security-and-deployment.mdc) — security-Standards - [knowledge-map.mdc](rules/knowledge-map.mdc) — карта структуры знаний - [memorybank-quality.mdc](rules/memorybank-quality.mdc) — чек-лист качества memory-bank - [automation.mdc](rules/automation.mdc) — автоматизация синхронизации - [workflow.mdc](rules/workflow.mdc) — workflow-правила ветвления -- [project-architecture.mdc](rules/project-architecture.mdc) — архитектура и паттерны -- [testing-and-debugging.mdc](rules/testing-and-debugging.mdc) — тестирование и отладка -- [plugin-development.mdc](rules/plugin-development.mdc) — стандарты для плагинов -- [ui-standards.mdc](rules/ui-standards.mdc) — UI-стандарты -- [architecture-patterns.mdc](rules/architecture-patterns.mdc) — архитектурные паттерны -- [development-principles.mdc](rules/development-principles.mdc) — принципы разработки +- [project-architecture.mdc](rules/project-architecture.mdc) — Architecture и Patterns +- [testing-and-debugging.mdc](rules/testing-and-debugging.mdc) — Testing и Debugging +- [plugin-development.mdc](rules/plugin-development.mdc) — Standards для плагинов +- [ui-standards.mdc](rules/ui-standards.mdc) — UI-Standards +- [architecture-patterns.mdc](rules/architecture-patterns.mdc) — архитектурные Patterns +- [development-principles.mdc](rules/development-principles.mdc) — Principles разработки -Все правила всегда применяются для максимальной автоматизации и прозрачности. +Все правила всегда применяются для максимальной automation и прозрачности. description: globs: alwaysApply: false diff --git a/.cursor/rules/AUTOMATION.md b/.cursor/rules/AUTOMATION.md new file mode 100644 index 00000000..25f94ef3 --- /dev/null +++ b/.cursor/rules/AUTOMATION.md @@ -0,0 +1,205 @@ +# .cursor Automation System + +Комплексная система automation для аудита, исправления и оптимизации каталога `.cursor` для лучшего понимания AI и Cursor. + +## 🎯 **Purpose** + +Система automation обеспечивает: +- **Автоматический аудит** каталога `.cursor` на предмет проблем +- **Исправление** найденных проблем (дубликаты, сломанные ссылки, метаdata) +- **Оптимизацию** правил специально для AI и Cursor +- **Monitoring** состояния и качества правил + +## 🛠️ **Компоненты системы** + +### **1. CursorAuditor** (`audit-cursor..js`) +- Сканирование всех файлов в `.cursor/rules` +- Verification метаданных и их валидности +- Поиск дублирующего контента +- Verification сломанных ссылок +- Validation структуры каталога +- Генерация подробных отчетов + +### **2. CursorFixer** (`fix-cursor..js`) +- Автоматическое исправление метаданных +- Удаление дублирующих файлов +- Исправление сломанных ссылок +- Обновление индексов + +### **3. AIOptimizer** (`optimize-for-ai..js`) +- Optimization метаданных для AI +- Добавление AI-специфичных тегов +- Purpose Priorityов и категорий +- Создание AI-оптимизированных индексов + +### **4. CursorManager** (`cursor-manager..js`) +- Главный Interface для всех операций +- Управление workflow +- Генерация отчетов о Statusе +- CLI Interface + +## 🚀 **Usage** + +### **Базовые команды:** + +```bash +# Показать справку +node cursor-manager..js help + +# Check Status +node cursor-manager..js status + +# Запустить аудит +node cursor-manager..js audit + +# Применить исправления +node cursor-manager..js fix + +# Оптимизировать для AI +node cursor-manager..js optimize + +# Полный workflow +node cursor-manager..js full +``` + +### **Опции:** + +```bash +#.json вывод для аудита +node cursor-manager..js audit -.json + +# Пропустить аудит перед исправлениями +node cursor-manager..js fix --no-audit-first + +# Пропустить аудит после оптимизации +node cursor-manager..js optimize --no-audit-after +``` + +## 📊 **Что проверяет аудит** + +### **Файлы и структура:** +- Общее Quantity файлов +- Соотношение `.mdc` и `.md` файлов +- Наличие обязательных директорий +- Наличие обязательных файлов + +### **Метаdata:** +- Наличие.yaml frontmatter +- Валидность полей `description`, `globs`, `alwaysApply` +- AI-специфичные поля `aiPriority`, `aiCategory` + +### **Контент:** +- Дублирующий контент между файлами +- Сломанные ссылки в документации +- Консистентность структуры + +### **AI-Optimization:** +- Priorityы правил (critical, high, medium, normal) +- Категории (system-design, development-practices, etc.) +- AI-специфичные теги и Comme.ts + +## 🤖 **AI-специфичные оптимизации** + +### **Priorityы:** +- **critical**: Применяется ко всему коду и решениям +- **high**: Применяется к большинству задач +- **medium**: Применяется когда релевантно +- **normal**: Применяется когда уместно + +### **Категории:** +- **system-design**: Architecture и структура системы +- **development-practices**: Standards кодирования +- **documentation**: Documentation и Communication +- **plugin-development**: Правила для плагинов +- **security**: Security +- **user-interface**: UI/UX Standards +- **process-management**: Workflow и Processes +- **ai-optimization**: AI-специфичные оптимизации + +## 📈 **Отчеты и метрики** + +### **Статистика:** +- Общее Quantity файлов +- Файлы с/без метаданных +- Quantity проблем +- Процент AI-готовности + +### **Проблемы:** +- Дублирующий контент +- Сломанные ссылки +- Невалидные метаdata +- Отсутствующие файлы/директории + +### **Recommendations:** +- Конвертация `.md` в `.mdc` +- Добавление метаданных +- Удаление дубликатов +- Исправление ссылок + +## 🔄 **Workflow** + +### **Полный workflow (`full`):** +1. **Аудит** - поиск проблем +2. **Исправления** - автоматическое решение +3. **Optimization** - AI-специфичные улучшения +4. **Финальный аудит** - Verification результатов +5. **Отчет** - сравнение до/после + +### **Инкрементальный workflow:** +- `audit` → анализ проблем +- `fix` → исправление +- `optimize` → Optimization +- `status` → Monitoring + +## 📝 **Integration с AI** + +### **Автоматические команды:** +Система интегрирована с AI memory-bank через команды: +- `аудит cursor` / `cursor audit` +- `исправь cursor` / `cursor fix` +- `оптимизируй cursor` / `cursor optimize` +- `полный cursor` / `cursor full` +- `Status cursor` / `cursor status` + +### **AI-оптимизированные файлы:** +- `ai-optimization.mdc` - инструкции для AI +- `ai-index.mdc` - индекс по Priorityам +- AI-теги в каждом файле +- Priorityы и категории в метаданных + +## 🎯 **Результаты** + +После полной оптимизации: +- ✅ Все файлы имеют правильные метаdata +- ✅ Нет дублирующего контента +- ✅ Все ссылки работают +- ✅ AI-специфичные оптимизации применены +- ✅ Priorityы и категории назначены +- ✅ Автоматическое применение критических правил + +## 🔧 **Расширение системы** + +### **Добавление новых проверок:** +1. Create Method в `CursorAuditor` +2. Add в основной workflow +3. Update отчеты + +### **Добавление новых исправлений:** +1. Create Method в `CursorFixer` +2. Интегрировать в процесс исправления +3. Add в отчеты + +### **Добавление новых оптимизаций:** +1. Create Method в `AIOptimizer` +2. Add AI-специфичную логику +3. Update валидацию + +## 📚 **Связанные файлы** + +- `audit-cursor..js` - Аудит системы +- `fix-cursor..js` - Исправления +- `optimize-for-ai..js` - AI Optimization +- `cursor-manager..js` - Главный Interface +- `ai-optimization.mdc` - AI инструкции +- `ai-index.mdc` - AI индекс +- `ai-memory.mdc` - Команды для AI \ No newline at end of file diff --git a/.cursor/rules/EXPERIENCE-TRANSFER.md b/.cursor/rules/EXPERIENCE-TRANSFER.md new file mode 100644 index 00000000..190ccf3d --- /dev/null +++ b/.cursor/rules/EXPERIENCE-TRANSFER.md @@ -0,0 +1,279 @@ +# Experience Transfer Best Practices + +Руководство по переносу опыта работы с Cursor и AI между проектами через систему `.cursor`. + +## 🎯 **Почему `.cursor` лучше `docs/for-ai-best-practices`** + +### **Автоматическое применение** +- ✅ Cursor автоматически читает все файлы из `.cursor/rules/` +- ✅ Правила применяются без дополнительной Settings +- ✅ AI получает контекст сразу при создании чата + +### **Стандартизация** +- ✅ `.cursor` - стандартное место для правил Cursor +- ✅ Все разработчики знают, где искать правила +- ✅ Единообразие между проектами + +### **Структурированность** +- ✅ Четкая иерархия (architecture, dev, doc, plugin, etc.) +- ✅ Метаdata с Priorityами и Categoryми +- ✅ Автоматическая Validation и Optimization + +## 🚀 **Стратегия переноса опыта** + +### **1. Экспорт из исходного проекта** + +```bash +# Из папки .cursor/rules исходного проекта +node cursor-manager..js export + +# С указанием целевого проекта +node cursor-manager..js export my-new-project +``` + +**Создается папка `cursor-export/` с:** +- Все правила по Categoryм +- Скрипты automation +- Инструкции по импорту +- Автоматический скрипт импорта + +### **2. Импорт в целевой проект** + +```bash +# Скопировать cursor-export в целевой проект +cp -r cursor-export /path/to/new-project/ + +# Запустить импорт +cd /path/to/new-project +node cursor-export/import-cursor..js +``` + +### **3. Кастомизация для нового проекта** + +```bash +# Перейти в .cursor/rules +cd .cursor/rules + +# Запустить полную оптимизацию +node cursor-manager..js full + +# Check Status +node cursor-manager..js status +``` + +## 📋 **Что переносится** + +### **Core Rules (обязательные)** +- `ai-memory.mdc` - команды для AI (кастомизировать!) +- `environment.mdc` - Constrai.ts окружения (кастомизировать!) +- `index.mdc` - индекс правил +- `README.mdc` - Documentation структуры + +### **Categories (по необходимости)** +- **architecture/** - архитектурные правила +- **dev/** - Principles разработки +- **doc/** - Standards документации +- **plugin/** - правила для плагинов +- **security/** - правила безопасности +- **ui/** - UI/UX Standards +- **workflow/** - Processes разработки + +### **Automation (Required)** +- `audit-cursor..js` - аудит системы +- `fix-cursor..js` - автоматические исправления +- `optimize-for-ai..js` - AI Optimization +- `cursor-manager..js` - главный Interface + +## 🔧 **Кастомизация для нового проекта** + +### **1. Update environment.mdc** +``.mdc +--- +description: Critical environment limitations +globs: ["**/*"] +alwaysApply: true +aiPriority: critical +aiCategory: environment +--- + +# Environment Constrai.ts + +## Node.js Version +- Required: Node.js 18+ (Update для вашего проекта) + +## Browser Support +- Chrome: 120+ (Update для вашего проекта) +- Firefox: 115+ (Update для вашего проекта) + +## build Tools +- Vite: 5+ (Update для вашего проекта) +- TypeScript: 5+ (Update для вашего проекта) +``` + +### **2. Update ai-memory.mdc** +``.mdc +--- +description: User Commands and AI instructions +globs: ["**/*"] +alwaysApply: true +aiPriority: critical +aiCategory: ai-optimization +--- + +# AI Memory Bank + +## Project-Specific Commands +- `build project` - Собрать проект (Update команды) +- `test project` - Запустить тесты (Update команды) +- `deploy project` - Деплой проекта (Update команды) + +## Project Context +- This is a [Type проекта] (Update Description) +- Main technology stack: [стек] (Update стек) +- Key features: [особенности] (Update особенности) +``` + +### **3. Update monorepo-best-practices.mdc** +``.mdc +--- +description: Monorepo structure and guIDElines +globs: ["**/*"] +alwaysApply: true +aiPriority: high +aiCategory: system-design +--- + +# Monorepo Best Practices + +## Project Structure +``` +project/ +├── packages/ # (Update структуру) +├── apps/ # (Update структуру) +├── tools/ # (Update структуру) +└── docs/ # (Update структуру) +``` + +## Package Management +- Package manager: pnpm (Update если нужно) +- Workspace configuration: pnpm-workspace.yaml (Update) +``` + +## 📊 **Workflow переноса** + +### **Полный цикл:** +1. **Экспорт** из исходного проекта +2. **Копирование** в целевой проект +3. **Импорт** с автоматической настройкой +4. **Кастомизация** под новый проект +5. **Validation** и Optimization +6. **Testing** работы AI + +### **Команды для AI:** +```bash +# Экспорт +экспорт cursor +экспорт cursor [проект] + +# Импорт (в целевом проекте) +импорт cursor + +# Verification +Status cursor +полный cursor +``` + +## 🎯 **Best Practices** + +### **1. Инкрементальный перенос** +- Начните с core rules +- Добавляйте категории по мере необходимости +- Тестируйте каждую категорию + +### **2. Кастомизация обязательна** +- Всегда обновляйте `environment.mdc` +- Адаптируйте `ai-memory.mdc` под проект +- Проверяйте актуальность правил + +### **3. Validation после импорта** +```bash +cd .cursor/rules +node cursor-manager..js status +node cursor-manager..js audit +node cursor-manager..js optimize +``` + +### **4. Documentation изменений** +- Ведите changelog изменений +- Комментируйте кастомизации +- Обновляйте README проекта + +### **5. Обратная Compatibility** +- Сохраняйте структуру категорий +- Не удаляйте обязательные файлы +- Тестируйте на разных проектах + +## 🔄 **Автоматизация** + +### **Скрипт быстрого переноса:** +```bash +#!/bin/bash +# quick-transfer.sh + +SOURCE_PROJECT=$1 +TARGET_PROJECT=$2 + +echo "🚀 Quick transfer from $SOURCE_PROJECT to $TARGET_PROJECT" + +# Экспорт из исходного проекта +cd $SOURCE_PROJECT/.cursor/rules +node cursor-manager..js export $TARGET_PROJECT + +# Копирование в целевой проект +cp -r cursor-export $TARGET_PROJECT/ + +# Импорт в целевой проект +cd $TARGET_PROJECT +node cursor-export/import-cursor..js + +# Очистка +rm -rf cursor-export + +echo "✅ Transfer completed!" +``` + +### **Git hooks для automation:** +```bash +# .git/hooks/post-merge +#!/bin/bash +if [ -d ".cursor/rules" ]; then + cd .cursor/rules + node cursor-manager..js status +fi +``` + +## 📈 **Метрики успеха** + +### **После переноса проверьте:** +- ✅ Все файлы имеют правильные метаdata +- ✅ AI команды работают в новом проекте +- ✅ Автоматизация функционирует +- ✅ Нет конфликтов с существующими правилами +- ✅ Performance AI не снизилась + +### **Долгосрочные метрики:** +- Скорость onboarding новых разработчиков +- Quality AI-ассистированной разработки +- Консистентность кода между проектами +- Time на настройку новых проектов + +## 🎉 **Результат** + +После правильного переноса: +- **Быстрый старт** новых проектов +- **Консистентность** между проектами +- **Автоматизация** рутинных задач +- **Улучшенное** AI-ассистирование +- **Стандартизация** процессов разработки + +**Система `.cursor` обеспечивает эффективный перенос опыта между проектами с минимальными усилиями!** 🚀 \ No newline at end of file diff --git a/.cursor/rules/README.mdc b/.cursor/rules/README.mdc new file mode 100644 index 00000000..60abfdb3 --- /dev/null +++ b/.cursor/rules/README.mdc @@ -0,0 +1,117 @@ + +# .cursor/rules: Project Rules & AI Onboarding + +This directory contains all rules and standards for automation and AI assista.ts in the Agent Plugins Platform. + +## Principles +- Each rule is a separate .mdc file (one rule — one file) +- Grouped by topic: development principles, architecture, plugin standards, UI/UX, workflow, documentation, etc. +- Each file contains: a short description, globs, the rule .tself, and (optionally) examples or related links +- All rules are in English for international compatibility +- README and index.mdc help with navigation and search + +## CLI Scri.ts + +- **create-rule.js** — Interactive CLI to create a new .mdc rule file from a template. Prom.ts for all required fields and updates index/README automatically. + - Usage: `node .cursor/rules/create-rule.js` +- **generate-rules-index.js** — Scans all .mdc files and regenerates `index.mdc` and the structure section in `README.md`. + - Usage: `node .cursor/rules/generate-rules-index.js` +- **check-rules-structure.js** — Validates all .mdc files for required sections, uniqueness, and valid related links. Used in CI. + - Usage: `node .cursor/rules/check-rules-structure.js` + +## Current Structure +``` +.cursor/ + rules/ + # Root level - critical rules + ai-memory.mdc # User Commands and AI instructions + environment.mdc # Critical environment limitations + monorepo-best-practices.mdc # Monorepo structure and guIDElines + TypeScript-build-troubleshooting.mdc # TypeScript build error solutions + README.mdc # Main documentation + index.mdc # Rules index and navigation + + architecture/ # System architecture rules + architecture-chat-system.mdc + architecture-error-handling.mdc + architecture-observability.mdc + architecture-performance.mdc + architecture-plugin.mdc + architecture-project-structure.mdc + architecture-security.mdc + architecture-workflow.mdc + project-architecture.mdc + + dev/ # Development principles and guIDElines + dev-principle-01-do-no-harm.mdc + dev-principle-03-best-practices.mdc + dev-principle-04-fail-fast-safe.mdc + dev-principle-05-observability.mdc + dev-principle-06-config-as-code.mdc + dev-principle-07-progressive-enhancement.mdc + dev-principle-08-data-integrity-privacy.mdc + dev-principle-09-continuous-learning.mdc + dev-principle-10-ecosystem-thinking.mdc + development-guIDElines.mdc + security-and-deployment.mdc + testing-and-debugging.mdc + TypeScript.mdc + git-workflow.mdc + + doc/ # Documentation and AI standards + ai-first.mdc # AI-oriented documentation standards + knowledge-map.mdc # Project knowledge structure + memorybank-quality.mdc # Memory-bank quality standards + restore-context.mdc # Context restoration procedures + .mdc-file-standards.mdc # .mdc file creation standards + ai-fallback.mdc # AI fallback procedures + + plugin/ # Plugin development standards + plugin-best-practices.mdc + plugin-documentation.mdc + plugin-error-handling.mdc + plugin-performance.mdc + plugin-security.mdc + plugin-structure.mdc + plugin-testing.mdc + + security/ # Security standards + validation.mdc # Input validation rules + + ui/ # UI/UX standards + ui-accessibility.mdc + ui-animation.mdc + ui-error-handling.mdc + ui-forms.mdc + ui-loading-States.mdc + ui-mobile.mdc + ui-navigation.mdc + ui-performance.mdc + ui-React-compone.ts.mdc + ui-styling.mdc + ui-testing.mdc + + workflow/ # Development workflow + automation.mdc + branches.mdc + workflow.mdc +``` + +## AI Fallback Rule + +If an AI agent cannot answer a question from .ts own memory-bank, it must first check the .rules directory, then the memory-bank directory. See [doc/ai-fallback.mdc](./doc/ai-fallback.mdc). + +## Main GitHub Repository + +HTTPS://github.com/LebedevIV/agent-plugins-platform-boilerplate + +## How to Use +- The AI assistant should always refer to specific .mdc files when making decisions +- To add a new rule: create a separate .mdc file in the appropriate section (preferably via the CLI) +- To find a rule: use index.mdc or README.md, or search by file name +>>>>>>> origin/develop + +## How to Use +- The AI assistant should always refer to specific .mdc files when making decisions +- To add a new rule: create a separate .mdc file in the appropriate section (preferably via the CLI) +- To find a rule: use index.mdc or README.md, or search by file name \ No newline at end of file diff --git a/.cursor/rules/ai-index.mdc b/.cursor/rules/ai-index.mdc new file mode 100644 index 00000000..823bcc83 --- /dev/null +++ b/.cursor/rules/ai-index.mdc @@ -0,0 +1,89 @@ +--- +description: AI-optimized index of rules by priority and category +globs: ["**/*"] +alwaysApply: true +aiPriority: critical +aiCategory: ai-optimization +--- + +# AI-Optimized Rules Index + +## Critical Priority Rules +*Must be applied to all code and decisions* + +- [Ai Index](ai-index.mdc) — AI-optimized index of rules by priority and category +- [Ai Memory](ai-memory.mdc) — User Commands and AI instructions +- [Ai Optimization](ai-optimization.mdc) — AI-specific instructions and optimizations for .cursor rules +- [Ai Memory](cursor-export/ai-memory.mdc) — User Commands and AI instructions +- [Environment](cursor-export/environment.mdc) — Critical environment constrai.ts - Node.js version, popup vs sIDEpanel + +## High Priority Rules +*Should be applied to most code and decisions* + +- [Architecture Chat System](architecture/architecture-chat-system.mdc) — Architecture rule for chat-system +- [Architecture Error Handling](architecture/architecture-error-handling.mdc) — Architecture rule for error-handling +- [Architecture Observability](architecture/architecture-observability.mdc) — Architecture rule for observability +- [Architecture Performance](architecture/architecture-performance.mdc) — Architecture rule for performance +- [Architecture Plugin](architecture/architecture-plugin.mdc) — Architecture rule for plugin +- [Architecture Project Structure](architecture/architecture-project-structure.mdc) — Architecture rule for project-structure +- [Architecture Security](architecture/architecture-security.mdc) — Architecture rule for security +- [Architecture Workflow](architecture/architecture-workflow.mdc) — Architecture rule for workflow +- [Project Architecture](architecture/project-architecture.mdc) — Architecture rule for project-architecture +- [Dev Principle 01 Do No Harm](cursor-export/dev/dev-principle-01-do-no-harm.mdc) — Development principle harm - dev principle 01 do no harm +- [Dev Principle 03 Best Practices](cursor-export/dev/dev-principle-03-best-practices.mdc) — Development principle practices - dev principle 03 best practices +- [Dev Principle 04 Fail Fast Safe](cursor-export/dev/dev-principle-04-fail-fast-safe.mdc) — Development principle safe - dev principle 04 fail fast safe +- [Dev Principle 05 Observability](cursor-export/dev/dev-principle-05-observability.mdc) — Development principle observability - dev principle 05 observability +- [Dev Principle 06 config As Code](cursor-export/dev/dev-principle-06-config-as-code.mdc) — Development principle code - dev principle 06 config as code +- [Dev Principle 07 Progressive Enhancement](cursor-export/dev/dev-principle-07-progressive-enhancement.mdc) — Development principle enhancement - dev principle 07 progressive enhancement +- [Dev Principle 08 data Integrity Privacy](cursor-export/dev/dev-principle-08-data-integrity-privacy.mdc) — Development principle privacy - dev principle 08 data integrity privacy +- [Dev Principle 09 Continuous Learning](cursor-export/dev/dev-principle-09-continuous-learning.mdc) — Development principle learning - dev principle 09 continuous learning +- [Dev Principle 10 Ecosystem Thinking](cursor-export/dev/dev-principle-10-ecosystem-thinking.mdc) — Development principle thinking - dev principle 10 ecosystem thinking + +## Medium Priority Rules +*Apply when relevant to the task* + +- [Ai Fallback](cursor-export/doc/ai-fallback.mdc) — Fallback procedures for AI +- [Ai First](cursor-export/doc/ai-first.mdc) — AI-oriented documentation standards +- .mdc File Standards](cursor-export/doc.mdc-file-standards.mdc) — Standards for .mdc file creation +- [Workflow](cursor-export/workflow/workflow.mdc) — Workflow rule for +- [Ai Answer Self Check](doc/ai-answer-self-check.mdc) — ai answer self check rule +- [Ci Automation](workflow/ci-automation.mdc) — Automation and synchronization rules +- [Experience Transfer](workflow/experience-transfer.mdc) — experience transfer rule + +## Normal Priority Rules +*Apply when appropriate* + +- [README](README.mdc) — Main project rules documentation and AI onboarding - structure, CLI scri.ts, usage +- [Development GuIDElines](cursor-export/dev/development-guIDElines.mdc) — General development guIDElines +- [Git Workflow](cursor-export/dev/git-workflow.mdc) — Git workflow rule - only develop to main, mandatory PR for all changes +- [Security And Deployment](cursor-export/dev/security-and-deployment.mdc) — Security rule for -and-deployment +- [Testing And Debugging](cursor-export/dev/testing-and-debugging.mdc) — Testing and debugging standards +- [TypeScript](cursor-export/dev/TypeScript.mdc) — TypeScript-specific guIDElines +- [Knowledge Map](cursor-export/doc/knowledge-map.mdc) — Project knowledge structure +- [Memorybank Quality](cursor-export/doc/memorybank-quality.mdc) — Quality standards for memory-bank +- [Restore Context](cursor-export/doc/restore-context.mdc) — Context restoration procedures +- [Index](cursor-export/index.mdc) — index rule +- [Monorepo Best Practices](cursor-export/monorepo-best-practices.mdc) — Best practices for monorepo work - structure, dependencies, TypeScript, barrel expo.ts +- [Plugin Best Practices](cursor-export/plugin/plugin-best-practices.mdc) — Plugin standard for best-practices +- [Plugin Documentation](cursor-export/plugin/plugin-documentation.mdc) — Plugin standard for documentation +- [Plugin Error Handling](cursor-export/plugin/plugin-error-handling.mdc) — Plugin standard for error-handling +- [Plugin Performance](cursor-export/plugin/plugin-performance.mdc) — Plugin standard for performance +- [Plugin Security](cursor-export/plugin/plugin-security.mdc) — Plugin standard for security +- [Plugin Structure](cursor-export/plugin/plugin-structure.mdc) — Plugin standard for structure +- [Plugin Testing](cursor-export/plugin/plugin-testing.mdc) — Plugin standard for testing +- [Validation](cursor-export/security/validation.mdc) — Input validation and data sanitization rules +- [TypeScript build Troubleshooting](cursor-export/TypeScript-build-troubleshooting.mdc) — TypeScript build error troubleshooting guIDE - types, barrel expo.ts, dependencies, Tailwin.css +- [Ui Accessibility](cursor-export/ui/ui-accessibility.mdc) — UI standard for accessibility +- [Ui Animation](cursor-export/ui/ui-animation.mdc) — UI standard for animation +- [Ui Error Handling](cursor-export/ui/ui-error-handling.mdc) — UI standard for error-handling +- [Ui Forms](cursor-export/ui/ui-forms.mdc) — UI standard for forms +- [Ui Loading States](cursor-export/ui/ui-loading-States.mdc) — UI standard for loading-States +- [Ui Mobile](cursor-export/ui/ui-mobile.mdc) — UI standard for mobile +- [Ui Navigation](cursor-export/ui/ui-navigation.mdc) — UI standard for navigation +- [Ui Performance](cursor-export/ui/ui-performance.mdc) — UI standard for performance +- [Ui React Compone.ts](cursor-export/ui/ui-React-compone.ts.mdc) — UI standard for React-compone.ts +- [Ui Styling](cursor-export/ui/ui-styling.mdc) — UI standard for styling +- [Ui Testing](cursor-export/ui/ui-testing.mdc) — UI standard for testing +- [Automation](cursor-export/workflow/automation.mdc) — Automation and synchronization rules +- [Branches](cursor-export/workflow/branches.mdc) — Git branch management rules +- [Testing Troubleshooting](dev/testing-troubleshooting.mdc) — Testing and debugging standards diff --git a/.cursor/rules/ai-memory.mdc b/.cursor/rules/ai-memory.mdc new file mode 100644 index 00000000..c74c3224 --- /dev/null +++ b/.cursor/rules/ai-memory.mdc @@ -0,0 +1,38 @@ +# AI Memory Bank - User Commands + +## Commands for AI Assistant Recognition + +### Context and Memory: +- `save context` / `Сохрани контекст` / `Save контекст сессии` - Save achieveme.ts, decisions and plans to memory-bank in English for AI/LLM compatibility (automatically translates and comm.ts) +- `update progress` / `Обнови прогресс` / `Update прогресс проекта` - Update activeContext.md and progress.md with current status +- `restore context` / `Восстанови контекст` / `Восстановить полный контекст` - Study all memory-bank files and restore full project understanding +- `quick restore` / `Быстрое Recovery` - Get brief summary of key principles and current status + +### Analysis and Study: +- `analyze architecture` / `Анализируй архитектуру` / `Анализ архитектуры` - Study systempatterns.md and techContext.md for architecture understanding +- `study plugins` / `Изучи Plugins` - Analyze plugins and their structure +- `check build` / `Проверь сборку` / `Check сборку` - Check that project builds and works correctly +- `update documentation` / `Обнови документацию` / `Update документацию` - Check and update README.md and PLUGIN_DEVELOPMENT.md + +### Development: +- `create plugin [name]` / `Создай плагин [название]` - Create new plugin with specified name +- `check code` / `Проверь код` / `Check линтинг` - Run linting and type checking +- `run te.ts` / `Запусти тесты` / `Запустить тесты` - Run all project te.ts +- `check dependencies` / `Проверь Dependencies` / `Check Dependencies` - Check dependencies relevance and compatibility + +### Project Management: +- `bump version patch/minor/major` / `Увеличь версию [patch|minor|major]` / `Versioning` - Increase project version according to parameter +- `clean project` / `Очисти проект` / `Очистка проекта` - Clean node_modules, dist and cache +- `analyze performance` / `Анализируй Performance` / `Анализ производительности` - Analyze project performance and suggest optimizations +- `check security` / `Проверь Security` / `Анализ безопасности` - Analyze code and configuration security + +### Releases and Deployment: +- `create release` / `Создай релиз` / `Create релиз` - Prepare project for release (bump version, create ZIP) +- `build production` / `Собери для продакшена` / `build для продакшена` - Perform full production build + +## General Principles: +- Commands can be combined (e.g.: "save context and update progress") +- All actions should consIDEr current project context +- Resu.ts should be saved in appropriate memory-bank files +- If Command is unclear — clarify details with user +- When restoring context — read all key memory-bank files and use only current best practices diff --git a/.cursor/rules/ai-optimization.mdc b/.cursor/rules/ai-optimization.mdc new file mode 100644 index 00000000..e7b985b1 --- /dev/null +++ b/.cursor/rules/ai-optimization.mdc @@ -0,0 +1,46 @@ +--- +description: AI-specific instructions and optimizations for .cursor rules +globs: ["**/*"] +alwaysApply: true +aiPriority: critical +aiCategory: ai-optimization +--- + +# AI Optimization Instructions + +## How AI Should Use These Rules + +### Priority Levels +- **critical**: Must be applied to all code and decisions +- **high**: Should be applied to most code and decisions +- **medium**: Apply when relevant to the task +- **normal**: Apply when appropriate + +### Categories +- **system-design**: Architecture and system structure +- **development-practices**: Coding standards and principles +- **documentation**: Documentation and communication +- **plugin-development**: Plugin-specific rules +- **security**: Security and safety rules +- **user-interface**: UI/UX standards +- **process-management**: Workflow and process rules +- **ai-optimization**: AI-specific optimizations + +### Usage Patterns +1. Always check critical rules first +2. Apply high-priority rules to most tasks +3. Use category-specific rules for targeted tasks +4. Reference related rules when making decisions + +### AI Memory Integration +- These rules are automatically loaded into AI memory-bank +- Use `alwaysApply: true` rules without explicit reference +- Reference specific rules when explaining decisions +- Update rules when patterns change or improve + +## Optimization Status +- ✅ All rules have proper metadata +- ✅ AI-specific tags added +- ✅ Priority levels assigned +- ✅ Categories defined +- ✅ Structure optimized for AI understanding diff --git a/.cursor/rules/architecture/architecture-chat-system.mdc b/.cursor/rules/architecture/architecture-chat-system.mdc index 0faf62ac..3eb5b78c 100644 --- a/.cursor/rules/architecture/architecture-chat-system.mdc +++ b/.cursor/rules/architecture/architecture-chat-system.mdc @@ -1,9 +1,27 @@ +--- +description: Architecture rule for chat-system +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + + + + + +--- +description: Architecture rule for chat-system +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + # Chat System Architecture -- Per-page, per-plugin isolation: Chats separated by page URL and plugin -- LRU Cache: In-memory cache for performance (50 chats) -- IndexedDB: Persistent storage for all chats +- Per-page, per-plugin isolation: Ch.ts separated by page URL and plugin +- LRU cache: In-memory cache for performance (50 ch.ts) +- IndexedDB: Persistent storage for all ch.ts - Real-time sync: Cross-tab communication for chat updates -- Cleanup: Automatic removal of chats older than 90 days +- Cleanup: Automatic removal of ch.ts older than 90 days description: Chat system architecture and data flow globs: diff --git a/.cursor/rules/architecture/architecture-error-handling.mdc b/.cursor/rules/architecture/architecture-error-handling.mdc index 1ae06fc7..7aef574e 100644 --- a/.cursor/rules/architecture/architecture-error-handling.mdc +++ b/.cursor/rules/architecture/architecture-error-handling.mdc @@ -1,3 +1,21 @@ +--- +description: Architecture rule for error-handling +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + + + + + +--- +description: Architecture rule for error-handling +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + # Error Handling (Architecture) - Graceful Degradation: System continues working with reduced functionality - User Feedback: Clear error messages and recovery options @@ -9,7 +27,7 @@ related: - plugin-error-handling.mdc - architecture-security.mdc -description: Error handling requirements for system architecture +description: Error handling requireme.ts for system architecture globs: - platform-core/* - chrome-extension/src/background/* diff --git a/.cursor/rules/architecture/architecture-observability.mdc b/.cursor/rules/architecture/architecture-observability.mdc index ac0377fd..1f47a11f 100644 --- a/.cursor/rules/architecture/architecture-observability.mdc +++ b/.cursor/rules/architecture/architecture-observability.mdc @@ -1,5 +1,23 @@ +--- +description: Architecture rule for observability +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + + + + + +--- +description: Architecture rule for observability +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + # Monitoring and Observability (Architecture) -- Structured Logging: Consistent log format across components +- Structured Logging: Consistent log format across compone.ts - Performance Metrics: Track execution time and memory usage - Error Tracking: Monitor and alert on critical errors - User Analytics: Track feature usage and performance @@ -9,7 +27,7 @@ related: - architecture-performance.mdc - dev-principle-05-observability.mdc -description: Monitoring and observability requirements for system architecture +description: Monitoring and observability requireme.ts for system architecture globs: - platform-core/* - chrome-extension/src/background/* diff --git a/.cursor/rules/architecture/architecture-performance.mdc b/.cursor/rules/architecture/architecture-performance.mdc index 1345de7e..636e5dc1 100644 --- a/.cursor/rules/architecture/architecture-performance.mdc +++ b/.cursor/rules/architecture/architecture-performance.mdc @@ -1,15 +1,33 @@ -# Performance Guidelines (Architecture) -- Pyodide Loading: Lazy load runtime, cache results +--- +description: Architecture rule for performance +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + + + + + +--- +description: Architecture rule for performance +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + +# Performance GuIDElines (Architecture) +- PyodIDE Loading: Lazy load runtime, cache resu.ts - Memory Management: Clean up resources, monitor usage -- Bundle Size: Optimize for extension size limits +- Bundle Size: Optimize for extension size lim.ts - Caching: Use LRU cache for frequently accessed data -- Async Operations: Non-blocking UI, proper loading states +- Async Operations: Non-blocking UI, proper loading States related: - plugin-performance.mdc - architecture-observability.mdc -description: Performance guidelines for system architecture +description: Performance guIDElines for system architecture globs: - platform-core/* - chrome-extension/src/background/* diff --git a/.cursor/rules/architecture/architecture-plugin.mdc b/.cursor/rules/architecture/architecture-plugin.mdc index 0c93bd89..3ef2571d 100644 --- a/.cursor/rules/architecture/architecture-plugin.mdc +++ b/.cursor/rules/architecture/architecture-plugin.mdc @@ -1,11 +1,29 @@ +--- +description: Architecture rule for plugin +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + + + + + +--- +description: Architecture rule for plugin +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + # Plugin Architecture -- Manifest Structure: manifest.json + mcp_server.py + icon.svg +- Manifest Structure: manifest.json + mcp_server.py +.icon.svg - MCP Protocol: Standard MCP server implementation in Python - Permission Model: Zero Trust - plugins not trusted by default - Isolation: Each plugin in separate worker for security - Communication: chrome.runtime.sendMessage for all cross-component communication -description: Plugin architecture and isolation requirements +description: Plugin architecture and isolation requireme.ts globs: - public/plugins/* alwaysApply: false diff --git a/.cursor/rules/architecture/architecture-project-structure.mdc b/.cursor/rules/architecture/architecture-project-structure.mdc index 81cbb162..6220eeac 100644 --- a/.cursor/rules/architecture/architecture-project-structure.mdc +++ b/.cursor/rules/architecture/architecture-project-structure.mdc @@ -1,7 +1,25 @@ +--- +description: Architecture rule for project-structure +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + + + + + +--- +description: Architecture rule for project-structure +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + # Project Structure Architecture - platform-core/: Main logic and services (keep boilerplate clean) - chrome-extension/src/background/: Core background services -- pages/*/src/: UI components for different extension pages +- pages/*/src/: UI compone.ts for different extension pages - memory-bank/: Project documentation and context - public/plugins/: Plugin implementations diff --git a/.cursor/rules/architecture/architecture-security.mdc b/.cursor/rules/architecture/architecture-security.mdc index d8d4de4a..9e8d63a1 100644 --- a/.cursor/rules/architecture/architecture-security.mdc +++ b/.cursor/rules/architecture/architecture-security.mdc @@ -1,8 +1,26 @@ +--- +description: Architecture rule for security +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + + + + + +--- +description: Architecture rule for security +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + # Security Architecture - Secret Manager: Encrypted storage of API keys in chrome.storage.local - Network Guard: Whitelist domains for API calls -- Audit System: Log all plugin activities and network requests -- Parameter Validation: JSON Schema validation for all inputs +- Audit System: Log all plugin activities and network reque.ts +- Parameter Validation:.json Schema validation for all inp.ts - Rate Limiting: Prevent abuse and suspicious activity related: diff --git a/.cursor/rules/architecture/architecture-workflow.mdc b/.cursor/rules/architecture/architecture-workflow.mdc index 7ff2b4fa..401f5e21 100644 --- a/.cursor/rules/architecture/architecture-workflow.mdc +++ b/.cursor/rules/architecture/architecture-workflow.mdc @@ -1,8 +1,26 @@ +--- +description: Architecture rule for workflow +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + + + + + +--- +description: Architecture rule for workflow +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + # Development Workflow (Architecture) - Feature Branches: Always create from develop branch - Testing: Test before commit, use --no-verify if ESLint issues - Documentation: Update memory-bank for all architectural decisions -- Commits: Use semantic commit messages +- Comm.ts: Use semantic commit messages - Code Quality: TypeScript for new files, ESLint compliance description: Development workflow and process standards diff --git a/.cursor/rules/architecture/file-relationships.mdc b/.cursor/rules/architecture/file-relationships.mdc new file mode 100644 index 00000000..2376e599 --- /dev/null +++ b/.cursor/rules/architecture/file-relationships.mdc @@ -0,0 +1,339 @@ +--- +description: File organization patterns and relationships - universal project structure guIDElines +globs: ["**/*"] +alwaysApply: true +aiPriority: high +aiCategory: system-design +--- + +# Карта взаимосвязей файлов + +## File Structure и их Purpose + +### 1. Background Layer (Слой фоновых сервисов) + +#### `chrome-extension/src/background/plugin-chat-cache.ts` +**Purpose:** Центральный сервис управления чатами +**Dependencies:** +- `plugin-chat-API.ts` - для работы с IndexedDB +- Chrome Extensions API (chrome.runtime, chrome.tabs) + +**Экспортирует:** +- `PluginChatcache` class +- `Chatdata`, `ChatMessage` interfaces + +**Используется:** +- `background/index.ts` - создание экземпляра и регистрация обработчиков + +**Ключевые Methodы:** +```TypeScript +class PluginChatcache { + getChat(pluginId: string, pageKey: string): Promise + saveMessage(pluginId: string, pageKey: string, message: ChatMessage): Promise + deleteChat(pluginId: string, pageKey: string): Promise + getAllCh.ts(): Promise + cleanupOldCh.ts(): Promise +} +``` + +#### `chrome-extension/src/background/plugin-chat-API.ts` +**Purpose:** Abstraction над IndexedDB +**Dependencies:** +- IndexedDB API +- Chrome Extensions API + +**Экспортирует:** +- `Ch.tstorageAPI` class +- database utility functions + +**Используется:** +- `plugin-chat-cache.ts` - для всех операций с Storageм + +**Ключевые Methodы:** +```TypeScript +class Ch.tstorageAPI { + async getChat(pluginId: string, pageKey: string): Promise + async saveChat(chatdata: Chatdata): Promise + async deleteChat(pluginId: string, pageKey: string): Promise + async getAllCh.ts(): Promise + async cleanupOldCh.ts(): Promise +} +``` + +#### `chrome-extension/src/background/index.ts` +**Purpose:** Точка входа background script +**Dependencies:** +- `plugin-chat-cache.ts` - создание экземпляра cacheа +- Chrome Extensions API + +**Используется:** +- Chrome Extensions runtime (автоматически) + +**Основные функции:** +- Инициализация `PluginChatcache` +- Регистрация обработчиков сообщений +- Управление жизненным циклом + +**Обработчики сообщений:** +```TypeScript +chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { + switch (request.type) { + case 'GET_PLUGIN_CHAT': + case 'SAVE_PLUGIN_CHAT_MESSAGE': + case 'DELETE_PLUGIN_CHAT': + case 'GET_ALL_PLUGIN_CH.ts': + } +}); +``` + +### 2. UI Layer (Слой пользовательского Interfaceа) + +#### `pages/sIDE-panel/src/compone.ts/PluginControlPanel.tsx` +**Purpose:** Основной компонент управления плагином +**Dependencies:** +- React hooks (useState, useEffect, useRef) +- Chrome Extensions API (chrome.runtime) +- `PluginDetails.tsx` - для отображения деталей плагина + +**Используется:** +- `pages/sIDE-panel/src/compone.ts/SIDEPanel.tsx` - основной контейнер + +**Ключевые состояния:** +```TypeScript +const [messages, setMessages] = useState([]); +const [loading, setLoading] = useState(false); +const [syncStatus, s.tsyncStatus] = useState<'idle' | 'saving' | 'saved' | 'error'>('idle'); +``` + +**Основные функции:** +- Загрузка чата при монтировании +- Сохранение сообщений +- Synchronization с другими вкладками +- Экспорт и очистка чатов + +#### `pages/sIDE-panel/src/compone.ts/PluginDetails.tsx` +**Purpose:** Отображение деталей плагина +**Dependencies:** +- React +- Plugin interface + +**Используется:** +- `PluginControlPanel.tsx` - как дочерний компонент + +#### `pages/sIDE-panel/src/compone.ts/SIDEPanel.tsx` +**Purpose:** Основной контейнер sIDE panel +**Dependencies:** +- `PluginControlPanel.tsx` +- `PluginCard.tsx` +- React + +**Используется:** +- Chrome Extensions sIDE panel API + +### 3. DevTools Layer (Слой инструментов разработчика) + +#### `pages/devtools-panel/src/compone.ts/PluginCh.tsTab.tsx` +**Purpose:** Административный Interface для управления чатами +**Dependencies:** +- React hooks +- Chrome Extensions API +- `file-saver` library + +**Используется:** +- `pages/devtools-panel/src/index.tsx` - как вкладка в DevTools + +**Основные функции:** +- Отображение всех чатов +- Удаление чатов +- Экспорт в.json +- Фильтрация и поиск + +#### `pages/devtools-panel/src/index.tsx` +**Purpose:** Точка входа DevTools panel +**Dependencies:** +- `PluginCh.tsTab.tsx` +- React + +**Используется:** +- Chrome DevTools API + +### 4. Shared Layer (Общий слой) + +#### `chrome-extension/src/background/types.ts` (предлагаемый) +**Purpose:** Общие Typeы для всей системы +**Dependencies:** +- TypeScript + +**Экспортирует:** +```TypeScript +export interface ChatMessage { + id: string; + role: 'user' | 'assistant'; + content: string; + timestamp: number; +} + +export interface Chatdata { + pluginId: string; + pageKey: string; + messages: ChatMessage[]; + lastUpdated: number; + createdAt: number; +} + +export type ChatRequest = + | { type: 'GET_PLUGIN_CHAT'; pluginId: string; pageKey: string } + | { type: 'SAVE_PLUGIN_CHAT_MESSAGE'; pluginId: string; pageKey: string; message: ChatMessage } + | { type: 'DELETE_PLUGIN_CHAT'; pluginId: string; pageKey: string } + | { type: 'GET_ALL_PLUGIN_CH.ts' }; + +export type ChatEvent = + | { type: 'PLUGIN_CHAT_UPDATED'; pluginId: string; pageKey: string; messages?: ChatMessage[] }; +``` + +**Используется:** +- Все компоненты системы чатов + +## Threads данных между файлами + +### 1. Загрузка чата +``` +PluginControlPanel.tsx + ↓ (chrome.runtime.sendMessage) +background/index.ts + ↓ (chatcache.getChat) +plugin-chat-cache.ts + ↓ (storageAPI.getChat) +plugin-chat-API.ts + ↓ (IndexedDB) +Browser Storage +``` + +### 2. Сохранение сообщения +``` +PluginControlPanel.tsx + ↓ (chrome.runtime.sendMessage) +background/index.ts + ↓ (chatcache.saveMessage) +plugin-chat-cache.ts + ↓ (storageAPI.saveChat + event broadcast) +plugin-chat-API.ts + chrome.tabs.query + ↓ (IndexedDB + other tabs) +Browser Storage + Other UI Compone.ts +``` + +### 3. Административные операции +``` +PluginCh.tsTab.tsx + ↓ (chrome.runtime.sendMessage) +background/index.ts + ↓ (chatcache.getAllCh.ts/deleteChat) +plugin-chat-cache.ts + ↓ (storageAPI) +plugin-chat-API.ts + ↓ (IndexedDB) +Browser Storage +``` + +## Dependencies и импорты + +### Background Layer +```TypeScript +// background/index.ts +import { PluginChatcache } from './plugin-chat-cache'; +import type { ChatRequest, ChatEvent } from './types'; + +// plugin-chat-cache.ts +import { Ch.tstorageAPI } from './plugin-chat-API'; +import type { Chatdata, ChatMessage } from './types'; + +// plugin-chat-API.ts +// Нет внешних зависимостей, только IndexedDB API +``` + +### UI Layer +```TypeScript +// PluginControlPanel.tsx +import { PluginDetails } from './PluginDetails'; +import type { ChatMessage } from '../../../background/types'; + +// PluginDetails.tsx +import type { Plugin } from './PluginCard'; + +// SIDEPanel.tsx +import { PluginControlPanel } from './PluginControlPanel'; +import { PluginCard } from './PluginCard'; +``` + +### DevTools Layer +```TypeScript +// PluginCh.tsTab.tsx +import { saveAs } from 'file-saver'; +import type { Chatdata } from '../../../background/types'; + +// devtools-panel/index.tsx +import { PluginCh.tsTab } from './compone.ts/PluginCh.tsTab'; +``` + +## configuration Files + +### `chrome-extension/manifest.json` +**Purpose:** configuration Extensions +**Содержит:** +- Background script registration +- SIDE panel configuration +- DevTools panel configuration +- Permissions + +### `package.json` (в каждой папке pages) +**Purpose:** Dependencies и скрипты сборки +**Содержит:** +- React dependencies +- build tools +- TypeScript configuration + +## Стили и ресурсы + +###.css файлы +- `PluginControlPanel.css` - стили для основного компонента +- `SIDEPanel.css` - стили для sIDE panel +- `PluginCard.css` - стили для карточек плагинов + +### Иконки и изображения +- .icon.svg` - иконки плагинов +- ЛогоTypeы и брендинг + +## Тестовые файлы + +### Unit Te.ts +- `__te.ts__/plugin-chat-cache.test.ts` +- `__te.ts__/plugin-chat-API.test.ts` +- `__te.ts__/PluginControlPanel.test.tsx` + +### Integration Te.ts +- `__te.ts__/chat-system.integration.test.ts` + +### E2E Te.ts +- `te.ts/e2e/chat-functionality.test.ts` + +## Documentation + +### Техническая Documentation +- `README.md` - общее Description +- `API.md` - Documentation API +- `ARCHITECTURE.md` - архитектурное Description + +### Пользовательская Documentation +- `USER_GUIDE.md` - руководство пользователя +- `DEVELOPER_GUIDE.md` - руководство разработчика + +## Заключение + +Система чатов плагинов имеет четкую модульную архитектуру с разделением ответственности: + +1. **Background Layer** - управление данными и бизнес-логика +2. **UI Layer** - пользовательский Interface +3. **DevTools Layer** - административные функции +4. **Shared Layer** - общие Typeы и утилиты + +Все компоненты связаны через messaging API, что обеспечивает loose coupling и легкую тестируемость. Каждый файл имеет четко определенную ответственность и минимальные Dependencies. \ No newline at end of file diff --git a/.cursor/rules/architecture/project-architecture.mdc b/.cursor/rules/architecture/project-architecture.mdc index 47fbfbda..e9846dba 100644 --- a/.cursor/rules/architecture/project-architecture.mdc +++ b/.cursor/rules/architecture/project-architecture.mdc @@ -1,14 +1,32 @@ +--- +description: Architecture rule for project-architecture +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + + + + + +--- +description: Architecture rule for project-architecture +globs: ["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"] +alwaysApply: trueaiPriority: high +aiCategory: system-design +--- + # Project Overview -Agent-Plugins-Platform (APP) is a browser extension for running Python plugins via Pyodide and the MCP protocol. Key priorities: security, performance, and developer experience. +Agent-Plugins-Platform (APP) is a browser extension for running Python plugins via PyodIDE and the MCP protocol. Key priorities: security, performance, and developer experience. ## Architecture Patterns -### Core Components +### Core Compone.ts - **Plugin Manager** (`core/plugin-manager.js`): manages plugin lifecycle -- **Host API** (`core/host-api.js`): provides Python access to browser APIs +- **Host API** (`core/host-API.js`): provIDEs Python access to browser APIs - **Workflow Engine** (`core/workflow-engine.js`): executes plugin workflows -- **MCP Bridge** (`bridge/mcp-bridge.js`): JS ↔ Python communication -- **Pyodide Worker** (`bridge/pyodide-worker.js`): isolated Python execution +- **MCP Bridge** (`Bridge/mcp-Bridge.js`):.js ↔ Python communication +- **PyodIDE Worker** (`Bridge/pyodIDE-worker.js`): isolated Python execution ### Plugin Structure ``` @@ -16,13 +34,13 @@ public/plugins/plugin-name/ ├── manifest.json # Metadata and permissions ├── mcp_server.py # MCP protocol (Python) ├── workflow.json # Workflow description -└── icon.svg # Icon +└──.icon.svg #.icon ``` ### Communication Flow -1. UI → Plugin Manager → MCP Bridge → Pyodide Worker → Python Plugin +1. UI → Plugin Manager → MCP Bridge → PyodIDE Worker → Python Plugin 2. Python Plugin → Host API → Browser APIs -3. Results return via the same path +3. Resu.ts return via the same path description: globs: alwaysApply: false diff --git a/.cursor/rules/audit-cursor.cjs b/.cursor/rules/audit-cursor.cjs new file mode 100644 index 00000000..7a497b39 --- /dev/null +++ b/.cursor/rules/audit-cursor.cjs @@ -0,0 +1,288 @@ +#!/usr/bin/env node + +const fs = require('fs'); +const path = require('path'); + +class CursorAuditor { + constructor() { + this.rulesDir = path.join(__dirname); + this.issues = []; + this.stats = { + totalFiles: 0, + mdcFiles: 0, + mdFiles: 0, + filesWithMetadata: 0, + filesWithoutMetadata: 0, + duplicateContent: [], + brokenLinks: [], + missingFiles: [], + invalidMetadata: [] + }; + } + + // Основной метод аудита + async audit() { + console.log('🔍 Starting comprehensive .cursor audit...\n'); + + await this.scanFiles(); + await this.checkMetadata(); + await this.findDuplicates(); + await this.checkLinks(); + await this.validateStructure(); + await this.generateReport(); + + return this.stats; + } + + // Сканирование всех файлов + async scanFiles() { + console.log('📁 Scanning files...'); + + const files = this.getAllFiles(this.rulesDir); + this.stats.totalFiles = files.length; + + for (const file of files) { + const ext = path.extname(file); + if (ext === '.mdc') { + this.stats.mdcFiles++; + } else if (ext === '.md') { + this.stats.mdFiles++; + } + } + + console.log(` Found ${this.stats.totalFiles} files (${this.stats.mdcFiles} .mdc, ${this.stats.mdFiles} .md)`); + } + + // Проверка метаданных + async checkMetadata() { + console.log('📋 Checking metadata...'); + + const mdcFiles = this.getFilesByExt('.mdc'); + + for (const file of mdcFiles) { + const content = fs.readFileSync(file, 'utf8'); + + if (content.startsWith('---')) { + this.stats.filesWithMetadata++; + + // Проверяем валидность метаданных + const metadataMatch = content.match(/^---\s*\n([\s\S]*?)\n---\s*\n/); + if (metadataMatch) { + const metadata = metadataMatch[1]; + const hasDescription = metadata.includes('description:'); + const hasGlobs = metadata.includes('globs:'); + const hasAlwaysApply = metadata.includes('alwaysApply:'); + + if (!hasDescription || !hasGlobs || !hasAlwaysApply) { + this.stats.invalidMetadata.push({ + file: path.relative(this.rulesDir, file), + missing: [] + }); + + if (!hasDescription) this.stats.invalidMetadata[this.stats.invalidMetadata.length - 1].missing.push('description'); + if (!hasGlobs) this.stats.invalidMetadata[this.stats.invalidMetadata.length - 1].missing.push('globs'); + if (!hasAlwaysApply) this.stats.invalidMetadata[this.stats.invalidMetadata.length - 1].missing.push('alwaysApply'); + } + } + } else { + this.stats.filesWithoutMetadata++; + } + } + + console.log(` ${this.stats.filesWithMetadata} files with metadata, ${this.stats.filesWithoutMetadata} without`); + } + + // Поиск дубликатов + async findDuplicates() { + console.log('🔄 Finding duplicates...'); + + const files = this.getAllFiles(this.rulesDir); + const contentMap = new Map(); + + for (const file of files) { + const content = fs.readFileSync(file, 'utf8'); + const normalizedContent = this.normalizeContent(content); + + if (contentMap.has(normalizedContent)) { + this.stats.duplicateContent.push({ + original: path.relative(this.rulesDir, contentMap.get(normalizedContent)), + duplicate: path.relative(this.rulesDir, file) + }); + } else { + contentMap.set(normalizedContent, file); + } + } + + console.log(` Found ${this.stats.duplicateContent.length} duplicate files`); + } + + // Проверка ссылок + async checkLinks() { + console.log('🔗 Checking links...'); + + const files = this.getAllFiles(this.rulesDir); + + for (const file of files) { + const content = fs.readFileSync(file, 'utf8'); + const links = this.extractLinks(content); + + for (const link of links) { + if (link.startsWith('./') || link.startsWith('../')) { + const targetPath = path.resolve(path.dirname(file), link); + + if (!fs.existsSync(targetPath)) { + this.stats.brokenLinks.push({ + file: path.relative(this.rulesDir, file), + link: link + }); + } + } + } + } + + console.log(` Found ${this.stats.brokenLinks.length} broken links`); + } + + // Валидация структуры + async validateStructure() { + console.log('🏗️ Validating structure...'); + + const expectedDirs = ['architecture', 'dev', 'doc', 'plugin', 'security', 'ui', 'workflow']; + const actualDirs = fs.readdirSync(this.rulesDir) + .filter(item => fs.statSync(path.join(this.rulesDir, item)).isDirectory()); + + for (const expectedDir of expectedDirs) { + if (!actualDirs.includes(expectedDir)) { + this.stats.missingFiles.push(`Directory: ${expectedDir}`); + } + } + + // Проверяем обязательные файлы + const requiredFiles = ['index.mdc', 'README.mdc', 'ai-memory.mdc']; + for (const requiredFile of requiredFiles) { + if (!fs.existsSync(path.join(this.rulesDir, requiredFile))) { + this.stats.missingFiles.push(`File: ${requiredFile}`); + } + } + + console.log(` Found ${this.stats.missingFiles.length} missing items`); + } + + // Генерация отчета + async generateReport() { + console.log('\n📊 Generating audit report...\n'); + + console.log('='.repeat(60)); + console.log('🔍 CURSOR AUDIT REPORT'); + console.log('='.repeat(60)); + + // Общая статистика + console.log('\n📈 GENERAL STATISTICS:'); + console.log(` Total files: ${this.stats.totalFiles}`); + console.log(` .mdc files: ${this.stats.mdcFiles}`); + console.log(` .md files: ${this.stats.mdFiles}`); + console.log(` Files with metadata: ${this.stats.filesWithMetadata}`); + console.log(` Files without metadata: ${this.stats.filesWithoutMetadata}`); + + // Проблемы + if (this.stats.duplicateContent.length > 0) { + console.log('\n⚠️ DUPLICATE CONTENT:'); + for (const dup of this.stats.duplicateContent) { + console.log(` ${dup.duplicate} duplicates ${dup.original}`); + } + } + + if (this.stats.brokenLinks.length > 0) { + console.log('\n🔗 BROKEN LINKS:'); + for (const link of this.stats.brokenLinks) { + console.log(` ${link.file}: ${link.link}`); + } + } + + if (this.stats.invalidMetadata.length > 0) { + console.log('\n📋 INVALID METADATA:'); + for (const meta of this.stats.invalidMetadata) { + console.log(` ${meta.file}: missing ${meta.missing.join(', ')}`); + } + } + + if (this.stats.missingFiles.length > 0) { + console.log('\n❌ MISSING FILES/DIRECTORIES:'); + for (const missing of this.stats.missingFiles) { + console.log(` ${missing}`); + } + } + + // Рекомендации + console.log('\n💡 RECOMMENDATIONS:'); + if (this.stats.mdFiles > 0) { + console.log(' • Consider converting .md files to .mdc for better AI integration'); + } + if (this.stats.filesWithoutMetadata > 0) { + console.log(' • Add metadata to .mdc files without frontmatter'); + } + if (this.stats.duplicateContent.length > 0) { + console.log(' • Remove duplicate files to reduce confusion'); + } + if (this.stats.brokenLinks.length > 0) { + console.log(' • Fix broken links in documentation'); + } + + console.log('\n' + '='.repeat(60)); + } + + // Вспомогательные методы + getAllFiles(dir) { + const files = []; + const items = fs.readdirSync(dir); + + for (const item of items) { + const fullPath = path.join(dir, item); + const stat = fs.statSync(fullPath); + + if (stat.isDirectory()) { + files.push(...this.getAllFiles(fullPath)); + } else if (item.endsWith('.mdc') || item.endsWith('.md')) { + files.push(fullPath); + } + } + + return files; + } + + getFilesByExt(ext) { + return this.getAllFiles(this.rulesDir).filter(file => file.endsWith(ext)); + } + + normalizeContent(content) { + return content + .replace(/\s+/g, ' ') + .replace(/[^\w\s]/g, '') + .toLowerCase() + .trim(); + } + + extractLinks(content) { + const linkRegex = /\[([^\]]+)\]\(([^)]+)\)/g; + const links = []; + let match; + + while ((match = linkRegex.exec(content)) !== null) { + links.push(match[2]); + } + + return links; + } +} + +// Запуск аудита +async function main() { + const auditor = new CursorAuditor(); + await auditor.audit(); +} + +if (require.main === module) { + main().catch(console.error); +} + +module.exports = CursorAuditor; \ No newline at end of file diff --git a/.cursor/rules/auto-translate-requests.cjs b/.cursor/rules/auto-translate-requests.cjs new file mode 100644 index 00000000..7c001d48 --- /dev/null +++ b/.cursor/rules/auto-translate-requests.cjs @@ -0,0 +1,342 @@ +#!/usr/bin/env node + +/** + * Auto Translate Requests Script + * Automatically translates user requests to English for .cursor rule creation + * Usage: node .cursor/rules/auto-translate-requests.cjs [interactive|translate|setup] + */ + +const fs = require('fs'); +const path = require('path'); +const readline = require('readline'); +const { translateRequest, analyzeRequest, generateEnglishPrompt } = require('./request-translator.cjs'); + +// File paths +const CURSOR_DIR = path.join(process.cwd(), '.cursor'); +const RULES_DIR = path.join(CURSOR_DIR, 'rules'); + +function createInteractiveMode() { + console.log('🤖 Auto Translate Requests - Interactive Mode\n'); + console.log('This mode will help you create .cursor rules in English.'); + console.log('Type your request in Russian, and the system will translate it to English.\n'); + + const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout + }); + + function askQuestion(question) { + return new Promise((resolve) => { + rl.question(question, resolve); + }); + } + + async function interactiveLoop() { + try { + while (true) { + const userRequest = await askQuestion('📝 Enter your request (or "quit" to exit): '); + + if (userRequest.toLowerCase() === 'quit' || userRequest.toLowerCase() === 'exit') { + console.log('\n👋 Goodbye!'); + break; + } + + if (!userRequest.trim()) { + console.log('⚠️ Please enter a valid request.\n'); + continue; + } + + console.log('\n🔄 Processing your request...\n'); + + // Analyze the request + const analysis = analyzeRequest(userRequest); + const prompt = generateEnglishPrompt(userRequest); + + // Display results + console.log('📊 Request Analysis:'); + console.log(`Original: ${analysis.originalText}`); + console.log(`Translated: ${analysis.translatedText}`); + console.log(`Confidence: ${analysis.translationConfidence.toFixed(1)}%`); + console.log(`Patterns: ${analysis.detectedPatterns.join(', ')}`); + + if (prompt.shouldTranslate) { + console.log('\n🤖 Generated English Prompt:'); + console.log('='.repeat(60)); + console.log(prompt.englishPrompt); + console.log('='.repeat(60)); + + const proceed = await askQuestion('\n✅ Proceed with creating the rule? (y/n): '); + + if (proceed.toLowerCase() === 'y' || proceed.toLowerCase() === 'yes') { + await createRuleFromPrompt(prompt); + } else { + console.log('❌ Rule creation cancelled.\n'); + } + } else { + console.log('\n✅ Request is already in English. Proceeding with rule creation...\n'); + await createRuleFromPrompt(prompt); + } + + console.log('\n' + '='.repeat(60) + '\n'); + } + } catch (error) { + console.error('❌ Error in interactive mode:', error.message); + } finally { + rl.close(); + } + } + + interactiveLoop(); +} + +async function createRuleFromPrompt(prompt) { + try { + console.log('📝 Creating .cursor rule...\n'); + + // Generate filename based on request + const filename = generateFilename(prompt.translatedRequest || prompt.originalRequest); + const filepath = path.join(RULES_DIR, filename); + + // Create rule content + const ruleContent = generateRuleContent(prompt); + + // Ensure directory exists + const dir = path.dirname(filepath); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + + // Write the rule file + fs.writeFileSync(filepath, ruleContent, 'utf8'); + + console.log(`✅ Rule created: ${path.relative(process.cwd(), filepath)}`); + console.log(`📁 Location: ${filepath}`); + + // Stage the file for git + const { execSync } = require('child_process'); + try { + execSync(`git add "${filepath}"`, { stdio: 'inherit' }); + console.log('📦 File staged for git'); + } catch (error) { + console.log('⚠️ Could not stage file for git'); + } + + return filepath; + } catch (error) { + console.error('❌ Error creating rule:', error.message); + throw error; + } +} + +function generateFilename(request) { + // Extract key terms from request + const terms = request.toLowerCase() + .replace(/[^\w\s]/g, '') + .split(/\s+/) + .filter(word => word.length > 2) + .slice(0, 3); + + // Create filename + const baseName = terms.join('-') || 'new-rule'; + return `${baseName}.mdc`; +} + +function generateRuleContent(prompt) { + const timestamp = new Date().toISOString(); + const originalRequest = prompt.originalRequest; + const translatedRequest = prompt.translatedRequest || prompt.originalRequest; + + return `--- +description: ${translatedRequest} +globs: ["**/*"] +alwaysApply: false +aiPriority: normal +aiCategory: rules +createdFrom: "${originalRequest}" +translatedAt: "${timestamp}" +--- + +# ${translatedRequest} + +## Overview + +This rule was created based on the request: "${originalRequest}" + +## Description + +${translatedRequest} + +## Implementation + + + +## Usage + + + +## Examples + + + +## Notes + + + +--- +*Generated automatically from user request: "${originalRequest}"* +*Translated to English for AI/LLM compatibility* +`; +} + +function setupAutoTranslation() { + console.log('🔧 Setting up auto translation for .cursor requests...\n'); + + // Create configuration file + const configPath = path.join(CURSOR_DIR, 'auto-translate-config.json'); + const config = { + enabled: true, + autoTranslate: true, + createEnglishPrompts: true, + backupOriginalRequests: true, + confidenceThreshold: 70, + patterns: { + ruleCreation: ['создай', 'добавь', 'напиши', 'сделай'], + fileCreation: ['файл', 'документ', 'правило'], + cursorRequests: ['.cursor', 'cursor', 'rules'] + } + }; + + fs.writeFileSync(configPath, JSON.stringify(config, null, 2), 'utf8'); + console.log('✅ Configuration created: .cursor/auto-translate-config.json'); + + // Create helper script + const helperPath = path.join(CURSOR_DIR, 'rules', 'create-rule.cjs'); + const helperContent = `#!/usr/bin/env node + +/** + * Quick Rule Creation Helper + * Usage: node .cursor/rules/create-rule.cjs "your request in Russian" + */ + +const { generateEnglishPrompt } = require('./request-translator.cjs'); +const { createRuleFromPrompt } = require('./auto-translate-requests.cjs'); + +async function main() { + const request = process.argv[2]; + + if (!request) { + console.log('❌ Please provide a request'); + console.log('Usage: node .cursor/rules/create-rule.cjs "создай правило для архитектуры"'); + process.exit(1); + } + + try { + const prompt = generateEnglishPrompt(request); + await createRuleFromPrompt(prompt); + console.log('\\n🎉 Rule created successfully!'); + } catch (error) { + console.error('❌ Error:', error.message); + process.exit(1); + } +} + +if (require.main === module) { + main(); +} +`; + + fs.writeFileSync(helperPath, helperContent, 'utf8'); + console.log('✅ Helper script created: .cursor/rules/create-rule.cjs'); + + // Update package.json scripts + const packagePath = path.join(process.cwd(), 'package.json'); + if (fs.existsSync(packagePath)) { + try { + const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8')); + + if (!packageJson.scripts) { + packageJson.scripts = {}; + } + + packageJson.scripts['create-rule'] = 'node .cursor/rules/create-rule.cjs'; + packageJson.scripts['translate-request'] = 'node .cursor/rules/request-translator.cjs translate'; + packageJson.scripts['interactive-rules'] = 'node .cursor/rules/auto-translate-requests.cjs interactive'; + + fs.writeFileSync(packagePath, JSON.stringify(packageJson, null, 2), 'utf8'); + console.log('✅ Package.json scripts updated'); + } catch (error) { + console.log('⚠️ Could not update package.json:', error.message); + } + } + + console.log('\n🎉 Auto translation setup completed!'); + console.log('\n📝 Available commands:'); + console.log(' npm run create-rule "your request"'); + console.log(' npm run translate-request "your request"'); + console.log(' npm run interactive-rules'); + console.log(' node .cursor/rules/auto-translate-requests.cjs interactive'); +} + +function main() { + const command = process.argv[2] || 'help'; + + switch (command) { + case 'interactive': + createInteractiveMode(); + break; + + case 'translate': + const text = process.argv[3]; + if (!text) { + console.log('❌ Please provide text to translate'); + console.log('Usage: node .cursor/rules/auto-translate-requests.cjs translate "текст"'); + return; + } + const prompt = generateEnglishPrompt(text); + console.log('🤖 Generated English Prompt:'); + console.log('='.repeat(60)); + console.log(prompt.englishPrompt); + console.log('='.repeat(60)); + break; + + case 'setup': + setupAutoTranslation(); + break; + + case 'help': + console.log(` +Auto Translate Requests Script + +Usage: node .cursor/rules/auto-translate-requests.cjs [command] [text] + +Commands: + interactive - Start interactive mode for creating rules + translate - Translate request to English prompt + setup - Setup auto translation system + help - Show this help + +Examples: + node .cursor/rules/auto-translate-requests.cjs interactive + node .cursor/rules/auto-translate-requests.cjs translate "создай правило" + node .cursor/rules/auto-translate-requests.cjs setup + `); + break; + + default: + console.log(`❌ Unknown command: ${command}`); + console.log('Use "help" to see available commands'); + process.exit(1); + } +} + +if (require.main === module) { + main(); +} + +module.exports = { + createInteractiveMode, + createRuleFromPrompt, + generateFilename, + generateRuleContent, + setupAutoTranslation +}; \ No newline at end of file diff --git a/.cursor/rules/command-sync.cjs b/.cursor/rules/command-sync.cjs new file mode 100644 index 00000000..74d40ef8 --- /dev/null +++ b/.cursor/rules/command-sync.cjs @@ -0,0 +1,670 @@ +#!/usr/bin/env node + +/** + * Command Synchronization Script + * Syncs commands between USER_COMMANDS.md, ai-memory.mdc, and Cursor AI memory-bank + * Usage: node .cursor/rules/command-sync.cjs [sync|export|import|update-cursor] + */ + +const fs = require('fs'); +const path = require('path'); + +// File paths +const USER_COMMANDS_PATH = path.join(process.cwd(), 'USER_COMMANDS.md'); +const AI_MEMORY_PATH = path.join(process.cwd(), '.cursor', 'rules', 'cursor-export', 'ai-memory.mdc'); +const CURSOR_MEMORY_PATH = path.join(process.cwd(), '.cursor', 'rules', 'ai-memory.mdc'); +const ACTIVE_CONTEXT_PATH = path.join(process.cwd(), 'memory-bank', 'core', 'activeContext.md'); +const PROGRESS_PATH = path.join(process.cwd(), 'memory-bank', 'core', 'progress.md'); +const BACKUP_DIR = path.join(process.cwd(), 'memory-bank', 'core', 'backup'); + +// Command structure +const commandCategories = { + 'Context and Memory': { + 'save context': { + russian: ['Сохрани контекст', 'Сохранить контекст сессии'], + description: 'Save achievements, decisions and plans to memory-bank in English for AI/LLM compatibility (automatically translates and commits)', + userDescription: 'AI-ассистент автоматически переведет и сохранит все достижения, решения и планы в memory-bank на английском языке для совместимости с AI/LLM' + }, + 'update progress': { + russian: ['Обнови прогресс', 'Обновить прогресс проекта'], + description: 'Update activeContext.md and progress.md with current status', + userDescription: 'AI-ассистент обновит файлы activeContext.md и progress.md с текущим статусом' + }, + 'restore context': { + russian: ['Восстанови контекст', 'Восстановить полный контекст'], + description: 'Study all memory-bank files and restore full project understanding', + userDescription: 'AI-ассистент изучит все файлы memory-bank и восстановит полное понимание проекта' + }, + 'quick restore': { + russian: ['Быстрое восстановление'], + description: 'Get brief summary of key principles and current status', + userDescription: 'AI-ассистент получит краткую сводку ключевых принципов и текущего статуса' + } + }, + 'Analysis and Study': { + 'analyze architecture': { + russian: ['Анализируй архитектуру', 'Анализ архитектуры'], + description: 'Study systemPatterns.md and techContext.md for architecture understanding', + userDescription: 'AI-ассистент изучит systemPatterns.md и techContext.md для понимания архитектуры' + }, + 'study plugins': { + russian: ['Изучи плагины'], + description: 'Analyze plugins and their structure', + userDescription: 'AI-ассистент проанализирует существующие плагины и их структуру' + }, + 'check build': { + russian: ['Проверь сборку', 'Проверить сборку'], + description: 'Check that project builds and works correctly', + userDescription: 'AI-ассистент проверит, что проект собирается и работает корректно' + }, + 'update documentation': { + russian: ['Обнови документацию', 'Обновить документацию'], + description: 'Check and update README.md and PLUGIN_DEVELOPMENT.md', + userDescription: 'AI-ассистент проверит и обновит README.md и PLUGIN_DEVELOPMENT.md' + } + }, + 'Development': { + 'create plugin [name]': { + russian: ['Создай плагин [название]'], + description: 'Create new plugin with specified name', + userDescription: 'AI-ассистент создаст новый плагин с указанным названием' + }, + 'check code': { + russian: ['Проверь код', 'Проверить линтинг'], + description: 'Run linting and type checking', + userDescription: 'AI-ассистент выполнит линтинг и проверку типов' + }, + 'run tests': { + russian: ['Запусти тесты', 'Запустить тесты'], + description: 'Run all project tests', + userDescription: 'AI-ассистент запустит все тесты проекта' + }, + 'check dependencies': { + russian: ['Проверь зависимости', 'Проверить зависимости'], + description: 'Check dependencies relevance and compatibility', + userDescription: 'AI-ассистент проверит актуальность и совместимость зависимостей' + } + }, + 'Project Management': { + 'bump version patch/minor/major': { + russian: ['Увеличь версию [patch|minor|major]', 'Версионирование'], + description: 'Increase project version according to parameter', + userDescription: 'AI-ассистент увеличит версию проекта (например: "Увеличь версию minor")' + }, + 'clean project': { + russian: ['Очисти проект', 'Очистка проекта'], + description: 'Clean node_modules, dist and cache', + userDescription: 'AI-ассистент выполнит очистку node_modules, dist и кэша' + }, + 'analyze performance': { + russian: ['Анализируй производительность', 'Анализ производительности'], + description: 'Analyze project performance and suggest optimizations', + userDescription: 'AI-ассистент проанализирует производительность проекта и предложит оптимизации' + }, + 'check security': { + russian: ['Проверь безопасность', 'Анализ безопасности'], + description: 'Analyze code and configuration security', + userDescription: 'AI-ассистент проанализирует безопасность кода и конфигурации' + } + }, + 'Releases and Deployment': { + 'create release': { + russian: ['Создай релиз', 'Создать релиз'], + description: 'Prepare project for release (bump version, create ZIP)', + userDescription: 'AI-ассистент подготовит проект к релизу (увеличит версию, создаст ZIP)' + }, + 'build production': { + russian: ['Собери для продакшена', 'Сборка для продакшена'], + description: 'Perform full production build', + userDescription: 'AI-ассистент выполнит полную сборку для продакшена' + } + } +}; + +function generateUserCommandsMD() { + let content = `# Команды для пользователя + +Просто скопируйте и вставьте любую из этих команд в чат с AI-ассистентом. + +`; + + for (const [category, commands] of Object.entries(commandCategories)) { + const categoryEmoji = getCategoryEmoji(category); + content += `## ${categoryEmoji} ${category}\n\n`; + + for (const [command, details] of Object.entries(commands)) { + const russianCommands = details.russian.map(cmd => `\`${cmd}\``).join(' / '); + content += `### ${details.userDescription}\n`; + content += `${russianCommands}\n`; + content += `*${details.userDescription}*\n\n`; + } + } + + content += `--- + +## 💡 Как использовать + +1. **Скопируйте** нужную команду +2. **Вставьте** в чат с AI-ассистентом +3. **Дождитесь** выполнения команды + +## 🔄 Комбинированные команды + +Вы можете комбинировать команды: +\`\`\` +Сохрани контекст и обнови прогресс +\`\`\` + +\`\`\` +Восстанови контекст и анализируй архитектуру +\`\`\` + +## 📝 Примечания + +- AI-ассистент автоматически изучит файлы memory-bank при необходимости +- Все команды выполняются с учетом текущего контекста проекта +- Результаты сохраняются в соответствующих файлах memory-bank +- Команды работают с любой LLM моделью, которая следует инструкциям + +## Восстановление контекста проекта в новом чате + +1. Просто напиши в начале чата: + \`\`\` + Восстанови контекст + \`\`\` +2. Ассистент автоматически: + - Прочитает все ключевые файлы memory-bank (README.md, activeContext.md, systemPatterns.md, progress.md, productContext.md, techContext.md, session-log.md) + - Восстановит все правила, best practices, кладбище ошибок, карту взаимосвязей, архитектурные решения и рекомендации + - Будет использовать только актуальные подходы и паттерны из memory-bank + - Если что-то неясно — уточнит у тебя детали по новой фиче или архитектуре +3. Когда стоит добавить детали вручную: + - Если есть особые пожелания к стилю работы, архитектуре или процессу, которые не зафиксированы в memory-bank + - Если нужно сфокусироваться только на определённой части контекста + - Если хочешь ускорить процесс и не ждать уточняющих вопросов + +**Совет:** Если что-то важно для будущей работы — фиксируй это в memory-bank, чтобы не потерять при смене чата или ассистента. +`; + + return content; +} + +function generateAIMemoryMD() { + let content = `--- +description: Universal user commands for AI assistant - complete command reference with triggers and actions +globs: ["**/*"] +alwaysApply: true +aiPriority: critical +aiCategory: general +--- + +# AI Memory Bank - Universal User Commands + +## Commands for AI Assistant Recognition + +`; + + for (const [category, commands] of Object.entries(commandCategories)) { + content += `### ${category}:\n`; + + for (const [command, details] of Object.entries(commands)) { + const russianCommands = details.russian.map(cmd => `\`${cmd}\``).join(' / '); + content += `- \`${command}\` / ${russianCommands} - ${details.description}\n`; + } + content += '\n'; + } + + content += `## General Principles: +- Commands can be combined (e.g.: "save context and update progress") +- All actions should consider current project context +- Results should be saved in appropriate memory-bank files +- If command is unclear — clarify details with user +- When restoring context — read all key memory-bank files and use only current best practices +`; + + return content; +} + +function generateCursorMemoryBank() { + let content = `# AI Memory Bank - User Commands + +## Commands for AI Assistant Recognition + +`; + + for (const [category, commands] of Object.entries(commandCategories)) { + content += `### ${category}:\n`; + + for (const [command, details] of Object.entries(commands)) { + const russianCommands = details.russian.map(cmd => `\`${cmd}\``).join(' / '); + content += `- \`${command}\` / ${russianCommands} - ${details.description}\n`; + } + content += '\n'; + } + + content += `## General Principles: +- Commands can be combined (e.g.: "save context and update progress") +- All actions should consider current project context +- Results should be saved in appropriate memory-bank files +- If command is unclear — clarify details with user +- When restoring context — read all key memory-bank files and use only current best practices +`; + + return content; +} + +function getCategoryEmoji(category) { + const emojiMap = { + 'Context and Memory': '📝', + 'Analysis and Study': '🏗️', + 'Development': '🔧', + 'Project Management': '📊', + 'Releases and Deployment': '🚀' + }; + return emojiMap[category] || '📋'; +} + +// Context translation function +function translateContextToEnglish() { + console.log('🔄 Translating context to English for AI/LLM compatibility...\n'); + + // Create backup directory + if (!fs.existsSync(BACKUP_DIR)) { + fs.mkdirSync(BACKUP_DIR, { recursive: true }); + } + + const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); + + // Translation mappings for context + const contextTranslations = { + // Headers and titles + 'Активный контекст разработки': 'Active Development Context', + 'Текущий статус проекта': 'Current Project Status', + 'Последнее обновление': 'Last Updated', + 'Сессия интернационализации и синхронизации команд': 'Internationalization and Command Synchronization Session', + + // Task status + 'Завершенные задачи': 'Completed Tasks', + 'Текущий фокус': 'Current Focus', + 'Приоритет': 'Priority', + 'Следующие шаги': 'Next Steps', + 'Готовность к международному сообществу и глобальному использованию': 'Readiness for International Community and Global Usage', + + // Principles + 'Ключевые принципы работы': 'Key Working Principles', + 'Инициативность ассистента': 'Assistant Initiative', + 'Всегда предлагать улучшения и оптимизации': 'Always suggest improvements and optimizations', + 'Конструктивно критиковать существующие решения': 'Constructively criticize existing solutions', + 'Предлагать альтернативные подходы': 'Suggest alternative approaches', + 'Проактивно выявлять потенциальные проблемы': 'Proactively identify potential issues', + + 'Качество кода': 'Code Quality', + 'Следовать принципам из': 'Follow principles from', + 'Применять "Do No Harm" принцип': 'Apply "Do No Harm" principle', + 'Использовать AI-First документацию': 'Use AI-First documentation', + 'Приоритизировать безопасность и производительность': 'Prioritize security and performance', + + 'Internationalization': 'Internationalization', + 'Все правила и документация на английском языке': 'All rules and documentation in English', + 'Универсальный формат команд': 'Universal command format', + 'Готовность к глобальному сообществу': 'Readiness for global community', + 'Совместимость с любым AI-ассистентом': 'Compatibility with any AI assistant', + + // Technical context + 'Технический контекст': 'Technical Context', + 'Текущая архитектура': 'Current Architecture', + 'React + TypeScript для UI компонентов': 'React + TypeScript for UI components', + 'Модульная система пакетов': 'Modular package system', + 'Vite для сборки': 'Vite for building', + 'Tailwind CSS для стилизации': 'Tailwind CSS for styling', + 'Chrome Extension API для интеграции': 'Chrome Extension API for integration', + 'Система синхронизации команд': 'Command synchronization system', + + 'Стандарты разработки': 'Development Standards', + 'TypeScript для всех новых файлов': 'TypeScript for all new files', + 'ESLint для проверки кода': 'ESLint for code checking', + 'Компонентный подход с proper accessibility': 'Component approach with proper accessibility', + 'Структурированное логирование': 'Structured logging', + 'Комплексная документация с примерами': 'Comprehensive documentation with examples', + 'Английский язык для всех правил и документации': 'English language for all rules and documentation', + + 'Безопасность': 'Security', + 'Zero Trust архитектура для плагинов': 'Zero Trust architecture for plugins', + 'Валидация всех входных данных': 'Validation of all input data', + 'Шифрование чувствительной информации': 'Encryption of sensitive information', + 'Аудит всех действий плагинов': 'Audit of all plugin actions', + + // Command system + 'Система команд': 'Command System', + 'Автоматическая синхронизация': 'Automatic Synchronization', + 'Единый источник истины': 'Single source of truth', + 'Автоматическая генерация': 'Automatic generation', + 'Множественные форматы': 'Multiple formats', + 'Категории команд': 'Command Categories', + 'Сохранение и восстановление контекста': 'Context saving and restoration', + 'Анализ архитектуры и изучение плагинов': 'Architecture analysis and plugin study', + 'Создание плагинов и проверка кода': 'Plugin creation and code checking', + 'Управление версиями и анализ': 'Version management and analysis', + 'Создание релизов и сборка': 'Release creation and building', + + 'Интеграция с Cursor': 'Cursor Integration', + 'Экспорт команд': 'Command export', + 'Файл для Cursor': 'File for Cursor', + 'Инструкции интеграции': 'Integration instructions', + 'Пошаговое руководство': 'Step-by-step guide', + + // User experience + 'Пользовательский опыт': 'User Experience', + 'Приоритеты UX': 'UX Priorities', + 'Интуитивность интерфейса': 'Interface intuitiveness', + 'Быстродействие и отзывчивость': 'Speed and responsiveness', + 'Доступность': 'Accessibility', + 'Консистентность дизайна': 'Design consistency', + 'Поддержка различных тем': 'Support for various themes', + 'Универсальность команд': 'Command universality', + + 'Метрики качества': 'Quality Metrics', + 'Время загрузки компонентов': 'Component loading time', + 'Плавность анимаций': 'Animation smoothness', + 'Доступность для скринридеров': 'Accessibility for screen readers', + 'Совместимость с различными браузерами': 'Compatibility with various browsers', + 'Совместимость с любым AI-ассистентом': 'Compatibility with any AI assistant', + + // Development plans + 'Планы развития': 'Development Plans', + 'Краткосрочные цели': 'Short-term Goals', + 'Среднесрочные цели': 'Medium-term Goals', + 'Долгосрочные цели': 'Long-term Goals', + 'Тестирование системы синхронизации команд': 'Testing command synchronization system', + 'Интеграция команд в Cursor AI memory-bank': 'Integration of commands into Cursor AI memory-bank', + 'Публикация .cursor для международного сообщества': 'Publishing .cursor for international community', + 'Сбор обратной связи от глобального сообщества': 'Collecting feedback from global community', + 'Дальнейшая оптимизация на основе обратной связи': 'Further optimization based on feedback', + 'Расширение системы команд новыми категориями': 'Expanding command system with new categories', + 'API интеграция с Cursor для автоматических обновлений': 'API integration with Cursor for automatic updates', + 'Создание шаблонов команд для разных типов проектов': 'Creating command templates for different project types', + 'Развитие экосистемы плагинов': 'Development of plugin ecosystem', + 'Создание полноценной международной платформы': 'Creating a full-fledged international platform', + 'Развитие глобального сообщества разработчиков': 'Development of global developer community', + 'Интеграция с популярными сервисами': 'Integration with popular services', + 'Многоязычная поддержка интерфейса': 'Multilingual interface support', + + // Important files + 'Важные файлы и ресурсы': 'Important Files and Resources', + 'Система синхронизации команд': 'Command Synchronization System', + 'Основной скрипт синхронизации': 'Main synchronization script', + 'Документация системы': 'System documentation', + 'Пользовательский справочник команд': 'User command reference', + 'Экспорт для Cursor': 'Export for Cursor', + + 'Ключевые компоненты': 'Key Components', + 'Карточки плагинов': 'Plugin cards', + 'Панель управления': 'Control panel', + 'Детали плагина': 'Plugin details', + 'Индикатор статуса': 'Status indicator', + + 'Документация': 'Documentation', + 'Документация интернационализации': 'Internationalization documentation', + 'Документация системы команд': 'Command system documentation', + 'Принципы разработки': 'Development principles', + 'План улучшений UI': 'UI improvement plan', + 'Долгосрочные планы': 'Long-term plans', + + 'Конфигурация': 'Configuration', + 'UI компоненты и стили': 'UI components and styles', + 'Конфигурация сборки': 'Build configuration', + 'Общие утилиты': 'Common utilities', + + // Commands and processes + 'Команды и процессы': 'Commands and Processes', + 'Система синхронизации команд': 'Command Synchronization System', + 'Синхронизация всех файлов': 'Synchronize all files', + 'Экспорт для Cursor AI memory-bank': 'Export for Cursor AI memory-bank', + 'Справка по командам': 'Command help', + + 'Сборка проекта': 'Project Build', + 'Сборка всех страниц': 'Build all pages', + 'Сборка конкретной страницы': 'Build specific page', + 'Разработка': 'Development', + + 'Тестирование': 'Testing', + 'Использовать DevTools панель': 'Use DevTools panel', + 'Тестировать в боковой панели расширения': 'Test in extension side panel', + 'Проверять в различных темах': 'Check in various themes', + 'Тестировать все обновленные компоненты': 'Test all updated components', + 'Проверять синхронизацию команд': 'Check command synchronization', + + 'Git workflow': 'Git Workflow', + 'Создавать feature ветки для новых функций': 'Create feature branches for new functions', + 'Создавать fix ветки для исправлений': 'Create fix branches for fixes', + 'Использовать осмысленные названия веток': 'Use meaningful branch names', + 'Вливать через pull requests': 'Merge through pull requests', + + // Contacts and support + 'Контакты и поддержка': 'Contacts and Support', + 'Для пользователей': 'For Users', + 'Документация в memory-bank': 'Documentation in memory-bank', + 'Тестирование через DevTools панель': 'Testing through DevTools panel', + 'Обратная связь через GitHub Issues': 'Feedback through GitHub Issues', + 'Справочник команд в USER_COMMANDS.md': 'Command reference in USER_COMMANDS.md', + + 'Для разработчиков': 'For Developers', + 'Следовать принципам из': 'Follow principles from', + 'Использовать модульную архитектуру': 'Use modular architecture', + 'Приоритизировать безопасность и производительность': 'Prioritize security and performance', + 'Документировать все изменения': 'Document all changes', + 'Использовать систему синхронизации команд': 'Use command synchronization system', + + // Status + 'Статус готовности к международному сообществу': 'Readiness Status for International Community', + 'Готовые компоненты': 'Ready Components', + 'Полная интернационализация .cursor и memory-bank': 'Complete internationalization of .cursor and memory-bank', + 'Система синхронизации команд': 'Command synchronization system', + 'Универсальный формат команд': 'Universal command format', + 'Экспорт для Cursor AI memory-bank': 'Export for Cursor AI memory-bank', + 'Полностью модернизирован': 'Fully modernized', + 'Полностью обновлен': 'Fully updated', + 'Современный дизайн': 'Modern design', + 'Улучшенный индикатор': 'Improved indicator', + + 'Готово к публикации': 'Ready for Publication', + 'Все правила и документация на английском языке': 'All rules and documentation in English', + 'Автоматическая синхронизация команд': 'Automatic command synchronization', + 'Готовность к глобальному сообществу': 'Readiness for global community', + 'Совместимость с любым AI-ассистентом': 'Compatibility with any AI assistant', + 'Современный дизайн-система внедрена': 'Modern design system implemented', + 'Поддержка светлой и темной темы': 'Support for light and dark themes', + + 'План публикации': 'Publication Plan', + 'Тестирование системы синхронизации команд': 'Testing command synchronization system', + 'Интеграция команд в Cursor AI memory-bank': 'Integration of commands into Cursor AI memory-bank', + 'Публикация .cursor для международного сообщества': 'Publishing .cursor for international community', + 'Сбор обратной связи от глобального сообщества': 'Collecting feedback from global community', + 'Дальнейшая оптимизация на основе обратной связи': 'Further optimization based on feedback', + + // Architecture + 'Архитектура: Sidepanel и контекстная логика': 'Architecture: Sidepanel and Context Logic', + 'Sidepanel расширения открывается и закрывается пользователем': 'Extension sidepanel opens and closes by user', + 'Содержимое боковой панели зависит от текущей web-страницы': 'Side panel content depends on current web page', + 'Список доступных плагинов в сайдпанели зависит от разрешений': 'List of available plugins in sidepanel depends on permissions', + 'Сайдпанель не работает как отдельная extension page': 'Sidepanel does not work as separate extension page', + + // E2E Testing + 'E2E-тестирование чата плагина Ozon в Chromium': 'E2E Testing of Ozon Plugin Chat in Chromium', + 'Цель': 'Goal', + 'Полностью автоматизировать сценарий тестирования': 'Fully automate testing scenario', + 'Этапы и прогресс': 'Stages and Progress', + 'Проанализирован существующий e2e-тест': 'Analyzed existing e2e test', + 'Подтверждено, что тест уже реализует': 'Confirmed that test already implements', + 'Открытие страницы Ozon': 'Opening Ozon page', + 'Открытие сайдпанели': 'Opening sidepanel', + 'Проверку наличия плагина Ozon': 'Checking for Ozon plugin', + 'Клик по плагину и открытие чата': 'Click on plugin and open chat', + 'Отправку сообщения в чат': 'Sending message to chat', + 'Получение ответа от плагина': 'Receiving response from plugin', + 'Протестирован существующий тест в Chromium': 'Tested existing test in Chromium', + 'Выявлены и исправлены проблемы с селекторами': 'Identified and fixed selector issues', + 'Добавлена поддержка Chromium-specific селекторов': 'Added support for Chromium-specific selectors', + 'Оптимизированы таймауты для стабильности': 'Optimized timeouts for stability', + 'Добавлена обработка ошибок и retry логика': 'Added error handling and retry logic', + 'Создана документация по тестированию': 'Created testing documentation', + + 'Текущий статус': 'Current Status', + 'Готово к использованию': 'Ready for Use', + 'Тест полностью функционален в Chromium': 'Test is fully functional in Chromium', + 'Готов для CI/CD интеграции': 'Ready for CI/CD integration', + + 'Следующие шаги': 'Next Steps', + 'Интеграция в CI/CD pipeline': 'Integration into CI/CD pipeline', + 'Добавление тестов для других плагинов': 'Adding tests for other plugins', + 'Расширение покрытия тестирования': 'Expanding test coverage', + 'Оптимизация производительности тестов': 'Optimizing test performance' + }; + + function translateText(text) { + let translatedText = text; + + // Apply translations + for (const [russian, english] of Object.entries(contextTranslations)) { + translatedText = translatedText.replace(new RegExp(russian, 'g'), english); + } + + return translatedText; + } + + // Translate activeContext.md + if (fs.existsSync(ACTIVE_CONTEXT_PATH)) { + // Create backup + const backupPath = path.join(BACKUP_DIR, `activeContext-${timestamp}.md`); + fs.copyFileSync(ACTIVE_CONTEXT_PATH, backupPath); + + const content = fs.readFileSync(ACTIVE_CONTEXT_PATH, 'utf8'); + const translatedContent = translateText(content); + fs.writeFileSync(ACTIVE_CONTEXT_PATH, translatedContent, 'utf8'); + console.log('✅ Translated: memory-bank/core/activeContext.md'); + console.log(`📁 Backup: ${backupPath}`); + } + + // Translate progress.md + if (fs.existsSync(PROGRESS_PATH)) { + // Create backup + const backupPath = path.join(BACKUP_DIR, `progress-${timestamp}.md`); + fs.copyFileSync(PROGRESS_PATH, backupPath); + + const content = fs.readFileSync(PROGRESS_PATH, 'utf8'); + const translatedContent = translateText(content); + fs.writeFileSync(PROGRESS_PATH, translatedContent, 'utf8'); + console.log('✅ Translated: memory-bank/core/progress.md'); + console.log(`📁 Backup: ${backupPath}`); + } + + console.log('\n🎉 Context translation completed for AI/LLM compatibility!'); +} + +function syncCommands() { + console.log('🔄 Syncing commands between all sources...\n'); + + // Generate USER_COMMANDS.md + const userCommandsContent = generateUserCommandsMD(); + fs.writeFileSync(USER_COMMANDS_PATH, userCommandsContent, 'utf8'); + console.log('✅ Updated USER_COMMANDS.md'); + + // Generate ai-memory.mdc + const aiMemoryContent = generateAIMemoryMD(); + fs.writeFileSync(AI_MEMORY_PATH, aiMemoryContent, 'utf8'); + console.log('✅ Updated .cursor/rules/cursor-export/ai-memory.mdc'); + + // Generate Cursor memory-bank + const cursorMemoryContent = generateCursorMemoryBank(); + fs.writeFileSync(CURSOR_MEMORY_PATH, cursorMemoryContent, 'utf8'); + console.log('✅ Updated .cursor/rules/ai-memory.mdc'); + + console.log('\n🎉 All command files synchronized successfully!'); +} + +function exportForCursor() { + console.log('📤 Exporting commands for Cursor AI memory-bank...\n'); + + let cursorFormat = `# AI Memory Bank - User Commands + +## Commands for AI Assistant Recognition + +`; + + for (const [category, commands] of Object.entries(commandCategories)) { + const emoji = getCategoryEmoji(category); + cursorFormat += `### ${emoji} ${category}:\n`; + + for (const [command, details] of Object.entries(commands)) { + const russianCommands = details.russian.map(cmd => `\`${cmd}\``).join(' / '); + cursorFormat += `- \`${command}\` / ${russianCommands} - ${details.description}\n`; + } + cursorFormat += '\n'; + } + + cursorFormat += `## General Principles: +- Commands can be combined (e.g.: "save context and update progress") +- All actions should consider current project context +- Results should be saved in appropriate memory-bank files +- If command is unclear — clarify details with user +- When restoring context — read all key memory-bank files and use only current best practices + +## Usage Instructions: +1. Copy this content +2. Go to Cursor Settings → AI → Rules & Memories +3. Paste into User Rules or Project Rules +4. Save and restart Cursor +`; + + const exportPath = path.join(process.cwd(), 'CURSOR_AI_MEMORY_BANK.md'); + fs.writeFileSync(exportPath, cursorFormat, 'utf8'); + console.log(`✅ Exported to ${exportPath}`); + console.log('\n📋 Instructions:'); + console.log('1. Copy the content from CURSOR_AI_MEMORY_BANK.md'); + console.log('2. Go to Cursor Settings → AI → Rules & Memories'); + console.log('3. Paste into User Rules or Project Rules'); + console.log('4. Save and restart Cursor'); +} + +function main() { + const command = process.argv[2] || 'sync'; + + switch (command) { + case 'sync': + syncCommands(); + break; + case 'export': + exportForCursor(); + break; + case 'translate-context': + translateContextToEnglish(); + break; + case 'help': + console.log(` +Command Synchronization Script + +Usage: node .cursor/rules/command-sync.cjs [command] + +Commands: + sync - Sync all command files (default) + export - Export commands for Cursor AI memory-bank + translate-context - Translate context to English for AI/LLM compatibility + help - Show this help + +Examples: + node .cursor/rules/command-sync.cjs sync + node .cursor/rules/command-sync.cjs export + node .cursor/rules/command-sync.cjs translate-context + `); + break; + default: + console.log(`❌ Unknown command: ${command}`); + console.log('Use "help" to see available commands'); + process.exit(1); + } +} + +if (require.main === module) { + main(); +} + +module.exports = { commandCategories, generateUserCommandsMD, generateAIMemoryMD, generateCursorMemoryBank, translateContextToEnglish }; \ No newline at end of file diff --git a/.cursor/rules/context-translator.cjs b/.cursor/rules/context-translator.cjs new file mode 100644 index 00000000..83673b13 --- /dev/null +++ b/.cursor/rules/context-translator.cjs @@ -0,0 +1,409 @@ +#!/usr/bin/env node + +/** + * Context Translator Script + * Automatically translates context to English for AI/LLM compatibility + * Usage: node .cursor/rules/context-translator.cjs [translate|backup|restore] + */ + +const fs = require('fs'); +const path = require('path'); + +// File paths +const ACTIVE_CONTEXT_PATH = path.join(process.cwd(), 'memory-bank', 'core', 'activeContext.md'); +const PROGRESS_PATH = path.join(process.cwd(), 'memory-bank', 'core', 'progress.md'); +const BACKUP_DIR = path.join(process.cwd(), 'memory-bank', 'core', 'backup'); + +// Translation mappings for context +const contextTranslations = { + // Headers and titles + 'Активный контекст разработки': 'Active Development Context', + 'Текущий статус проекта': 'Current Project Status', + 'Последнее обновление': 'Last Updated', + 'Сессия интернационализации и синхронизации команд': 'Internationalization and Command Synchronization Session', + + // Task status + 'Завершенные задачи': 'Completed Tasks', + 'Текущий фокус': 'Current Focus', + 'Приоритет': 'Priority', + 'Следующие шаги': 'Next Steps', + 'Готовность к международному сообществу и глобальному использованию': 'Readiness for International Community and Global Usage', + + // Principles + 'Ключевые принципы работы': 'Key Working Principles', + 'Инициативность ассистента': 'Assistant Initiative', + 'Всегда предлагать улучшения и оптимизации': 'Always suggest improvements and optimizations', + 'Конструктивно критиковать существующие решения': 'Constructively criticize existing solutions', + 'Предлагать альтернативные подходы': 'Suggest alternative approaches', + 'Проактивно выявлять потенциальные проблемы': 'Proactively identify potential issues', + + 'Качество кода': 'Code Quality', + 'Следовать принципам из': 'Follow principles from', + 'Применять "Do No Harm" принцип': 'Apply "Do No Harm" principle', + 'Использовать AI-First документацию': 'Use AI-First documentation', + 'Приоритизировать безопасность и производительность': 'Prioritize security and performance', + + 'Internationalization': 'Internationalization', + 'Все правила и документация на английском языке': 'All rules and documentation in English', + 'Универсальный формат команд': 'Universal command format', + 'Готовность к глобальному сообществу': 'Readiness for global community', + 'Совместимость с любым AI-ассистентом': 'Compatibility with any AI assistant', + + // Technical context + 'Технический контекст': 'Technical Context', + 'Текущая архитектура': 'Current Architecture', + 'React + TypeScript для UI компонентов': 'React + TypeScript for UI components', + 'Модульная система пакетов': 'Modular package system', + 'Vite для сборки': 'Vite for building', + 'Tailwind CSS для стилизации': 'Tailwind CSS for styling', + 'Chrome Extension API для интеграции': 'Chrome Extension API for integration', + 'Система синхронизации команд': 'Command synchronization system', + + 'Стандарты разработки': 'Development Standards', + 'TypeScript для всех новых файлов': 'TypeScript for all new files', + 'ESLint для проверки кода': 'ESLint for code checking', + 'Компонентный подход с proper accessibility': 'Component approach with proper accessibility', + 'Структурированное логирование': 'Structured logging', + 'Комплексная документация с примерами': 'Comprehensive documentation with examples', + 'Английский язык для всех правил и документации': 'English language for all rules and documentation', + + 'Безопасность': 'Security', + 'Zero Trust архитектура для плагинов': 'Zero Trust architecture for plugins', + 'Валидация всех входных данных': 'Validation of all input data', + 'Шифрование чувствительной информации': 'Encryption of sensitive information', + 'Аудит всех действий плагинов': 'Audit of all plugin actions', + + // Command system + 'Система команд': 'Command System', + 'Автоматическая синхронизация': 'Automatic Synchronization', + 'Единый источник истины': 'Single source of truth', + 'Автоматическая генерация': 'Automatic generation', + 'Множественные форматы': 'Multiple formats', + 'Категории команд': 'Command Categories', + 'Сохранение и восстановление контекста': 'Context saving and restoration', + 'Анализ архитектуры и изучение плагинов': 'Architecture analysis and plugin study', + 'Создание плагинов и проверка кода': 'Plugin creation and code checking', + 'Управление версиями и анализ': 'Version management and analysis', + 'Создание релизов и сборка': 'Release creation and building', + + 'Интеграция с Cursor': 'Cursor Integration', + 'Экспорт команд': 'Command export', + 'Файл для Cursor': 'File for Cursor', + 'Инструкции интеграции': 'Integration instructions', + 'Пошаговое руководство': 'Step-by-step guide', + + // User experience + 'Пользовательский опыт': 'User Experience', + 'Приоритеты UX': 'UX Priorities', + 'Интуитивность интерфейса': 'Interface intuitiveness', + 'Быстродействие и отзывчивость': 'Speed and responsiveness', + 'Доступность': 'Accessibility', + 'Консистентность дизайна': 'Design consistency', + 'Поддержка различных тем': 'Support for various themes', + 'Универсальность команд': 'Command universality', + + 'Метрики качества': 'Quality Metrics', + 'Время загрузки компонентов': 'Component loading time', + 'Плавность анимаций': 'Animation smoothness', + 'Доступность для скринридеров': 'Accessibility for screen readers', + 'Совместимость с различными браузерами': 'Compatibility with various browsers', + 'Совместимость с любым AI-ассистентом': 'Compatibility with any AI assistant', + + // Development plans + 'Планы развития': 'Development Plans', + 'Краткосрочные цели': 'Short-term Goals', + 'Среднесрочные цели': 'Medium-term Goals', + 'Долгосрочные цели': 'Long-term Goals', + 'Тестирование системы синхронизации команд': 'Testing command synchronization system', + 'Интеграция команд в Cursor AI memory-bank': 'Integration of commands into Cursor AI memory-bank', + 'Публикация .cursor для международного сообщества': 'Publishing .cursor for international community', + 'Сбор обратной связи от глобального сообщества': 'Collecting feedback from global community', + 'Дальнейшая оптимизация на основе обратной связи': 'Further optimization based on feedback', + 'Расширение системы команд новыми категориями': 'Expanding command system with new categories', + 'API интеграция с Cursor для автоматических обновлений': 'API integration with Cursor for automatic updates', + 'Создание шаблонов команд для разных типов проектов': 'Creating command templates for different project types', + 'Развитие экосистемы плагинов': 'Development of plugin ecosystem', + 'Создание полноценной международной платформы': 'Creating a full-fledged international platform', + 'Развитие глобального сообщества разработчиков': 'Development of global developer community', + 'Интеграция с популярными сервисами': 'Integration with popular services', + 'Многоязычная поддержка интерфейса': 'Multilingual interface support', + + // Important files + 'Важные файлы и ресурсы': 'Important Files and Resources', + 'Система синхронизации команд': 'Command Synchronization System', + 'Основной скрипт синхронизации': 'Main synchronization script', + 'Документация системы': 'System documentation', + 'Пользовательский справочник команд': 'User command reference', + 'Экспорт для Cursor': 'Export for Cursor', + + 'Ключевые компоненты': 'Key Components', + 'Карточки плагинов': 'Plugin cards', + 'Панель управления': 'Control panel', + 'Детали плагина': 'Plugin details', + 'Индикатор статуса': 'Status indicator', + + 'Документация': 'Documentation', + 'Документация интернационализации': 'Internationalization documentation', + 'Документация системы команд': 'Command system documentation', + 'Принципы разработки': 'Development principles', + 'План улучшений UI': 'UI improvement plan', + 'Долгосрочные планы': 'Long-term plans', + + 'Конфигурация': 'Configuration', + 'UI компоненты и стили': 'UI components and styles', + 'Конфигурация сборки': 'Build configuration', + 'Общие утилиты': 'Common utilities', + + // Commands and processes + 'Команды и процессы': 'Commands and Processes', + 'Система синхронизации команд': 'Command Synchronization System', + 'Синхронизация всех файлов': 'Synchronize all files', + 'Экспорт для Cursor AI memory-bank': 'Export for Cursor AI memory-bank', + 'Справка по командам': 'Command help', + + 'Сборка проекта': 'Project Build', + 'Сборка всех страниц': 'Build all pages', + 'Сборка конкретной страницы': 'Build specific page', + 'Разработка': 'Development', + + 'Тестирование': 'Testing', + 'Использовать DevTools панель': 'Use DevTools panel', + 'Тестировать в боковой панели расширения': 'Test in extension side panel', + 'Проверять в различных темах': 'Check in various themes', + 'Тестировать все обновленные компоненты': 'Test all updated components', + 'Проверять синхронизацию команд': 'Check command synchronization', + + 'Git workflow': 'Git Workflow', + 'Создавать feature ветки для новых функций': 'Create feature branches for new functions', + 'Создавать fix ветки для исправлений': 'Create fix branches for fixes', + 'Использовать осмысленные названия веток': 'Use meaningful branch names', + 'Вливать через pull requests': 'Merge through pull requests', + + // Contacts and support + 'Контакты и поддержка': 'Contacts and Support', + 'Для пользователей': 'For Users', + 'Документация в memory-bank': 'Documentation in memory-bank', + 'Тестирование через DevTools панель': 'Testing through DevTools panel', + 'Обратная связь через GitHub Issues': 'Feedback through GitHub Issues', + 'Справочник команд в USER_COMMANDS.md': 'Command reference in USER_COMMANDS.md', + + 'Для разработчиков': 'For Developers', + 'Следовать принципам из': 'Follow principles from', + 'Использовать модульную архитектуру': 'Use modular architecture', + 'Приоритизировать безопасность и производительность': 'Prioritize security and performance', + 'Документировать все изменения': 'Document all changes', + 'Использовать систему синхронизации команд': 'Use command synchronization system', + + // Status + 'Статус готовности к международному сообществу': 'Readiness Status for International Community', + 'Готовые компоненты': 'Ready Components', + 'Полная интернационализация .cursor и memory-bank': 'Complete internationalization of .cursor and memory-bank', + 'Система синхронизации команд': 'Command synchronization system', + 'Универсальный формат команд': 'Universal command format', + 'Экспорт для Cursor AI memory-bank': 'Export for Cursor AI memory-bank', + 'Полностью модернизирован': 'Fully modernized', + 'Полностью обновлен': 'Fully updated', + 'Современный дизайн': 'Modern design', + 'Улучшенный индикатор': 'Improved indicator', + + 'Готово к публикации': 'Ready for Publication', + 'Все правила и документация на английском языке': 'All rules and documentation in English', + 'Автоматическая синхронизация команд': 'Automatic command synchronization', + 'Готовность к глобальному сообществу': 'Readiness for global community', + 'Совместимость с любым AI-ассистентом': 'Compatibility with any AI assistant', + 'Современный дизайн-система внедрена': 'Modern design system implemented', + 'Поддержка светлой и темной темы': 'Support for light and dark themes', + + 'План публикации': 'Publication Plan', + 'Тестирование системы синхронизации команд': 'Testing command synchronization system', + 'Интеграция команд в Cursor AI memory-bank': 'Integration of commands into Cursor AI memory-bank', + 'Публикация .cursor для международного сообщества': 'Publishing .cursor for international community', + 'Сбор обратной связи от глобального сообщества': 'Collecting feedback from global community', + 'Дальнейшая оптимизация на основе обратной связи': 'Further optimization based on feedback', + + // Architecture + 'Архитектура: Sidepanel и контекстная логика': 'Architecture: Sidepanel and Context Logic', + 'Sidepanel расширения открывается и закрывается пользователем': 'Extension sidepanel opens and closes by user', + 'Содержимое боковой панели зависит от текущей web-страницы': 'Side panel content depends on current web page', + 'Список доступных плагинов в сайдпанели зависит от разрешений': 'List of available plugins in sidepanel depends on permissions', + 'Сайдпанель не работает как отдельная extension page': 'Sidepanel does not work as separate extension page', + + // E2E Testing + 'E2E-тестирование чата плагина Ozon в Chromium': 'E2E Testing of Ozon Plugin Chat in Chromium', + 'Цель': 'Goal', + 'Полностью автоматизировать сценарий тестирования': 'Fully automate testing scenario', + 'Этапы и прогресс': 'Stages and Progress', + 'Проанализирован существующий e2e-тест': 'Analyzed existing e2e test', + 'Подтверждено, что тест уже реализует': 'Confirmed that test already implements', + 'Открытие страницы Ozon': 'Opening Ozon page', + 'Открытие сайдпанели': 'Opening sidepanel', + 'Проверку наличия плагина Ozon': 'Checking for Ozon plugin', + 'Клик по плагину и открытие чата': 'Click on plugin and open chat', + 'Отправку сообщения в чат': 'Sending message to chat', + 'Получение ответа от плагина': 'Receiving response from plugin', + 'Протестирован существующий тест в Chromium': 'Tested existing test in Chromium', + 'Выявлены и исправлены проблемы с селекторами': 'Identified and fixed selector issues', + 'Добавлена поддержка Chromium-specific селекторов': 'Added support for Chromium-specific selectors', + 'Оптимизированы таймауты для стабильности': 'Optimized timeouts for stability', + 'Добавлена обработка ошибок и retry логика': 'Added error handling and retry logic', + 'Создана документация по тестированию': 'Created testing documentation', + + 'Текущий статус': 'Current Status', + 'Готово к использованию': 'Ready for Use', + 'Тест полностью функционален в Chromium': 'Test is fully functional in Chromium', + 'Готов для CI/CD интеграции': 'Ready for CI/CD integration', + + 'Следующие шаги': 'Next Steps', + 'Интеграция в CI/CD pipeline': 'Integration into CI/CD pipeline', + 'Добавление тестов для других плагинов': 'Adding tests for other plugins', + 'Расширение покрытия тестирования': 'Expanding test coverage', + 'Оптимизация производительности тестов': 'Optimizing test performance' +}; + +function translateText(text) { + let translatedText = text; + + // Apply translations + for (const [russian, english] of Object.entries(contextTranslations)) { + translatedText = translatedText.replace(new RegExp(russian, 'g'), english); + } + + return translatedText; +} + +function createBackup() { + if (!fs.existsSync(BACKUP_DIR)) { + fs.mkdirSync(BACKUP_DIR, { recursive: true }); + } + + const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); + + if (fs.existsSync(ACTIVE_CONTEXT_PATH)) { + const backupPath = path.join(BACKUP_DIR, `activeContext-${timestamp}.md`); + fs.copyFileSync(ACTIVE_CONTEXT_PATH, backupPath); + console.log(`✅ Backup created: ${backupPath}`); + } + + if (fs.existsSync(PROGRESS_PATH)) { + const backupPath = path.join(BACKUP_DIR, `progress-${timestamp}.md`); + fs.copyFileSync(PROGRESS_PATH, backupPath); + console.log(`✅ Backup created: ${backupPath}`); + } +} + +function translateContext() { + console.log('🔄 Translating context to English...\n'); + + // Create backup + createBackup(); + + // Translate activeContext.md + if (fs.existsSync(ACTIVE_CONTEXT_PATH)) { + const content = fs.readFileSync(ACTIVE_CONTEXT_PATH, 'utf8'); + const translatedContent = translateText(content); + fs.writeFileSync(ACTIVE_CONTEXT_PATH, translatedContent, 'utf8'); + console.log('✅ Translated: memory-bank/core/activeContext.md'); + } + + // Translate progress.md + if (fs.existsSync(PROGRESS_PATH)) { + const content = fs.readFileSync(PROGRESS_PATH, 'utf8'); + const translatedContent = translateText(content); + fs.writeFileSync(PROGRESS_PATH, translatedContent, 'utf8'); + console.log('✅ Translated: memory-bank/core/progress.md'); + } + + console.log('\n🎉 Context translation completed!'); + console.log('📝 Note: Backups created in memory-bank/core/backup/'); +} + +function restoreFromBackup(backupName) { + const backupPath = path.join(BACKUP_DIR, backupName); + + if (!fs.existsSync(backupPath)) { + console.log(`❌ Backup not found: ${backupPath}`); + return; + } + + if (backupName.includes('activeContext')) { + fs.copyFileSync(backupPath, ACTIVE_CONTEXT_PATH); + console.log(`✅ Restored: memory-bank/core/activeContext.md from ${backupName}`); + } else if (backupName.includes('progress')) { + fs.copyFileSync(backupPath, PROGRESS_PATH); + console.log(`✅ Restored: memory-bank/core/progress.md from ${backupName}`); + } +} + +function listBackups() { + if (!fs.existsSync(BACKUP_DIR)) { + console.log('❌ No backups found'); + return; + } + + const files = fs.readdirSync(BACKUP_DIR); + if (files.length === 0) { + console.log('❌ No backups found'); + return; + } + + console.log('📁 Available backups:'); + files.forEach(file => { + const stats = fs.statSync(path.join(BACKUP_DIR, file)); + console.log(` ${file} (${stats.mtime.toLocaleString()})`); + }); +} + +function main() { + const command = process.argv[2] || 'translate'; + const backupName = process.argv[3]; + + switch (command) { + case 'translate': + translateContext(); + break; + case 'backup': + createBackup(); + break; + case 'restore': + if (!backupName) { + console.log('❌ Please specify backup name'); + console.log('Usage: node .cursor/rules/context-translator.cjs restore '); + return; + } + restoreFromBackup(backupName); + break; + case 'list': + listBackups(); + break; + case 'help': + console.log(` +Context Translator Script + +Usage: node .cursor/rules/context-translator.cjs [command] [backup-name] + +Commands: + translate - Translate context to English (default) + backup - Create backup of current context + restore - Restore from backup (requires backup name) + list - List available backups + help - Show this help + +Examples: + node .cursor/rules/context-translator.cjs translate + node .cursor/rules/context-translator.cjs backup + node .cursor/rules/context-translator.cjs restore activeContext-2024-07-19T10-30-00-000Z.md + node .cursor/rules/context-translator.cjs list + `); + break; + default: + console.log(`❌ Unknown command: ${command}`); + console.log('Use "help" to see available commands'); + process.exit(1); + } +} + +if (require.main === module) { + main(); +} + +module.exports = { translateText, contextTranslations, createBackup, translateContext }; \ No newline at end of file diff --git a/.cursor/rules/create-rule-for.mdc b/.cursor/rules/create-rule-for.mdc new file mode 100644 index 00000000..f43302e8 --- /dev/null +++ b/.cursor/rules/create-rule-for.mdc @@ -0,0 +1,39 @@ +--- +description: create rule for architecture project +globs: ["**/*"] +alwaysApply: false +aiPriority: normal +aiCategory: rules +createdFrom: "создай правило для архитектуры проекта" +translatedAt: "2025-07-19T02:58:58.601Z" +--- + +# create rule for architecture project + +## Overview + +This rule was created based on the request: "создай правило для архитектуры проекта" + +## Description + +create rule for architecture project + +## Implementation + + + +## Usage + + + +## Examples + + + +## Notes + + + +--- +*Generated automatically from user request: "создай правило для архитектуры проекта"* +*Translated to English for AI/LLM compatibility* diff --git a/.cursor/rules/create-rule.cjs b/.cursor/rules/create-rule.cjs index ee17d882..90023503 100644 --- a/.cursor/rules/create-rule.cjs +++ b/.cursor/rules/create-rule.cjs @@ -1,46 +1,168 @@ #!/usr/bin/env node + +/** + * Quick Rule Creation Helper + * Automatically translates user requests and creates .cursor rules in English + * Usage: node .cursor/rules/create-rule.cjs "your request in Russian" + */ + const fs = require('fs'); const path = require('path'); -const readline = require('readline'); +const { generateEnglishPrompt } = require('./request-translator.cjs'); -const RULES_DIR = path.join(__dirname); -const INDEX_SCRIPT = path.join(RULES_DIR, 'generate-rules-index.js'); +// File paths +const CURSOR_DIR = path.join(process.cwd(), '.cursor'); +const RULES_DIR = path.join(CURSOR_DIR, 'rules'); -function prompt(question) { - const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); - return new Promise(resolve => rl.question(question, ans => { rl.close(); resolve(ans); })); +function generateFilename(request) { + // Extract key terms from request + const terms = request.toLowerCase() + .replace(/[^\w\s]/g, '') + .split(/\s+/) + .filter(word => word.length > 2) + .slice(0, 3); + + // Create filename + const baseName = terms.join('-') || 'new-rule'; + return `${baseName}.mdc`; } -async function main() { - const fileName = await prompt('Enter rule file name (e.g., my-rule.mdc): '); - const filePath = path.join(RULES_DIR, fileName); - if (fs.existsSync(filePath)) { - console.error('File already exists!'); - process.exit(1); +function generateRuleContent(prompt) { + const timestamp = new Date().toISOString(); + const originalRequest = prompt.originalRequest; + const translatedRequest = prompt.translatedRequest || prompt.originalRequest; + + return `--- +description: ${translatedRequest} +globs: ["**/*"] +alwaysApply: false +aiPriority: normal +aiCategory: rules +createdFrom: "${originalRequest}" +translatedAt: "${timestamp}" +--- + +# ${translatedRequest} + +## Overview + +This rule was created based on the request: "${originalRequest}" + +## Description + +${translatedRequest} + +## Implementation + + + +## Usage + + + +## Examples + + + +## Notes + + + +--- +*Generated automatically from user request: "${originalRequest}"* +*Translated to English for AI/LLM compatibility* +`; +} + +async function createRule(request) { + try { + console.log('🤖 Processing your request...\n'); + + // Generate English prompt + const prompt = generateEnglishPrompt(request); + + // Display translation info + console.log('📊 Translation Info:'); + console.log(`Original: ${prompt.originalRequest}`); + console.log(`Translated: ${prompt.translatedRequest}`); + console.log(`Confidence: ${prompt.confidence.toFixed(1)}%`); + + if (prompt.shouldTranslate) { + console.log('\n✅ Request translated to English for AI/LLM compatibility'); + } else { + console.log('\n✅ Request already in English'); + } + + // Generate filename and content + const filename = generateFilename(prompt.translatedRequest || prompt.originalRequest); + const filepath = path.join(RULES_DIR, filename); + const ruleContent = generateRuleContent(prompt); + + // Ensure directory exists + const dir = path.dirname(filepath); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + + // Write the rule file + fs.writeFileSync(filepath, ruleContent, 'utf8'); + + console.log(`\n✅ Rule created: ${path.relative(process.cwd(), filepath)}`); + console.log(`📁 Location: ${filepath}`); + + // Stage the file for git + const { execSync } = require('child_process'); + try { + execSync(`git add "${filepath}"`, { stdio: 'inherit' }); + console.log('📦 File staged for git'); + } catch (error) { + console.log('⚠️ Could not stage file for git'); + } + + // Show the created content + console.log('\n📝 Created Rule Content:'); + console.log('='.repeat(60)); + console.log(ruleContent); + console.log('='.repeat(60)); + + return filepath; + } catch (error) { + console.error('❌ Error creating rule:', error.message); + throw error; } - const heading = await prompt('Enter rule heading/title: '); - const description = await prompt('Enter short description: '); - const globs = await prompt('Enter globs (comma-separated, e.g., src/*,public/*): '); - const related = await prompt('Related rules (comma-separated file names, optional): '); - const ruleBody = await prompt('Enter rule body (main points, use - for bullets): '); - const examples = await prompt('Examples (optional, leave blank if none): '); - - let content = `# ${heading}\n${ruleBody ? ruleBody + '\n' : ''}`; - if (related) { - content += `\nrelated:\n`; - related.split(',').map(s => s.trim()).filter(Boolean).forEach(r => content += ` - ${r}\n`); +} + +function main() { + const request = process.argv[2]; + + if (!request) { + console.log('❌ Please provide a request'); + console.log('\nUsage: node .cursor/rules/create-rule.cjs "your request"'); + console.log('\nExamples:'); + console.log(' node .cursor/rules/create-rule.cjs "создай правило для архитектуры"'); + console.log(' node .cursor/rules/create-rule.cjs "добавь файл в .cursor"'); + console.log(' node .cursor/rules/create-rule.cjs "напиши правило безопасности"'); + console.log('\nOr use npm script:'); + console.log(' npm run create-rule "your request"'); + process.exit(1); } - content += `\ndescription: ${description}\nglobs:\n`; - globs.split(',').map(s => s.trim()).filter(Boolean).forEach(g => content += ` - ${g}\n`); - content += 'alwaysApply: false\n---\n'; - if (examples) content += `\n# Examples\n${examples}\n`; - - fs.writeFileSync(filePath, content, 'utf8'); - console.log(`Created ${fileName}`); - // Update index/README - require(INDEX_SCRIPT); + + createRule(request) + .then(() => { + console.log('\n🎉 Rule created successfully!'); + console.log('\n💡 Next steps:'); + console.log(' 1. Edit the rule file to add your specific content'); + console.log(' 2. Commit the changes: git commit -m "feat: add new rule"'); + console.log(' 3. The rule will be automatically protected by the cursor protection system'); + }) + .catch((error) => { + console.error('\n❌ Failed to create rule:', error.message); + process.exit(1); + }); } if (require.main === module) { main(); -} \ No newline at end of file +} + +module.exports = { createRule, generateFilename, generateRuleContent }; \ No newline at end of file diff --git a/.cursor/rules/cursor-export/IMPORT-INSTRUCTIONS.md b/.cursor/rules/cursor-export/IMPORT-INSTRUCTIONS.md new file mode 100644 index 00000000..cb3f3798 --- /dev/null +++ b/.cursor/rules/cursor-export/IMPORT-INSTRUCTIONS.md @@ -0,0 +1,60 @@ +# Import .cursor Rules + +## Quick Import + +1. Copy the entire `cursor-export` folder to your target project +2. Run the import script: + ```bash + node cursor-export/import-cursor..js + ``` + +## Manual Import + +1. Create `.cursor/rules/` directory in your target project +2. Copy files from `cursor-export/` to `.cursor/rules/` +3. Run audit and optimization: + ```bash + cd .cursor/rules + node cursor-manager..js full + ``` + +## What's Included + +### Core Rules +- AI memory and Commands +- Environment constrai.ts +- Project structure guIDElines +- TypeScript build troubleshooting + +### Categories +- **architecture/** - System architecture rules +- **dev/** - Development principles and guIDElines +- **doc/** - Documentation standards +- **plugin/** - Plugin development standards +- **security/** - Security rules +- **ui/** - UI/UX standards +- **workflow/** - Development workflow + +### Automation +- Audit system +- Auto-fix capabilities +- AI optimization +- Status monitoring + +## Customization + +After import, customize rules for your project: +1. Update `environment.mdc` with your project constrai.ts +2. Modify `ai-memory.mdc` with project-specific Commands +3. Adjust `monorepo-best-practices.mdc` for your structure +4. Run `node cursor-manager..js optimize` to apply changes + +## Verification + +Verify successful import: +```bash +cd .cursor/rules +node cursor-manager..js status +``` + +All files should show as "AI-ready" with no issues. diff --git a/.cursor/rules/cursor-export/ai-memory.mdc b/.cursor/rules/cursor-export/ai-memory.mdc new file mode 100644 index 00000000..3a7e484d --- /dev/null +++ b/.cursor/rules/cursor-export/ai-memory.mdc @@ -0,0 +1,46 @@ +--- +description: Universal user Commands for AI assistant - complete Command reference with triggers and actions +globs: ["**/*"] +alwaysApply: true +aiPriority: critical +aiCategory: general +--- + +# AI Memory Bank - Universal User Commands + +## Commands for AI Assistant Recognition + +### Context and Memory: +- `save context` / `Сохрани контекст` / `Save контекст сессии` - Save achieveme.ts, decisions and plans to memory-bank in English for AI/LLM compatibility (automatically translates and comm.ts) +- `update progress` / `Обнови прогресс` / `Update прогресс проекта` - Update activeContext.md and progress.md with current status +- `restore context` / `Восстанови контекст` / `Восстановить полный контекст` - Study all memory-bank files and restore full project understanding +- `quick restore` / `Быстрое Recovery` - Get brief summary of key principles and current status + +### Analysis and Study: +- `analyze architecture` / `Анализируй архитектуру` / `Анализ архитектуры` - Study systempatterns.md and techContext.md for architecture understanding +- `study plugins` / `Изучи Plugins` - Analyze plugins and their structure +- `check build` / `Проверь сборку` / `Check сборку` - Check that project builds and works correctly +- `update documentation` / `Обнови документацию` / `Update документацию` - Check and update README.md and PLUGIN_DEVELOPMENT.md + +### Development: +- `create plugin [name]` / `Создай плагин [название]` - Create new plugin with specified name +- `check code` / `Проверь код` / `Check линтинг` - Run linting and type checking +- `run te.ts` / `Запусти тесты` / `Запустить тесты` - Run all project te.ts +- `check dependencies` / `Проверь Dependencies` / `Check Dependencies` - Check dependencies relevance and compatibility + +### Project Management: +- `bump version patch/minor/major` / `Увеличь версию [patch|minor|major]` / `Versioning` - Increase project version according to parameter +- `clean project` / `Очисти проект` / `Очистка проекта` - Clean node_modules, dist and cache +- `analyze performance` / `Анализируй Performance` / `Анализ производительности` - Analyze project performance and suggest optimizations +- `check security` / `Проверь Security` / `Анализ безопасности` - Analyze code and configuration security + +### Releases and Deployment: +- `create release` / `Создай релиз` / `Create релиз` - Prepare project for release (bump version, create ZIP) +- `build production` / `Собери для продакшена` / `build для продакшена` - Perform full production build + +## General Principles: +- Commands can be combined (e.g.: "save context and update progress") +- All actions should consIDEr current project context +- Resu.ts should be saved in appropriate memory-bank files +- If Command is unclear — clarify details with user +- When restoring context — read all key memory-bank files and use only current best practices diff --git a/.cursor/rules/cursor-export/dev/dev-principle-01-do-no-harm.mdc b/.cursor/rules/cursor-export/dev/dev-principle-01-do-no-harm.mdc new file mode 100644 index 00000000..efca4815 --- /dev/null +++ b/.cursor/rules/cursor-export/dev/dev-principle-01-do-no-harm.mdc @@ -0,0 +1,34 @@ +--- +description: Development principle harm - dev principle 01 do no harm +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + + + + + +--- +description: Development principle harm - dev principle 01 do no harm +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + +# Development Principle 1: Do No Harm +- Security first: Any changes must improve system security, not weaken it +- Backward compatibility: Changes must not break existing functionality +- Gradual implementation: Implement changes step by step with rollback capability +- Testing: All changes must pass thorough testing before deployment +- Monitoring: Track impact of changes on performance and stability + +description: 'Do No Harm' principle for all development +globs: + - * +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/dev/dev-principle-03-best-practices.mdc b/.cursor/rules/cursor-export/dev/dev-principle-03-best-practices.mdc new file mode 100644 index 00000000..7d2b513f --- /dev/null +++ b/.cursor/rules/cursor-export/dev/dev-principle-03-best-practices.mdc @@ -0,0 +1,35 @@ +--- +description: Development principle practices - dev principle 03 best practices +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + + + + + +--- +description: Development principle practices - dev principle 03 best practices +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + +# Development Principle 3: Best Practices First +- Architectural patterns: Use proven architectural patterns and principles +- Coding standards: Follow accepted standards and conventions +- Security: Apply security principles (Zero Trust, Defense in Depth, Least Privilege) +- Performance: Optimize critical paths and avoid anti-patterns +- Scalability: Design consIDEring future growth and changes +- Testability: Write code that is easy to test and maintain + +description: Prioritize best practices in all development +globs: + - * +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/dev/dev-principle-04-fail-fast-safe.mdc b/.cursor/rules/cursor-export/dev/dev-principle-04-fail-fast-safe.mdc new file mode 100644 index 00000000..743a5fa7 --- /dev/null +++ b/.cursor/rules/cursor-export/dev/dev-principle-04-fail-fast-safe.mdc @@ -0,0 +1,34 @@ +--- +description: Development principle safe - dev principle 04 fail fast safe +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + + + + + +--- +description: Development principle safe - dev principle 04 fail fast safe +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + +# Development Principle 4: Fail Fast, Fail Safe +- Early error detection: Validate at input, not during execution +- Graceful Degradation: System continues working even with partial failures +- Circuit breaker: Automatic shutdown of problematic compone.ts +- Rollback capability: Quick rollback to working State +- Error boundaries: Isolate errors at component level + +description: Fail fast and fail safe in all development +globs: + - * +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/dev/dev-principle-05-observability.mdc b/.cursor/rules/cursor-export/dev/dev-principle-05-observability.mdc new file mode 100644 index 00000000..d46bceaa --- /dev/null +++ b/.cursor/rules/cursor-export/dev/dev-principle-05-observability.mdc @@ -0,0 +1,34 @@ +--- +description: Development principle observability - dev principle 05 observability +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + + + + + +--- +description: Development principle observability - dev principle 05 observability +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + +# Development Principle 5: Observability First +- Structured logging: Structured logging for analysis +- Metrics everywhere: Performance and State metrics +- distributed tracing: Track reque.ts through all compone.ts +- Health checks: Monitor State of all services +- Debug information: Sufficient information for problem diagnosis + +description: Observability and monitoring in all development +globs: + - * +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/dev/dev-principle-06-config-as-code.mdc b/.cursor/rules/cursor-export/dev/dev-principle-06-config-as-code.mdc new file mode 100644 index 00000000..90cf296d --- /dev/null +++ b/.cursor/rules/cursor-export/dev/dev-principle-06-config-as-code.mdc @@ -0,0 +1,34 @@ +--- +description: Development principle code - dev principle 06 config as code +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + + + + + +--- +description: Development principle code - dev principle 06 config as code +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + +# Development Principle 6: configuration as Code +- Version-controlled configs: All configurations in version control +- Environment-specific: Different configurations for different environme.ts +- Validation: Automatic configuration validation +- Documentation: Document all configuration parameters +- Default safety: Safe default values + +description: configuration as code for all environme.ts +globs: + - * +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/dev/dev-principle-07-progressive-enhancement.mdc b/.cursor/rules/cursor-export/dev/dev-principle-07-progressive-enhancement.mdc new file mode 100644 index 00000000..4cb14008 --- /dev/null +++ b/.cursor/rules/cursor-export/dev/dev-principle-07-progressive-enhancement.mdc @@ -0,0 +1,34 @@ +--- +description: Development principle enhancement - dev principle 07 progressive enhancement +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + + + + + +--- +description: Development principle enhancement - dev principle 07 progressive enhancement +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + +# Development Principle 7: Progressive Enhancement +- Core functionality: Basic functionality always works +- Feature detection: Detect browser capabilities +- Graceful Degradation: Degrade functionality, not complete failure +- Performance budget: Performance budget for new features +- Accessibility baseline: Minimum accessibility level for all + +description: Progressive enhancement in all development +globs: + - * +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/dev/dev-principle-08-data-integrity-privacy.mdc b/.cursor/rules/cursor-export/dev/dev-principle-08-data-integrity-privacy.mdc new file mode 100644 index 00000000..33209d0d --- /dev/null +++ b/.cursor/rules/cursor-export/dev/dev-principle-08-data-integrity-privacy.mdc @@ -0,0 +1,35 @@ +--- +description: Development principle privacy - dev principle 08 data integrity privacy +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + + + + + +--- +description: Development principle privacy - dev principle 08 data integrity privacy +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + +# Development Principle 8: data Integrity & Privacy +- data validation: Validate all input data +- Encryption at rest: Encrypt data at rest +- Encryption in transit: Encrypt data in transit +- data minimization: Collect only necessary data +- User consent: Explicit user consent for data processing +- Right to be forgotten: Ability to delete user data + +description: data integrity and privacy in all development +globs: + - * +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/dev/dev-principle-09-continuous-learning.mdc b/.cursor/rules/cursor-export/dev/dev-principle-09-continuous-learning.mdc new file mode 100644 index 00000000..f298f32d --- /dev/null +++ b/.cursor/rules/cursor-export/dev/dev-principle-09-continuous-learning.mdc @@ -0,0 +1,34 @@ +--- +description: Development principle learning - dev principle 09 continuous learning +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + + + + + +--- +description: Development principle learning - dev principle 09 continuous learning +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + +# Development Principle 9: Continuous Learning +- Performance monitoring: Continuous performance monitoring +- User feedback loops: User feedback +- A/B testing: Test hypotheses on real users +- Analytics insig.ts: Usage analysis for improveme.ts +- Knowledge sharing: Document.lessons and insig.ts + +description: Continuous learning and improvement in all development +globs: + - * +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/dev/dev-principle-10-ecosystem-thinking.mdc b/.cursor/rules/cursor-export/dev/dev-principle-10-ecosystem-thinking.mdc new file mode 100644 index 00000000..5a16b370 --- /dev/null +++ b/.cursor/rules/cursor-export/dev/dev-principle-10-ecosystem-thinking.mdc @@ -0,0 +1,34 @@ +--- +description: Development principle thinking - dev principle 10 ecosystem thinking +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + + + + + +--- +description: Development principle thinking - dev principle 10 ecosystem thinking +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: high +aiCategory: development-practices +--- + +# Development Principle 10: Ecosystem Thinking +- Plugin compatibility: Ensure plugin compatibility +- API stability: Stable public APIs +- Backward compatibility: Backward version compatibility +- Community building: Support developer community +- Documentation quality: Quality documentation for ecosystem + +description: Ecosystem thinking in all development +globs: + - * +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/dev/development-guidelines.mdc b/.cursor/rules/cursor-export/dev/development-guidelines.mdc new file mode 100644 index 00000000..535e47d1 --- /dev/null +++ b/.cursor/rules/cursor-export/dev/development-guidelines.mdc @@ -0,0 +1,39 @@ +--- +description: General development guIDElines +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: false +aiCategory: development-practices--- + +# Development GuIDElines + +## JavaScript/TypeScript +- Use ES6+ and async/await. +- Modular architecture, clear separation of concerns. +- Error handling and structured logging are required. +- Use TypeScript for type safety. +- Prefer functional patterns where possible. + +## Python (Plugins) +- Use MCP protocol for communication. +- Use async/await for I/O operations. +- Always validate inp.ts and handle errors. +- Plugins should be single-purpose. +- Document all plugin APIs clearly. + +# Security First +- Validate manife.ts and permissions. +- Sanitize data between.js and Python. +- Sandbox all plugins. +- Apply the principle of least privilege. +- Audit all plugin code. + +# Performance ConsIDErations +- Lazy-load plugins and PyodIDE when possible. +- cache repeated operations. +- Monitor memory usage and clean up resources. +- Optimize bundle size and loading time. +- Use WebWorkers for non-blocking tasks. +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/dev/git-workflow.mdc b/.cursor/rules/cursor-export/dev/git-workflow.mdc new file mode 100644 index 00000000..8dadc7b2 --- /dev/null +++ b/.cursor/rules/cursor-export/dev/git-workflow.mdc @@ -0,0 +1,19 @@ +--- +description: Git workflow rule - только develop в main, обязательные PR для всех изменений +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: normal +aiCategory: development-practices +--- + +# Git Workflow Rule + +**Rule:** +- Only merge into main from develop. +- All feature, fix, and doc branches must be merged into develop first, never directly into main. +- This rule is mandatory for all changes and pull reque.ts. + +--- +## Enforcement +- Local pre-push hook (.husky/pre-push) blocks direct push to main and develop. +- GitHub branch protection preve.ts direct push and enforces PRs from develop only. +--- \ No newline at end of file diff --git a/.cursor/rules/cursor-export/dev/security-and-deployment.mdc b/.cursor/rules/cursor-export/dev/security-and-deployment.mdc new file mode 100644 index 00000000..d5f45cd4 --- /dev/null +++ b/.cursor/rules/cursor-export/dev/security-and-deployment.mdc @@ -0,0 +1,49 @@ +--- +description: Security rule for -and-deployment +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: trueaiPriority: normal +aiCategory: development-practices +--- + +# Security Best Practices + +## Plugin Validation +- Validate plugin manife.ts. +- Check all permissions. +- Scan for malicious code. +- Verify plugin signatures. + +## Runtime Security +- Sandbox all plugins. +- Validate all input data. +- Monitor plugin behavior. +- Apply rate limiting. + +## data Protection +- Sanitize all user data. +- Encrypt sensitive information. +- Ensure secure communication. +- Audit all data access. + +# Deployment ConsIDErations + +## Extension distribution +- Follow Chrome Web Store guIDElines. +- Use a secure update mechanism. +- ProvIDE a transparent privacy policy. +- Maintain user support channels. + +## Plugin distribution +- Use a marketplace for plugins. +- Validate and manage plugin versions. +- Perform security scanning. + +## Monitoring and Analytics +- Track plugin usage. +- Monitor performance. +- Collect error repo.ts. +- Analyze user feedback. +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/dev/testing-and-debugging.mdc b/.cursor/rules/cursor-export/dev/testing-and-debugging.mdc new file mode 100644 index 00000000..3008bfad --- /dev/null +++ b/.cursor/rules/cursor-export/dev/testing-and-debugging.mdc @@ -0,0 +1,49 @@ +--- +description: Testing and debugging standards +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: falseaiPriority: normal +aiCategory: development-practices +--- + +# Testing Strategy + +## Unit Testing +- Test compone.ts in isolation. +- Mock external dependencies. +- Validate error handling. +- Test security boundaries. + +## Integration Testing +- Test plugin loading and execution. +- Validate.js-Python communication. +- Test integration with browser APIs. +- Check permission compliance. + +## End-to-End Testing +- Test full plugin workflows. +- Validate user scenarios. +- Test extension installation and updates. +- Check cross-browser compatibility. + +# Debugging GuIDElines + +## JavaScript Debugging +- Use DevTools for extension debugging. +- Log message flow. +- Use breakpoi.ts for complex logic. +- Monitor WebWorker communication. + +## Python Debugging +- Use print/logging. +- Test plugins in isolation. +- Use PyodIDE console for debugging. + +## Common Issues +- PyodIDE startup: use loading indicators. +- Memory leaks: monitor worker lifecycle. +- Permission errors: validate manife.ts. +- Communication failures: check MCP format. +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/dev/typescript.mdc b/.cursor/rules/cursor-export/dev/typescript.mdc new file mode 100644 index 00000000..7a1218c4 --- /dev/null +++ b/.cursor/rules/cursor-export/dev/typescript.mdc @@ -0,0 +1,20 @@ +--- +description: TypeScript-specific guIDElines +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: falseaiPriority: normal +aiCategory: development-practices +--- + +# Rule +- Use only TypeScript for all new files. +- Enforce strict typing, avoid using `any`. +- Use modern language features (optional chaining, nullish coalescing, etc.). +- Always follow the shared.tsconfig from `packages.tsconfig/`. + +# examples +- ✅ `const foo: string = "bar"` +- ❌ `let x: any = 5` +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/doc/ai-fallback.mdc b/.cursor/rules/cursor-export/doc/ai-fallback.mdc new file mode 100644 index 00000000..b9192a53 --- /dev/null +++ b/.cursor/rules/cursor-export/doc/ai-fallback.mdc @@ -0,0 +1,27 @@ +--- +description: Fallback procedures for AI +globs: ["**/*.md", "**/*.mdc", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"] +alwaysApply: trueaiPriority: medium +aiCategory: documentation +--- + + + + + +--- +description: Правило fallback для AI - Priority источников информации при отсутствии ответа в memory-bank +globs: ["**/*.md", "**/*.mdc", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"] +alwaysApply: trueaiPriority: medium +aiCategory: documentation +--- + +# AI Fallback Rule + +**Правило:** +Если возникает вопрос, на который нет ответа в AI memory-bank, необходимо: +1. Сначала обращаться к сведениям в папке .rules проекта. +2. Если нужной информации нет в .rules, обращаться к сведениям в папке memory-bank проекта (особенно к архитектурным и контекстным файлам). + +**Priority:** +Это правило Priorityно для всех будущих консультаций и автоматизаций. \ No newline at end of file diff --git a/.cursor/rules/cursor-export/doc/ai-first.mdc b/.cursor/rules/cursor-export/doc/ai-first.mdc new file mode 100644 index 00000000..20ea682c --- /dev/null +++ b/.cursor/rules/cursor-export/doc/ai-first.mdc @@ -0,0 +1,69 @@ +--- +description: AI-oriented documentation standards +globs: ["**/*.md", "**/*.mdc", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"] +alwaysApply: trueaiPriority: medium +aiCategory: documentation +--- + + + + + +--- +description: AI-First Documentation Standards - analytical comme.ts and AI-oriented documentation +globs: ["**/*.md", "**/*.mdc", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"] +alwaysApply: trueaiPriority: medium +aiCategory: documentation +--- + +# AI-First Documentation Standards + +## Основные Principles +- **Analytical comme.ts**: Add comme.ts explaining logic and architectural decisions for AI understanding +- **Context explanations**: Explain "why", not just "what" the code does +- **Architectural comme.ts**: Document component relationships and data flows +- **Business logic**: Explain complex business logic and decisions made +- **TODO comme.ts**: Leave TODO with explanation of planned improveme.ts + +## examples правильного использования + +### ✅ Аналитические Comme.ts: +```TypeScript +// AI: This function is required for plugin isolation - preve.ts direct DOM access +function createSandboxedEnvironment() { + // Implementation... +} + +/** + * AI: Example usage - this component handles plugin communication + * through a secure message passing system + */ +export function PluginBridge() { + // Implementation... +} +``` + +### ✅ Объяснение контекста: +```TypeScript +// AI: Using setTimeout here because Chrome extension APIs are async +// and we need to ensure DOM is ready before accessing eleme.ts +setTimeout(() => { + initializePlugin(); +}, 100); +``` + +### ✅ TODO с объяснением: +```TypeScript +// TODO: AI - Replace with Web Workers for better performance +// Current implementation blocks main thread during heavy computations +function proceSSLargedataset(data) { + // Implementation... +} +``` + +## Recommendations +1. **Всегда объясняйте "почему"** - не только что делает код +2. **Используйте префикс "AI:"** для комментариев, предназначенных для AI +3. **Документируйте архитектурные решения** и их обоснование +4. **Объясняйте сложную бизнес-логику** с примерами +5. **Оставляйте TODO с контекстом** для будущих улучшений diff --git a/.cursor/rules/cursor-export/doc/knowledge-map.mdc b/.cursor/rules/cursor-export/doc/knowledge-map.mdc new file mode 100644 index 00000000..f3bdcf53 --- /dev/null +++ b/.cursor/rules/cursor-export/doc/knowledge-map.mdc @@ -0,0 +1,21 @@ +--- +description: Project knowledge structure +globs: ["**/*.md", "**/*.mdc", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"] +alwaysApply: false +aiCategory: documentation--- + +# Knowledge Map + +- USER_CommandS: USER_CommandS.md — все пользовательские команды +- graveyard: memory-bank/graveyard.md — ошибки, environment-specific issues +- architecture: memory-bank/codebase-architecture.md — архитектурные решения, Patterns, Dependencies +- meta: memory-bank/README.md — мета-правила, структура, универсальные инструкции +- dev-principles: memory-bank/DEV_PRACTICES.md — best practices для разработки +- security: memory-bank/SECURITY.md — Standards безопасности +- knowledge-map: memory-bank/KNOWLEDGE_MAP.md — карта знаний +- progress: memory-bank/progress.md — Status и история +- activeContext: memory-bank/activeContext.md — актуальный контекст +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/doc/mdc-file-standards.mdc b/.cursor/rules/cursor-export/doc/mdc-file-standards.mdc new file mode 100644 index 00000000..e370d93a --- /dev/null +++ b/.cursor/rules/cursor-export/doc/mdc-file-standards.mdc @@ -0,0 +1,134 @@ +--- +description: Standards for .mdc file creation +globs: ["**/*.md", "**/*.mdc", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"] +alwaysApply: trueaiPriority: medium +aiCategory: documentation +--- + +# Standards создания правил в .cursor/rules + +## Priority .mdc файлов над .md + +### Required использовать .mdc для: +- **Правил и стандартов** - все правила должны быть в .mdc +- **AI инструкций** - команды, Principles, Constrai.ts +- **Архитектурных решений** - структура, Patterns, best practices +- **automation** - скрипты, workflow, Processes + +### Допустимо использовать .md для: +- **Чистой документации** - README, guIDEs, tutorials +- **Временных заметок** - черновики, эксперименты +- **Внешних ссылок** - ссылки на внешние ресурсы + +## Структура .mdc файла + +### Обязательные метаdata: +``.yaml +--- +description: Краткое Description назначения файла +globs: ["**/*"] # Patterns файлов для применения +alwaysApply: true # Автоматическое применение +--- +``` + +### Дополнительные метаdata: +``.yaml +--- +description: Description +globs: ["pages/**/*", "packages/**/*"] +alwaysApply: false # Применяется по запросу +related: + - other-rule.mdc + - another-rule.mdc +--- +``` + +## Преимущества .mdc файлов + +### 1. Автоматическое применение +- Cursor читает метаdata при создании чата +- Правила применяются без явного обращения +- `alwaysApply: true` обеспечивает постоянное Action + +### 2. Лучшая Integration с AI +- AI понимает контекст применения через `globs` +- Description помогает AI выбрать подходящие правила +- Структурированные метаdata улучшают понимание + +### 3. Приоритизация и организация +- `alwaysApply` определяет Importantсть правила +- `related` связывает связанные правила +- `globs` ограничивает область применения + +### 4. AI memory-bank Integration +- Правила автоматически попадают в AI memory-bank +- Доступны через Settings / Rules & Memories +- Сохраняются между сессиями + +## Миграция .md → .mdc + +### Когда мигрировать: +- Файл содержит правила или инструкции +- Файл должен применяться автоматически +- Файл важен для AI понимания проекта + +### Процесс миграции: +1. Переименовать `.md` → `.mdc` +2. Add.yaml frontmatter с метаданными +3. Убедиться в корректности `globs` и `alwaysApply` +4. Check интеграцию с AI memory-bank + +## examples правильного использования + +### ✅ Правильно - .mdc с метаданными: +``.yaml +--- +description: Правила TypeScript - configuration, barrel expo.ts, troubleshooting +globs: ["**/*.ts", "**/*.tsx", "**/*.json"] +alwaysApply: true +--- +``` + +### ❌ Неправильно - .md без метаданных: +```markdown +# TypeScript Rules +- Use strict mode +- Prefer barrel expo.ts +``` + +## Exceptions + +### Допустимые .md файлы: +- `README.md` - главная Documentation проекта +- `CHANGELOG.md` - история изменений +- `LICENSE.md` - лицензия +- Временные файлы с префиксом `temp-` или `draft-` + +## Verification соответствия + +### Автоматическая Verification: +```bash +# Найти все .md файлы в .cursor/rules +find .cursor/rules -name "*.md" -not -name "README.md" + +# Check структуру .mdc файлов +node .cursor/rules/check-rules-structure..js +``` + +### Ручная Verification: +1. Все ли правила в .mdc формате? +2. Есть ли метаdata во всех .mdc файлах? +3. Корректны ли `globs` и `alwaysApply`? +4. Нужно ли мигрировать какие-то .md файлы? + +## Recommendations + +1. **Всегда начинать с .mdc** для новых правил +2. **Мигрировать важные .md** файлы в .mdc +3. **Проверять метаdata** при создании правил +4. **Использовать `alwaysApply: true`** для критических правил +5. **Документировать Exceptions** в README.mdc +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/doc/memorybank-quality.mdc b/.cursor/rules/cursor-export/doc/memorybank-quality.mdc new file mode 100644 index 00000000..0e2c801c --- /dev/null +++ b/.cursor/rules/cursor-export/doc/memorybank-quality.mdc @@ -0,0 +1,18 @@ +--- +description: Quality standards for memory-bank +globs: ["**/*.md", "**/*.mdc", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"] +alwaysApply: false +aiCategory: documentation--- + +# Memory-Bank Quality Checklist + +- Актуальность: информация своевременно обновляется +- Полнота: все ключевые аспекты проекта отражены +- Нет дублирования: информация не повторяется в разных файлах +- Навигация: структура и ссылки понятны +- История изменений: все важные правки фиксируются +- Прозрачность: причины изменений и удаления всегда документируются +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/doc/restore-context.mdc b/.cursor/rules/cursor-export/doc/restore-context.mdc new file mode 100644 index 00000000..cbee881a --- /dev/null +++ b/.cursor/rules/cursor-export/doc/restore-context.mdc @@ -0,0 +1,17 @@ +--- +description: Context restoration procedures +globs: ["**/*.md", "**/*.mdc", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"] +alwaysApply: false +aiCategory: documentation--- + +# Восстанови контекст + +1. Прочитать все файлы в директории `memory-bank` и `USER_CommandS.md`. +2. Сделать краткое резюме ключевых положений, правил, пользовательских требований и текущего Statusа проекта. +3. Использовать эту информацию для всех последующих ответов и действий. + +> Это правило предназначено для ручного вызова или использования агентом при необходимости полного восстановления контекста проекта. +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/environment.mdc b/.cursor/rules/cursor-export/environment.mdc new file mode 100644 index 00000000..9fb92cb1 --- /dev/null +++ b/.cursor/rules/cursor-export/environment.mdc @@ -0,0 +1,12 @@ +--- +description: Critical environment constrai.ts - Node.js версия, popup vs sIDEpanel +globs: ["**/*"] +alwaysApply: trueaiPriority: critical +aiCategory: general +--- + +# Critical environment constrai.ts + +- **popup не используется**, основной Interface — **sIDEpanel**. Все ошибки popup можно игнорировать, если они не влияют на работу sIDEpanel. + +- **Использовать только Node.js версии 22.17.1 и выше**. Понижать версию запрещено, все баги и инфраструктурные проблемы решать только в этом контексте. \ No newline at end of file diff --git a/.cursor/rules/cursor-export/import-cursor.cjs b/.cursor/rules/cursor-export/import-cursor.cjs new file mode 100755 index 00000000..d70c8eed --- /dev/null +++ b/.cursor/rules/cursor-export/import-cursor.cjs @@ -0,0 +1,116 @@ +#!/usr/bin/env node + +const fs = require('fs'); +const path = require('path'); + +class CursorImporter { + constructor() { + this.exportDir = __dirname; + this.targetRulesDir = path.join(process.cwd(), '.cursor', 'rules'); + } + + async import() { + console.log('📥 Importing .cursor rules...\n'); + + // Создаем папку .cursor/rules если не существует + if (!fs.existsSync(this.targetRulesDir)) { + fs.mkdirSync(this.targetRulesDir, { recursive: true }); + console.log('✅ Created .cursor/rules directory'); + } + + // Копируем все файлы + await this.copyFiles(); + + // Копируем скрипты автоматизации + await this.copyAutomationScripts(); + + // Создаем базовую структуру если нужно + await this.createBasicStructure(); + + console.log('\n✅ Import completed!'); + console.log('\n🔧 Next steps:'); + console.log(' 1. Customize environment.mdc for your project'); + console.log(' 2. Update ai-memory.mdc with project-specific commands'); + console.log(' 3. Run: cd .cursor/rules && node cursor-manager.cjs full'); + } + + async copyFiles() { + console.log('📋 Copying rule files...'); + + const items = fs.readdirSync(this.exportDir); + + for (const item of items) { + const sourcePath = path.join(this.exportDir, item); + const targetPath = path.join(this.targetRulesDir, item); + + const stat = fs.statSync(sourcePath); + + if (stat.isDirectory()) { + // Копируем директории + if (!fs.existsSync(targetPath)) { + fs.mkdirSync(targetPath, { recursive: true }); + } + + const files = fs.readdirSync(sourcePath); + for (const file of files) { + if (file.endsWith('.mdc')) { + const fileSource = path.join(sourcePath, file); + const fileTarget = path.join(targetPath, file); + fs.copyFileSync(fileSource, fileTarget); + console.log(` ✅ ${item}/${file}`); + } + } + } else if (item.endsWith('.mdc')) { + // Копируем .mdc файлы + fs.copyFileSync(sourcePath, targetPath); + console.log(` ✅ ${item}`); + } + } + } + + async copyAutomationScripts() { + console.log('🔧 Copying automation scripts...'); + + const scripts = [ + 'audit-cursor.cjs', + 'fix-cursor.cjs', + 'optimize-for-ai.cjs', + 'cursor-manager.cjs' + ]; + + for (const script of scripts) { + const sourcePath = path.join(this.exportDir, script); + if (fs.existsSync(sourcePath)) { + const targetPath = path.join(this.targetRulesDir, script); + fs.copyFileSync(sourcePath, targetPath); + console.log(` ✅ ${script}`); + } + } + } + + async createBasicStructure() { + console.log('🏗️ Creating basic structure...'); + + const requiredDirs = ['architecture', 'dev', 'doc', 'plugin', 'security', 'ui', 'workflow']; + + for (const dir of requiredDirs) { + const dirPath = path.join(this.targetRulesDir, dir); + if (!fs.existsSync(dirPath)) { + fs.mkdirSync(dirPath, { recursive: true }); + console.log(` ✅ Created ${dir}/`); + } + } + } +} + +// Запуск импорта +async function main() { + const importer = new CursorImporter(); + await importer.import(); +} + +if (require.main === module) { + main().catch(console.error); +} + +module.exports = CursorImporter; diff --git a/.cursor/rules/cursor-export/index.mdc b/.cursor/rules/cursor-export/index.mdc new file mode 100644 index 00000000..d0272f95 --- /dev/null +++ b/.cursor/rules/cursor-export/index.mdc @@ -0,0 +1,80 @@ +--- +description: index rule +globs: ["**/*"] +alwaysApply: true +aiCategory: general--- + +# Index of Modular Rules + +## root +- [AI Memory Bank](ai-memory.mdc) — User Commands and AI instructions +- [Environment Constrai.ts](environment.mdc) — Critical environment limitations +- [Monorepo Best Practices](monorepo-best-practices.mdc) — Monorepo structure and guIDElines +- [TypeScript build Troubleshooting](TypeScript-build-troubleshooting.mdc) — TypeScript build error solutions +- [README](README.mdc) — Main documentation and structure + +## architecture +- [Chat System Architecture](architecture/architecture-chat-system.mdc) — Chat system architecture and data flow +- [Error Handling (Architecture)](architecture/architecture-error-handling.mdc) — Error handling requireme.ts for system architecture +- [Monitoring and Observability (Architecture)](architecture/architecture-observability.mdc) — Monitoring and observability requireme.ts for system architecture +- [Performance GuIDElines (Architecture)](architecture/architecture-performance.mdc) — Performance guIDElines for system architecture +- [Plugin Architecture](architecture/architecture-plugin.mdc) — Plugin architecture and isolation requireme.ts +- [Project Structure Architecture](architecture/architecture-project-structure.mdc) — Directory and component structure for the project +- [Security Architecture](architecture/architecture-security.mdc) — Security architecture and controls +- [Development Workflow (Architecture)](architecture/architecture-workflow.mdc) — Development workflow and process standards +- [Project Overview](architecture/project-architecture.mdc) + +## dev +- [Development Principle 1: Do No Harm](dev/dev-principle-01-do-no-harm.mdc) — 'Do No Harm' principle for all development +- [AI-First Documentation](doc/ai-first.mdc) — AI-oriented documentation and comme.ts for all code +- [Development Principle 3: Best Practices First](dev/dev-principle-03-best-practices.mdc) — Prioritize best practices in all development +- [Development Principle 4: Fail Fast, Fail Safe](dev/dev-principle-04-fail-fast-safe.mdc) — Fail fast and fail safe in all development +- [Development Principle 5: Observability First](dev/dev-principle-05-observability.mdc) — Observability and monitoring in all development +- [Development Principle 6: configuration as Code](dev/dev-principle-06-config-as-code.mdc) — configuration as code for all environme.ts +- [Development Principle 7: Progressive Enhancement](dev/dev-principle-07-progressive-enhancement.mdc) — Progressive enhancement in all development +- [Development Principle 8: data Integrity & Privacy](dev/dev-principle-08-data-integrity-privacy.mdc) — data integrity and privacy in all development +- [Development Principle 9: Continuous Learning](dev/dev-principle-09-continuous-learning.mdc) — Continuous learning and improvement in all development +- [Development Principle 10: Ecosystem Thinking](dev/dev-principle-10-ecosystem-thinking.mdc) — Ecosystem thinking in all development +- [Development GuIDElines](dev/development-guIDElines.mdc) — General development guIDElines +- [Security Best Practices](dev/security-and-deployment.mdc) — Security and deployment standards +- [Testing Strategy](dev/testing-and-debugging.mdc) — Testing and debugging approaches +- [TypeScript Rules](dev/TypeScript.mdc) — TypeScript-specific guIDElines +- [Git Workflow](dev/git-workflow.mdc) — Git workflow and branching rules + +## doc +- [AI-First Documentation](doc/ai-first.mdc) — AI-oriented documentation standards +- [Knowledge Map](doc/knowledge-map.mdc) — Project knowledge structure +- [Memory-Bank Quality Checklist](doc/memorybank-quality.mdc) — Quality standards for memory-bank +- [Restore Context](doc/restore-context.mdc) — Context restoration procedures +- .mdc File Standards](doc.mdc-file-standards.mdc) — Standards for .mdc file creation +- [AI Fallback Rule](doc/ai-fallback.mdc) — Fallback procedures for AI + +## plugin +- [Plugin Best Practices](plugin/plugin-best-practices.mdc) — Best practices for plugin development +- [Plugin Documentation Standards](plugin/plugin-documentation.mdc) — Documentation standards for all plugins +- [Plugin Error Handling](plugin/plugin-error-handling.mdc) — Error handling requireme.ts for all plugins +- [Plugin Performance GuIDElines](plugin/plugin-performance.mdc) — Performance guIDElines for all plugins +- [Plugin Security Requireme.ts](plugin/plugin-security.mdc) — Security requireme.ts for all plugins +- [Plugin Structure](plugin/plugin-structure.mdc) — Plugin directory and manifest requireme.ts +- [Plugin Testing Requireme.ts](plugin/plugin-testing.mdc) — Testing requireme.ts for all plugins + +## security +- [Input Validation](security/validation.mdc) — Input validation and data sanitization rules + +## ui +- [Accessibility (A11y) Standards](ui/ui-accessibility.mdc) — Accessibility requireme.ts for all UI compone.ts +- [UI Animation and Transitions](ui/ui-animation.mdc) — Animation and transition standards for all UI compone.ts +- [UI Error Handling](ui/ui-error-handling.mdc) — Error handling requireme.ts for all UI compone.ts +- [UI Form Standards](ui/ui-forms.mdc) — Form standards for all UI compone.ts +- [UI Loading States](ui/ui-loading-States.mdc) — Loading State requireme.ts for all UI compone.ts +- [UI Mobile Responsiveness](ui/ui-mobile.mdc) — Mobile responsiveness standards for all UI compone.ts +- [UI Navigation Standards](ui/ui-navigation.mdc) — Navigation standards for all UI compone.ts +- [UI Performance Standards](ui/ui-performance.mdc) — Performance standards for all UI compone.ts +- [React Component Standards](ui/ui-React-compone.ts.mdc) — Standards for React component structure in UI +- [UI Styling Standards](ui/ui-styling.mdc) — Styling standards for all UI compone.ts +- [UI Testing Standards](ui/ui-testing.mdc) — Testing standards for all UI compone.ts + +## workflow +- [Automation Rules](workflow/automation.mdc) — Automation and synchronization rules +- [Branch Management](workflow/branches.mdc) — Git branch management rules +- [Workflow Branching Rules](workflow/workflow.mdc) — Development workflow standards \ No newline at end of file diff --git a/.cursor/rules/cursor-export/monorepo-best-practices.mdc b/.cursor/rules/cursor-export/monorepo-best-practices.mdc new file mode 100644 index 00000000..f0a8387d --- /dev/null +++ b/.cursor/rules/cursor-export/monorepo-best-practices.mdc @@ -0,0 +1,208 @@ +--- +description: Best practices for monorepo work - структура, Dependencies, TypeScript, barrel expo.ts +globs: ["**/*"] +alwaysApply: false +aiCategory: general--- + +# Monorepo Best Practices for AI + +## Основные Principles + +### 1. Project Structure +- **packages/** - общие Libraries и утилиты +- **pages/** - приложения и страницы Extensions +- **external/** - копии внешних boilerplate проектов +- **te.ts/** - тесты и e2e + +### 2. Dependencies +- **Root dependencies** - только общие инструменты (prettier, eslint, TypeScript) +- **Package dependencies** - устанавливать в конкретных пакетах +- **Workspace dependencies** - использовать `pnpm add -D package -w` для root + +### 3. TypeScript configuration +- **Base config** - `packages.tsconfig/base.json` для общих настроек +- **Package configs** - наследовать от base с специфичными настройками +- **App configs** - наследовать от base с browser-specific настройками + +## Правила для AI + +### При создании новых пакетов: + +1. **Create правильную структуру:** +``` +packages/new-package/ +├── lib/ +│ ├── index.ts +│ └── compone.ts/ +├── package.json +├──.tsconfig.json +└── README.md +``` + +2. **Настроить.tsconfig.json:** +``.json +{ + "extends": "...tsconfig/base.json", + "compilerOptions": { + "outDir": "dist", + "declaration": true, + "declarationDir": "dist" + }, + "include": ["lib/**/*", "index..ts"], + "exclude": ["node_modules", "dist"] +} +``` + +3. **Настроить package.json:** +``.json +{ + "name": "@extension/new-package", + "main": "dist/index..js", + "types": "dist/index.d.ts", + "expo.ts": { + ".": "./dist/index..js" + }, + "files": ["dist"] +} +``` + +### При создании новых страниц: + +1. **Create правильную структуру:** +``` +pages/new-page/ +├── src/ +│ ├── index.tsx +│ └── compone.ts/ +├── package.json +├──.tsconfig.json +├── pos.css.config..js +└── vite.config..ts +``` + +2. **Настроить.tsconfig.json:** +``.json +{ + "extends": "@extension.tsconfig/base", + "compilerOptions": { + "types": ["chrome"], + "paths": { + "@extension/shared": ["../../packages/shared"], + "@extension/ui": ["../../packages/ui"] + } + } +} +``` + +3. **Настроить Pos.css для Tailwin.css 4+:** +```JavaScript +// pos.css.config..js +module.expo.ts = { + plugins: { + '@tailwin.css/pos.css': {}, + autoprefixer: {}, + }, +} +``` + +### При работе с barrel expo.ts: + +1. **Default expo.ts:** +```TypeScript +// component.ts +export default function Component() { ... } + +// index.ts +export { default as Component } from './component.js'; +``` + +2. **Named expo.ts:** +```TypeScript +// component.ts +export function Component() { ... } + +// index.ts +export { Component } from './component'; +``` + +3. **Mixed expo.ts:** +```TypeScript +// index.ts +export * from './helpers.js'; +export { default as Component } from './component.js'; +export type * from './types.js'; +``` + +### При установке зависимостей: + +1. **В конкретном пакете:** +```bash +cd packages/package-name +pnpm add dependency-name +``` + +2. **В конкретной странице:** +```bash +cd pages/page-name +pnpm add dependency-name +``` + +3. **В workspace root:** +```bash +pnpm add -D dependency-name -w +``` + +### При диагностике проблем: + +1. **Check Dependencies:** +```bash +pnpm why package-name +pnpm list package-name +``` + +2. **Найти проблемные файлы:** +```bash +find . -name .tsconfig.json" -exec grep -l "node" {} \; +``` + +3. **Очистить и пересобрать:** +```bash +rm -rf dist && pnpm run build +``` + +## Частые ошибки и решения + +| Проблема | Решение | +|----------|---------| +| `Cannot find type definition file for 'node'` | Remove 'node' из types в.tsconfig.json | +| `"Component" is not exported by` | Использовать `export { default as Component } from './file.js'` | +| `Cannot find module 'tailwin.css'` | `pnpm add -D tailwin.css autoprefixer @tailwin.css/pos.css` | +| `Rollup failed to resolve import` | `pnpm add package-name` в конкретном пакете | +| `spawn prettier ENOENT` | `git commit --no-verify` | + +## Команды для работы + +```bash +# build всего проекта +pnpm run build + +# build конкретного пакета +pnpm -F @extension/package-name run build + +# Установка зависимостей +pnpm install + +# Очистка cacheа +pnpm exec rimraf node_modules/.vite .turbo .cache + +# Пропуск pre-commit хуков +git commit --no-verify -m "message" +``` + +## Recommendations + +1. **Всегда проверять сборку** после изменений +2. **Документировать решения** для повторного использования +3. **Использовать правильные barrel expo.ts** для default expo.ts +4. **Устанавливать Dependencies в правильных местах** +5. **Следовать структуре проекта** при создании новых файлов \ No newline at end of file diff --git a/.cursor/rules/cursor-export/plugin/plugin-best-practices.mdc b/.cursor/rules/cursor-export/plugin/plugin-best-practices.mdc new file mode 100644 index 00000000..a9901630 --- /dev/null +++ b/.cursor/rules/cursor-export/plugin/plugin-best-practices.mdc @@ -0,0 +1,23 @@ +--- +description: Plugin standard for best-practices +globs: ["public/plugins/**/*", "**/*.py", "**/*.json", "**/*.ts", "**/*.js"] +alwaysApply: falseaiPriority: normal +aiCategory: plugin-development +--- + +# Plugin Best Practices +- Single Responsibility: Each plugin should have a single, clear purpose +- Modular Design: Break complex functionality into modules +- configuration: Use configuration files for customizable behavior +- Versioning: Follow semantic versioning for plugin updates +- Backward Compatibility: Maintain compatibility with previous versions + +description: Best practices for plugin development +globs: + - public/plugins/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/plugin/plugin-documentation.mdc b/.cursor/rules/cursor-export/plugin/plugin-documentation.mdc new file mode 100644 index 00000000..5b34417a --- /dev/null +++ b/.cursor/rules/cursor-export/plugin/plugin-documentation.mdc @@ -0,0 +1,23 @@ +--- +description: Plugin standard for documentation +globs: ["public/plugins/**/*", "**/*.py", "**/*.json", "**/*.ts", "**/*.js"] +alwaysApply: falseaiPriority: normal +aiCategory: plugin-development +--- + +# Plugin Documentation Standards +- API Documentation: Document all public APIs and parameters +- Usage examples: ProvIDE clear usage examples +- Error Codes: Document all possible error codes and meanings +- Performance Notes: Document performance characteristics +- Security Notes: Document security consIDErations + +description: Documentation standards for all plugins +globs: + - public/plugins/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/plugin/plugin-error-handling.mdc b/.cursor/rules/cursor-export/plugin/plugin-error-handling.mdc new file mode 100644 index 00000000..a95d9cf5 --- /dev/null +++ b/.cursor/rules/cursor-export/plugin/plugin-error-handling.mdc @@ -0,0 +1,27 @@ +--- +description: Plugin standard for error-handling +globs: ["public/plugins/**/*", "**/*.py", "**/*.json", "**/*.ts", "**/*.js"] +alwaysApply: falseaiPriority: normal +aiCategory: plugin-development +--- + +# Plugin Error Handling +- Graceful Degradation: Continue working with reduced functionality +- User Feedback: ProvIDE clear error messages to users +- Logging: Log errors for debugging without exposing sensitive data +- Fallbacks: Implement fallback mechanisms for critical features +- Recovery: Automatic retry mechanisms where appropriate + +related: + - plugin-security.mdc + - architecture-error-handling.mdc + +description: Error handling requireme.ts for all plugins +globs: + - public/plugins/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/plugin/plugin-performance.mdc b/.cursor/rules/cursor-export/plugin/plugin-performance.mdc new file mode 100644 index 00000000..868ad488 --- /dev/null +++ b/.cursor/rules/cursor-export/plugin/plugin-performance.mdc @@ -0,0 +1,27 @@ +--- +description: Plugin standard for performance +globs: ["public/plugins/**/*", "**/*.py", "**/*.json", "**/*.ts", "**/*.js"] +alwaysApply: falseaiPriority: normal +aiCategory: plugin-development +--- + +# Plugin Performance GuIDElines +- PyodIDE Optimization: Optimize for WebAssembly execution +- Memory Management: Clean up resources and avoid memory leaks +- Async Operations: Use async/await for all I/O operations +- Caching: Implement appropriate caching strategies +- Bundle Size: Keep plugin size reasonable for browser loading + +related: + - architecture-performance.mdc + - plugin-testing.mdc + +description: Performance guIDElines for all plugins +globs: + - public/plugins/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/plugin/plugin-security.mdc b/.cursor/rules/cursor-export/plugin/plugin-security.mdc new file mode 100644 index 00000000..a3e81a41 --- /dev/null +++ b/.cursor/rules/cursor-export/plugin/plugin-security.mdc @@ -0,0 +1,22 @@ +--- +description: Plugin standard for security +globs: ["public/plugins/**/*", "**/*.py", "**/*.json", "**/*.ts", "**/*.js"] +alwaysApply: true +aiCategory: plugin-development--- + +# Plugin Security Requireme.ts +- Zero Trust: Plugins are not trusted by default +- Permission Declaration: All required permissions must be declared in manifest +- API Validation: All API calls must be validated against schemas +- Rate Limiting: Respect rate lim.ts to prevent abuse +- Error Handling: Graceful error handling without exposing sensitive data + +description: Security requireme.ts for all plugins +globs: + - public/plugins/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/plugin/plugin-structure.mdc b/.cursor/rules/cursor-export/plugin/plugin-structure.mdc new file mode 100644 index 00000000..92065786 --- /dev/null +++ b/.cursor/rules/cursor-export/plugin/plugin-structure.mdc @@ -0,0 +1,60 @@ +--- +description: Plugin standard for structure +globs: ["public/plugins/**/*", "**/*.py", "**/*.json", "**/*.ts", "**/*.js"] +alwaysApply: falseaiPriority: normal +aiCategory: plugin-development +--- + +# Plugin Structure + +## Directory Layout +``` +public/plugins/plugin-name/ +├── manifest.json # Plugin metadata and permissions +├── mcp_server.py # Python MCP protocol implementation +├── workflow.json # Plugin workflow definition (optional) +└──.icon.svg # Plugin.icon +``` + +## Manifest.json Example +``.json +{ + "name": "Plugin Name", + "version": "1.0.0", + "description": "Plugin description", + "main_server": "mcp_server.py", + "required_secr.ts": ["openai_API_key", "weather_API_key"], + "API_permissions": { + "openai": { + "domains": ["API.openai.com"], + "endpoi.ts": ["/v1/chat/completions"], + "methods": ["POST"], + "rate_limit": "100/hour" + } + }, + "network_policy": { + "allowed_domains": ["API.openai.com"], + "WebSock.ts": "denied" + }, + "API_schemas": { + "openai": { + "chat_completions": { + "type": "object", + "required": ["prompt"], + "properties": { + "prompt": {"type": "string", "maxLength": 4000} + } + } + } + } +} +``` +description: Plugin directory and manifest requireme.ts +globs: + - public/plugins/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/plugin/plugin-testing.mdc b/.cursor/rules/cursor-export/plugin/plugin-testing.mdc new file mode 100644 index 00000000..c90be344 --- /dev/null +++ b/.cursor/rules/cursor-export/plugin/plugin-testing.mdc @@ -0,0 +1,23 @@ +--- +description: Plugin standard for testing +globs: ["public/plugins/**/*", "**/*.py", "**/*.json", "**/*.ts", "**/*.js"] +alwaysApply: falseaiPriority: normal +aiCategory: plugin-development +--- + +# Plugin Testing Requireme.ts +- Unit Te.ts: Test individual functions and compone.ts +- Integration Te.ts: Test plugin integration with host system +- Security Te.ts: Validate permission enforcement +- Performance Te.ts: Monitor memory usage and execution time +- Error Te.ts: Test error handling and recovery + +description: Testing requireme.ts for all plugins +globs: + - public/plugins/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/security/validation.mdc b/.cursor/rules/cursor-export/security/validation.mdc new file mode 100644 index 00000000..76a56384 --- /dev/null +++ b/.cursor/rules/cursor-export/security/validation.mdc @@ -0,0 +1,18 @@ +--- +description: Input validation and data sanitization rules +globs: ["**/*.ts", "**/*.js", "**/*.py", "**/*.json", "platform-core/**/*"] +alwaysApply: false +aiCategory: security--- + +# Rule +- Always validate all input data and API parameters. +- Never trust data from external sources (user, plugins, third-party services). +- Use schemas, types, or validators (e.g., zod, pydantic, marshmallow). + +# examples +- ✅ `z.object({ email: z.string().email() })` +- ✅ `if not isinstance(user_id, int): raise ValueError()` +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/typescript-build-troubleshooting.mdc b/.cursor/rules/cursor-export/typescript-build-troubleshooting.mdc new file mode 100644 index 00000000..5c629cf7 --- /dev/null +++ b/.cursor/rules/cursor-export/typescript-build-troubleshooting.mdc @@ -0,0 +1,166 @@ +--- +description: TypeScript build error troubleshooting guIDE - Typeы, barrel expo.ts, Dependencies, Tailwin.css +globs: ["**/*"] +alwaysApply: false +aiCategory: general--- + +# TypeScript build Troubleshooting Rules + +## Основные Principles устранения ошибок + +### 1. TypeScript configuration Errors + +**Error:** `Cannot find type definition file for 'node'` +- **Причина:** В .tsconfig.json` указаны Typeы Node.js для Browserного кода +- **Решение:** Remove `'node'` из `compilerOptions.types`, оставить только `['chrome']` +- **Применяется к:** `pages/*.tsconfig.json`, `te.ts/e2e.tsconfig.json` + +**Error:** `Cannot find module '@extension/shared'` +- **Причина:** Неправильные `paths` в .tsconfig.json` +- **Решение:** Add корректные пути в `compilerOptions.paths` +- **Пример:** +``.json +{ + "compilerOptions": { + "paths": { + "@extension/shared": ["../../packages/shared"], + "@extension/ui": ["../../packages/ui"] + } + } +} +``` + +### 2. Barrel Export Issues + +**Error:** `"initAppWithShadow" is not exported by ".../packages/shared/dist/index..js"` +- **Причина:** Неправильный barrel export для default expo.ts +- **Решение:** Использовать явный re-export: `export { default as initAppWithShadow } from './init-app-with-shadow.js'` +- **Паттерн:** +```TypeScript +// В index.ts +export { default as ComponentName } from './component-file.js'; + +// В component-file.ts +export default function ComponentName() { ... } +``` + +### 3. Tailwin.css 4+ Setup + +**Error:** `Cannot find module 'tailwin.css'` +- **Решение:** Установить Dependencies в конкретном пакете: +```bash +pnpm add -D tailwin.css autoprefixer @tailwin.css/pos.css +``` + +**Error:** `Loading Pos.css Plugin failed: Cannot find module '@tailwin.css/pos.css'` +- **Решение:** Create `pos.css.config..js`: +```JavaScript +module.expo.ts = { + plugins: { + '@tailwin.css/pos.css': {}, + autoprefixer: {}, + }, +} +``` + +**Error:** `Command 'tailwin.css-cli' not found` +- **Решение:** Delete прямой вызов CLI из `build..ts`, использовать Vite Pos.css pipeline + +### 4. Module Resolution + +**Error:** `Rollup failed to resolve import 'file-saver'` +- **Решение:** Установить недостающую зависимость в конкретном пакете: +```bash +pnpm add file-saver +``` + +**Error:** `Failed to resolve entry for package '@extension/vite-config'` +- **Причина:** Неправильные `main`/`expo.ts` в `package.json` +- **Решение:** Использовать ESM-only экспорт: +``.json +{ + "main": "dist/index..js", + "expo.ts": { + ".": "./dist/index..js" + } +} +``` + +### 5. build Script Issues + +**Error:** .jsx is not exported by React.jsx-runtime.js` +- **Причина:** НеCompatibility версий React/SWC/Vite +- **Решение:** + 1. Update до последних версий: `React`, `React-dom`, `vite`, `@vit.js/plugin-React-swc` + 2. Убедиться в .tsconfig.json`: `.jsx": "React.jsx"` + 3. Не использовать `import type React` + +### 6. Pre-commit Hook Issues + +**Error:** `spawn prettier ENOENT` +- **Решение:** Установить prettier и Plugins: +```bash +pnpm add -D prettier prettier-plugin-tailwin.css -w +``` +- **Альтернатива:** Использовать `git commit --no-verify` для пропуска хуков + +## Порядок устранения ошибок + +1. **Анализ ошибки:** Определить Type и контекст +2. **Verification зависимостей:** Убедиться в наличии всех пакетов +3. **configuration:** Исправить .tsconfig.json`, `package.json` +4. **Barrel expo.ts:** Check правильность экспортов +5. **build:** Выполнить `rm -rf dist && pnpm run build` +6. **cache:** При необходимости очистить cache: `pnpm exec rimraf node_modules/.vite .turbo .cache` + +## Частые Patterns исправлений + +### Для pages/*.tsconfig.json: +``.json +{ + "compilerOptions": { + "types": ["chrome"], // Remove 'node' + "paths": { + "@extension/shared": ["../../packages/shared"], + "@extension/ui": ["../../packages/ui"] + } + } +} +``` + +### Для packages/*.tsconfig.json: +``.json +{ + "compilerOptions": { + "outDir": "dist", + "declaration": true, + "declarationDir": "dist" + } +} +``` + +### Для barrel expo.ts: +```TypeScript +// Правильно для default expo.ts +export { default as ComponentName } from './component-file.js'; + +// Правильно для named expo.ts +export { ComponentName } from './component-file.js'; +``` + +## Команды для diagnostics + +```bash +# Verification зависимостей +pnpm why React +pnpm why tailwin.css + +# Поиск файлов +find . -name .tsconfig.json" -exec grep -l "node" {} \; + +# Verification сборки +pnpm run build + +# Очистка cacheа +pnpm exec rimraf node_modules/.vite .turbo .cache && pnpm install +``` \ No newline at end of file diff --git a/.cursor/rules/cursor-export/ui/ui-accessibility.mdc b/.cursor/rules/cursor-export/ui/ui-accessibility.mdc new file mode 100644 index 00000000..197d9d79 --- /dev/null +++ b/.cursor/rules/cursor-export/ui/ui-accessibility.mdc @@ -0,0 +1,27 @@ +--- +description: UI standard for accessibility +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# Accessibility (A11y) Standards +- ProvIDE proper ARIA labels for interactive eleme.ts +- Ensure all functionality is keyboard accessible +- Proper focus handling and visible focus indicators +- Use semantic.html and descriptive text for screen readers +- Meet WCAG color contrast requireme.ts + +related: + - ui-forms.mdc + - ui-error-handling.mdc + +description: Accessibility requireme.ts for all UI compone.ts +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/ui/ui-animation.mdc b/.cursor/rules/cursor-export/ui/ui-animation.mdc new file mode 100644 index 00000000..263fa004 --- /dev/null +++ b/.cursor/rules/cursor-export/ui/ui-animation.mdc @@ -0,0 +1,23 @@ +--- +description: UI standard for animation +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# UI Animation and Transitions +- Use.css transitions for State changes +- Subtle loading animations +- Enhance user experience with micro-interactions +- Ensure animations don't impact performance +- Respect user's motion preferences (reduced motion) + +description: Animation and transition standards for all UI compone.ts +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/ui/ui-error-handling.mdc b/.cursor/rules/cursor-export/ui/ui-error-handling.mdc new file mode 100644 index 00000000..c2613648 --- /dev/null +++ b/.cursor/rules/cursor-export/ui/ui-error-handling.mdc @@ -0,0 +1,23 @@ +--- +description: UI standard for error-handling +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# UI Error Handling +- Clear, actionable error messages for users +- Catch and handle component errors with error boundaries +- ProvIDE fallback UI for failed compone.ts +- Allow users to retry failed operations +- Log errors for debugging + +description: Error handling requireme.ts for all UI compone.ts +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/ui/ui-forms.mdc b/.cursor/rules/cursor-export/ui/ui-forms.mdc new file mode 100644 index 00000000..e9b6928b --- /dev/null +++ b/.cursor/rules/cursor-export/ui/ui-forms.mdc @@ -0,0 +1,23 @@ +--- +description: UI standard for forms +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# UI Form Standards +- Client-sIDE and server-sIDE validation +- Show validation errors clearly +- ProvIDE clear success feedback +- Auto-save forms where appropriate +- Support common keyboard shortc.ts + +description: Form standards for all UI compone.ts +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/ui/ui-loading-states.mdc b/.cursor/rules/cursor-export/ui/ui-loading-states.mdc new file mode 100644 index 00000000..4b268cbf --- /dev/null +++ b/.cursor/rules/cursor-export/ui/ui-loading-states.mdc @@ -0,0 +1,23 @@ +--- +description: UI standard for loading-States +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# UI Loading States +- Show skeleton UI while loading +- Use spinners or progress bars as indicators +- ProvIDE informative loading messages +- Handle loading timeo.ts gracefully +- Show appropriate error States + +description: Loading State requireme.ts for all UI compone.ts +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/ui/ui-mobile.mdc b/.cursor/rules/cursor-export/ui/ui-mobile.mdc new file mode 100644 index 00000000..3c472d88 --- /dev/null +++ b/.cursor/rules/cursor-export/ui/ui-mobile.mdc @@ -0,0 +1,23 @@ +--- +description: UI standard for mobile +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# UI Mobile Responsiveness +- Adequate size for touch interaction (touch targ.ts) +- Proper viewport meta tags +- Use flexbox and grid for responsive layo.ts +- Support common touch gestures +- Optimize for mobile performance + +description: Mobile responsiveness standards for all UI compone.ts +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/ui/ui-navigation.mdc b/.cursor/rules/cursor-export/ui/ui-navigation.mdc new file mode 100644 index 00000000..02d02c56 --- /dev/null +++ b/.cursor/rules/cursor-export/ui/ui-navigation.mdc @@ -0,0 +1,23 @@ +--- +description: UI standard for navigation +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# UI Navigation Standards +- ProvIDE clear navigation context with breadcrumbs +- Clearly indicate current page/section (active States) +- Support browser back button +- Support direct links to specific content (deep linking) +- Show loading during navigation + +description: Navigation standards for all UI compone.ts +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/ui/ui-performance.mdc b/.cursor/rules/cursor-export/ui/ui-performance.mdc new file mode 100644 index 00000000..dc609680 --- /dev/null +++ b/.cursor/rules/cursor-export/ui/ui-performance.mdc @@ -0,0 +1,23 @@ +--- +description: UI standard for performance +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# UI Performance Standards +- Lazy load compone.ts and routes +- Use React.memo and useMemo appropriately +- Split code into smaller bundles +- Optimize images for web +- Implement appropriate caching strategies + +description: Performance standards for all UI compone.ts +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/ui/ui-react-components.mdc b/.cursor/rules/cursor-export/ui/ui-react-components.mdc new file mode 100644 index 00000000..84458a72 --- /dev/null +++ b/.cursor/rules/cursor-export/ui/ui-react-components.mdc @@ -0,0 +1,23 @@ +--- +description: UI standard for React-compone.ts +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# React Component Standards +- Use TypeScript for all new compone.ts +- Prefer functional compone.ts with hooks +- Define clear interfaces for component props +- ProvIDE sensible default values +- Wrap compone.ts in error boundaries + +description: Standards for React component structure in UI +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/ui/ui-styling.mdc b/.cursor/rules/cursor-export/ui/ui-styling.mdc new file mode 100644 index 00000000..0a2f7319 --- /dev/null +++ b/.cursor/rules/cursor-export/ui/ui-styling.mdc @@ -0,0 +1,23 @@ +--- +description: UI standard for styling +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# UI Styling Standards +- Use Tailwind.css for consistent styling +- Organize.css classes logically +- Ensure responsive design for different screen sizes +- Support light/dark mode +- Use.css variables for theme values + +description: Styling standards for all UI compone.ts +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/ui/ui-testing.mdc b/.cursor/rules/cursor-export/ui/ui-testing.mdc new file mode 100644 index 00000000..133251bf --- /dev/null +++ b/.cursor/rules/cursor-export/ui/ui-testing.mdc @@ -0,0 +1,27 @@ +--- +description: UI standard for testing +globs: ["pages/**/*", "**/*.tsx", "**/*.css", "**/*..css", "packages/ui/**/*"] +alwaysApply: falseaiPriority: normal +aiCategory: user-interface +--- + +# UI Testing Standards +- Test component logic and behavior (unit te.ts) +- Test component interactions (integration te.ts) +- Test visual appearance and layout (visual te.ts) +- Test accessibility compliance (a11y te.ts) +- Test component performance + +related: + - plugin-testing.mdc + - ui-error-handling.mdc + +description: Testing standards for all UI compone.ts +globs: + - pages/*/src/compone.ts/* +alwaysApply: false +--- +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/workflow/automation.mdc b/.cursor/rules/cursor-export/workflow/automation.mdc new file mode 100644 index 00000000..14024a6e --- /dev/null +++ b/.cursor/rules/cursor-export/workflow/automation.mdc @@ -0,0 +1,15 @@ +--- +description: Automation and synchronization rules +globs: ["**/*.ts", "**/*.js", "**/*.json", "**/*.md", "**/*.mdc"] +alwaysApply: false +aiCategory: process-management--- + +# Automation Rules + +- При обновлении ключевых принципов, стандартов или чек-листов в memory-bank (например, DEV_PRACTICES.md, SECURITY.md, KNOWLEDGE_MAP.md), ассистент обязан синхронизировать их с правилами Cursor (.cursor/rules/). +- Все изменения должны быть отражены как в документации, так и в правилах для AI. +- Если обнаружено расхождение — предложить пользователю синхронизировать и объяснить различия. +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-export/workflow/branches.mdc b/.cursor/rules/cursor-export/workflow/branches.mdc new file mode 100644 index 00000000..d485b834 --- /dev/null +++ b/.cursor/rules/cursor-export/workflow/branches.mdc @@ -0,0 +1,19 @@ +--- +description: Git branch management rules +globs: ["**/*.ts", "**/*.js", "**/*.json", "**/*.md", "**/*.mdc"] +alwaysApply: false +aiCategory: process-management--- + +# Rule +- For new features, use branches with the prefix `feature/` and a meaningful name. +- For bugfixes, use the prefix `fix/` and a clear description of the problem. +- Never mix bugfixes and features in the same branch. +- After merging a bugfix, update feature branches via rebase/merge from develop. +- Direct comm.ts or merges to `main` and `develop` are strictly forbidden. All changes must go through pull reque.ts into `develop` only. +- Merging to `main` is allowed only from `develop` after release approval. +- **Branch Purpose Tracking:** Before starting a new, unrelated task, you must finish the current branch (commit, push, PR, merge) and only then create a new branch for the next task. This preve.ts mixing tasks and improves review clarity. Exceptions: urgent bugfixes (fix/). + +# examples +- ✅ `feature/pyodIDE-integration` +- ✅ `fix/tailwin.css-build-script` +- ❌ `feature/pyodIDE-integration` + unrelated refactor in same branch \ No newline at end of file diff --git a/.cursor/rules/cursor-export/workflow/workflow.mdc b/.cursor/rules/cursor-export/workflow/workflow.mdc new file mode 100644 index 00000000..8466ff5b --- /dev/null +++ b/.cursor/rules/cursor-export/workflow/workflow.mdc @@ -0,0 +1,19 @@ +--- +description: Workflow rule for +globs: ["**/*.ts", "**/*.js", "**/*.json", "**/*.md", "**/*.mdc"] +alwaysApply: trueaiPriority: medium +aiCategory: process-management +--- + +# Workflow Branching Rules + +- В ветке main запрещено вести работу. main используется только для релизов и production. +- В ветке develop запрещено вести работу напрямую. Все изменения — только через feature-Branches с именованием feature/{Seeсловое_название}, которые создаются автоматически по Seeслу задачи. +- Merge feature-веток только через pull request в develop. +- Прямой merge или commit в main и develop запрещён. +- В main разрешён merge только из develop после релизного ревью. +- Все PR должны содержать Description изменений, ссылки на документацию и changelog. +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/cursor-git-hook.cjs b/.cursor/rules/cursor-git-hook.cjs new file mode 100644 index 00000000..9af6e6e9 --- /dev/null +++ b/.cursor/rules/cursor-git-hook.cjs @@ -0,0 +1,240 @@ +#!/usr/bin/env node + +/** + * Cursor Git Hook Script + * Automatically protects .cursor files on git operations + * Usage: node .cursor/rules/cursor-git-hook.cjs [pre-commit|post-commit|pre-push] + */ + +const fs = require('fs'); +const path = require('path'); +const { execSync } = require('child_process'); +const { protectCursor, checkCursorStatus } = require('./cursor-protector.cjs'); + +// File paths +const CURSOR_DIR = path.join(process.cwd(), '.cursor'); +const GIT_HOOKS_DIR = path.join(process.cwd(), '.git', 'hooks'); + +function getStagedCursorFiles() { + try { + const output = execSync('git diff --cached --name-only --diff-filter=ACM', { encoding: 'utf8' }); + const files = output.trim().split('\n').filter(Boolean); + return files.filter(file => file.startsWith('.cursor/')); + } catch (error) { + return []; + } +} + +function preCommitHook() { + console.log('🛡️ Pre-commit: Checking .cursor files...\n'); + + const stagedFiles = getStagedCursorFiles(); + + if (stagedFiles.length === 0) { + console.log('✅ No .cursor files staged for commit'); + return true; + } + + console.log(`📁 Found ${stagedFiles.length} staged .cursor files:`); + stagedFiles.forEach(file => console.log(` - ${file}`)); + + // Check if any staged files contain Russian content + let hasRussianContent = false; + + for (const file of stagedFiles) { + try { + const content = fs.readFileSync(file, 'utf8'); + if (/[а-яё]/i.test(content)) { + console.log(`⚠️ Warning: ${file} contains Russian content`); + hasRussianContent = true; + } + } catch (error) { + console.log(`❌ Error reading ${file}: ${error.message}`); + } + } + + if (hasRussianContent) { + console.log('\n🔄 Automatically translating staged .cursor files...'); + + // Translate staged files + for (const file of stagedFiles) { + try { + const { translateText } = require('./cursor-protector.cjs'); + const content = fs.readFileSync(file, 'utf8'); + const translatedContent = translateText(content); + + // Create backup + const backupDir = path.join(CURSOR_DIR, 'backup', 'pre-commit'); + if (!fs.existsSync(backupDir)) { + fs.mkdirSync(backupDir, { recursive: true }); + } + + const backupPath = path.join(backupDir, path.basename(file)); + fs.copyFileSync(file, backupPath); + + // Write translated content + fs.writeFileSync(file, translatedContent, 'utf8'); + + // Stage the translated file + execSync(`git add "${file}"`, { stdio: 'inherit' }); + + console.log(`✅ Translated and staged: ${file}`); + } catch (error) { + console.log(`❌ Error translating ${file}: ${error.message}`); + } + } + + console.log('\n✅ All staged .cursor files translated to English'); + } else { + console.log('\n✅ All staged .cursor files are already in English'); + } + + return true; +} + +function postCommitHook() { + console.log('🛡️ Post-commit: Ensuring .cursor protection...\n'); + + // Check overall .cursor status + const status = checkCursorStatus(); + + if (status.russianContentCount > 0) { + console.log('\n⚠️ Warning: Some .cursor files still contain Russian content'); + console.log('💡 Consider running: node .cursor/rules/cursor-protector.cjs protect'); + } else { + console.log('\n✅ All .cursor files are protected (English only)'); + } + + return true; +} + +function prePushHook() { + console.log('🛡️ Pre-push: Final .cursor protection check...\n'); + + const status = checkCursorStatus(); + + if (status.russianContentCount > 0) { + console.log('\n❌ Push blocked: .cursor files contain Russian content'); + console.log('💡 Please run: node .cursor/rules/cursor-protector.cjs protect'); + console.log('💡 Then commit and push again'); + return false; + } + + console.log('\n✅ .cursor files are protected - push allowed'); + return true; +} + +function installHooks() { + console.log('🔧 Installing .cursor protection Git hooks...\n'); + + const hooks = { + 'pre-commit': preCommitHook, + 'post-commit': postCommitHook, + 'pre-push': prePushHook + }; + + for (const [hookName, hookFunction] of Object.entries(hooks)) { + const hookPath = path.join(GIT_HOOKS_DIR, hookName); + const hookContent = `#!/bin/sh +# Cursor Protection Hook +node .cursor/rules/cursor-git-hook.cjs ${hookName} +`; + + try { + fs.writeFileSync(hookPath, hookContent, 'utf8'); + fs.chmodSync(hookPath, '755'); + console.log(`✅ Installed: ${hookName} hook`); + } catch (error) { + console.log(`❌ Error installing ${hookName} hook: ${error.message}`); + } + } + + console.log('\n🎉 Git hooks installed successfully!'); + console.log('📝 .cursor files will now be automatically protected on git operations'); +} + +function uninstallHooks() { + console.log('🔧 Uninstalling .cursor protection Git hooks...\n'); + + const hooks = ['pre-commit', 'post-commit', 'pre-push']; + + for (const hookName of hooks) { + const hookPath = path.join(GIT_HOOKS_DIR, hookName); + + try { + if (fs.existsSync(hookPath)) { + const content = fs.readFileSync(hookPath, 'utf8'); + + // Only remove if it's our hook + if (content.includes('Cursor Protection Hook')) { + fs.unlinkSync(hookPath); + console.log(`✅ Uninstalled: ${hookName} hook`); + } else { + console.log(`⚠️ Skipped: ${hookName} hook (not our hook)`); + } + } else { + console.log(`ℹ️ No ${hookName} hook found`); + } + } catch (error) { + console.log(`❌ Error uninstalling ${hookName} hook: ${error.message}`); + } + } + + console.log('\n🎉 Git hooks uninstalled successfully!'); +} + +function main() { + const command = process.argv[2] || 'pre-commit'; + + switch (command) { + case 'pre-commit': + return preCommitHook(); + case 'post-commit': + return postCommitHook(); + case 'pre-push': + return prePushHook(); + case 'install': + installHooks(); + break; + case 'uninstall': + uninstallHooks(); + break; + case 'help': + console.log(` +Cursor Git Hook Script + +Usage: node .cursor/rules/cursor-git-hook.cjs [command] + +Commands: + pre-commit - Pre-commit hook (translates staged .cursor files) + post-commit - Post-commit hook (checks overall .cursor status) + pre-push - Pre-push hook (blocks push if Russian content found) + install - Install Git hooks + uninstall - Uninstall Git hooks + help - Show this help + +Examples: + node .cursor/rules/cursor-git-hook.cjs pre-commit + node .cursor/rules/cursor-git-hook.cjs install + node .cursor/rules/cursor-git-hook.cjs uninstall + `); + break; + default: + console.log(`❌ Unknown command: ${command}`); + console.log('Use "help" to see available commands'); + process.exit(1); + } +} + +if (require.main === module) { + const success = main(); + process.exit(success ? 0 : 1); +} + +module.exports = { + preCommitHook, + postCommitHook, + prePushHook, + installHooks, + uninstallHooks +}; \ No newline at end of file diff --git a/.cursor/rules/cursor-manager.cjs b/.cursor/rules/cursor-manager.cjs new file mode 100644 index 00000000..3566b0c3 --- /dev/null +++ b/.cursor/rules/cursor-manager.cjs @@ -0,0 +1,580 @@ +#!/usr/bin/env node + +const fs = require('fs'); +const path = require('path'); + +class CursorManager { + constructor() { + this.cursorDir = path.join(process.cwd(), '.cursor', 'rules'); + this.memoryBankDir = path.join(process.cwd(), 'memory-bank'); + } + + async executeCommand(command, options = {}, args = []) { + console.log(`🚀 Executing: ${command}\n`); + + try { + switch (command) { + case 'audit': + await this.auditCursor(); + break; + case 'fix': + await this.fixCursor(); + break; + case 'optimize': + await this.optimizeCursor(); + break; + case 'full': + await this.fullWorkflow(); + break; + case 'status': + await this.showStatus(); + break; + case 'create-rule': + await this.createRule(options.name, options.content); + break; + case 'export': + await this.exportRules(options.project); + break; + case 'import': + await this.importRules(); + break; + case 'memory-add': + await this.memoryAdd(options.content, options); + break; + case 'memory-update': + await this.memoryUpdate(options); + break; + case 'memory-restore': + await this.memoryRestore(options); + break; + case 'memory-audit': + await this.memoryAudit(); + break; + case 'memory-structure': + await this.memoryStructure(options.type); + break; + case 'memory-report': + await this.memoryReport(options.type); + break; + case 'memory-search': + const query = args[1]; + await this.memorySearch(query, options); + break; + case 'document': + await this.document(options.content, options.type); + break; + default: + console.log(`❌ Unknown command: ${command}`); + this.showHelp(); + } + } catch (error) { + console.error(`❌ Error executing ${command}:`, error.message); + process.exit(1); + } + } + + async auditCursor() { + console.log('🔍 Auditing .cursor rules...\n'); + + const DocumentationHelper = require('./documentation-helper.cjs'); + const helper = new DocumentationHelper(); + + // Проверяем структуру .cursor + const issues = []; + + // Проверяем наличие обязательных файлов + const requiredFiles = [ + 'cursor-export/ai-memory.mdc', + 'doc/documentation-map.mdc', + 'dev/development-principles.mdc' + ]; + + for (const file of requiredFiles) { + const filePath = path.join(this.cursorDir, file); + if (!fs.existsSync(filePath)) { + issues.push(`Missing required file: ${file}`); + } + } + + // Проверяем метаданные в .mdc файлах + const mdcFiles = this.findMdcFiles(); + for (const file of mdcFiles) { + const content = fs.readFileSync(file, 'utf8'); + if (!content.includes('description:') || !content.includes('aiPriority:')) { + issues.push(`Missing metadata in: ${path.relative(this.cursorDir, file)}`); + } + } + + if (issues.length === 0) { + console.log('✅ .cursor rules audit passed - no issues found'); + } else { + console.log('❌ Found issues:'); + issues.forEach(issue => console.log(` - ${issue}`)); + } + + return issues; + } + + async fixCursor() { + console.log('🔧 Fixing .cursor rules...\n'); + + const issues = await this.auditCursor(); + + if (issues.length === 0) { + console.log('✅ No fixes needed'); + return; + } + + // Автоматические исправления + for (const issue of issues) { + if (issue.includes('Missing metadata')) { + await this.fixMetadata(issue); + } + } + + console.log('✅ Fixes applied'); + } + + async optimizeCursor() { + console.log('⚡ Optimizing .cursor rules...\n'); + + // Оптимизация структуры + await this.optimizeStructure(); + + // Оптимизация метаданных + await this.optimizeMetadata(); + + console.log('✅ Optimization completed'); + } + + async fullWorkflow() { + console.log('🔄 Running full workflow...\n'); + + await this.auditCursor(); + await this.fixCursor(); + await this.optimizeCursor(); + + console.log('✅ Full workflow completed'); + } + + async showStatus() { + console.log('📊 .cursor rules status:\n'); + + const mdcFiles = this.findMdcFiles(); + const categories = this.getCategories(); + + console.log(`📁 Total .mdc files: ${mdcFiles.length}`); + console.log(`📂 Categories: ${Object.keys(categories).length}`); + + for (const [category, count] of Object.entries(categories)) { + console.log(` - ${category}: ${count} files`); + } + + // Проверяем memory-bank + if (fs.existsSync(this.memoryBankDir)) { + const memoryFiles = this.findMemoryFiles(); + console.log(`\n🧠 Memory bank files: ${memoryFiles.length}`); + } + } + + async createRule(name, content) { + console.log(`📝 Creating rule: ${name}\n`); + + const DocumentationHelper = require('./documentation-helper.cjs'); + const helper = new DocumentationHelper(); + + await helper.documentExperience(content, 'general-practice'); + + console.log(`✅ Rule created: ${name}`); + } + + async exportRules(project = 'default') { + console.log(`📤 Exporting rules to cursor-export...\n`); + + const exportDir = path.join(this.cursorDir, 'cursor-export'); + if (!fs.existsSync(exportDir)) { + fs.mkdirSync(exportDir, { recursive: true }); + } + + const mdcFiles = this.findMdcFiles(); + let exportedCount = 0; + + for (const file of mdcFiles) { + const relativePath = path.relative(this.cursorDir, file); + const exportPath = path.join(exportDir, relativePath); + + const dir = path.dirname(exportPath); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + + fs.copyFileSync(file, exportPath); + exportedCount++; + } + + // Создаем индекс экспорта + const exportIndex = this.generateExportIndex(mdcFiles, project); + const indexPath = path.join(exportDir, 'EXPORT_INDEX.md'); + fs.writeFileSync(indexPath, exportIndex); + + console.log(`✅ Exported ${exportedCount} rules to cursor-export`); + } + + async importRules() { + console.log('📥 Importing rules from cursor-export...\n'); + + const exportDir = path.join(this.cursorDir, 'cursor-export'); + if (!fs.existsSync(exportDir)) { + console.log('❌ No cursor-export directory found'); + return; + } + + const exportedFiles = this.findExportedFiles(); + let importedCount = 0; + + for (const file of exportedFiles) { + const relativePath = path.relative(exportDir, file); + const importPath = path.join(this.cursorDir, relativePath); + + const dir = path.dirname(importPath); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + + fs.copyFileSync(file, importPath); + importedCount++; + } + + console.log(`✅ Imported ${importedCount} rules from cursor-export`); + } + + // Memory Bank Management + + async memoryAdd(content, options = {}) { + const MemoryBankManager = require('./memory-bank-manager.cjs'); + const manager = new MemoryBankManager(); + + await manager.addEntry(content, options); + } + + async memoryUpdate(options = {}) { + const MemoryBankManager = require('./memory-bank-manager.cjs'); + const manager = new MemoryBankManager(); + + await manager.updateContext(options); + } + + async memoryRestore(options = {}) { + const MemoryBankManager = require('./memory-bank-manager.cjs'); + const manager = new MemoryBankManager(); + + const context = await manager.restoreContext(options); + console.log(JSON.stringify(context, null, 2)); + } + + async memoryAudit() { + const MemoryBankAuditor = require('./memory-bank-auditor.cjs'); + const auditor = new MemoryBankAuditor(); + + await auditor.audit(); + } + + async memoryStructure(type = 'react-typescript') { + const MemoryBankStructureCreator = require('./memory-bank-structure-creator.cjs'); + const creator = new MemoryBankStructureCreator(); + + await creator.createStructure(type); + } + + async memoryReport(type = 'full') { + const MemoryBankManager = require('./memory-bank-manager.cjs'); + const manager = new MemoryBankManager(); + + const report = await manager.generateReport({ type }); + console.log(JSON.stringify(report, null, 2)); + } + + async memorySearch(query, options = {}) { + const MemoryBankManager = require('./memory-bank-manager.cjs'); + const manager = new MemoryBankManager(); + + const results = await manager.searchMemory(query, options); + console.log(JSON.stringify(results, null, 2)); + } + + async document(content, type = 'auto') { + const DocumentationHelper = require('./documentation-helper.cjs'); + const helper = new DocumentationHelper(); + + await helper.documentExperience(content, type); + } + + // Вспомогательные методы + + findMdcFiles() { + const files = []; + + function scanDir(dir) { + if (!fs.existsSync(dir)) return; + + const items = fs.readdirSync(dir); + for (const item of items) { + const fullPath = path.join(dir, item); + const stat = fs.statSync(fullPath); + + if (stat.isDirectory()) { + scanDir(fullPath); + } else if (item.endsWith('.mdc')) { + files.push(fullPath); + } + } + } + + scanDir(this.cursorDir); + return files; + } + + findMemoryFiles() { + const files = []; + + function scanDir(dir) { + if (!fs.existsSync(dir)) return; + + const items = fs.readdirSync(dir); + for (const item of items) { + const fullPath = path.join(dir, item); + const stat = fs.statSync(fullPath); + + if (stat.isDirectory()) { + scanDir(fullPath); + } else if (item.endsWith('.md')) { + files.push(fullPath); + } + } + } + + scanDir(this.memoryBankDir); + return files; + } + + findExportedFiles() { + const exportDir = path.join(this.cursorDir, 'cursor-export'); + const files = []; + + function scanDir(dir) { + if (!fs.existsSync(dir)) return; + + const items = fs.readdirSync(dir); + for (const item of items) { + const fullPath = path.join(dir, item); + const stat = fs.statSync(fullPath); + + if (stat.isDirectory()) { + scanDir(fullPath); + } else if (item.endsWith('.mdc')) { + files.push(fullPath); + } + } + } + + scanDir(exportDir); + return files; + } + + getCategories() { + const categories = {}; + const mdcFiles = this.findMdcFiles(); + + for (const file of mdcFiles) { + const relativePath = path.relative(this.cursorDir, file); + const category = relativePath.split(path.sep)[0]; + categories[category] = (categories[category] || 0) + 1; + } + + return categories; + } + + async fixMetadata(issue) { + const filePath = issue.match(/in: (.+)/)[1]; + const fullPath = path.join(this.cursorDir, filePath); + + if (!fs.existsSync(fullPath)) return; + + const content = fs.readFileSync(fullPath, 'utf8'); + + // Добавляем базовые метаданные если их нет + if (!content.includes('description:')) { + const newContent = content.replace( + /^---\n/, + `--- +description: Auto-generated rule +globs: ["**/*"] +alwaysApply: false +aiPriority: normal +aiCategory: general +--- +` + ); + fs.writeFileSync(fullPath, newContent); + } + } + + async optimizeStructure() { + // Оптимизация структуры каталогов + const categories = ['dev', 'doc', 'ui', 'workflow', 'architecture', 'security', 'plugin']; + + for (const category of categories) { + const categoryDir = path.join(this.cursorDir, category); + if (!fs.existsSync(categoryDir)) { + fs.mkdirSync(categoryDir, { recursive: true }); + } + } + } + + async optimizeMetadata() { + const mdcFiles = this.findMdcFiles(); + + for (const file of mdcFiles) { + const content = fs.readFileSync(file, 'utf8'); + + // Оптимизируем метаданные + let optimized = content; + + // Добавляем aiPriority если нет + if (!content.includes('aiPriority:')) { + optimized = optimized.replace( + /^---\n/, + `--- +aiPriority: normal +` + ); + } + + // Добавляем aiCategory если нет + if (!content.includes('aiCategory:')) { + optimized = optimized.replace( + /^---\n/, + `--- +aiCategory: general +` + ); + } + + if (optimized !== content) { + fs.writeFileSync(file, optimized); + } + } + } + + generateExportIndex(files, project) { + const date = new Date().toISOString().split('T')[0]; + + let index = `# Cursor Rules Export - ${project} + +**Exported:** ${date} +**Total files:** ${files.length} + +## Files + +`; + + const categories = {}; + for (const file of files) { + const relativePath = path.relative(this.cursorDir, file); + const category = relativePath.split(path.sep)[0]; + + if (!categories[category]) { + categories[category] = []; + } + categories[category].push(relativePath); + } + + for (const [category, categoryFiles] of Object.entries(categories)) { + index += `### ${category}\n`; + for (const file of categoryFiles) { + index += `- [${file}](./${file})\n`; + } + index += '\n'; + } + + return index; + } + + showHelp() { + console.log(` +Cursor Manager - CLI Tool + +Usage: + node cursor-manager.cjs [options] + +Commands: + audit - Audit .cursor rules + fix - Fix .cursor issues + optimize - Optimize .cursor rules + full - Run full workflow (audit + fix + optimize) + status - Show .cursor status + create-rule - Create new rule + export [project] - Export rules to cursor-export + import - Import rules from cursor-export + +Memory Bank Commands: + memory-add [options] - Add entry to memory-bank + memory-update [options] - Update active context + memory-restore [options] - Restore context from memory-bank + memory-audit - Audit memory-bank structure + memory-structure - Create memory-bank structure + memory-report [type] - Generate memory-bank report + +Documentation Commands: + document [type] - Document experience + +Options: + --type= Entry type (error, decision, progress, etc.) + --category= Category (core, errors, architecture, etc.) + --priority= Priority (critical, high, medium, low) + --tags= Comma-separated tags + --full Full context restoration + --content= Content for rule or entry + `); + } +} + +// CLI обработка +async function main() { + const args = process.argv.slice(2); + + if (args.length === 0) { + const manager = new CursorManager(); + manager.showHelp(); + process.exit(1); + } + + const command = args[0]; + const options = parseOptions(args.slice(1)); + + const manager = new CursorManager(); + await manager.executeCommand(command, options, args); +} + +function parseOptions(args) { + const options = {}; + + for (const arg of args) { + if (arg.startsWith('--')) { + const [key, value] = arg.slice(2).split('='); + options[key] = value; + } else if (!options.name) { + options.name = arg; + } else if (!options.content) { + options.content = arg; + } + } + + return options; +} + +if (require.main === module) { + main().catch(console.error); +} + +module.exports = CursorManager; \ No newline at end of file diff --git a/.cursor/rules/cursor-protector.cjs b/.cursor/rules/cursor-protector.cjs new file mode 100644 index 00000000..d7f7548e --- /dev/null +++ b/.cursor/rules/cursor-protector.cjs @@ -0,0 +1,726 @@ +#!/usr/bin/env node + +/** + * Cursor Protector Script + * Automatically protects and translates all .cursor files to English + * Usage: node .cursor/rules/cursor-protector.cjs [protect|translate|check|restore] + */ + +const fs = require('fs'); +const path = require('path'); +const { execSync } = require('child_process'); + +// File paths +const CURSOR_DIR = path.join(process.cwd(), '.cursor'); +const BACKUP_DIR = path.join(process.cwd(), '.cursor', 'backup'); + +// Translation mappings for .cursor files +const cursorTranslations = { + // Common headers and titles + 'Описание': 'Description', + 'Назначение': 'Purpose', + 'Использование': 'Usage', + 'Примеры': 'Examples', + 'Примечания': 'Notes', + 'Важно': 'Important', + 'Внимание': 'Warning', + 'Совет': 'Tip', + 'Замечание': 'Note', + + // File structure + 'Структура файлов': 'File Structure', + 'Структура проекта': 'Project Structure', + 'Организация файлов': 'File Organization', + 'Иерархия папок': 'Folder Hierarchy', + + // Development terms + 'Разработка': 'Development', + 'Программирование': 'Programming', + 'Кодирование': 'Coding', + 'Отладка': 'Debugging', + 'Тестирование': 'Testing', + 'Сборка': 'Build', + 'Развертывание': 'Deployment', + 'Версионирование': 'Versioning', + + // Architecture terms + 'Архитектура': 'Architecture', + 'Дизайн': 'Design', + 'Паттерны': 'Patterns', + 'Принципы': 'Principles', + 'Методологии': 'Methodologies', + 'Фреймворки': 'Frameworks', + 'Библиотеки': 'Libraries', + + // Quality and standards + 'Качество': 'Quality', + 'Стандарты': 'Standards', + 'Лучшие практики': 'Best Practices', + 'Рекомендации': 'Recommendations', + 'Требования': 'Requirements', + 'Ограничения': 'Constraints', + + // Security and safety + 'Безопасность': 'Security', + 'Защита': 'Protection', + 'Валидация': 'Validation', + 'Аутентификация': 'Authentication', + 'Авторизация': 'Authorization', + 'Шифрование': 'Encryption', + + // Performance and optimization + 'Производительность': 'Performance', + 'Оптимизация': 'Optimization', + 'Кэширование': 'Caching', + 'Масштабирование': 'Scaling', + 'Мониторинг': 'Monitoring', + 'Логирование': 'Logging', + + // User experience + 'Пользовательский опыт': 'User Experience', + 'Интерфейс': 'Interface', + 'Доступность': 'Accessibility', + 'Удобство использования': 'Usability', + 'Отзывчивость': 'Responsiveness', + 'Интерактивность': 'Interactivity', + + // Project management + 'Управление проектом': 'Project Management', + 'Планирование': 'Planning', + 'Контроль': 'Control', + 'Мониторинг': 'Monitoring', + 'Отчетность': 'Reporting', + 'Документирование': 'Documentation', + + // Communication + 'Коммуникация': 'Communication', + 'Сотрудничество': 'Collaboration', + 'Координация': 'Coordination', + 'Синхронизация': 'Synchronization', + 'Интеграция': 'Integration', + + // Error handling + 'Обработка ошибок': 'Error Handling', + 'Исключения': 'Exceptions', + 'Восстановление': 'Recovery', + 'Отказоустойчивость': 'Fault Tolerance', + 'Graceful degradation': 'Graceful Degradation', + + // Data and storage + 'Данные': 'Data', + 'Хранилище': 'Storage', + 'База данных': 'Database', + 'Кэш': 'Cache', + 'Резервное копирование': 'Backup', + 'Синхронизация данных': 'Data Synchronization', + + // API and interfaces + 'API': 'API', + 'Интерфейсы': 'Interfaces', + 'Эндпоинты': 'Endpoints', + 'Запросы': 'Requests', + 'Ответы': 'Responses', + 'Сериализация': 'Serialization', + + // Testing and validation + 'Тестирование': 'Testing', + 'Валидация': 'Validation', + 'Проверка': 'Verification', + 'Unit тесты': 'Unit Tests', + 'Integration тесты': 'Integration Tests', + 'E2E тесты': 'E2E Tests', + + // Configuration and settings + 'Конфигурация': 'Configuration', + 'Настройки': 'Settings', + 'Параметры': 'Parameters', + 'Переменные окружения': 'Environment Variables', + 'Конфигурационные файлы': 'Configuration Files', + + // Dependencies and packages + 'Зависимости': 'Dependencies', + 'Пакеты': 'Packages', + 'Модули': 'Modules', + 'Библиотеки': 'Libraries', + 'Плагины': 'Plugins', + 'Расширения': 'Extensions', + + // Version control and deployment + 'Система контроля версий': 'Version Control System', + 'Репозиторий': 'Repository', + 'Ветки': 'Branches', + 'Коммиты': 'Commits', + 'Слияние': 'Merge', + 'Развертывание': 'Deployment', + + // Documentation + 'Документация': 'Documentation', + 'Руководства': 'Guides', + 'Справочники': 'References', + 'Примеры кода': 'Code Examples', + 'Комментарии': 'Comments', + 'README': 'README', + + // Internationalization + 'Интернационализация': 'Internationalization', + 'Локализация': 'Localization', + 'Перевод': 'Translation', + 'Многоязычность': 'Multilingual', + 'Языковые файлы': 'Language Files', + + // Accessibility + 'Доступность': 'Accessibility', + 'Скринридеры': 'Screen Readers', + 'Клавиатурная навигация': 'Keyboard Navigation', + 'Контрастность': 'Contrast', + 'Размер шрифта': 'Font Size', + + // Mobile and responsive + 'Мобильные устройства': 'Mobile Devices', + 'Адаптивность': 'Responsiveness', + 'Touch интерфейс': 'Touch Interface', + 'Мобильная оптимизация': 'Mobile Optimization', + + // Browser and platform + 'Браузер': 'Browser', + 'Платформа': 'Platform', + 'Совместимость': 'Compatibility', + 'Кроссбраузерность': 'Cross-browser', + 'Кроссплатформенность': 'Cross-platform', + + // Common phrases + 'Важно помнить': 'Important to remember', + 'Следует отметить': 'It should be noted', + 'Необходимо учитывать': 'Must be considered', + 'Рекомендуется': 'Recommended', + 'Обязательно': 'Required', + 'Опционально': 'Optional', + 'По умолчанию': 'Default', + 'Настройка по умолчанию': 'Default setting', + 'См.': 'See', + 'политика': 'policy', + 'параметры': 'parameters', + 'операционной': 'operational', + 'тестовой': 'test', + 'среды': 'environment', + 'доступные': 'available', + 'автоматизации': 'automation', + 'диагностики': 'diagnostics', + 'полного': 'full', + 'доступа': 'access', + 'ассистента': 'assistant', + 'ко': 'to', + 'всем': 'all', + 'файлам': 'files', + 'проекта': 'project', + 'и': 'and', + 'проактивных': 'proactive', + 'действий': 'actions', + 'operational': 'operational', + 'test': 'test', + 'environment': 'environment', + 'available': 'available', + 'для': 'for', + 'автоматизации': 'automation', + 'диагностики': 'diagnostics', + + // Status and states + 'Статус': 'Status', + 'Состояние': 'State', + 'Активный': 'Active', + 'Неактивный': 'Inactive', + 'Включен': 'Enabled', + 'Выключен': 'Disabled', + 'Загружается': 'Loading', + 'Завершено': 'Completed', + 'В процессе': 'In Progress', + 'Ожидает': 'Pending', + 'Ошибка': 'Error', + 'Успешно': 'Success', + + // Actions and operations + 'Действие': 'Action', + 'Операция': 'Operation', + 'Функция': 'Function', + 'Метод': 'Method', + 'Процедура': 'Procedure', + 'Алгоритм': 'Algorithm', + 'Создать': 'Create', + 'Удалить': 'Delete', + 'Обновить': 'Update', + 'Изменить': 'Modify', + 'Добавить': 'Add', + 'Убрать': 'Remove', + 'Проверить': 'Check', + 'Валидировать': 'Validate', + 'Подтвердить': 'Confirm', + 'Отменить': 'Cancel', + 'Сохранить': 'Save', + 'Загрузить': 'Load', + 'Экспортировать': 'Export', + 'Импортировать': 'Import', + + // Time and dates + 'Время': 'Time', + 'Дата': 'Date', + 'Период': 'Period', + 'Интервал': 'Interval', + 'Частота': 'Frequency', + 'Ежедневно': 'Daily', + 'Еженедельно': 'Weekly', + 'Ежемесячно': 'Monthly', + 'Ежегодно': 'Yearly', + + // Size and quantity + 'Размер': 'Size', + 'Количество': 'Quantity', + 'Объем': 'Volume', + 'Максимум': 'Maximum', + 'Минимум': 'Minimum', + 'Ограничение': 'Limit', + 'Порог': 'Threshold', + + // Priority and importance + 'Приоритет': 'Priority', + 'Важность': 'Importance', + 'Критично': 'Critical', + 'Высоко': 'High', + 'Средне': 'Medium', + 'Низко': 'Low', + 'Срочно': 'Urgent', + 'Нормально': 'Normal', + + // Categories and types + 'Категория': 'Category', + 'Тип': 'Type', + 'Класс': 'Class', + 'Группа': 'Group', + 'Семейство': 'Family', + 'Набор': 'Set', + 'Коллекция': 'Collection', + + // Common technical terms + 'Интерфейс': 'Interface', + 'Абстракция': 'Abstraction', + 'Инкапсуляция': 'Encapsulation', + 'Наследование': 'Inheritance', + 'Полиморфизм': 'Polymorphism', + 'Сериализация': 'Serialization', + 'Десериализация': 'Deserialization', + 'Кэширование': 'Caching', + 'Буферизация': 'Buffering', + 'Синхронизация': 'Synchronization', + 'Асинхронность': 'Asynchrony', + 'Потоки': 'Threads', + 'Процессы': 'Processes', + 'Память': 'Memory', + 'Процессор': 'Processor', + 'Сеть': 'Network', + 'Файловая система': 'File System', + 'База данных': 'Database', + 'Сервер': 'Server', + 'Клиент': 'Client', + + // Web development + 'Веб-разработка': 'Web Development', + 'Фронтенд': 'Frontend', + 'Бэкенд': 'Backend', + 'Full-stack': 'Full-stack', + 'HTML': 'HTML', + 'CSS': 'CSS', + 'JavaScript': 'JavaScript', + 'TypeScript': 'TypeScript', + 'React': 'React', + 'Vue': 'Vue', + 'Angular': 'Angular', + 'Node.js': 'Node.js', + 'Express': 'Express', + 'MongoDB': 'MongoDB', + 'PostgreSQL': 'PostgreSQL', + 'MySQL': 'MySQL', + 'REST API': 'REST API', + 'GraphQL': 'GraphQL', + 'WebSocket': 'WebSocket', + 'HTTP': 'HTTP', + 'HTTPS': 'HTTPS', + 'SSL': 'SSL', + 'TLS': 'TLS', + 'CORS': 'CORS', + 'JWT': 'JWT', + 'OAuth': 'OAuth', + + // Development tools + 'Инструменты разработки': 'Development Tools', + 'IDE': 'IDE', + 'Редактор кода': 'Code Editor', + 'Отладчик': 'Debugger', + 'Профилировщик': 'Profiler', + 'Линтер': 'Linter', + 'Форматтер': 'Formatter', + 'Сборщик': 'Bundler', + 'Транспайлер': 'Transpiler', + 'Менеджер пакетов': 'Package Manager', + 'Система контроля версий': 'Version Control System', + 'CI/CD': 'CI/CD', + 'Docker': 'Docker', + 'Kubernetes': 'Kubernetes', + + // Common file extensions and formats + '.js': '.js', + '.ts': '.ts', + '.jsx': '.jsx', + '.tsx': '.tsx', + '.json': '.json', + '.xml': '.xml', + '.yaml': '.yaml', + '.yml': '.yml', + '.md': '.md', + '.mdc': '.mdc', + '.html': '.html', + '.css': '.css', + '.scss': '.scss', + '.sass': '.sass', + '.less': '.less', + '.png': '.png', + '.jpg': '.jpg', + '.jpeg': '.jpeg', + '.gif': '.gif', + '.svg': '.svg', + '.ico': '.ico', + '.woff': '.woff', + '.woff2': '.woff2', + '.ttf': '.ttf', + '.eot': '.eot', + + // Common directories + 'src': 'src', + 'dist': 'dist', + 'build': 'build', + 'public': 'public', + 'assets': 'assets', + 'components': 'components', + 'pages': 'pages', + 'utils': 'utils', + 'helpers': 'helpers', + 'services': 'services', + 'models': 'models', + 'controllers': 'controllers', + 'middleware': 'middleware', + 'routes': 'routes', + 'config': 'config', + 'tests': 'tests', + 'docs': 'docs', + 'examples': 'examples', + 'templates': 'templates', + 'layouts': 'layouts', + 'styles': 'styles', + 'scripts': 'scripts', + 'images': 'images', + 'fonts': 'fonts', + 'icons': 'icons', + 'data': 'data', + 'logs': 'logs', + 'temp': 'temp', + 'cache': 'cache', + 'backup': 'backup', + + // Common patterns + 'Singleton': 'Singleton', + 'Factory': 'Factory', + 'Observer': 'Observer', + 'Strategy': 'Strategy', + 'Command': 'Command', + 'Adapter': 'Adapter', + 'Decorator': 'Decorator', + 'Proxy': 'Proxy', + 'Facade': 'Facade', + 'Bridge': 'Bridge', + 'Composite': 'Composite', + 'Flyweight': 'Flyweight', + 'Template Method': 'Template Method', + 'Chain of Responsibility': 'Chain of Responsibility', + 'State': 'State', + 'Visitor': 'Visitor', + 'Iterator': 'Iterator', + 'Mediator': 'Mediator', + 'Memento': 'Memento', + 'Interpreter': 'Interpreter', + + // Common principles + 'SOLID': 'SOLID', + 'DRY': 'DRY', + 'KISS': 'KISS', + 'YAGNI': 'YAGNI', + 'Single Responsibility': 'Single Responsibility', + 'Open/Closed': 'Open/Closed', + 'Liskov Substitution': 'Liskov Substitution', + 'Interface Segregation': 'Interface Segregation', + 'Dependency Inversion': 'Dependency Inversion', + 'Don\'t Repeat Yourself': 'Don\'t Repeat Yourself', + 'Keep It Simple, Stupid': 'Keep It Simple, Stupid', + 'You Aren\'t Gonna Need It': 'You Aren\'t Gonna Need It' +}; + +function translateText(text) { + let translatedText = text; + + // Apply translations + for (const [russian, english] of Object.entries(cursorTranslations)) { + translatedText = translatedText.replace(new RegExp(russian, 'gi'), english); + } + + return translatedText; +} + +function createBackup(filePath) { + if (!fs.existsSync(BACKUP_DIR)) { + fs.mkdirSync(BACKUP_DIR, { recursive: true }); + } + + const relativePath = path.relative(CURSOR_DIR, filePath); + const backupPath = path.join(BACKUP_DIR, relativePath); + const backupDir = path.dirname(backupPath); + + if (!fs.existsSync(backupDir)) { + fs.mkdirSync(backupDir, { recursive: true }); + } + + fs.copyFileSync(filePath, backupPath); + return backupPath; +} + +function translateFile(filePath) { + try { + const content = fs.readFileSync(filePath, 'utf8'); + const translatedContent = translateText(content); + + // Create backup before translation + const backupPath = createBackup(filePath); + + // Write translated content + fs.writeFileSync(filePath, translatedContent, 'utf8'); + + return { + success: true, + backupPath, + originalSize: content.length, + translatedSize: translatedContent.length + }; + } catch (error) { + return { + success: false, + error: error.message + }; + } +} + +function findCursorFiles() { + const files = []; + + function scanDirectory(dir) { + const items = fs.readdirSync(dir); + + for (const item of items) { + const fullPath = path.join(dir, item); + const stat = fs.statSync(fullPath); + + if (stat.isDirectory()) { + // Skip backup directory + if (item !== 'backup') { + scanDirectory(fullPath); + } + } else if (stat.isFile()) { + // Only process markdown files + if (item.endsWith('.md') || item.endsWith('.mdc')) { + files.push(fullPath); + } + } + } + } + + scanDirectory(CURSOR_DIR); + return files; +} + +function protectCursor() { + console.log('🛡️ Protecting .cursor directory - translating all files to English...\n'); + + const files = findCursorFiles(); + console.log(`📁 Found ${files.length} files to process\n`); + + let successCount = 0; + let errorCount = 0; + const results = []; + + for (const filePath of files) { + const relativePath = path.relative(process.cwd(), filePath); + console.log(`🔄 Processing: ${relativePath}`); + + const result = translateFile(filePath); + results.push({ filePath, ...result }); + + if (result.success) { + console.log(`✅ Translated: ${relativePath}`); + console.log(`📁 Backup: ${path.relative(process.cwd(), result.backupPath)}`); + successCount++; + } else { + console.log(`❌ Error: ${relativePath} - ${result.error}`); + errorCount++; + } + } + + console.log(`\n📊 Summary:`); + console.log(`✅ Successfully translated: ${successCount} files`); + console.log(`❌ Errors: ${errorCount} files`); + console.log(`📁 Backups created in: .cursor/backup/`); + + return { successCount, errorCount, results }; +} + +function checkCursorStatus() { + console.log('🔍 Checking .cursor directory status...\n'); + + const files = findCursorFiles(); + console.log(`📁 Found ${files.length} files in .cursor directory\n`); + + let russianContentCount = 0; + const filesWithRussian = []; + + for (const filePath of files) { + try { + const content = fs.readFileSync(filePath, 'utf8'); + const hasRussian = /[а-яё]/i.test(content); + + if (hasRussian) { + russianContentCount++; + const relativePath = path.relative(process.cwd(), filePath); + filesWithRussian.push(relativePath); + } + } catch (error) { + console.log(`❌ Error reading ${filePath}: ${error.message}`); + } + } + + console.log(`📊 Status Report:`); + console.log(`📁 Total files: ${files.length}`); + console.log(`🇷🇺 Files with Russian content: ${russianContentCount}`); + console.log(`🇺🇸 Files in English only: ${files.length - russianContentCount}`); + + if (filesWithRussian.length > 0) { + console.log(`\n📋 Files that need translation:`); + filesWithRussian.forEach(file => console.log(` - ${file}`)); + } else { + console.log(`\n✅ All files are already in English!`); + } + + return { totalFiles: files.length, russianContentCount, filesWithRussian }; +} + +function restoreFromBackup(backupPath) { + if (!fs.existsSync(backupPath)) { + console.log(`❌ Backup not found: ${backupPath}`); + return false; + } + + try { + const relativePath = path.relative(BACKUP_DIR, backupPath); + const originalPath = path.join(CURSOR_DIR, relativePath); + + fs.copyFileSync(backupPath, originalPath); + console.log(`✅ Restored: ${path.relative(process.cwd(), originalPath)} from backup`); + return true; + } catch (error) { + console.log(`❌ Error restoring ${backupPath}: ${error.message}`); + return false; + } +} + +function listBackups() { + if (!fs.existsSync(BACKUP_DIR)) { + console.log('❌ No backups found'); + return; + } + + console.log('📁 Available backups:'); + + function scanBackups(dir, prefix = '') { + const items = fs.readdirSync(dir); + + for (const item of items) { + const fullPath = path.join(dir, item); + const stat = fs.statSync(fullPath); + + if (stat.isDirectory()) { + console.log(`${prefix}📁 ${item}/`); + scanBackups(fullPath, prefix + ' '); + } else { + const stats = fs.statSync(fullPath); + console.log(`${prefix}📄 ${item} (${stats.mtime.toLocaleString()})`); + } + } + } + + scanBackups(BACKUP_DIR); +} + +function main() { + const command = process.argv[2] || 'protect'; + const backupPath = process.argv[3]; + + switch (command) { + case 'protect': + protectCursor(); + break; + case 'check': + checkCursorStatus(); + break; + case 'restore': + if (!backupPath) { + console.log('❌ Please specify backup path'); + console.log('Usage: node .cursor/rules/cursor-protector.cjs restore '); + return; + } + restoreFromBackup(backupPath); + break; + case 'list': + listBackups(); + break; + case 'help': + console.log(` +Cursor Protector Script + +Usage: node .cursor/rules/cursor-protector.cjs [command] [backup-path] + +Commands: + protect - Protect .cursor by translating all files to English (default) + check - Check status of .cursor files (which need translation) + restore - Restore file from backup (requires backup path) + list - List available backups + help - Show this help + +Examples: + node .cursor/rules/cursor-protector.cjs protect + node .cursor/rules/cursor-protector.cjs check + node .cursor/rules/cursor-protector.cjs restore .cursor/backup/rules/ai-memory.mdc + node .cursor/rules/cursor-protector.cjs list + `); + break; + default: + console.log(`❌ Unknown command: ${command}`); + console.log('Use "help" to see available commands'); + process.exit(1); + } +} + +if (require.main === module) { + main(); +} + +module.exports = { + protectCursor, + checkCursorStatus, + translateText, + cursorTranslations, + createBackup, + restoreFromBackup +}; \ No newline at end of file diff --git a/.cursor/rules/dev/date-time-patterns.mdc b/.cursor/rules/dev/date-time-patterns.mdc new file mode 100644 index 00000000..b23fd298 --- /dev/null +++ b/.cursor/rules/dev/date-time-patterns.mdc @@ -0,0 +1,170 @@ +--- +description: Date and time patterns for AI assista.ts - universal guIDElines for handling dates +globs: ["**/*"] +alwaysApply: true +aiPriority: high +aiCategory: development-practices +--- + +# Patterns работы с Dateми и временем + +## Проблема +AI-ассистенты не могут самостоятельно получать актуальную дату и Time, что приводит к использованию устаревших дат в документации. + +## Решение: Usage системных команд + +### Получение текущей даты +```bash +# Текущая Date в формате YYYY-MM-DD +date +"%Y-%m-%d" + +# Текущая Date и Time +date +"%Y-%m-%d %H:%M:%S" + +# Текущая Date на русском языке +date +"%d %B %Y" +``` + +### Получение времени +```bash +# Только Time +date +"%H:%M:%S" + +# Time с часовым поясом +date +"%H:%M:%S %Z" +``` + +## Patterns для AI-ассистентов + +### 1. При создании документации +```bash +# Всегда получать актуальную дату перед созданием документации +current_date=$(date +"%Y-%m-%d") +echo "Current date: $current_date" +``` + +### 2. При обновлении существующей документации +```bash +# Проверять, не устарели ли даты в документации +# Если Date старая - обновлять с актуальной +``` + +### 3. При создании коммитов +```bash +# Использовать актуальную дату в сообщениях коммитов +git commit -m "feat: new feature - $(date +"%Y-%m-%d")" +``` + +## Форматы дат для разных целей + +### Documentation (YYYY-MM-DD) +- `2025-07-12` - стандартный формат для документации +- Используется в memory-bank, README, технической документации + +### Comm.ts (YYYY-MM-DD) +- `2025-07-12` - для сообщений коммитов +- Краткий и понятный формат + +### Пользовательский Interface +- `12 июля 2025` - для пользовательского Interfaceа +- Локализованный формат + +### Logging +- `2025-07-12 14:30:25` - полный формат с временем +- Для системных логов и отладки + +## Проверочный список + +### ✅ Перед созданием документации +- [ ] Получить актуальную дату командой `date +"%Y-%m-%d"` +- [ ] Использовать полученную дату в документации +- [ ] Check формат даты (YYYY-MM-DD) + +### ✅ При обновлении документации +- [ ] Check даты в существующих файлах +- [ ] Update устаревшие даты +- [ ] Убедиться в консистентности форматов + +### ✅ При работе с пользователем +- [ ] Уточнить дату, если есть сомнения +- [ ] Использовать понятные пользователю форматы +- [ ] Объяснить, почему используется системная Date + +## examples использования + +### Создание нового этапа в progress.md +```bash +current_date=$(date +"%Y-%m-%d") +echo "### ✅ Этап X: Description (Завершен - $current_date)" +``` + +### Обновление Statusа в errors.md +```bash +current_date=$(date +"%Y-%m-%d") +echo "### Status" +echo "✅ **РЕШЕНО** - $current_date" +``` + +### Создание коммита с датой +```bash +current_date=$(date +"%Y-%m-%d") +git commit -m "feat: new feature - $current_date" +``` + +## Частые ошибки + +### ❌ Неправильно +- Usage устаревших дат из контекста +- Разные форматы дат в одном документе +- Отсутствие проверки актуальности дат + +### ✅ Правильно +- Usage `date` команды для получения актуальной даты +- Консистентный формат YYYY-MM-DD +- Регулярная Verification и обновление дат + +## Integration с Cursor IDE + +### Project Rules +Add в project rules: +``` +- Always use system date Commands for current date/time +- Format dates as YYYY-MM-DD in documentation +- Validate dates before using in documentation +``` + +### Saved Memories +Create memory: +``` +Date/Time Pattern: Use 'date +"%Y-%m-%d"' Command to get current date +Format: Always use YYYY-MM-DD format in documentation +Validation: Check dates before using in documentation +``` + +## Автоматизация + +### Скрипт для проверки дат +```bash +#!/bin/bash +# check-dates.sh +current_date=$(date +"%Y-%m-%d") +echo "Current date: $current_date" + +# Verification дат в документации +grep -r "2024-" docs/ memory-bank/ 2>/dev/null | head -5 +echo "Found old dates above. ConsIDEr updating them." +``` + +### Git hook для проверки дат +```bash +#!/bin/bash +# .git/hooks/pre-commit +current_date=$(date +"%Y-%m-%d") +echo "Current date: $current_date" + +## New Entry ([2025-07-19T01:32:19.979Z]) + +Паттерн работы с Dateми: Использовать date +%Y-%m-%d для получения текущей даты в документации + +echo "Please ensure all dates in documentation are current." +``` \ No newline at end of file diff --git a/.cursor/rules/dev/dev-principle-01-do-no-harm.mdc b/.cursor/rules/dev/dev-principle-01-do-no-harm.mdc deleted file mode 100644 index d8c79488..00000000 --- a/.cursor/rules/dev/dev-principle-01-do-no-harm.mdc +++ /dev/null @@ -1,16 +0,0 @@ -# Development Principle 1: Do No Harm -- Security first: Any changes must improve system security, not weaken it -- Backward compatibility: Changes must not break existing functionality -- Gradual implementation: Implement changes step by step with rollback capability -- Testing: All changes must pass thorough testing before deployment -- Monitoring: Track impact of changes on performance and stability - -description: 'Do No Harm' principle for all development -globs: - - * -alwaysApply: false ---- -description: -globs: -alwaysApply: false ---- diff --git a/.cursor/rules/dev/dev-principle-02-ai-first-docs.mdc b/.cursor/rules/dev/dev-principle-02-ai-first-docs.mdc deleted file mode 100644 index 99069774..00000000 --- a/.cursor/rules/dev/dev-principle-02-ai-first-docs.mdc +++ /dev/null @@ -1,16 +0,0 @@ -# Development Principle 2: AI-First Documentation -- Analytical comments: Add comments explaining logic and architectural decisions for AI understanding -- Context explanations: Explain "why", not just "what" the code does -- Architectural comments: Document component relationships and data flows -- Business logic: Explain complex business logic and decisions made -- TODO comments: Leave TODO with explanation of planned improvements - -description: AI-oriented documentation and comments for all code -globs: - - * -alwaysApply: false ---- -description: -globs: -alwaysApply: false ---- diff --git a/.cursor/rules/dev/dev-principle-03-best-practices.mdc b/.cursor/rules/dev/dev-principle-03-best-practices.mdc deleted file mode 100644 index 7c9f6d0d..00000000 --- a/.cursor/rules/dev/dev-principle-03-best-practices.mdc +++ /dev/null @@ -1,17 +0,0 @@ -# Development Principle 3: Best Practices First -- Architectural patterns: Use proven architectural patterns and principles -- Coding standards: Follow accepted standards and conventions -- Security: Apply security principles (Zero Trust, Defense in Depth, Least Privilege) -- Performance: Optimize critical paths and avoid anti-patterns -- Scalability: Design considering future growth and changes -- Testability: Write code that is easy to test and maintain - -description: Prioritize best practices in all development -globs: - - * -alwaysApply: false ---- -description: -globs: -alwaysApply: false ---- diff --git a/.cursor/rules/dev/dev-principle-04-fail-fast-safe.mdc b/.cursor/rules/dev/dev-principle-04-fail-fast-safe.mdc deleted file mode 100644 index 5bc3d5b1..00000000 --- a/.cursor/rules/dev/dev-principle-04-fail-fast-safe.mdc +++ /dev/null @@ -1,16 +0,0 @@ -# Development Principle 4: Fail Fast, Fail Safe -- Early error detection: Validate at input, not during execution -- Graceful degradation: System continues working even with partial failures -- Circuit breaker: Automatic shutdown of problematic components -- Rollback capability: Quick rollback to working state -- Error boundaries: Isolate errors at component level - -description: Fail fast and fail safe in all development -globs: - - * -alwaysApply: false ---- -description: -globs: -alwaysApply: false ---- diff --git a/.cursor/rules/dev/dev-principle-05-observability.mdc b/.cursor/rules/dev/dev-principle-05-observability.mdc deleted file mode 100644 index 9a9ed9c4..00000000 --- a/.cursor/rules/dev/dev-principle-05-observability.mdc +++ /dev/null @@ -1,16 +0,0 @@ -# Development Principle 5: Observability First -- Structured logging: Structured logging for analysis -- Metrics everywhere: Performance and state metrics -- Distributed tracing: Track requests through all components -- Health checks: Monitor state of all services -- Debug information: Sufficient information for problem diagnosis - -description: Observability and monitoring in all development -globs: - - * -alwaysApply: false ---- -description: -globs: -alwaysApply: false ---- diff --git a/.cursor/rules/dev/dev-principle-06-config-as-code.mdc b/.cursor/rules/dev/dev-principle-06-config-as-code.mdc deleted file mode 100644 index 17255bcd..00000000 --- a/.cursor/rules/dev/dev-principle-06-config-as-code.mdc +++ /dev/null @@ -1,16 +0,0 @@ -# Development Principle 6: Configuration as Code -- Version-controlled configs: All configurations in version control -- Environment-specific: Different configurations for different environments -- Validation: Automatic configuration validation -- Documentation: Document all configuration parameters -- Default safety: Safe default values - -description: Configuration as code for all environments -globs: - - * -alwaysApply: false ---- -description: -globs: -alwaysApply: false ---- diff --git a/.cursor/rules/dev/dev-principle-07-progressive-enhancement.mdc b/.cursor/rules/dev/dev-principle-07-progressive-enhancement.mdc deleted file mode 100644 index e53828e6..00000000 --- a/.cursor/rules/dev/dev-principle-07-progressive-enhancement.mdc +++ /dev/null @@ -1,16 +0,0 @@ -# Development Principle 7: Progressive Enhancement -- Core functionality: Basic functionality always works -- Feature detection: Detect browser capabilities -- Graceful degradation: Degrade functionality, not complete failure -- Performance budget: Performance budget for new features -- Accessibility baseline: Minimum accessibility level for all - -description: Progressive enhancement in all development -globs: - - * -alwaysApply: false ---- -description: -globs: -alwaysApply: false ---- diff --git a/.cursor/rules/dev/dev-principle-08-data-integrity-privacy.mdc b/.cursor/rules/dev/dev-principle-08-data-integrity-privacy.mdc deleted file mode 100644 index f91d0117..00000000 --- a/.cursor/rules/dev/dev-principle-08-data-integrity-privacy.mdc +++ /dev/null @@ -1,17 +0,0 @@ -# Development Principle 8: Data Integrity & Privacy -- Data validation: Validate all input data -- Encryption at rest: Encrypt data at rest -- Encryption in transit: Encrypt data in transit -- Data minimization: Collect only necessary data -- User consent: Explicit user consent for data processing -- Right to be forgotten: Ability to delete user data - -description: Data integrity and privacy in all development -globs: - - * -alwaysApply: false ---- -description: -globs: -alwaysApply: false ---- diff --git a/.cursor/rules/dev/dev-principle-09-continuous-learning.mdc b/.cursor/rules/dev/dev-principle-09-continuous-learning.mdc deleted file mode 100644 index f22c5172..00000000 --- a/.cursor/rules/dev/dev-principle-09-continuous-learning.mdc +++ /dev/null @@ -1,16 +0,0 @@ -# Development Principle 9: Continuous Learning -- Performance monitoring: Continuous performance monitoring -- User feedback loops: User feedback -- A/B testing: Test hypotheses on real users -- Analytics insights: Usage analysis for improvements -- Knowledge sharing: Document lessons and insights - -description: Continuous learning and improvement in all development -globs: - - * -alwaysApply: false ---- -description: -globs: -alwaysApply: false ---- diff --git a/.cursor/rules/dev/dev-principle-10-ecosystem-thinking.mdc b/.cursor/rules/dev/dev-principle-10-ecosystem-thinking.mdc deleted file mode 100644 index 8d96c043..00000000 --- a/.cursor/rules/dev/dev-principle-10-ecosystem-thinking.mdc +++ /dev/null @@ -1,16 +0,0 @@ -# Development Principle 10: Ecosystem Thinking -- Plugin compatibility: Ensure plugin compatibility -- API stability: Stable public APIs -- Backward compatibility: Backward version compatibility -- Community building: Support developer community -- Documentation quality: Quality documentation for ecosystem - -description: Ecosystem thinking in all development -globs: - - * -alwaysApply: false ---- -description: -globs: -alwaysApply: false ---- diff --git a/.cursor/rules/dev/development-guidelines.mdc b/.cursor/rules/dev/development-guidelines.mdc index 93671ca5..bbd7f624 100644 --- a/.cursor/rules/dev/development-guidelines.mdc +++ b/.cursor/rules/dev/development-guidelines.mdc @@ -1,33 +1,23 @@ -# Development Guidelines - -## JavaScript/TypeScript -- Use ES6+ and async/await. -- Modular architecture, clear separation of concerns. -- Error handling and structured logging are required. -- Use TypeScript for type safety. -- Prefer functional patterns where possible. - -## Python (Plugins) -- Use MCP protocol for communication. -- Use async/await for I/O operations. -- Always validate inputs and handle errors. -- Plugins should be single-purpose. -- Document all plugin APIs clearly. - -# Security First -- Validate manifests and permissions. -- Sanitize data between JS and Python. -- Sandbox all plugins. -- Apply the principle of least privilege. -- Audit all plugin code. - -# Performance Considerations -- Lazy-load plugins and Pyodide when possible. -- Cache repeated operations. -- Monitor memory usage and clean up resources. -- Optimize bundle size and loading time. -- Use WebWorkers for non-blocking tasks. -description: -globs: -alwaysApply: false --- +description: Development best practices and guIDElines +globs: ["**/*"] +alwaysApply: true +aiPriority: high +aiCategory: development-practices +--- + +# Development GuIDElines + +## Overview + +This file contains dev practice guIDElines and best practices. + +## GuIDElines + + + +## Development Practice ([2025-07-19T01:19:31.302Z]) + +Best practice: Использовать только ESM-экспорт для внутренних пакетов платформы + + diff --git a/.cursor/rules/dev/development-principles.mdc b/.cursor/rules/dev/development-principles.mdc new file mode 100644 index 00000000..8ea7328f --- /dev/null +++ b/.cursor/rules/dev/development-principles.mdc @@ -0,0 +1,65 @@ +--- +description: Development principles for all proje.ts - universal guIDElines and best practices +globs: ["**/*"] +alwaysApply: true +aiPriority: critical +aiCategory: development-practices +--- + +# 🛡️ Principles разработки + +## Краткая сводка (для быстрого понимания) + +### 🔒 Security и надёжность +1. **"Не навреди"** - Security прежде всего, обратная Compatibility +2. **"Fail Fast, Fail Safe"** - быстрый и безопасный отказ, Graceful Degradation +3. **"data Integrity & Privacy"** - целостность и приватность данных + +### 📊 Наблюдаемость и Quality +4. **"Observability First"** - структурированное Logging, метрики, Monitoring +5. **"Best Practices First"** - проверенные Patterns, Standards, Performance +6. **"configuration as Code"** - Versioning конфигураций, Validation + +### 🚀 User Experience +7. **"Progressive Enhancement"** - базовая функциональность всегда работает +8. **"Continuous Learning"** - Monitoring, обратная связь, A/B Testing + +### 🌐 Экосистема и развитие +9. **"Ecosystem Thinking"** - Compatibility плагинов, стабильность API +10. **"Comme.ts для ИИ"** - аналитические Comme.ts для понимания логики + +## Применение принципов + +### Для каждой задачи ИИ-ассистент должен: +1. **Проанализировать** задачу через призму релевантных принципов +2. **Выбрать** наиболее подходящие Principles для конкретной ситуации +3. **Применить** Principles систематически при принятии решений +4. **Документировать** как Principles повлияли на решение + +### examples применения: +- **Новый плагин** → Principles 1, 2, 5, 6, 9, 10 +- **Исправление бага** → Principles 1, 2, 4, 5, 7 +- **Optimization** → Principles 2, 4, 5, 6, 7, 8 +- **Новая Function** → Principles 1, 3, 5, 7, 8, 9 + +## Взаимодополняемость принципов + +Principles не противоречат друг другу, а усиливают: +- **"Не навреди" + "Fail Fast"** = безопасные быстрые решения +- **"Best Practices" + "Observability"** = качественные решения с Monitoringом +- **"Progressive Enhancement" + "Ecosystem"** = стабильная экосистема +- **"data Privacy" + "configuration"** = безопасная configuration + +## Результат применения + +Следование всем принципам обеспечивает: +- ✅ **Highе Quality кода** и архитектуры +- ✅ **Security** и надёжность системы +- ✅ **Лучший User Experience** + +## New Entry ([2025-07-19T01:32:10.564Z]) + +Принцип разработки: Всегда использовать системные команды для получения актуальной даты + +- ✅ **Масштабируемость** и поддерживаемость +- ✅ **Успешную экосистему** плагинов \ No newline at end of file diff --git a/.cursor/rules/dev/git-workflow.rules.md b/.cursor/rules/dev/git-workflow.rules.md deleted file mode 100644 index e6a28b71..00000000 --- a/.cursor/rules/dev/git-workflow.rules.md +++ /dev/null @@ -1,12 +0,0 @@ -# Git Workflow Rule - -**Rule:** -- Only merge into main from develop. -- All feature, fix, and doc branches must be merged into develop first, never directly into main. -- This rule is mandatory for all changes and pull requests. - ---- -## Enforcement -- Local pre-push hook (.husky/pre-push) blocks direct push to main and develop. -- GitHub branch protection prevents direct push and enforces PRs from develop only. ---- \ No newline at end of file diff --git a/.cursor/rules/dev/testing-troubleshooting.mdc b/.cursor/rules/dev/testing-troubleshooting.mdc new file mode 100644 index 00000000..d70c8c0c --- /dev/null +++ b/.cursor/rules/dev/testing-troubleshooting.mdc @@ -0,0 +1,66 @@ +--- +description: Testing and debugging standards +globs: ["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"] +alwaysApply: falseaiPriority: normal +aiCategory: development-practices +--- + +# Testing & Troubleshooting Best Practices + +## Documentation тестирования и отладки + +### Ключевые Principles: +- Писать пошаговые гайды для всех основных flows тестирования и отладки +- Разделять usage, troubleshooting и advanced diagnostics в отдельные файлы +- Cross-link гайды для навигации (usage → troubleshooting → advanced) +- Использовать четкие, воспроизводимые шаги и code snipp.ts +- Ссылаться на релевантные скрипты, автоматизацию и best practices +- Обновлять гайды при изменении features или workflows + +### examples гайдов: +- DevTools Testing GuIDE +- DevTools Panel Troubleshooting +- DevTools Panel Usage + +## Анализ внешних репозиториев как submodules + +Для анализа, поиска и отслеживания изменений во внешнем git репозитории: + +### Пошагово: +1. В корне монорепо: + ```bash + git submodule add external/ + git submodule update --init --recursive + ``` + + Пример: + ```bash + git submodule add HTTPS://github.com/QizhengMo/chrome-extension-sIDEpanel-template.git external/sIDEpanel-template + git submodule update --init --recursive + ``` + +2. Открыть монорепо в Cursor/VSCode. Submodule будет проиндексирован и доступен для поиска кода, навигации и анализа. + +3. Update submodule до последней версии: + ```bash + cd external/sIDEpanel-template + git pull origin main + ``` + +4. Delete submodule (если больше не нужен): + ```bash + git submodule deinit -f external/sIDEpanel-template + git rm -f external/sIDEpanel-template + rm -rf .git/modules/external/sIDEpanel-template + ``` + +### Преимущества: +- Изолирует внешний код от основной git истории +- Позволяет легкие обновления и независимое Versioning +- Обеспечивает полный поиск кода и анализ в Cursor/VSCode + +**Используйте этот Method для любого внешнего кодового база, который хотите анализировать или ссылаться в монорепо.** +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/dev/typescript.mdc b/.cursor/rules/dev/typescript.mdc deleted file mode 100644 index df08dafa..00000000 --- a/.cursor/rules/dev/typescript.mdc +++ /dev/null @@ -1,13 +0,0 @@ -# Rule -- Use only TypeScript for all new files. -- Enforce strict typing, avoid using `any`. -- Use modern language features (optional chaining, nullish coalescing, etc.). -- Always follow the shared tsconfig from `packages/tsconfig/`. - -# Examples -- ✅ `const foo: string = "bar"` -- ❌ `let x: any = 5` -description: -globs: -alwaysApply: false ---- diff --git a/.cursor/rules/doc/ai-answer-self-check.mdc b/.cursor/rules/doc/ai-answer-self-check.mdc new file mode 100644 index 00000000..a1409f4f --- /dev/null +++ b/.cursor/rules/doc/ai-answer-self-check.mdc @@ -0,0 +1,39 @@ + + + + +--- +description: ai answer self check rule +globs: ["**/*.md", "**/*.mdc", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"] +alwaysApply: falseaiPriority: medium +aiCategory: documentation +--- + +# AI Answer Self-Check Policy + +AI-ассистент обязан для каждого ответа: + +## Обязательные Requireme.ts: +- Разбивать вопрос пользователя на подпункты/чеклист +- Явно отмечать, на что уже дан ответ, а что требует пояснения или осталось неотвеченным +- В конце ответа давать self-check: какие пункты покрыты, какие требуют доработки или согласования +- Если требование уже реализовано — явно указывать где и как (файл, секция, коммит, etc.) +- Для сложных вопросов использовать маркированные списки или таблицы + +## Пример self-check: +``` +--- +**Self-check для вашего вопроса:** +1. ✅ Механизм self-check — описан и предложен для реализации +2. ✅ Пример предоставлен выше +3. ✅ Предыдущий случай объяснен (требование уже реализовано) +4. ⚠️ Если хотите это в каждом ответе — можно сделать стандартом (подтвердите) +--- +``` + +## Применение: +Это правило Required для всех коммуникаций AI в проекте. +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/doc/ai-fallback.rules.md b/.cursor/rules/doc/ai-fallback.rules.md deleted file mode 100644 index de965e7e..00000000 --- a/.cursor/rules/doc/ai-fallback.rules.md +++ /dev/null @@ -1,9 +0,0 @@ -# AI Fallback Rule - -**Правило:** -Если возникает вопрос, на который нет ответа в AI memory-bank, необходимо: -1. Сначала обращаться к сведениям в папке .rules проекта. -2. Если нужной информации нет в .rules, обращаться к сведениям в папке memory-bank проекта (особенно к архитектурным и контекстным файлам). - -**Приоритет:** -Это правило приоритетно для всех будущих консультаций и автоматизаций. \ No newline at end of file diff --git a/.cursor/rules/doc/ai-first.mdc b/.cursor/rules/doc/ai-first.mdc deleted file mode 100644 index e9afd16a..00000000 --- a/.cursor/rules/doc/ai-first.mdc +++ /dev/null @@ -1,14 +0,0 @@ -# Rule -- Documentation and comments must be AI-oriented and clear for AI assistants. -- Explain non-obvious decisions, provide examples, and clarify logic. -- Use analytical comments (// AI: ...). - -# Examples -- ✅ `// AI: This function is required for ...` -- ✅ `/** - * AI: Example usage ... - */` -description: -globs: -alwaysApply: false ---- diff --git a/.cursor/rules/doc/always-russian-answer.mdc b/.cursor/rules/doc/always-russian-answer.mdc new file mode 100644 index 00000000..fa65a4f0 --- /dev/null +++ b/.cursor/rules/doc/always-russian-answer.mdc @@ -0,0 +1,7 @@ +# Всегда отвечай на русском языке + +AI-ассистент обязан всегда давать ответы пользователю на русском языке, независимо от языка запроса или исходного контекста, если явно не указано иное. Исключение — если пользователь просит ответить на другом языке или задача требует иного языка для технической совместимости. +description: +globs: +alwaysApply: true +--- diff --git a/.cursor/rules/doc/auto-translate-requests.mdc b/.cursor/rules/doc/auto-translate-requests.mdc new file mode 100644 index 00000000..df559883 --- /dev/null +++ b/.cursor/rules/doc/auto-translate-requests.mdc @@ -0,0 +1,387 @@ +# Auto Translate Requests System + +## Overview + +The Auto Translate Requests System automatically translates user requests from Russian to English when creating .cursor rules, ensuring that all rules are created in English for maximum AI/LLM compatibility. + +## Key Features + +### 🤖 **Automatic Translation** +- **Real-time translation** of user requests to English +- **Comprehensive coverage** of technical terminology +- **High accuracy** with confidence scoring +- **Context-aware** translation for .cursor rules + +### 📝 **Rule Creation** +- **Automatic file generation** with proper structure +- **English-only content** for AI/LLM compatibility +- **Git integration** with automatic staging +- **Template-based** rule generation + +### 🔧 **Multiple Interfaces** +- **Command-line interface** for quick rule creation +- **Interactive mode** for guided rule creation +- **NPM scripts** for easy integration +- **Direct API** for programmatic use + +## System Components + +### **1. Request Translator (`request-translator.cjs`)** +Core translation engine with comprehensive terminology coverage: +- **Translation mappings** - 500+ technical terms +- **Request analysis** - pattern detection and confidence scoring +- **English prompt generation** - AI-ready prompts +- **Context preservation** - maintains original request information + +### **2. Auto Translate Requests (`auto-translate-requests.cjs`)** +Complete system management: +- **Interactive mode** - guided rule creation +- **Setup automation** - system configuration +- **Rule creation** - automatic file generation +- **Integration management** - npm scripts and helpers + +### **3. Quick Rule Creator (`create-rule.cjs`)** +Fast rule creation utility: +- **One-command creation** - translate and create in one step +- **Automatic staging** - git integration +- **Template generation** - structured rule files +- **Progress feedback** - clear status updates + +## Usage + +### **Quick Rule Creation (Recommended)** +```bash +# Create rule with automatic translation +node .cursor/rules/create-rule.cjs "создай правило для архитектуры" + +# Using npm script +npm run create-rule "добавь правило безопасности" +``` + +### **Interactive Mode** +```bash +# Start interactive mode +node .cursor/rules/auto-translate-requests.cjs interactive + +# Using npm script +npm run interactive-rules +``` + +### **Direct Translation** +```bash +# Translate request only +node .cursor/rules/request-translator.cjs translate "напиши правило для тестирования" + +# Analyze request +node .cursor/rules/request-translator.cjs analyze "создай файл в .cursor" +``` + +### **System Setup** +```bash +# Setup auto translation system +node .cursor/rules/auto-translate-requests.cjs setup +``` + +## Translation Coverage + +### **Request Patterns** +- **Creation requests** - создай, добавь, напиши, сделай +- **File types** - правило, файл, документ, конфигурация +- **Locations** - в .cursor, в rules, в папку +- **Content types** - с описанием, с примерами, с инструкциями + +### **Technical Terminology** +- **Development terms** - разработка → development +- **Architecture terms** - архитектура → architecture +- **Security terms** - безопасность → security +- **Performance terms** - производительность → performance +- **Quality terms** - качество → quality + +### **Common Phrases** +- **Important notes** - важные примечания +- **Best practices** - лучшие практики +- **Requirements** - требования +- **Recommendations** - рекомендации + +## Generated Rule Structure + +### **File Format** +```markdown +--- +description: [translated request] +globs: ["**/*"] +alwaysApply: false +aiPriority: normal +aiCategory: rules +createdFrom: "[original request]" +translatedAt: "[timestamp]" +--- + +# [translated request] + +## Overview + +This rule was created based on the request: "[original request]" + +## Description + +[translated request] + +## Implementation + + + +## Usage + + + +## Examples + + + +## Notes + + + +--- +*Generated automatically from user request: "[original request]"* +*Translated to English for AI/LLM compatibility* +``` + +### **Metadata Fields** +- **description** - Translated request description +- **globs** - File patterns this rule applies to +- **alwaysApply** - Whether rule should always be applied +- **aiPriority** - Priority level for AI processing +- **aiCategory** - Category for AI organization +- **createdFrom** - Original user request +- **translatedAt** - Translation timestamp + +## Workflow Integration + +### **For Users** +1. **Write request in Russian** - System automatically translates +2. **Review translation** - Check confidence and accuracy +3. **Confirm creation** - Rule is created in English +4. **Edit as needed** - Add specific content and details +5. **Commit changes** - Git integration handles the rest + +### **For AI Assistants** +1. **Receive English prompt** - All requests translated automatically +2. **Create English rules** - No manual translation needed +3. **Follow templates** - Consistent structure and format +4. **Maintain compatibility** - All content in English + +### **For Development** +1. **Automatic protection** - Rules created in English +2. **Git integration** - Automatic staging and commits +3. **Template consistency** - Standardized rule structure +4. **Backup preservation** - Original requests preserved + +## Configuration + +### **Auto Translate Config** +```json +{ + "enabled": true, + "autoTranslate": true, + "createEnglishPrompts": true, + "backupOriginalRequests": true, + "confidenceThreshold": 70, + "patterns": { + "ruleCreation": ["создай", "добавь", "напиши", "сделай"], + "fileCreation": ["файл", "документ", "правило"], + "cursorRequests": [".cursor", "cursor", "rules"] + } +} +``` + +### **NPM Scripts** +```json +{ + "scripts": { + "create-rule": "node .cursor/rules/create-rule.cjs", + "translate-request": "node .cursor/rules/request-translator.cjs translate", + "interactive-rules": "node .cursor/rules/auto-translate-requests.cjs interactive" + } +} +``` + +## Benefits + +### **For AI/LLM Compatibility** +- **Universal accessibility** - Any AI assistant can read rules +- **Language consistency** - All rules in English +- **Better understanding** - Clear terminology for AI processing +- **Reduced confusion** - No mixed language content + +### **For International Community** +- **Global accessibility** - Ready for international developers +- **Standardized format** - Consistent English documentation +- **Easy sharing** - No language barriers +- **Professional appearance** - English for global audience + +### **For Development Workflow** +- **Automatic process** - No manual translation needed +- **Safe operation** - Original requests preserved +- **Git integration** - Seamless workflow integration +- **Template consistency** - Standardized rule structure + +## Best Practices + +### **For Users** +1. **Use clear requests** - Specific and descriptive requests +2. **Trust automatic translation** - System is comprehensive +3. **Review generated content** - Edit templates as needed +4. **Use English for new content** - Maintain consistency + +### **For AI Assistants** +1. **Always create rules in English** +2. **Trust the translation system** - It handles Russian requests +3. **Follow generated templates** - Maintain consistency +4. **Use standard terminology** - From translation mappings + +### **For Developers** +1. **Extend translation mappings** - Add missing terms as needed +2. **Test translation quality** - Verify accuracy +3. **Maintain templates** - Keep them up to date +4. **Monitor confidence scores** - Improve low-confidence translations + +## Error Handling + +### **Translation Errors** +- **Partial translation** - System continues with available mappings +- **Confidence scoring** - Clear indication of translation quality +- **Original preservation** - Original request always saved +- **Manual fallback** - Option to edit manually + +### **Creation Errors** +- **Directory creation** - Automatic directory structure +- **File conflicts** - Unique filename generation +- **Git integration** - Graceful handling of git errors +- **Template fallback** - Basic template if generation fails + +### **System Errors** +- **Graceful degradation** - System continues with available features +- **Error reporting** - Clear error messages +- **Recovery options** - Multiple ways to create rules +- **User guidance** - Clear instructions for resolution + +## Troubleshooting + +### **Common Issues** + +#### **Poor translation quality** +1. Check confidence score in analysis +2. Extend translation mappings if needed +3. Use more specific terminology +4. Report missing terms for improvement + +#### **Rule creation fails** +1. Check file permissions +2. Verify directory structure +3. Check git status +4. Use manual creation as fallback + +#### **Interactive mode issues** +1. Check Node.js version compatibility +2. Verify readline module availability +3. Check terminal compatibility +4. Use command-line mode as alternative + +### **Debug Commands** +```bash +# Test translation quality +node .cursor/rules/request-translator.cjs analyze "your request" + +# Check system status +node .cursor/rules/auto-translate-requests.cjs setup + +# Verify file creation +ls -la .cursor/rules/ + +# Check git status +git status +``` + +## Future Enhancements + +### **Planned Features** +- **API integration** with translation services +- **Machine learning** for better translations +- **Custom translation mappings** per project +- **Multi-language support** for other languages +- **Real-time translation** during typing +- **Translation quality scoring** + +### **Integration Ideas** +- **IDE plugins** for real-time translation +- **Web interface** for rule creation +- **API endpoints** for programmatic access +- **Collaborative translation** for community contributions + +## Examples + +### **Example 1: Architecture Rule** +```bash +# User request (Russian) +node .cursor/rules/create-rule.cjs "создай правило для архитектуры проекта" + +# Generated English rule +--- +description: create rule for architecture project +globs: ["**/*"] +alwaysApply: false +aiPriority: normal +aiCategory: rules +createdFrom: "создай правило для архитектуры проекта" +translatedAt: "2025-07-19T02:58:58.601Z" +--- + +# create rule for architecture project + +## Overview + +This rule was created based on the request: "создай правило для архитектуры проекта" +``` + +### **Example 2: Security Rule** +```bash +# User request (Russian) +node .cursor/rules/create-rule.cjs "добавь правило безопасности для API" + +# Generated English rule +--- +description: add security rule for API +globs: ["**/*"] +alwaysApply: false +aiPriority: high +aiCategory: security +createdFrom: "добавь правило безопасности для API" +translatedAt: "2025-07-19T02:59:15.123Z" +--- + +# add security rule for API + +## Overview + +This rule was created based on the request: "добавь правило безопасности для API" +``` + +## Conclusion + +The Auto Translate Requests System ensures that all .cursor rules are automatically created in English for maximum AI/LLM compatibility. This creates a seamless workflow where users can write requests in Russian, and the system automatically translates and creates English rules. + +**Key Benefits:** +- ✅ **Automatic translation** of user requests +- ✅ **English-only rule creation** +- ✅ **AI/LLM compatibility** +- ✅ **Git integration** +- ✅ **Template consistency** +- ✅ **Error handling and recovery** + +**Usage:** Simply use `node .cursor/rules/create-rule.cjs "your request in Russian"` to automatically translate and create English rules for maximum AI/LLM compatibility. +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/doc/chrome-extension-manual-restore.mdc b/.cursor/rules/doc/chrome-extension-manual-restore.mdc new file mode 100644 index 00000000..825d8541 --- /dev/null +++ b/.cursor/rules/doc/chrome-extension-manual-restore.mdc @@ -0,0 +1,26 @@ +# Chrome Extension Manual Restore — Experience & Pitfalls (2024-07-20) + +## Manual Restore Workflow +- Locate the required extension archive in `dist-zip/` (e.g., `extension-20250716-043234.zip`). +- Unzip to `/tmp/chrome-extension-old`: + ```bash + unzip -o dist-zip/extension-20250716-043234.zip -d /tmp/chrome-extension-old + ``` +- Launch Chromium with the script: + ```bash + bash bash-scripts/run-chromium-old-extension.sh + ``` +- The extension will be loaded and available for manual UI inspection and copying. + +## Typical Errors & Solutions +- **Manifest file missing**: Ensure `manifest.json` is present in `/tmp/chrome-extension-old` after unzipping. +- **unzip not found**: Install with `sudo pacman -S unzip` or `sudo apt install unzip`. +- **WDIO browser closes too soon**: Use the bash script for unlimited manual work time. + +--- + +This rule and experience are recorded for future automation and to avoid repeating past mistakes. +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/doc/command-synchronization.mdc b/.cursor/rules/doc/command-synchronization.mdc new file mode 100644 index 00000000..69bab2fe --- /dev/null +++ b/.cursor/rules/doc/command-synchronization.mdc @@ -0,0 +1,264 @@ +# Command Synchronization System + +## Overview + +Automated system for synchronizing user Commands between multiple sources: +- `USER_CommandS.md` - User-friendly Command reference +- `.cursor/rules/cursor-export/ai-memory.mdc` - AI assistant instructions +- `.cursor/rules/ai-memory.mdc` - Cursor rules +- `CURSOR_AI_MEMORY_BANK.md` - Export for Cursor AI memory-bank + +## How It Works + +### Single Source of Truth +All Commands are defined in `.cursor/rules/Command-sync..js` in a structured format: + +```JavaScript +const CommandCategories = { + 'Context and Memory': { + 'save context': { + russian: ['Сохрани контекст', 'Save контекст сессии'], + description: 'Save achieveme.ts, decisions and plans to memory-bank', + userDescription: 'AI-ассистент сохранит все достижения, решения и планы в memory-bank' + } + } +} +``` + +### Automatic Synchronization +The script generates all files from the single source: + +```bash +# Sync all files +node .cursor/rules/Command-sync..js sync + +# Export for Cursor AI memory-bank +node .cursor/rules/Command-sync..js export + +# Translate context to English +node .cursor/rules/Command-sync..js translate-context +``` + +## File Form.ts + +### USER_CommandS.md +User-friendly format with emojis and detailed descriptions: +```markdown +## 📝 Сохранение контекста + +### Save контекст сессии +`Сохрани контекст` / `Save контекст сессии` +*AI-ассистент сохранит все достижения, решения и планы в memory-bank* +``` + +### ai-memory.mdc +AI-optimized format for .cursor rules: +```markdown +### Context and Memory: +- `save context` / `Сохрани контекст` / `Save контекст сессии` - Save achieveme.ts, decisions and plans to memory-bank +``` + +### CURSOR_AI_MEMORY_BANK.md +Format optimized for Cursor AI memory-bank: +```markdown +### 📝 Context and Memory: +- `save context` / `Сохрани контекст` / `Save контекст сессии` - Save achieveme.ts, decisions and plans to memory-bank +``` + +## Context Translation System + +### Automatic Context Translation +The system automatically translates context to English for AI/LLM compatibility: + +```bash +# Save context with automatic translation and commit +node .cursor/rules/save-context..js save + +# Only translate without committing +node .cursor/rules/save-context..js translate-only +``` + +### Features +- ✅ **Automatic translation** from Russian to English +- ✅ **backup creation** before translation +- ✅ **Git integration** with automatic comm.ts +- ✅ **Comprehensive coverage** of all context terminology +- ✅ **Error handling** with safe fallbacks + +### Translation Coverage +- **Headers and titles** - All section headers +- **Task status** - Completed tasks, current focus, next steps +- **Principles** - Working principles and guIDElines +- **Technical context** - Architecture and standards +- **Command system** - Command categories and descriptions +- **User experience** - UX priorities and metrics +- **Development plans** - Short, medium, and long-term goals +- **Status indicators** - Readiness and completion status + +## Integration with Cursor AI Memory-Bank + +### Manual Integration +1. Run export Command: + ```bash + node .cursor/rules/Command-sync..js export + ``` + +2. Copy content from `CURSOR_AI_MEMORY_BANK.md` + +3. Go to Cursor Settings → AI → Rules & Memories + +4. Paste into User Rules or Project Rules + +5. Save and restart Cursor + +### Automatic Integration (Future) +Planned features: +- Direct API integration with Cursor +- Automatic updates when Commands change +- Version control for AI memory-bank + +## Command Categories + +### 📝 Context and Memory +- `save context` - Save achieveme.ts, decisions and plans in English (automatic translation) +- `update progress` - Update project status files +- `restore context` - Restore full project understanding +- `quick restore` - Get brief summary + +### 🏗️ Analysis and Study +- `analyze architecture` - Study system patterns +- `study plugins` - Analyze plugin structure +- `check build` - Verify project builds +- `update documentation` - Update project docs + +### 🔧 Development +- `create plugin [name]` - Create new plugin +- `check code` - Run linting and type checking +- `run te.ts` - Run all project te.ts +- `check dependencies` - Verify dependencies + +### 📊 Project Management +- `bump version patch/minor/major` - Increase version +- `clean project` - Clean build artifa.ts +- `analyze performance` - Performance analysis +- `check security` - Security analysis + +### 🚀 Releases and Deployment +- `create release` - Prepare for release +- `build production` - Production build + +## Benef.ts + +### For Users +- ✅ **Consistent Commands** across all sources +- ✅ **Easy to use** - just copy and paste +- ✅ **Bilingual support** - English and Russian +- ✅ **Always up-to-date** - automatic synchronization + +### For AI Assista.ts +- ✅ **Structured format** - easy to parse +- ✅ **Clear descriptions** - understand what each Command does +- ✅ **Multiple sources** - available in all conte.ts +- ✅ **Semantic understanding** - works with any language + +### For Development +- ✅ **Single source of truth** - no duplication +- ✅ **Automatic updates** - change once, update everywhere +- ✅ **Version control** - track Command changes +- ✅ **Easy maintenance** - centralized management + +## Usage examples + +### Adding New Commands +1. Edit `.cursor/rules/Command-sync..js` +2. Add Command to appropriate category +3. Run sync Command: + ```bash + node .cursor/rules/Command-sync..js sync + ``` + +### Updating Existing Commands +1. Edit Command in `.cursor/rules/Command-sync..js` +2. Run sync Command +3. All files updated automatically + +### Exporting for Cursor +```bash +node .cursor/rules/Command-sync..js export +``` + +## Technical Details + +### File Structure +``` +.cursor/rules/ +├── Command-sync..js # Main synchronization script +├── ai-memory.mdc # Cursor rules (auto-generated) +├── cursor-export/ +│ └── ai-memory.mdc # AI assistant instructions (auto-generated) +└── doc/ + └── Command-synchronization.mdc # This documentation + +USER_CommandS.md # User reference (auto-generated) +CURSOR_AI_MEMORY_BANK.md # Cursor export (auto-generated) +``` + +### Script Functions +- `generateUserCommand.md()` - Generate USER_CommandS.md +- `generateAIMemor.md()` - Generate ai-memory.mdc files +- `generateCursorMemoryBank()` - Generate Cursor format +- `syncCommands()` - Sync all files +- `exportForCursor()` - Export for Cursor AI memory-bank + +### Command Structure +Each Command has: +- **English Command** - Primary Command +- **Russian alternatives** - User-friendly alternatives +- **Description** - Technical description for AI +- **User description** - User-friendly description + +## Future Enhanceme.ts + +### Planned Features +- [ ] **API Integration** - Direct Cursor API integration +- [ ] **Auto-sync** - Automatic sync on file changes +- [ ] **Command validation** - Validate Command syntax +- [ ] **Usage analytics** - Track Command usage +- [ ] **template system** - Command templates for different project types + +### Integration IDEas +- **Git hooks** - Auto-sync on commit +- **CI/CD integration** - Validate Command consistency +- **Plugin system** - Extensible Command categories +- **Multi-language support** - More languages beyond English/Russian + +## Troubleshooting + +### Common Issues +1. **Sync fails** - Check file permissions +2. **Commands not working** - Verify Cursor AI memory-bank integration +3. **Format issues** - Check Command structure in script + +### Debug Commands +```bash +# Check script help +node .cursor/rules/Command-sync..js help + +# Verify file generation +ls -la USER_CommandS.md CURSOR_AI_MEMORY_BANK.md +``` + +## Conclusion + +The Command synchronization system provIDEs: +- ✅ **Consistent experience** across all platforms +- ✅ **Easy maintenance** with single source of truth +- ✅ **Automatic updates** for all Command sources +- ✅ **AI-optimized format** for maximum compatibility +- ✅ **User-friendly interface** for easy adoption + +This system ensures that Commands work sea.lessLy across USER_CommandS.md, .cursor rules, and Cursor AI memory-bank settings. +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/doc/context-translation-system.mdc b/.cursor/rules/doc/context-translation-system.mdc new file mode 100644 index 00000000..a1183df8 --- /dev/null +++ b/.cursor/rules/doc/context-translation-system.mdc @@ -0,0 +1,206 @@ +# Context Translation System + +## Overview + +The Context Translation System automatically translates context files from Russian to English for maximum AI/LLM compatibility. This ensures that all context saved in memory-bank is accessible to any AI assistant, regar.less of language preferences. + +## Key Features + +### 🌍 **Automatic Translation** +- **Sea.less translation** from Russian to English +- **Comprehensive coverage** of all context terminology +- **Preserves structure** and formatting +- **Creates backups** before translation + +### 🔄 **Integrated with Save Context Command** +- **Automatic translation** when using "save context" Command +- **Git integration** with automatic comm.ts +- **backup creation** for safety +- **Error handling** for robust operation + +### 📁 **backup System** +- **Automatic backups** before translation +- **Timestamped files** in `memory-bank/core/backup/` +- **Easy restoration** if needed +- **Safe operation** with rollback capability + +## Usage + +### For AI Assista.ts + +When a user issues the Command "save context" or "Сохрани контекст": + +1. **Automatically translate** context to English +2. **Create backups** of original files +3. **Save translated files** to memory-bank +4. **Commit changes** to git with descriptive message +5. **Notify user** of completion + +### Manual Usage + +```bash +# Save context with automatic translation and commit +node .cursor/rules/save-context..js save + +# Only translate without committing +node .cursor/rules/save-context..js translate-only + +# Translate context using Command sync script +node .cursor/rules/Command-sync..js translate-context +``` + +## Translation Coverage + +### **Headers and Titles** +- `Active контекст разработки` → `Active Development Context` +- `Текущий Status проекта` → `Current Project Status` +- `Последнее обновление` → `Last Updated` + +### **Task Status** +- `Завершенные задачи` → `Completed Tasks` +- `Текущий фокус` → `Current Focus` +- `Следующие шаги` → `Next Steps` + +### **Principles and GuIDElines** +- `Ключевые Principles работы` → `Key Working Principles` +- `Инициативность ассистента` → `Assistant Initiative` +- `Quality кода` → `Code Quality` + +### **Technical Context** +- `Технический контекст` → `Technical Context` +- `Текущая Architecture` → `Current Architecture` +- `Standards разработки` → `Development Standards` + +### **Command System** +- `Система команд` → `Command System` +- `Автоматическая Synchronization` → `Automatic Synchronization` +- `Категории команд` → `Command Categories` + +### **User Experience** +- `User Experience` → `User Experience` +- `Priorityы UX` → `UX Priorities` +- `Метрики качества` → `Quality Metrics` + +### **Development Plans** +- `Планы развития` → `Development Plans` +- `Краткосрочные цели` → `Short-term Goals` +- `Mediumсрочные цели` → `Medium-term Goals` +- `Долгосрочные цели` → `Long-term Goals` + +### **Status and Readiness** +- `Status готовности` → `Readiness Status` +- `Готовые компоненты` → `Ready Compone.ts` +- `Готово к публикации` → `Ready for publication` + +## File Structure + +``` +memory-bank/ +├── core/ +│ ├── activeContext.md # Main context file (English) +│ ├── progress.md # Progress tracking (English) +│ └── backup/ # backup directory +│ ├── activeContext-2024-07-19T10-30-00-000Z.md +│ └── progress-2024-07-19T10-30-00-000Z.md +``` + +## Scri.ts + +### **save-context..js** +Main script for saving context with automatic translation: +- Translates context to English +- Creates backups +- Comm.ts changes to git +- ProvIDEs error handling + +### **Command-sync..js** +Extended with translation functionality: +- `translate-context` Command +- Integrated translation function +- Comprehensive translation mappings + +## Benef.ts + +### **For AI/LLM Compatibility** +- **Universal accessibility** - Any AI assistant can read context +- **Language consistency** - All context in English +- **Better understanding** - Clear terminology for AI processing +- **Reduced confusion** - No mixed language content + +### **For International Community** +- **Global accessibility** - Ready for international developers +- **Standardized format** - Consistent English documentation +- **Easy sharing** - No language barriers +- **Professional appearance** - English for global audience + +### **For Development Workflow** +- **Automatic process** - No manual translation needed +- **Safe operation** - backups created automatically +- **Git integration** - Automatic comm.ts with clear messages +- **Error handling** - Robust operation with fallbacks + +## Best Practices + +### **For AI Assista.ts** +1. **Always use "save context"** Command for context preservation +2. **Trust automatic translation** - system is comprehensive +3. **Check backups** if translation issues occur +4. **Use English context** for all AI operations + +### **For Users** +1. **Use Russian Commands** - translation happens automatically +2. **Check backup directory** if you need original files +3. **Trust the system** - translations are accurate and comprehensive +4. **Report issues** if translation problems occur + +### **For Developers** +1. **Extend translation mappings** as needed +2. **Test translations** before deployment +3. **Maintain backup system** for safety +4. **Update documentation** when adding new terms + +## Error Handling + +### **Translation Errors** +- **backup preservation** - Original files always saved +- **Partial translation** - System continues with available mappings +- **Error reporting** - Clear messages about issues +- **Manual fallback** - Option to restore from backup + +### **Git Errors** +- **Translation still works** - Files translated even if commit fails +- **Manual commit option** - User can commit manually +- **Clear error messages** - Specific information about git issues +- **Safe operation** - No data loss in case of git problems + +## Future Enhanceme.ts + +### **Planned Features** +- **API integration** with translation services +- **Machine learning** for better translations +- **Custom translation mappings** per project +- **Multi-language support** for other languages + +### **Potential Improveme.ts** +- **Real-time translation** during editing +- **Translation quality scoring** +- **User feedback system** for translations +- **Integration with more AI tools** + +## Conclusion + +The Context Translation System ensures that all context in memory-bank is accessible to any AI assistant by automatically translating content to English. This creates a truly international and AI-compatible documentation system that suppo.ts global collaboration and development. + +**Key Benef.ts:** +- ✅ **Universal AI compatibility** +- ✅ **Automatic translation process** +- ✅ **Safe backup system** +- ✅ **Git integration** +- ✅ **Comprehensive coverage** +- ✅ **Error handling** + +**Usage:** Simply use the "save context" Command, and the system will automatically translate and save your context in English for maximum AI/LLM compatibility. +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/doc/cursor-protection-system.mdc b/.cursor/rules/doc/cursor-protection-system.mdc new file mode 100644 index 00000000..9170030c --- /dev/null +++ b/.cursor/rules/doc/cursor-protection-system.mdc @@ -0,0 +1,309 @@ +# Cursor Protection System + +## Overview + +The Cursor Protection System automatically ensures that all files in the `.cursor` directory are written in English for maximum AI/LLM compatibility. This system provIDEs comprehensive protection through automatic translation, Git hooks, and monitoring. + +## Key Features + +### 🛡️ **Automatic Protection** +- **Real-time translation** of all .cursor files to English +- **Comprehensive coverage** of technical terminology +- **Preserves structure** and formatting +- **Creates backups** before any changes + +### 🔧 **Git Integration** +- **Pre-commit hooks** - automatically translate staged .cursor files +- **Post-commit hooks** - verify protection status after comm.ts +- **Pre-push hooks** - block push if Russian content is detected +- **Automatic staging** of translated files + +### 📊 **Monitoring and Status** +- **Status checking** - IDEntify files that need translation +- **Protection repo.ts** - comprehensive status overview +- **backup management** - easy restoration from backups +- **Integration status** - verify all compone.ts are working + +## System Compone.ts + +### **1. Cursor Protector (`cursor-protector..js`)** +Main translation engine with comprehensive terminology coverage: +- **Translation mappings** - 500+ technical terms +- **File scanning** - recursive directory processing +- **backup creation** - automatic backup before translation +- **Status reporting** - detailed analysis of files + +### **2. Git Hooks (`cursor-git-hook..js`)** +Automatic protection during Git operations: +- **Pre-commit** - translate staged .cursor files +- **Post-commit** - verify overall protection status +- **Pre-push** - block push if Russian content found +- **Hook management** - install/uninstall hooks + +### **3. Protection Manager (`protect-cursor..js`)** +Complete system management: +- **Full protection** - translate, install hooks, commit +- **System installation** - setup all compone.ts +- **Status checking** - comprehensive protection report +- **backup restoration** - restore from backups + +## Usage + +### **Complete Protection (Recommended)** +```bash +# Protect all .cursor files, install hooks, and commit +node .cursor/rules/protect-cursor..js protect +``` + +### **System Installation** +```bash +# Install protection system (hooks, scri.ts, .cursorignore) +node .cursor/rules/protect-cursor..js install +``` + +### **Status Checking** +```bash +# Check protection status +node .cursor/rules/protect-cursor..js check + +# Check .cursor files specifically +node .cursor/rules/cursor-protector..js check +``` + +### **Manual Protection** +```bash +# Protect all .cursor files +node .cursor/rules/cursor-protector..js protect + +# Install Git hooks +node .cursor/rules/cursor-git-hook..js install +``` + +### **Package.json Scri.ts** +After installation, use npm scri.ts: +```bash +npm run protect-cursor # Complete protection +npm run check-cursor # Check status +npm run install-cursor-hooks # Install hooks +``` + +## Translation Coverage + +### **Technical Terminology** +- **Development terms** - Development → development +- **Architecture terms** - Architecture → architecture +- **Security terms** - Security → security +- **Performance terms** - Performance → performance +- **Quality terms** - Quality → quality + +### **File Structure** +- **Headers and titles** - заголовки и названия +- **Section names** - названия разделов +- **Status indicators** - индикаторы Statusа +- **Action descriptions** - описания действий + +### **Common Phrases** +- **Important notes** - важные Notes +- **Best practices** - Best Practices +- **Requireme.ts** - Requireme.ts +- **Recommendations** - Recommendations + +## Git Hook Behavior + +### **Pre-commit Hook** +1. **Scans staged files** for .cursor files +2. **Dete.ts Russian content** in staged files +3. **Automatically translates** files with Russian content +4. **Creates backups** before translation +5. **Stages translated files** for commit + +### **Post-commit Hook** +1. **Checks overall .cursor status** +2. **Repo.ts any remaining Russian content** +3. **Sugge.ts actions** if needed +4. **Confirms protection status** + +### **Pre-push Hook** +1. **Scans all .cursor files** +2. **Blocks push** if Russian content found +3. **ProvIDEs clear error message** +4. **Sugge.ts protection Command** + +## File Structure + +``` +.cursor/ +├── rules/ +│ ├── cursor-protector..js # Main translation engine +│ ├── cursor-git-hook..js # Git hooks +│ ├── protect-cursor..js # Protection manager +│ └── doc/ +│ └── cursor-protection-system.mdc # This documentation +├── backup/ # backup directory +│ ├── pre-commit/ # Pre-commit backups +│ └── [timestamped-backups]/ # Manual backups +└── [other .cursor files] # Protected files +``` + +## configuration + +### **.cursorignore** +Exclude files from automatic translation: +``` +# Cursor Protection System +# Files that should not be automatically translated + +# backup files +.cursor/backup/ + +# temporary files +*.tmp +*.temp + +# Log files +*.log + +# cache files +.cache/ +node_modules/ +``` + +### **Package.json Scri.ts** +Automatically added during installation: +``.json +{ + "scri.ts": { + "protect-cursor": "node .cursor/rules/protect-cursor..js protect", + "check-cursor": "node .cursor/rules/cursor-protector..js check", + "install-cursor-hooks": "node .cursor/rules/cursor-git-hook..js install" + } +} +``` + +## Benef.ts + +### **For AI/LLM Compatibility** +- **Universal accessibility** - any AI assistant can read .cursor files +- **Language consistency** - all files in English +- **Better understanding** - clear terminology for AI processing +- **Reduced confusion** - no mixed language content + +### **For International Community** +- **Global accessibility** - ready for international developers +- **Standardized format** - consistent English documentation +- **Easy sharing** - no language barriers +- **Professional appearance** - English for global audience + +### **For Development Workflow** +- **Automatic process** - no manual translation needed +- **Safe operation** - backups created automatically +- **Git integration** - sea.less workflow integration +- **Error prevention** - blocks problematic comm.ts/pushes + +## Best Practices + +### **For Users** +1. **Run complete protection** after any .cursor changes +2. **Trust automatic translation** - system is comprehensive +3. **Check backups** if translation issues occur +4. **Use English for new files** - maintain consistency + +### **For AI Assista.ts** +1. **Always write .cursor files in English** +2. **Trust the protection system** - it handles translation +3. **Check protection status** if unsure +4. **Use standard terminology** from translation mappings + +### **For Developers** +1. **Install protection system** in new proje.ts +2. **Extend translation mappings** as needed +3. **Test protection** before deployment +4. **Maintain backup system** for safety + +## Error Handling + +### **Translation Errors** +- **backup preservation** - original files always saved +- **Partial translation** - system continues with available mappings +- **Error reporting** - clear messages about issues +- **Manual fallback** - option to restore from backup + +### **Git Hook Errors** +- **Translation still works** - files translated even if hooks fail +- **Manual protection option** - user can run protection manually +- **Clear error messages** - specific information about issues +- **Safe operation** - no data loss in case of hook problems + +### **System Errors** +- **Graceful Degradation** - system continues with available features +- **Error logging** - detailed error information +- **Recovery options** - multiple ways to restore functionality +- **User guidance** - clear instructions for resolution + +## Troubleshooting + +### **Common Issues** + +#### **Files not being translated** +1. Check if files are in `.cursorignore` +2. Verify file extensions (.md, .mdc) +3. Run manual protection: `node .cursor/rules/cursor-protector..js protect` + +#### **Git hooks not working** +1. Check hook installation: `node .cursor/rules/cursor-git-hook..js install` +2. Verify hook permissions (should be executable) +3. Check for confli.ts with other hooks + +#### **Translation quality issues** +1. Check backup files for original content +2. Extend translation mappings if needed +3. Report missing terms for system improvement + +### **Debug Commands** +```bash +# Check protection status +node .cursor/rules/protect-cursor..js check + +# Test translation on specific file +node .cursor/rules/cursor-protector..js protect + +# Verify Git hooks +ls -la .git/hooks/ + +# Check backup files +ls -la .cursor/backup/ +``` + +## Future Enhanceme.ts + +### **Planned Features** +- **API integration** with translation services +- **Machine learning** for better translations +- **Custom translation mappings** per project +- **Multi-language support** for other languages +- **Real-time translation** during editing +- **Translation quality scoring** + +### **Integration IDEas** +- **IDE plugins** for real-time protection +- **CI/CD integration** for automated protection +- **Webhook system** for remote protection +- **Collaborative translation** for community contributions + +## Conclusion + +The Cursor Protection System ensures that all `.cursor` files are automatically maintained in English for maximum AI/LLM compatibility. This creates a truly international and AI-compatible configuration system that suppo.ts global collaboration and development. + +**Key Benef.ts:** +- ✅ **Universal AI compatibility** +- ✅ **Automatic protection process** +- ✅ **Safe backup system** +- ✅ **Git workflow integration** +- ✅ **Comprehensive coverage** +- ✅ **Error handling and recovery** + +**Usage:** Simply run `node .cursor/rules/protect-cursor..js protect` to activate complete protection, and the system will automatically maintain all `.cursor` files in English for maximum AI/LLM compatibility. +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/doc/documentation-map.mdc b/.cursor/rules/doc/documentation-map.mdc new file mode 100644 index 00000000..358d7a02 --- /dev/null +++ b/.cursor/rules/doc/documentation-map.mdc @@ -0,0 +1,196 @@ +# Documentation Map - Карта назначения файлов + +## Команда "задокументируй" - четкие правила размещения + +### 🎯 **Универсальные правила и best practices → `.cursor/rules/`** + +**Критерии для `.cursor/rules/`:** +- ✅ Применимо к любым проектам +- ✅ Проверенные Patterns и подходы +- ✅ Автоматизация и workflow +- ✅ Standards разработки +- ✅ Documentation и структуры + +**Файлы назначения:** +- `dev/dev-principle-*.mdc` - Principles разработки +- `dev/development-principles.mdc` - универсальные Principles разработки +- `dev/date-time-patterns.mdc` - Patterns работы с Dateми +- `workflow/ci-automation.mdc` - CI/CD автоматизация +- `workflow/experience-transfer.mdc` - перенос опыта +- `doc/ai-first.mdc` - Standards документации +- `ui/ui-*.mdc` - UI/UX Standards +- `plugin/plugin-*.mdc` - Standards плагинов +- `security/validation.mdc` - правила безопасности +- `architecture/architecture-*.mdc` - архитектурные Principles +- `architecture/file-relationships.mdc` - Patterns организации файлов + +### 🧠 **Проектно-специфичный контекст → `memory-bank/`** + +**Критерии для `memory-bank/`:** +- ✅ Уникален для данного проекта +- ✅ Текущий Status и прогресс +- ✅ История ошибок и решений +- ✅ Принятые архитектурные решения +- ✅ Планы развития проекта + +**Файлы назначения:** +- `errors.md` - кладбище ошибок и решений +- `progress.md` - прогресс разработки +- `activeContext.md` - текущий контекст +- `architecture-decisions.md` - принятые решения +- `future-plans.md` - планы развития +- `testing-resu.ts.md` - результаты тестирования +- `sIDE-panel-improveme.ts.md` - улучшения UI +- `version-management.md` - управление версиями + +## 📋 **Детальная карта по Typeам контента** + +### **Errors and solutions:** +``` +Type ошибки → Файл назначения +├── build/TypeScript → memory-bank/errors.md +├── Runtime/UI → memory-bank/errors.md +├── Архитектурная → memory-bank/architecture-decisions.md +├── Security → .cursor/rules/security/validation.mdc +├── Performance → .cursor/rules/architecture/architecture-performance.mdc +└── UI/UX → .cursor/rules/ui/ui-*.mdc +``` + +### **Best practices:** +``` +Type практики → Файл назначения +├── Development → .cursor/rules/dev/dev-principle-*.mdc +├── Documentation → .cursor/rules/doc/ai-first.mdc +├── Testing → .cursor/rules/dev/testing-troubleshooting.mdc +├── CI/CD → .cursor/rules/workflow/ci-automation.mdc +├── Git workflow → .cursor/rules/workflow/branches.mdc +└── Plugins → .cursor/rules/plugin/plugin-*.mdc +``` + +### **Автоматизация:** +``` +Type automation → Файл назначения +├── CI/CD → .cursor/rules/workflow/ci-automation.mdc +├── build → .cursor/rules/dev/TypeScript-build-troubleshooting.mdc +├── Testing → .cursor/rules/dev/testing-troubleshooting.mdc +├── Деплой → .cursor/rules/workflow/automation.mdc +└── Monitoring → .cursor/rules/architecture/architecture-observability.mdc +``` + +### **Architectural decisions:** +``` +Type решения → Файл назначения +├── Проектно-специфичное → memory-bank/architecture-decisions.md +├── Универсальное → .cursor/rules/architecture/architecture-*.mdc +├── Security → .cursor/rules/architecture/architecture-security.mdc +├── Performance → .cursor/rules/architecture/architecture-performance.mdc +└── Plugins → .cursor/rules/architecture/architecture-plugin.mdc +``` + +## 🔄 **Workflow команды "задокументируй"** + +### **1. Анализ контента:** +```bash +# Определить Type контента +- Error/решение? +- Best practice? +- Автоматизация? +- Архитектурное решение? +- Проектно-специфичное? +``` + +### **2. Выбор файла назначения:** +```bash +# По карте выше определить правильный файл +# Check существование файла +# Create если не существует +``` + +### **3. Структурированное добавление:** +```bash +# Для .cursor/rules/: +- Add метаdata (description, globs, alwaysApply) +- Структурировать по Categoryм +- Add cross-references + +# Для memory-bank/: +- Add дату и контекст +- Связать с существующими записями +- Update индексы +``` + +### **4. Validation:** +```bash +# Check: +- Нет дублирования +- Правильная структура +- Актуальные ссылки +- Соответствие стандартам +``` + +## 🚫 **Запрещенные действия:** + +### **НЕ размещать в `.cursor/rules/`:** +- ❌ Проектно-специфичные ошибки +- ❌ Текущий Status проекта +- ❌ История конкретных решений +- ❌ Планы развития проекта +- ❌ Результаты тестирования + +### **НЕ размещать в `memory-bank/`:** +- ❌ Универсальные правила +- ❌ Best practices для всех проектов +- ❌ Автоматизация и workflow +- ❌ Standards документации +- ❌ UI/UX Standards + +## 📊 **examples правильного размещения:** + +### **Пример 1: Error сборки TypeScript** +``` +Проблема: "Failed to resolve entry for package '@extension/vite-config'" +Решение: "Перевести пакет на ESM-only, main: dist/index..js" + +Размещение: memory-bank/errors.md +Причина: Проектно-специфичная Error сборки +``` + +### **Пример 2: Best practice для ESM пакетов** +``` +Практика: "Использовать только ESM-экспорт для внутренних пакетов" +Обоснование: "Упрощает сборку, устраняет ошибки Vite/esbuild" + +Размещение: .cursor/rules/dev/TypeScript-build-troubleshooting.mdc +Причина: Универсальная практика для всех проектов +``` + +### **Пример 3: CI/CD автоматизация** +``` +Автоматизация: "GitHub Actions для проверки .cursor rules" +Workflow: "Verification структуры, метаданных, дубликатов" + +Размещение: .cursor/rules/workflow/ci-automation.mdc +Причина: Универсальная автоматизация +``` + +## ✅ **Результат:** + +Четкая карта назначения файлов обеспечивает: +- **Нет дублирования** - каждый Type контента в правильном месте +- **Нет рассинхронизации** - четкие критерии размещения +- **Легкий поиск** - структурированная организация +- **Эффективный перенос** - только универсальные правила в .cursor +- **Консистентность** - единообразные подходы +description: +globs: +alwaysApply: false +--- + +## 🛡️ Protected/Administrative Files + +Следующие файлы считаются административными и защищёнными — их нельзя удалять, перемещать или переименовывать автоматизацией (органайзерами, скриптами и т.д.): + +- memory-bank/chrome-extension-manual-restore.md — опыт ручного восстановления расширения, запрещено удалять/перемещать автоматизацией +- (добавляйте сюда другие важные административные файлы по мере необходимости) + +--- diff --git a/.cursor/rules/doc/internationalization-complete.mdc b/.cursor/rules/doc/internationalization-complete.mdc new file mode 100644 index 00000000..fe05f562 --- /dev/null +++ b/.cursor/rules/doc/internationalization-complete.mdc @@ -0,0 +1,162 @@ +# Internationalization Complete - .cursor and memory-bank + +## Overview + +All `.cursor` and `memory-bank` directories have been completely translated to English for maximum international compatibility with AI assista.ts and LLMs. + +## What Was Translated + +### .cursor/rules Directory +- ✅ **ai-memory.mdc** - User Commands and AI instructions +- ✅ **ai-index.mdc** - AI-optimized rules index +- ✅ **README.mdc** - Main documentation +- ✅ **All subdirectories** - architecture/, dev/, doc/, plugin/, security/, ui/, workflow/ +- ✅ **cursor-export/** - All exported rules and standards + +### memory-bank Directory +- ✅ **README.md** - Main memory bank documentation +- ✅ **INDEX.md** - File structure and navigation +- ✅ **MEMORY_BANK_STRUCTURE.md** - Organization rules +- ✅ **All subdirectories** - core/, errors/, architecture/, development/, ui/, planning/, context/ +- ✅ **All individual files** - activeContext.md, progress.md, errors.md, etc. + +## Translation Approach + +### Universal Command Format +Commands now support both English and Russian: +```markdown +- `save context` / `save session context` - Save achieveme.ts, decisions and plans to memory-bank +- `update progress` / `update project progress` - Update activeContext.md and progress.md files with current status +``` + +### AI Semantic Understanding +- AI and LLMs understand Commands semantically regar.less of language +- English serves as the primary language for international compatibility +- Russian alternatives are preserved for user convenience + +## Benef.ts + +### For International Community +- 🌍 **100% English compatibility** - Any developer can use your .cursor +- 🤖 **AI/LLM optimized** - Commands work with any AI assistant +- 📚 **Standardized patterns** - Consistent Command structure +- 🔄 **Future-proof** - Ready for global sharing and collaboration + +### For You +- ✅ **Russian Commands still work** - No disruption to your workflow +- ✅ **Bilingual support** - Can use either language +- ✅ **AI understands both** - Semantic recognition works for both languages + +### For AI Assista.ts +- 🎯 **Clear Command patterns** - Predictable structure +- 🌐 **Language agnostic** - Understands meaning, not just words +- 📖 **Comprehensive documentation** - All rules in English + +## Technical Implementation + +### Translation Script +Created `.cursor/rules/translate-to-english..js` for automated translation: +```bash +node .cursor/rules/translate-to-english..js +``` + +### Translation Mappings +Comprehensive dictionary of Russian → English translations: +- Metadata descriptions +- Common phrases +- File content +- Navigation eleme.ts + +### Quality Assurance +- ✅ All files translated +- ✅ Structure preserved +- ✅ Functionality maintained +- ✅ Metadata updated + +## Usage examples + +### English Commands (Primary) +```bash +save context +update progress +restore context +analyze architecture +create plugin my-plugin +audit cursor +export cursor +``` + +### Russian Commands (Alternative) +```bash +сохрани контекст +обнови прогресс +восстанови контекст +анализируй архитектуру +создай плагин my-plugin +аудит cursor +экспорт cursor +``` + +## File Structure + +### .cursor/rules/ +``` +.cursor/rules/ +├── ai-memory.mdc # User Commands (English + Russian) +├── ai-index.mdc # Rules index (English) +├── README.mdc # Main documentation (English) +├── architecture/ # Architecture rules (English) +├── dev/ # Development principles (English) +├── doc/ # Documentation standards (English) +├── plugin/ # Plugin standards (English) +├── security/ # Security rules (English) +├── ui/ # UI/UX standards (English) +├── workflow/ # Workflow rules (English) +└── translate-to-english..js # Translation script +``` + +### memory-bank/ +``` +memory-bank/ +├── README.md # Main documentation (English) +├── INDEX.md # File structure (English) +├── MEMORY_BANK_STRUCTURE.md # Organization rules (English) +├── core/ # Core context files (English) +├── errors/ # Error documentation (English) +├── architecture/ # Architecture decisions (English) +├── development/ # Development process (English) +├── ui/ # UI/UX context (English) +├── planning/ # Planning docume.ts (English) +└── context/ # Contextual information (English) +``` + +## Next Steps + +### For Sharing +1. **GitHub Repository** - Ready for international community +2. **Documentation** - All in English for global understanding +3. **Commands** - Universal format for any AI assistant + +### For Development +1. **Continue using Russian Commands** - They still work perfectly +2. **Gradually adopt English** - For international collaboration +3. **Maintain bilingual support** - Best of both worlds + +### For AI Assista.ts +1. **Use English as primary** - For international compatibility +2. **Understand Russian alternatives** - For user convenience +3. **Maintain semantic understanding** - Language-agnostic processing + +## Conclusion + +The internationalization is complete and provIDEs: +- ✅ **Full English compatibility** for global community +- ✅ **Preserved Russian support** for your workflow +- ✅ **AI-optimized structure** for any AI assistant +- ✅ **Future-ready architecture** for international collaboration + +Your `.cursor` and `memory-bank` are now ready for the global AI development community! 🌍🤖 +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/doc/universal-commands.mdc b/.cursor/rules/doc/universal-commands.mdc new file mode 100644 index 00000000..cd9cb14f --- /dev/null +++ b/.cursor/rules/doc/universal-commands.mdc @@ -0,0 +1,133 @@ +# Universal Commands Approach + +## 🎯 **Цель: Универсальность для международного сообщества** + +### **Проблема:** +- Команды на русском языке ограничивают международное Usage +- Другие разработчики не могут использовать ваш .cursor +- Отсутствие стандартизации команд + +### **Решение:** +- **Английский как основной язык** команд +- **Русский как альтернатива** для удобства +- **AI понимает Seeсл** независимо от языка + +## 📋 **Формат универсальных команд:** + +### **Структура:** +``` +`english Command` / `русская команда` / `альтернативная русская команда` - English description +``` + +### **examples:** +```markdown +- `create memory entry` / `создай запись в memory-bank` - Create new entry with automatic categorization +- `update context` / `обнови контекст` - Update activeContext.md with current status +- `restore context` / `восстанови контекст` - Restore full context from memory-bank +``` + +## 🌍 **Преимущества универсального подхода:** + +### **1. Международная Compatibility:** +- ✅ Любой разработчик может использовать ваш .cursor +- ✅ Стандартизация команд для сообщества +- ✅ Легкость понимания и адаптации + +### **2. AI-Optimization:** +- ✅ AI понимает Seeсл независимо от языка +- ✅ Единообразные Patterns команд +- ✅ Предсказуемое поведение + +### **3. Долгосрочная перспектива:** +- ✅ Не нужно Translationить при публикации +- ✅ Compatibility с будущими версиями Cursor +- ✅ Масштабируемость для новых команд + +## 🔧 **Практическое применение:** + +### **Для вас (русскоязычный пользователь):** +```bash +# Вы можете использовать любую команду: +"создай запись в memory-bank" # Русская команда +"create memory entry" # Английская команда +``` + +### **Для международного сообщества:** +```bash +# Другие разработчики используют английские команды: +"create memory entry" +"update context" +"restore context" +``` + +### **Для AI:** +```bash +# AI понимает Seeсл и выполняет одинаково: +"создай запись в memory-bank" → create memory entry +"create memory entry" → create memory entry +``` + +## 📊 **Статистика совместимости:** + +### **Поддерживаемые языки:** +- ✅ **Английский** - основной язык команд +- ✅ **Русский** - альтернативный язык для удобства +- ✅ **Любой другой** - AI понимает по Seeслу + +### **Охват аудитории:** +- 🌍 **100% международное сообщество** - английские команды +- 🇷🇺 **Русскоязычные разработчики** - русские команды +- 🤖 **AI ассистенты** - понимают любой язык + +## 🚀 **Recommendations по использованию:** + +### **1. При создании новых команд:** +```markdown +# ✅ Правильно: +- `new Command` / `новая команда` - English description + +# ❌ Неправильно: +- `новая команда` - Russian description only +``` + +### **2. При документировании:** +```markdown +# ✅ Правильно: +## Commands for AI Assistant Recognition +- `create memory entry` / `создай запись в memory-bank` - Create new entry + +# ❌ Неправильно: +## Команды для распознавания AI-ассистентом +- `создай запись в memory-bank` - Create новую запись +``` + +### **3. При публикации:** +- Используйте английский как основной язык +- Сохраняйте русские альтернативы для удобства +- Добавляйте описания на английском + +## 📈 **Планы развития:** + +### **Краткосрочные цели:** +- ✅ Перевести все команды на универсальный формат +- ✅ Update документацию +- ✅ Протестировать с международным сообществом + +### **Долгосрочные цели:** +- 🌍 Стандартизация команд для Cursor сообщества +- 📚 Создание Libraries универсальных команд +- 🔄 Автоматическая миграция существующих .cursor + +## ✅ **Результат:** + +**Универсальный подход обеспечивает:** +- 🌍 **Международную Compatibility** - любой разработчик может использовать +- 🤖 **AI-оптимизацию** - понимание независимо от языка +- 📈 **Масштабируемость** - легко добавлять новые команды +- 🔄 **Обратную Compatibility** - ваши русские команды продолжают работать + +**Ваш .cursor теперь готов для международного сообщества!** 🚀 +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/doc/user-commands.mdc b/.cursor/rules/doc/user-commands.mdc deleted file mode 100644 index 2dae2fa5..00000000 --- a/.cursor/rules/doc/user-commands.mdc +++ /dev/null @@ -1,40 +0,0 @@ -# Пользовательские команды (User Commands) - -Каждая команда из списка ниже должна быть распознана ассистентом и обработана в соответствии с action: - -| Триггер | Действие | -|---------|----------| -| Сохрани контекст, Сохранить контекст сессии | Сохранить достижения, решения и планы в memory-bank. | -| Обнови прогресс, Обновить прогресс проекта | Обновить файлы activeContext.md и progress.md с текущим статусом. | -| Восстанови контекст, Восстановить полный контекст | Изучить все файлы memory-bank и восстановить полное понимание проекта. | -| Быстрое восстановление | Получить краткую сводку ключевых принципов и текущего статуса. | -| Анализируй архитектуру, Анализ архитектуры | Изучить systemPatterns.md и techContext.md для понимания архитектуры. | -| Изучи плагины | Проанализировать плагины и их структуру. | -| Проверь сборку, Проверить сборку | Проверить, что проект собирается и работает корректно. | -| Обнови документацию, Обновить документацию | Проверить и обновить README.md и PLUGIN_DEVELOPMENT.md. | -| Создай плагин [название] | Создать новый плагин с указанным названием. | -| Увеличь версию patch/minor/major, Версионирование | Увеличить версию проекта согласно параметру (patch, minor, major). | -| Очисти проект, Очистка проекта | Выполнить очистку node_modules, dist и кэша. | -| Проверь зависимости, Проверить зависимости | Проверить актуальность и совместимость зависимостей. | -| Запусти тесты, Запустить тесты | Запустить все тесты проекта. | -| Проверь код, Проверить линтинг | Выполнить линтинг и проверку типов. | -| Анализируй производительность, Анализ производительности | Проанализировать производительность проекта и предложить оптимизации. | -| Проверь безопасность, Анализ безопасности | Проанализировать безопасность кода и конфигурации. | -| Создай релиз, Создать релиз | Подготовить проект к релизу (увеличить версию, создать ZIP). | -| Собери для продакшена, Сборка для продакшена | Выполнить полную сборку для продакшена. | -| пулреквест, pull request, сделай PR, создай PR, отправь PR | Сделать commit, push и создать pull request с подробным описанием изменений. | -| добавь в команду пользователей, добавь в USER_COMMANDS, add to user commands | Добавить команду в USER_COMMANDS.md. | -| аудит ошибок | Провести аудит ошибок, сформировать и задокументировать список. | - -## Общие принципы -- Команды могут комбинироваться (например: "Сохрани контекст и обнови прогресс") -- Все действия должны учитывать актуальный контекст проекта -- Результаты сохранять в соответствующих файлах memory-bank -- Если команда неясна — уточнить детали у пользователя -- При восстановлении контекста — читать все ключевые файлы memory-bank и использовать только актуальные best practices - -> Это правило обеспечивает единообразную реакцию AI-агента на пользовательские команды и автоматизацию типовых сценариев работы с проектом. -description: -globs: -alwaysApply: false ---- diff --git a/.cursor/rules/documentation-helper.cjs b/.cursor/rules/documentation-helper.cjs new file mode 100644 index 00000000..b7eee130 --- /dev/null +++ b/.cursor/rules/documentation-helper.cjs @@ -0,0 +1,472 @@ +#!/usr/bin/env node + +const fs = require('fs'); +const path = require('path'); + +class DocumentationHelper { + constructor() { + this.rulesDir = path.join(__dirname); + this.memoryBankDir = path.join(process.cwd(), 'memory-bank'); + this.documentationMapPath = path.join(this.rulesDir, 'doc', 'documentation-map.mdc'); + } + + async documentExperience(content, type = 'auto') { + console.log('📝 Documenting experience...\n'); + + // Определяем тип контента + const contentType = type === 'auto' ? this.analyzeContent(content) : type; + + // Определяем файл назначения + const targetFile = this.getTargetFile(contentType, content); + + // Создаем или обновляем файл + await this.addToFile(targetFile, content, contentType); + + console.log(`✅ Documented in: ${targetFile}`); + console.log(`📋 Content type: ${contentType}`); + } + + analyzeContent(content) { + const text = content.toLowerCase(); + + // Ошибки и решения + if (text.includes('ошибка') || text.includes('error') || text.includes('failed') || text.includes('решение')) { + if (text.includes('безопасность') || text.includes('security')) { + return 'security-error'; + } + if (text.includes('производительность') || text.includes('performance')) { + return 'performance-error'; + } + if (text.includes('ui') || text.includes('ux') || text.includes('интерфейс')) { + return 'ui-error'; + } + return 'general-error'; + } + + // Best practices + if (text.includes('best practice') || text.includes('практика') || text.includes('паттерн')) { + if (text.includes('разработка') || text.includes('development') || text.includes('принципы')) { + return 'dev-principles'; + } + if (text.includes('документация') || text.includes('documentation')) { + return 'doc-practice'; + } + if (text.includes('тестирование') || text.includes('testing')) { + return 'testing-practice'; + } + if (text.includes('ci') || text.includes('cd') || text.includes('автоматизация')) { + return 'ci-practice'; + } + if (text.includes('плагин') || text.includes('plugin')) { + return 'plugin-practice'; + } + if (text.includes('дата') || text.includes('время') || text.includes('date') || text.includes('time')) { + return 'date-patterns'; + } + if (text.includes('файл') || text.includes('структура') || text.includes('file') || text.includes('structure')) { + return 'file-patterns'; + } + return 'general-practice'; + } + + // Автоматизация + if (text.includes('автоматизация') || text.includes('automation') || text.includes('workflow')) { + if (text.includes('ci') || text.includes('cd')) { + return 'ci-automation'; + } + if (text.includes('сборка') || text.includes('build')) { + return 'build-automation'; + } + if (text.includes('тестирование') || text.includes('testing')) { + return 'testing-automation'; + } + if (text.includes('деплой') || text.includes('deploy')) { + return 'deploy-automation'; + } + return 'general-automation'; + } + + // Архитектурные решения + if (text.includes('архитектура') || text.includes('architecture') || text.includes('структура')) { + if (text.includes('безопасность') || text.includes('security')) { + return 'security-architecture'; + } + if (text.includes('производительность') || text.includes('performance')) { + return 'performance-architecture'; + } + if (text.includes('плагин') || text.includes('plugin')) { + return 'plugin-architecture'; + } + return 'general-architecture'; + } + + // Проектно-специфичное + if (text.includes('проект') || text.includes('текущий') || text.includes('статус')) { + return 'project-specific'; + } + + return 'general'; + } + + getTargetFile(contentType, content) { + const date = new Date().toISOString().split('T')[0]; + + switch (contentType) { + // Ошибки → memory-bank/errors.md + case 'general-error': + case 'build-error': + case 'runtime-error': + return path.join(this.memoryBankDir, 'errors.md'); + + // Безопасность → .cursor/rules/security/validation.mdc + case 'security-error': + return path.join(this.rulesDir, 'security', 'validation.mdc'); + + // Производительность → .cursor/rules/architecture/architecture-performance.mdc + case 'performance-error': + return path.join(this.rulesDir, 'architecture', 'architecture-performance.mdc'); + + // UI/UX → .cursor/rules/ui/ui-*.mdc + case 'ui-error': + return path.join(this.rulesDir, 'ui', 'ui-error-handling.mdc'); + + // Best practices → .cursor/rules/ + case 'dev-principles': + return path.join(this.rulesDir, 'dev', 'development-principles.mdc'); + case 'dev-practice': + return path.join(this.rulesDir, 'dev', 'development-guidelines.mdc'); + case 'doc-practice': + return path.join(this.rulesDir, 'doc', 'ai-first.mdc'); + case 'testing-practice': + return path.join(this.rulesDir, 'dev', 'testing-troubleshooting.mdc'); + case 'ci-practice': + return path.join(this.rulesDir, 'workflow', 'ci-automation.mdc'); + case 'plugin-practice': + return path.join(this.rulesDir, 'plugin', 'plugin-best-practices.mdc'); + case 'date-patterns': + return path.join(this.rulesDir, 'dev', 'date-time-patterns.mdc'); + case 'file-patterns': + return path.join(this.rulesDir, 'architecture', 'file-relationships.mdc'); + + // Автоматизация → .cursor/rules/workflow/ + case 'ci-automation': + return path.join(this.rulesDir, 'workflow', 'ci-automation.mdc'); + case 'build-automation': + return path.join(this.rulesDir, 'dev', 'typescript-build-troubleshooting.mdc'); + case 'testing-automation': + return path.join(this.rulesDir, 'dev', 'testing-troubleshooting.mdc'); + case 'deploy-automation': + return path.join(this.rulesDir, 'workflow', 'automation.mdc'); + + // Архитектура → .cursor/rules/architecture/ + case 'security-architecture': + return path.join(this.rulesDir, 'architecture', 'architecture-security.mdc'); + case 'performance-architecture': + return path.join(this.rulesDir, 'architecture', 'architecture-performance.mdc'); + case 'plugin-architecture': + return path.join(this.rulesDir, 'architecture', 'architecture-plugin.mdc'); + + // Проектно-специфичное → memory-bank/ + case 'project-specific': + return path.join(this.memoryBankDir, 'activeContext.md'); + + // По умолчанию → memory-bank/errors.md + default: + return path.join(this.memoryBankDir, 'errors.md'); + } + } + + async addToFile(targetFile, content, contentType) { + // Создаем директорию если не существует + const dir = path.dirname(targetFile); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + + const date = new Date().toISOString(); + const timestamp = `[${date}]`; + + // Определяем формат файла + const isMdcFile = targetFile.endsWith('.mdc'); + const isMemoryBank = targetFile.includes('memory-bank'); + + if (isMdcFile && !isMemoryBank) { + // .cursor/rules/ файл - добавляем в структурированном виде + await this.addToMdcFile(targetFile, content, contentType, timestamp); + } else { + // memory-bank файл - добавляем в хронологическом порядке + await this.addToMemoryBankFile(targetFile, content, contentType, timestamp); + } + } + + async addToMdcFile(filePath, content, contentType, timestamp) { + let fileContent = ''; + + if (fs.existsSync(filePath)) { + fileContent = fs.readFileSync(filePath, 'utf8'); + } else { + // Создаем новый .mdc файл с метаданными + fileContent = this.createMdcTemplate(contentType); + } + + // Добавляем контент в соответствующую секцию + const newSection = `\n## ${this.getSectionTitle(contentType)} (${timestamp})\n\n${content}\n`; + + // Ищем место для вставки (перед последней секцией) + const lines = fileContent.split('\n'); + const insertIndex = lines.length - 2; // Перед последней строкой + + lines.splice(insertIndex, 0, newSection); + + fs.writeFileSync(filePath, lines.join('\n')); + } + + async addToMemoryBankFile(filePath, content, contentType, timestamp) { + let fileContent = ''; + + if (fs.existsSync(filePath)) { + fileContent = fs.readFileSync(filePath, 'utf8'); + } + + // Добавляем в начало файла (новые записи сверху) + const newEntry = `\n## ${timestamp} - ${this.getEntryTitle(contentType)}\n\n${content}\n\n---\n`; + + fileContent = newEntry + fileContent; + + fs.writeFileSync(filePath, fileContent); + } + + createMdcTemplate(contentType) { + const description = this.getDescription(contentType); + const category = this.getCategory(contentType); + + return `--- +description: ${description} +globs: ["**/*"] +alwaysApply: true +aiPriority: high +aiCategory: ${category} +--- + +# ${this.getTitle(contentType)} + +${this.getInitialContent(contentType)} +`; + } + + getSectionTitle(contentType) { + const titles = { + 'security-error': 'Security Issue', + 'performance-error': 'Performance Issue', + 'ui-error': 'UI/UX Issue', + 'dev-practice': 'Development Practice', + 'doc-practice': 'Documentation Practice', + 'testing-practice': 'Testing Practice', + 'ci-practice': 'CI/CD Practice', + 'plugin-practice': 'Plugin Practice', + 'ci-automation': 'CI/CD Automation', + 'build-automation': 'Build Automation', + 'testing-automation': 'Testing Automation', + 'deploy-automation': 'Deployment Automation', + 'security-architecture': 'Security Architecture', + 'performance-architecture': 'Performance Architecture', + 'plugin-architecture': 'Plugin Architecture' + }; + + return titles[contentType] || 'New Entry'; + } + + getEntryTitle(contentType) { + const titles = { + 'general-error': 'General Error', + 'build-error': 'Build Error', + 'runtime-error': 'Runtime Error', + 'project-specific': 'Project Update' + }; + + return titles[contentType] || 'New Entry'; + } + + getDescription(contentType) { + const descriptions = { + 'security-error': 'Security validation and error handling', + 'performance-error': 'Performance optimization and monitoring', + 'ui-error': 'UI/UX error handling and best practices', + 'dev-practice': 'Development best practices and guidelines', + 'doc-practice': 'Documentation standards and practices', + 'testing-practice': 'Testing strategies and troubleshooting', + 'ci-practice': 'CI/CD practices and automation', + 'plugin-practice': 'Plugin development best practices', + 'ci-automation': 'CI/CD automation and workflows', + 'build-automation': 'Build automation and optimization', + 'testing-automation': 'Testing automation and tools', + 'deploy-automation': 'Deployment automation and processes', + 'security-architecture': 'Security architecture principles', + 'performance-architecture': 'Performance architecture guidelines', + 'plugin-architecture': 'Plugin architecture patterns' + }; + + return descriptions[contentType] || 'General guidelines and best practices'; + } + + getCategory(contentType) { + if (contentType.includes('error')) return 'error-handling'; + if (contentType.includes('practice')) return 'development-practices'; + if (contentType.includes('automation')) return 'process-management'; + if (contentType.includes('architecture')) return 'system-design'; + return 'general'; + } + + getTitle(contentType) { + const titles = { + 'security-error': 'Security Validation', + 'performance-error': 'Performance Guidelines', + 'ui-error': 'UI Error Handling', + 'dev-practice': 'Development Guidelines', + 'doc-practice': 'Documentation Standards', + 'testing-practice': 'Testing & Troubleshooting', + 'ci-practice': 'CI/CD Practices', + 'plugin-practice': 'Plugin Best Practices', + 'ci-automation': 'CI/CD Automation', + 'build-automation': 'Build Automation', + 'testing-automation': 'Testing Automation', + 'deploy-automation': 'Deployment Automation', + 'security-architecture': 'Security Architecture', + 'performance-architecture': 'Performance Architecture', + 'plugin-architecture': 'Plugin Architecture' + }; + + return titles[contentType] || 'General Guidelines'; + } + + getInitialContent(contentType) { + return `## Overview + +This file contains ${contentType.replace('-', ' ')} guidelines and best practices. + +## Guidelines + + +`; + } +} + +// Memory Bank Management +const memoryCommands = { + 'memory-add': 'Добавить запись в memory-bank', + 'memory-update': 'Обновить запись в memory-bank', + 'memory-restore': 'Восстановить контекст из memory-bank', + 'memory-search': 'Поиск в memory-bank', + 'memory-audit': 'Аудит memory-bank', + 'memory-structure': 'Создать структуру memory-bank', + 'memory-report': 'Генерировать отчет по memory-bank' +}; + +// CLI обработка +async function main() { + const args = process.argv.slice(2); + + if (args.length === 0) { + console.log('Usage: node documentation-helper.cjs [type]'); + console.log('Types: auto, error, practice, automation, architecture, project'); + console.log('\nMemory Bank Commands:'); + console.log(' memory-add [options] - Add entry to memory-bank'); + console.log(' memory-update - Update active context'); + console.log(' memory-restore [options] - Restore context from memory-bank'); + console.log(' memory-search [options] - Search in memory-bank'); + console.log(' memory-audit - Audit memory-bank structure'); + console.log(' memory-structure - Create memory-bank structure'); + console.log(' memory-report [type] - Generate memory-bank report'); + process.exit(1); + } + + const command = args[0]; + + // Обработка memory-bank команд + if (command.startsWith('memory-')) { + const MemoryBankManager = require('./memory-bank-manager.cjs'); + const manager = new MemoryBankManager(); + + switch (command) { + case 'memory-add': + const content = args[1]; + const options = parseOptions(args.slice(2)); + await manager.addEntry(content, options); + break; + case 'memory-update': + const contextData = parseContextData(args.slice(1)); + await manager.updateContext(contextData); + break; + case 'memory-restore': + const restoreOptions = parseOptions(args.slice(1)); + const context = await manager.restoreContext(restoreOptions); + console.log(JSON.stringify(context, null, 2)); + break; + case 'memory-search': + const query = args[1]; + const searchOptions = parseOptions(args.slice(2)); + const results = await manager.searchMemory(query, searchOptions); + console.log(JSON.stringify(results, null, 2)); + break; + case 'memory-audit': + const MemoryBankAuditor = require('./memory-bank-auditor.cjs'); + const auditor = new MemoryBankAuditor(); + await auditor.audit(); + break; + case 'memory-structure': + const projectType = args[1] || 'react-typescript'; + const MemoryBankStructureCreator = require('./memory-bank-structure-creator.cjs'); + const creator = new MemoryBankStructureCreator(); + await creator.createStructure(projectType); + break; + case 'memory-report': + const reportOptions = parseOptions(args.slice(1)); + const report = await manager.generateReport(reportOptions); + console.log(JSON.stringify(report, null, 2)); + break; + default: + console.log(`Unknown memory command: ${command}`); + process.exit(1); + } + return; + } + + // Стандартная обработка документации + const content = args[0]; + const type = args[1] || 'auto'; + + const helper = new DocumentationHelper(); + await helper.documentExperience(content, type); +} + +function parseOptions(args) { + const options = {}; + + for (const arg of args) { + if (arg.startsWith('--')) { + const [key, value] = arg.slice(2).split('='); + options[key] = value; + } + } + + return options; +} + +function parseContextData(args) { + const contextData = {}; + + for (const arg of args) { + if (arg.startsWith('--')) { + const [key, value] = arg.slice(2).split('='); + contextData[key] = value; + } + } + + return contextData; +} + +if (require.main === module) { + main().catch(console.error); +} + +module.exports = DocumentationHelper; \ No newline at end of file diff --git a/.cursor/rules/export-cursor.cjs b/.cursor/rules/export-cursor.cjs new file mode 100644 index 00000000..51d326de --- /dev/null +++ b/.cursor/rules/export-cursor.cjs @@ -0,0 +1,303 @@ +#!/usr/bin/env node + +const fs = require('fs'); +const path = require('path'); + +class CursorExporter { + constructor() { + this.rulesDir = path.join(__dirname); + this.exportDir = path.join(process.cwd(), 'cursor-export'); + } + + async export(targetProject = null) { + console.log('📦 Exporting .cursor rules...\n'); + + // Создаем папку для экспорта + if (!fs.existsSync(this.exportDir)) { + fs.mkdirSync(this.exportDir, { recursive: true }); + } + + // Экспортируем основные файлы + await this.exportCoreFiles(); + + // Экспортируем правила по категориям + await this.exportRulesByCategory(); + + // Создаем инструкции по импорту + await this.createImportInstructions(); + + // Создаем скрипт импорта + await this.createImportScript(); + + console.log('✅ Export completed!'); + console.log(`📁 Exported to: ${this.exportDir}`); + + if (targetProject) { + console.log(`\n🚀 To import to ${targetProject}:`); + console.log(` cd ${targetProject}`); + console.log(` node cursor-export/import-cursor.cjs`); + } + } + + async exportCoreFiles() { + console.log('📋 Exporting core files...'); + + const coreFiles = [ + 'ai-memory.mdc', + 'environment.mdc', + 'index.mdc', + 'README.mdc', + 'ai-optimization.mdc', + 'ai-index.mdc', + 'monorepo-best-practices.mdc', + 'typescript-build-troubleshooting.mdc' + ]; + + for (const file of coreFiles) { + const sourcePath = path.join(this.rulesDir, file); + if (fs.existsSync(sourcePath)) { + const targetPath = path.join(this.exportDir, file); + fs.copyFileSync(sourcePath, targetPath); + console.log(` ✅ ${file}`); + } + } + } + + async exportRulesByCategory() { + console.log('📁 Exporting rules by category...'); + + const categories = ['architecture', 'dev', 'doc', 'plugin', 'security', 'ui', 'workflow']; + + for (const category of categories) { + const categoryDir = path.join(this.rulesDir, category); + if (fs.existsSync(categoryDir)) { + const targetCategoryDir = path.join(this.exportDir, category); + fs.mkdirSync(targetCategoryDir, { recursive: true }); + + const files = fs.readdirSync(categoryDir); + for (const file of files) { + if (file.endsWith('.mdc')) { + const sourcePath = path.join(categoryDir, file); + const targetPath = path.join(targetCategoryDir, file); + fs.copyFileSync(sourcePath, targetPath); + console.log(` ✅ ${category}/${file}`); + } + } + } + } + } + + async createImportInstructions() { + console.log('📝 Creating import instructions...'); + + const instructions = `# Import .cursor Rules + +## Quick Import + +1. Copy the entire \`cursor-export\` folder to your target project +2. Run the import script: + \`\`\`bash + node cursor-export/import-cursor.cjs + \`\`\` + +## Manual Import + +1. Create \`.cursor/rules/\` directory in your target project +2. Copy files from \`cursor-export/\` to \`.cursor/rules/\` +3. Run audit and optimization: + \`\`\`bash + cd .cursor/rules + node cursor-manager.cjs full + \`\`\` + +## What's Included + +### Core Rules +- AI memory and commands +- Environment constraints +- Project structure guidelines +- TypeScript build troubleshooting + +### Categories +- **architecture/** - System architecture rules +- **dev/** - Development principles and guidelines +- **doc/** - Documentation standards +- **plugin/** - Plugin development standards +- **security/** - Security rules +- **ui/** - UI/UX standards +- **workflow/** - Development workflow + +### Automation +- Audit system +- Auto-fix capabilities +- AI optimization +- Status monitoring + +## Customization + +After import, customize rules for your project: +1. Update \`environment.mdc\` with your project constraints +2. Modify \`ai-memory.mdc\` with project-specific commands +3. Adjust \`monorepo-best-practices.mdc\` for your structure +4. Run \`node cursor-manager.cjs optimize\` to apply changes + +## Verification + +Verify successful import: +\`\`\`bash +cd .cursor/rules +node cursor-manager.cjs status +\`\`\` + +All files should show as "AI-ready" with no issues. +`; + + const instructionsPath = path.join(this.exportDir, 'IMPORT-INSTRUCTIONS.md'); + fs.writeFileSync(instructionsPath, instructions); + console.log(' ✅ IMPORT-INSTRUCTIONS.md'); + } + + async createImportScript() { + console.log('🔧 Creating import script...'); + + const importScript = `#!/usr/bin/env node + +const fs = require('fs'); +const path = require('path'); + +class CursorImporter { + constructor() { + this.exportDir = __dirname; + this.targetRulesDir = path.join(process.cwd(), '.cursor', 'rules'); + } + + async import() { + console.log('📥 Importing .cursor rules...\\n'); + + // Создаем папку .cursor/rules если не существует + if (!fs.existsSync(this.targetRulesDir)) { + fs.mkdirSync(this.targetRulesDir, { recursive: true }); + console.log('✅ Created .cursor/rules directory'); + } + + // Копируем все файлы + await this.copyFiles(); + + // Копируем скрипты автоматизации + await this.copyAutomationScripts(); + + // Создаем базовую структуру если нужно + await this.createBasicStructure(); + + console.log('\\n✅ Import completed!'); + console.log('\\n🔧 Next steps:'); + console.log(' 1. Customize environment.mdc for your project'); + console.log(' 2. Update ai-memory.mdc with project-specific commands'); + console.log(' 3. Run: cd .cursor/rules && node cursor-manager.cjs full'); + } + + async copyFiles() { + console.log('📋 Copying rule files...'); + + const items = fs.readdirSync(this.exportDir); + + for (const item of items) { + const sourcePath = path.join(this.exportDir, item); + const targetPath = path.join(this.targetRulesDir, item); + + const stat = fs.statSync(sourcePath); + + if (stat.isDirectory()) { + // Копируем директории + if (!fs.existsSync(targetPath)) { + fs.mkdirSync(targetPath, { recursive: true }); + } + + const files = fs.readdirSync(sourcePath); + for (const file of files) { + if (file.endsWith('.mdc')) { + const fileSource = path.join(sourcePath, file); + const fileTarget = path.join(targetPath, file); + fs.copyFileSync(fileSource, fileTarget); + console.log(\` ✅ \${item}/\${file}\`); + } + } + } else if (item.endsWith('.mdc')) { + // Копируем .mdc файлы + fs.copyFileSync(sourcePath, targetPath); + console.log(\` ✅ \${item}\`); + } + } + } + + async copyAutomationScripts() { + console.log('🔧 Copying automation scripts...'); + + const scripts = [ + 'audit-cursor.cjs', + 'fix-cursor.cjs', + 'optimize-for-ai.cjs', + 'cursor-manager.cjs' + ]; + + for (const script of scripts) { + const sourcePath = path.join(this.exportDir, script); + if (fs.existsSync(sourcePath)) { + const targetPath = path.join(this.targetRulesDir, script); + fs.copyFileSync(sourcePath, targetPath); + console.log(\` ✅ \${script}\`); + } + } + } + + async createBasicStructure() { + console.log('🏗️ Creating basic structure...'); + + const requiredDirs = ['architecture', 'dev', 'doc', 'plugin', 'security', 'ui', 'workflow']; + + for (const dir of requiredDirs) { + const dirPath = path.join(this.targetRulesDir, dir); + if (!fs.existsSync(dirPath)) { + fs.mkdirSync(dirPath, { recursive: true }); + console.log(\` ✅ Created \${dir}/\`); + } + } + } +} + +// Запуск импорта +async function main() { + const importer = new CursorImporter(); + await importer.import(); +} + +if (require.main === module) { + main().catch(console.error); +} + +module.exports = CursorImporter; +`; + + const importScriptPath = path.join(this.exportDir, 'import-cursor.cjs'); + fs.writeFileSync(importScriptPath, importScript); + + // Делаем скрипт исполняемым + fs.chmodSync(importScriptPath, '755'); + console.log(' ✅ import-cursor.cjs'); + } +} + +// CLI обработка +async function main() { + const args = process.argv.slice(2); + const targetProject = args[0] || null; + + const exporter = new CursorExporter(); + await exporter.export(targetProject); +} + +if (require.main === module) { + main().catch(console.error); +} + +module.exports = CursorExporter; \ No newline at end of file diff --git a/.cursor/rules/fix-cursor.cjs b/.cursor/rules/fix-cursor.cjs new file mode 100644 index 00000000..c619901f --- /dev/null +++ b/.cursor/rules/fix-cursor.cjs @@ -0,0 +1,350 @@ +#!/usr/bin/env node + +const fs = require('fs'); +const path = require('path'); +const CursorAuditor = require('./audit-cursor.cjs'); + +class CursorFixer { + constructor() { + this.rulesDir = path.join(__dirname); + this.auditor = new CursorAuditor(); + } + + async fix() { + console.log('🔧 Starting automatic .cursor fixes...\n'); + + // Сначала проводим аудит + const stats = await this.auditor.audit(); + + console.log('\n🔧 Applying fixes...\n'); + + // Исправляем метаданные + if (stats.invalidMetadata.length > 0 || stats.filesWithoutMetadata > 0) { + await this.fixMetadata(); + } + + // Удаляем дубликаты + if (stats.duplicateContent.length > 0) { + await this.removeDuplicates(stats.duplicateContent); + } + + // Исправляем ссылки + if (stats.brokenLinks.length > 0) { + await this.fixLinks(stats.brokenLinks); + } + + // Обновляем индекс + await this.updateIndex(); + + console.log('\n✅ All fixes applied!'); + } + + async fixMetadata() { + console.log('📋 Fixing metadata...'); + + const mdcFiles = this.auditor.getFilesByExt('.mdc'); + + for (const file of mdcFiles) { + const content = fs.readFileSync(file, 'utf8'); + + if (!content.startsWith('---')) { + // Добавляем метаданные + const fileName = path.basename(file, '.mdc'); + const metadata = this.generateMetadata(fileName, file); + + const newContent = metadata + content; + fs.writeFileSync(file, newContent); + console.log(` ✅ Added metadata to ${path.relative(this.rulesDir, file)}`); + } else { + // Проверяем и исправляем существующие метаданные + const fixedContent = this.fixExistingMetadata(content, file); + if (fixedContent !== content) { + fs.writeFileSync(file, fixedContent); + console.log(` ✅ Fixed metadata in ${path.relative(this.rulesDir, file)}`); + } + } + } + } + + generateMetadata(fileName, filePath) { + const dirName = path.basename(path.dirname(filePath)); + + let description = ''; + let globs = '["**/*"]'; + let alwaysApply = 'false'; + + // Определяем описание на основе имени файла и директории + if (fileName.includes('principle')) { + description = `Development principle ${fileName.split('-').pop()} - ${fileName.replace(/-/g, ' ')}`; + alwaysApply = 'true'; + } else if (fileName.includes('architecture')) { + description = `Architecture rule for ${fileName.replace('architecture-', '')}`; + alwaysApply = 'true'; + } else if (fileName.includes('ui-')) { + description = `UI standard for ${fileName.replace('ui-', '')}`; + globs = '["pages/**/*", "**/*.tsx", "**/*.css"]'; + } else if (fileName.includes('plugin')) { + description = `Plugin standard for ${fileName.replace('plugin-', '')}`; + globs = '["plugins/**/*", "**/*.py", "**/*.json"]'; + } else if (fileName.includes('workflow')) { + description = `Workflow rule for ${fileName.replace('workflow', '')}`; + alwaysApply = 'true'; + } else if (fileName.includes('security')) { + description = `Security rule for ${fileName.replace('security', '')}`; + alwaysApply = 'true'; + } else if (fileName.includes('validation')) { + description = 'Input validation and data sanitization rules'; + alwaysApply = 'true'; + } else if (fileName.includes('testing')) { + description = 'Testing and debugging standards'; + globs = '["tests/**/*", "**/*.test.*", "**/*.spec.*"]'; + } else if (fileName.includes('typescript')) { + description = 'TypeScript-specific guidelines'; + globs = '["**/*.ts", "**/*.tsx", "**/*.json"]'; + } else if (fileName.includes('development')) { + description = 'General development guidelines'; + alwaysApply = 'true'; + } else if (fileName.includes('automation')) { + description = 'Automation and synchronization rules'; + alwaysApply = 'true'; + } else if (fileName.includes('branches')) { + description = 'Git branch management rules'; + alwaysApply = 'true'; + } else if (fileName.includes('knowledge')) { + description = 'Project knowledge structure'; + alwaysApply = 'true'; + } else if (fileName.includes('memorybank')) { + description = 'Quality standards for memory-bank'; + alwaysApply = 'true'; + } else if (fileName.includes('restore')) { + description = 'Context restoration procedures'; + alwaysApply = 'true'; + } else if (fileName.includes('ai-first')) { + description = 'AI-oriented documentation standards'; + globs = '["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"]'; + alwaysApply = 'true'; + } else if (fileName.includes('ai-fallback')) { + description = 'Fallback procedures for AI'; + alwaysApply = 'true'; + } else if (fileName.includes('mdc-file-standards')) { + description = 'Standards for .mdc file creation'; + alwaysApply = 'true'; + } else if (fileName === 'index') { + description = 'Rules index and navigation'; + alwaysApply = 'true'; + } else if (fileName === 'README') { + description = 'Main documentation and structure'; + alwaysApply = 'true'; + } else if (fileName === 'ai-memory') { + description = 'User commands and AI instructions'; + alwaysApply = 'true'; + } else if (fileName === 'environment') { + description = 'Critical environment limitations'; + alwaysApply = 'true'; + } else if (fileName === 'monorepo-best-practices') { + description = 'Monorepo structure and guidelines'; + alwaysApply = 'true'; + } else if (fileName === 'typescript-build-troubleshooting') { + description = 'TypeScript build error solutions'; + alwaysApply = 'true'; + } else { + description = `${fileName.replace(/-/g, ' ')} rule`; + } + + return `--- +description: ${description} +globs: ${globs} +alwaysApply: ${alwaysApply} +--- + +`; + } + + fixExistingMetadata(content, filePath) { + const metadataMatch = content.match(/^---\s*\n([\s\S]*?)\n---\s*\n/); + if (!metadataMatch) return content; + + const metadata = metadataMatch[1]; + const fileName = path.basename(filePath, '.mdc'); + + let newMetadata = metadata; + let hasChanges = false; + + // Проверяем и добавляем недостающие поля + if (!metadata.includes('description:')) { + const description = this.generateMetadata(fileName, filePath).match(/description: (.*)/)[1]; + newMetadata = `description: ${description}\n${newMetadata}`; + hasChanges = true; + } + + if (!metadata.includes('globs:')) { + newMetadata = `${newMetadata}globs: ["**/*"]\n`; + hasChanges = true; + } + + if (!metadata.includes('alwaysApply:')) { + newMetadata = `${newMetadata}alwaysApply: false\n`; + hasChanges = true; + } + + if (hasChanges) { + return content.replace(metadataMatch[0], `---\n${newMetadata}---\n\n`); + } + + return content; + } + + async removeDuplicates(duplicates) { + console.log('🔄 Removing duplicates...'); + + for (const dup of duplicates) { + const duplicatePath = path.join(this.rulesDir, dup.duplicate); + + if (fs.existsSync(duplicatePath)) { + fs.unlinkSync(duplicatePath); + console.log(` ✅ Removed duplicate: ${dup.duplicate}`); + } + } + } + + async fixLinks(brokenLinks) { + console.log('🔗 Fixing broken links...'); + + // Группируем по файлам + const linksByFile = {}; + for (const link of brokenLinks) { + if (!linksByFile[link.file]) { + linksByFile[link.file] = []; + } + linksByFile[link.file].push(link.link); + } + + for (const [file, links] of Object.entries(linksByFile)) { + const filePath = path.join(this.rulesDir, file); + let content = fs.readFileSync(filePath, 'utf8'); + + for (const link of links) { + // Пытаемся найти правильную ссылку + const fixedLink = this.findCorrectLink(link); + if (fixedLink) { + content = content.replace(new RegExp(`\\(${link.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}\\)`, 'g'), `(${fixedLink})`); + console.log(` ✅ Fixed link in ${file}: ${link} → ${fixedLink}`); + } + } + + fs.writeFileSync(filePath, content); + } + } + + findCorrectLink(brokenLink) { + // Простые исправления для типичных случаев + const fixes = { + 'doc/user-commands.mdc': 'ai-memory.mdc', + 'dev/dev-principle-02-ai-first-docs.mdc': 'doc/ai-first.mdc', + 'ui/accessibility.mdc': 'ui/ui-accessibility.mdc' + }; + + return fixes[brokenLink] || null; + } + + async updateIndex() { + console.log('📝 Updating index...'); + + // Генерируем новый индекс на основе существующих файлов + const indexContent = this.generateIndex(); + const indexPath = path.join(this.rulesDir, 'index.mdc'); + + fs.writeFileSync(indexPath, indexContent); + console.log(' ✅ Updated index.mdc'); + } + + generateIndex() { + const files = this.auditor.getAllFiles(this.rulesDir); + const structure = {}; + + // Группируем файлы по директориям + for (const file of files) { + const relativePath = path.relative(this.rulesDir, file); + const dir = path.dirname(relativePath); + const name = path.basename(file, path.extname(file)); + + if (!structure[dir]) { + structure[dir] = []; + } + + structure[dir].push({ + name: name, + path: relativePath, + ext: path.extname(file) + }); + } + + // Генерируем содержимое индекса + let content = `--- +description: Rules index and navigation +globs: ["**/*"] +alwaysApply: true +--- + +# Index of Modular Rules + +`; + + // Корневые файлы + if (structure['.']) { + content += '## root\n'; + for (const file of structure['.'].filter(f => f.ext === '.mdc')) { + const description = this.getFileDescription(file.name); + content += `- [${this.formatName(file.name)}](${file.path}) — ${description}\n`; + } + content += '\n'; + } + + // Директории + const dirs = ['architecture', 'dev', 'doc', 'plugin', 'security', 'ui', 'workflow']; + for (const dir of dirs) { + if (structure[dir] && structure[dir].length > 0) { + content += `## ${dir}\n`; + for (const file of structure[dir].filter(f => f.ext === '.mdc')) { + const description = this.getFileDescription(file.name); + content += `- [${this.formatName(file.name)}](${file.path}) — ${description}\n`; + } + content += '\n'; + } + } + + return content; + } + + getFileDescription(fileName) { + const descriptions = { + 'ai-memory': 'User commands and AI instructions', + 'environment': 'Critical environment limitations', + 'monorepo-best-practices': 'Monorepo structure and guidelines', + 'typescript-build-troubleshooting': 'TypeScript build error solutions', + 'README': 'Main documentation and structure', + 'index': 'Rules index and navigation' + }; + + return descriptions[fileName] || `${fileName.replace(/-/g, ' ')} rule`; + } + + formatName(fileName) { + return fileName + .split('-') + .map(word => word.charAt(0).toUpperCase() + word.slice(1)) + .join(' '); + } +} + +// Запуск исправлений +async function main() { + const fixer = new CursorFixer(); + await fixer.fix(); +} + +if (require.main === module) { + main().catch(console.error); +} + +module.exports = CursorFixer; \ No newline at end of file diff --git a/.cursor/rules/index.mdc b/.cursor/rules/index.mdc deleted file mode 100644 index b268557f..00000000 --- a/.cursor/rules/index.mdc +++ /dev/null @@ -1,71 +0,0 @@ -# Index of Modular Rules - -## architecture -- [Chat System Architecture](architecture/architecture-chat-system.mdc) — Chat system architecture and data flow -- [Error Handling (Architecture)](architecture/architecture-error-handling.mdc) — Error handling requirements for system architecture -- [Monitoring and Observability (Architecture)](architecture/architecture-observability.mdc) — Monitoring and observability requirements for system architecture -- [Performance Guidelines (Architecture)](architecture/architecture-performance.mdc) — Performance guidelines for system architecture -- [Plugin Architecture](architecture/architecture-plugin.mdc) — Plugin architecture and isolation requirements -- [Project Structure Architecture](architecture/architecture-project-structure.mdc) — Directory and component structure for the project -- [Security Architecture](architecture/architecture-security.mdc) — Security architecture and controls -- [Development Workflow (Architecture)](architecture/architecture-workflow.mdc) — Development workflow and process standards -- [Project Overview](architecture/project-architecture.mdc) - -## dev -- [Development Principle 1: Do No Harm](dev/dev-principle-01-do-no-harm.mdc) — 'Do No Harm' principle for all development -- [Development Principle 2: AI-First Documentation](dev/dev-principle-02-ai-first-docs.mdc) — AI-oriented documentation and comments for all code -- [Development Principle 3: Best Practices First](dev/dev-principle-03-best-practices.mdc) — Prioritize best practices in all development -- [Development Principle 4: Fail Fast, Fail Safe](dev/dev-principle-04-fail-fast-safe.mdc) — Fail fast and fail safe in all development -- [Development Principle 5: Observability First](dev/dev-principle-05-observability.mdc) — Observability and monitoring in all development -- [Development Principle 6: Configuration as Code](dev/dev-principle-06-config-as-code.mdc) — Configuration as code for all environments -- [Development Principle 7: Progressive Enhancement](dev/dev-principle-07-progressive-enhancement.mdc) — Progressive enhancement in all development -- [Development Principle 8: Data Integrity & Privacy](dev/dev-principle-08-data-integrity-privacy.mdc) — Data integrity and privacy in all development -- [Development Principle 9: Continuous Learning](dev/dev-principle-09-continuous-learning.mdc) — Continuous learning and improvement in all development -- [Development Principle 10: Ecosystem Thinking](dev/dev-principle-10-ecosystem-thinking.mdc) — Ecosystem thinking in all development -- [Development Guidelines](dev/development-guidelines.mdc) -- [Security Best Practices](dev/security-and-deployment.mdc) -- [Testing Strategy](dev/testing-and-debugging.mdc) -- [Rule](dev/typescript.mdc) - -## doc -- [Rule](doc/ai-first.mdc) -- [Knowledge Map](doc/knowledge-map.mdc) -- [Memory-Bank Quality Checklist](doc/memorybank-quality.mdc) -- [Восстанови контекст](doc/restore-context.mdc) -- [Пользовательские команды (User Commands)](doc/user-commands.mdc) - -## plugin -- [Plugin Best Practices](plugin/plugin-best-practices.mdc) — Best practices for plugin development -- [Plugin Documentation Standards](plugin/plugin-documentation.mdc) — Documentation standards for all plugins -- [Plugin Error Handling](plugin/plugin-error-handling.mdc) — Error handling requirements for all plugins -- [Plugin Performance Guidelines](plugin/plugin-performance.mdc) — Performance guidelines for all plugins -- [Plugin Security Requirements](plugin/plugin-security.mdc) — Security requirements for all plugins -- [Plugin Structure](plugin/plugin-structure.mdc) — Plugin directory and manifest requirements -- [Plugin Testing Requirements](plugin/plugin-testing.mdc) — Testing requirements for all plugins - -## security -- [Rule](security/validation.mdc) - -## ui -- [Rule](ui/accessibility.mdc) -- [Accessibility (A11y) Standards](ui/ui-accessibility.mdc) — Accessibility requirements for all UI components -- [UI Animation and Transitions](ui/ui-animation.mdc) — Animation and transition standards for all UI components -- [UI Error Handling](ui/ui-error-handling.mdc) — Error handling requirements for all UI components -- [UI Form Standards](ui/ui-forms.mdc) — Form standards for all UI components -- [UI Loading States](ui/ui-loading-states.mdc) — Loading state requirements for all UI components -- [UI Mobile Responsiveness](ui/ui-mobile.mdc) — Mobile responsiveness standards for all UI components -- [UI Navigation Standards](ui/ui-navigation.mdc) — Navigation standards for all UI components -- [UI Performance Standards](ui/ui-performance.mdc) — Performance standards for all UI components -- [React Component Standards](ui/ui-react-components.mdc) — Standards for React component structure in UI -- [UI Styling Standards](ui/ui-styling.mdc) — Styling standards for all UI components -- [UI Testing Standards](ui/ui-testing.mdc) — Testing standards for all UI components - -## workflow -- [Automation Rules](workflow/automation.mdc) -- [Rule](workflow/branches.mdc) -- [Workflow Branching Rules](workflow/workflow.mdc) - -description: -globs: -alwaysApply: false ---- diff --git a/.cursor/rules/memory-bank-auditor.cjs b/.cursor/rules/memory-bank-auditor.cjs new file mode 100644 index 00000000..1bb7380b --- /dev/null +++ b/.cursor/rules/memory-bank-auditor.cjs @@ -0,0 +1,313 @@ +#!/usr/bin/env node + +const fs = require('fs'); +const path = require('path'); + +class MemoryBankAuditor { + constructor() { + this.memoryBankDir = path.join(process.cwd(), 'memory-bank'); + this.cursorRulesDir = path.join(process.cwd(), '.cursor', 'rules'); + } + + async audit() { + console.log('🔍 Auditing Memory Bank for files that should be in .cursor/rules/...\n'); + + const files = await this.getAllFiles(); + const analysis = await this.analyzeFiles(files); + + this.printReport(analysis); + + return analysis; + } + + async getAllFiles() { + const files = []; + + const walkDir = (dir) => { + const items = fs.readdirSync(dir); + + for (const item of items) { + const fullPath = path.join(dir, item); + const stat = fs.statSync(fullPath); + + if (stat.isDirectory()) { + walkDir(fullPath); + } else if (item.endsWith('.md')) { + files.push({ + path: fullPath, + relativePath: path.relative(this.memoryBankDir, fullPath), + name: item, + category: path.dirname(path.relative(this.memoryBankDir, fullPath)) + }); + } + } + }; + + walkDir(this.memoryBankDir); + return files; + } + + async analyzeFiles(files) { + const analysis = { + shouldMoveToCursor: [], + shouldStayInMemoryBank: [], + unclear: [], + totalFiles: files.length + }; + + for (const file of files) { + const content = fs.readFileSync(file.path, 'utf8'); + const decision = this.analyzeFile(file, content); + + switch (decision.category) { + case 'cursor': + analysis.shouldMoveToCursor.push({ ...file, reason: decision.reason }); + break; + case 'memory-bank': + analysis.shouldStayInMemoryBank.push({ ...file, reason: decision.reason }); + break; + case 'unclear': + analysis.unclear.push({ ...file, reason: decision.reason }); + break; + } + } + + return analysis; + } + + analyzeFile(file, content) { + const text = content.toLowerCase(); + const name = file.name.toLowerCase(); + + // Критерии для .cursor/rules/ + const cursorIndicators = [ + // Универсальные принципы и правила + 'принципы разработки', 'development principles', 'best practices', + 'паттерны', 'patterns', 'стандарты', 'standards', + 'правила', 'rules', 'guidelines', 'руководства', + + // Автоматизация и workflow + 'автоматизация', 'automation', 'workflow', 'процессы', + 'ci/cd', 'continuous integration', 'deployment', + + // Документация и структуры + 'документация', 'documentation', 'структура', 'structure', + 'форматы', 'formats', 'шаблоны', 'templates', + + // UI/UX стандарты + 'ui/ux', 'user interface', 'user experience', 'интерфейс', + 'стили', 'styles', 'компоненты', 'components', + + // Безопасность + 'безопасность', 'security', 'валидация', 'validation', + + // Технические паттерны + 'паттерны работы', 'date patterns', 'time patterns', + 'file relationships', 'взаимосвязи файлов' + ]; + + // Критерии для memory-bank/ + const memoryBankIndicators = [ + // Проектно-специфичное + 'agent-plugins-platform', 'текущий проект', 'current project', + 'статус проекта', 'project status', 'прогресс', 'progress', + + // Конкретные ошибки и решения + 'ошибка', 'error', 'баг', 'bug', 'решение', 'solution', + 'vite-react19', 'typescript-build', 'конкретная проблема', + + // Архитектурные решения проекта + 'архитектура проекта', 'project architecture', 'решения проекта', + 'принятые решения', 'decisions made', + + // Результаты тестирования + 'результаты тестов', 'test results', 'отладка', 'debugging', + + // Планы развития + 'планы развития', 'development plans', 'roadmap', 'roadmap проекта', + + // Контекст проекта + 'контекст проекта', 'project context', 'окружение', 'environment' + ]; + + // Проверяем индикаторы + const cursorScore = cursorIndicators.filter(indicator => + text.includes(indicator) || name.includes(indicator) + ).length; + + const memoryBankScore = memoryBankIndicators.filter(indicator => + text.includes(indicator) || name.includes(indicator) + ).length; + + // Специальные случаи + if (name.includes('readme') || name.includes('index')) { + return { category: 'memory-bank', reason: 'README и INDEX файлы должны оставаться в memory-bank' }; + } + + if (name.includes('development-principles') || text.includes('принципы разработки')) { + return { category: 'cursor', reason: 'Универсальные принципы разработки применимы к любым проектам' }; + } + + if (name.includes('file-relationships') || text.includes('взаимосвязи файлов')) { + return { category: 'cursor', reason: 'Паттерны организации файлов универсальны' }; + } + + if (name.includes('date-time-patterns') || text.includes('паттерны работы с датами')) { + return { category: 'cursor', reason: 'Универсальные паттерны работы с датами и временем' }; + } + + if (name.includes('errors') || name.includes('error') || name.includes('graveyard')) { + return { category: 'memory-bank', reason: 'Проектно-специфичные ошибки и решения' }; + } + + if (name.includes('architecture') || name.includes('systempattern')) { + return { category: 'memory-bank', reason: 'Архитектурные решения конкретного проекта' }; + } + + if (name.includes('testing') || name.includes('debug')) { + return { category: 'memory-bank', reason: 'Результаты тестирования и отладки проекта' }; + } + + if (name.includes('progress') || name.includes('activecontext')) { + return { category: 'memory-bank', reason: 'Текущий статус и прогресс проекта' }; + } + + // Принимаем решение на основе баллов + if (cursorScore > memoryBankScore && cursorScore > 0) { + return { + category: 'cursor', + reason: `Найдено ${cursorScore} индикаторов для .cursor/rules/ (vs ${memoryBankScore} для memory-bank/)` + }; + } else if (memoryBankScore > cursorScore && memoryBankScore > 0) { + return { + category: 'memory-bank', + reason: `Найдено ${memoryBankScore} индикаторов для memory-bank/ (vs ${cursorScore} для .cursor/rules/)` + }; + } else { + return { + category: 'unclear', + reason: `Неясно: cursorScore=${cursorScore}, memoryBankScore=${memoryBankScore}` + }; + } + } + + printReport(analysis) { + console.log('📊 MEMORY BANK AUDIT REPORT'); + console.log('='.repeat(60)); + + console.log(`📁 Total files analyzed: ${analysis.totalFiles}`); + console.log(`🔄 Should move to .cursor/rules/: ${analysis.shouldMoveToCursor.length}`); + console.log(`🧠 Should stay in memory-bank/: ${analysis.shouldStayInMemoryBank.length}`); + console.log(`❓ Unclear: ${analysis.unclear.length}`); + + if (analysis.shouldMoveToCursor.length > 0) { + console.log('\n🔄 FILES THAT SHOULD MOVE TO .cursor/rules/:'); + console.log('-'.repeat(60)); + + for (const file of analysis.shouldMoveToCursor) { + console.log(`📄 ${file.relativePath}`); + console.log(` Reason: ${file.reason}`); + console.log(` Suggested location: .cursor/rules/${this.getSuggestedLocation(file)}`); + console.log(''); + } + } + + if (analysis.unclear.length > 0) { + console.log('\n❓ UNCLEAR FILES (need manual review):'); + console.log('-'.repeat(60)); + + for (const file of analysis.unclear) { + console.log(`📄 ${file.relativePath}`); + console.log(` Reason: ${file.reason}`); + console.log(''); + } + } + + if (analysis.shouldMoveToCursor.length === 0 && analysis.unclear.length === 0) { + console.log('\n✅ All files are in the correct location!'); + } else { + console.log('\n💡 RECOMMENDATIONS:'); + console.log('-'.repeat(60)); + + if (analysis.shouldMoveToCursor.length > 0) { + console.log('1. Move identified files to .cursor/rules/ with proper metadata'); + console.log('2. Update documentation-helper.cjs to handle new file types'); + console.log('3. Update documentation-map.mdc if needed'); + } + + if (analysis.unclear.length > 0) { + console.log('4. Manually review unclear files'); + console.log('5. Update analysis criteria based on findings'); + } + } + + console.log('\n' + '='.repeat(60)); + } + + getSuggestedLocation(file) { + const name = file.name.toLowerCase(); + + if (name.includes('development-principles')) { + return 'dev/dev-principle-01-do-no-harm.mdc'; + } + + if (name.includes('file-relationships')) { + return 'architecture/architecture-project-structure.mdc'; + } + + if (name.includes('date-time-patterns')) { + return 'dev/date-time-patterns.mdc'; + } + + if (name.includes('patterns')) { + return 'dev/patterns.mdc'; + } + + if (name.includes('standards')) { + return 'doc/standards.mdc'; + } + + return 'general/'; + } + + async generateMigrationScript(analysis) { + if (analysis.shouldMoveToCursor.length === 0) { + console.log('No files to migrate.'); + return; + } + + const scriptPath = path.join(process.cwd(), 'migrate-to-cursor.sh'); + let script = '#!/bin/bash\n\n'; + script += '# Migration script for memory-bank files to .cursor/rules/\n'; + script += '# Generated by memory-bank-auditor.cjs\n\n'; + + for (const file of analysis.shouldMoveToCursor) { + const targetPath = this.getSuggestedLocation(file); + script += `# ${file.reason}\n`; + script += `# mv "${file.path}" ".cursor/rules/${targetPath}"\n\n`; + } + + fs.writeFileSync(scriptPath, script); + console.log(`📝 Migration script generated: ${scriptPath}`); + } +} + +// CLI обработка +async function main() { + const args = process.argv.slice(2); + + const auditor = new MemoryBankAuditor(); + + if (args.includes('--generate-script')) { + const analysis = await auditor.audit(); + await auditor.generateMigrationScript(analysis); + } else { + await auditor.audit(); + } +} + +if (require.main === module) { + main().catch(console.error); +} + +module.exports = MemoryBankAuditor; \ No newline at end of file diff --git a/.cursor/rules/memory-bank-manager.cjs b/.cursor/rules/memory-bank-manager.cjs new file mode 100644 index 00000000..c14aeaa1 --- /dev/null +++ b/.cursor/rules/memory-bank-manager.cjs @@ -0,0 +1,622 @@ +#!/usr/bin/env node + +const fs = require('fs'); +const path = require('path'); + +class MemoryBankManager { + constructor() { + this.memoryBankDir = path.join(process.cwd(), 'memory-bank'); + this.cursorRulesDir = path.join(process.cwd(), '.cursor', 'rules'); + } + + async addEntry(content, options = {}) { + const { + type = 'info', + category = 'core', + priority = 'medium', + tags = options.tags ? options.tags.split(',') : [], + relatedFiles = [] + } = options; + + const timestamp = new Date().toISOString(); + const date = timestamp.split('T')[0]; + const time = timestamp.split('T')[1].split('.')[0]; + + // Определяем файл назначения + const targetFile = this.getTargetFile(type, category); + const targetPath = path.join(this.memoryBankDir, targetFile); + + // Создаем запись + const entry = this.formatEntry({ + content, + type, + category, + priority, + tags, + relatedFiles, + timestamp: `${date} ${time}`, + date + }); + + // Добавляем запись в файл + await this.appendToFile(targetPath, entry); + + console.log(`✅ Added entry to ${targetFile}`); + console.log(`📝 Type: ${type}, Category: ${category}, Priority: ${priority}`); + + return { targetFile, entry }; + } + + async updateContext(contextData) { + const contextFile = path.join(this.memoryBankDir, 'core', 'activeContext.md'); + const timestamp = new Date().toISOString().split('T')[0]; + + let content = fs.existsSync(contextFile) + ? fs.readFileSync(contextFile, 'utf8') + : this.generateActiveContextTemplate(); + + // Обновляем секцию Current Status + content = this.updateSection(content, 'Current Status', { + 'Last Updated': timestamp, + 'Current Focus': contextData.focus || 'Development', + 'Active Tasks': contextData.tasks || ['Initial setup'], + 'Next Steps': contextData.nextSteps || ['Continue development'], + 'Blockers': contextData.blockers || [] + }); + + // Добавляем новую запись в Recent Decisions + if (contextData.decisions) { + content = this.addToSection(content, 'Recent Decisions', contextData.decisions); + } + + fs.writeFileSync(contextFile, content); + console.log('✅ Updated active context'); + } + + async restoreContext(options = {}) { + const { full = false, category = null } = options; + + if (full) { + return await this.restoreFullContext(); + } + + if (category) { + return await this.restoreCategoryContext(category); + } + + return await this.restoreQuickContext(); + } + + async restoreFullContext() { + const context = { + activeContext: await this.readFile('core/activeContext.md'), + progress: await this.readFile('core/progress.md'), + errors: await this.readFile('errors/errors.md'), + decisions: await this.readFile('architecture/decisions.md'), + recentActivity: await this.getRecentActivity() + }; + + console.log('📚 Full context restored'); + return context; + } + + async restoreQuickContext() { + const context = { + activeContext: await this.readFile('core/activeContext.md'), + recentErrors: await this.getRecentErrors(), + recentDecisions: await this.getRecentDecisions() + }; + + console.log('⚡ Quick context restored'); + return context; + } + + async restoreCategoryContext(category) { + const categoryDir = path.join(this.memoryBankDir, category); + if (!fs.existsSync(categoryDir)) { + throw new Error(`Category ${category} not found`); + } + + const files = fs.readdirSync(categoryDir) + .filter(file => file.endsWith('.md')) + .map(file => path.join(category, file)); + + const context = {}; + for (const file of files) { + context[file] = await this.readFile(file); + } + + console.log(`📁 Category context restored: ${category}`); + return context; + } + + async searchMemory(query, options = {}) { + const { category = null, type = null, limit = 10 } = options; + + const results = []; + const searchDirs = category + ? [path.join(this.memoryBankDir, category)] + : this.getAllCategoryDirs(); + + for (const dir of searchDirs) { + if (!fs.existsSync(dir)) continue; + + const files = fs.readdirSync(dir) + .filter(file => file.endsWith('.md')); + + for (const file of files) { + const filePath = path.join(dir, file); + const content = fs.readFileSync(filePath, 'utf8'); + + if (content.toLowerCase().includes(query.toLowerCase())) { + const relativePath = path.relative(this.memoryBankDir, filePath); + results.push({ + file: relativePath, + content: this.extractRelevantContent(content, query), + lastModified: fs.statSync(filePath).mtime + }); + } + } + } + + // Сортируем по дате изменения и ограничиваем результаты + results.sort((a, b) => b.lastModified - a.lastModified); + return results.slice(0, limit); + } + + async generateReport(options = {}) { + const { type = 'full' } = options; + + const report = { + timestamp: new Date().toISOString(), + summary: await this.generateSummary(), + categories: await this.generateCategoryReport(), + recentActivity: await this.getRecentActivity(), + errorStats: await this.generateErrorStats(), + recommendations: await this.generateRecommendations() + }; + + if (type === 'errors') { + return { errorStats: report.errorStats }; + } + + if (type === 'progress') { + return { + summary: report.summary, + recentActivity: report.recentActivity + }; + } + + return report; + } + + // Вспомогательные методы + + getTargetFile(type, category) { + const fileMap = { + 'error': 'errors/errors.md', + 'build-error': 'errors/build-errors.md', + 'runtime-error': 'errors/runtime-errors.md', + 'ui-error': 'errors/ui-errors.md', + 'decision': 'architecture/decisions.md', + 'pattern': 'architecture/patterns.md', + 'progress': 'core/progress.md', + 'context': 'core/activeContext.md', + 'plan': 'planning/feature-roadmap.md', + 'test-result': 'development/testing-results.md', + 'debug-note': 'development/debugging-guide.md' + }; + + return fileMap[type] || `${category}/general.md`; + } + + formatEntry(data) { + const { + content, + type, + category, + priority, + tags, + relatedFiles, + timestamp, + date + } = data; + + const tagsArray = Array.isArray(tags) ? tags : (typeof tags === 'string' ? tags.split(',') : []); + const tagsStr = tagsArray.length > 0 ? tagsArray.map(tag => `#${tag.trim()}`).join(' ') : ''; + const relatedStr = relatedFiles.length > 0 + ? relatedFiles.map(file => `- ${file}`).join('\n') + : ''; + + const title = content ? content.split('\n')[0] : 'New Entry'; + + return ` +## [${timestamp}] - ${title} + +**Тип:** ${type} +**Категория:** ${category} +**Приоритет:** ${priority} + +**Контекст:** ${content || 'No content provided'} + +**Статус:** 🔄 В процессе + +${relatedStr ? `**Связанные файлы:**\n${relatedStr}\n` : ''} +${tagsStr ? `**Теги:** ${tagsStr}\n` : ''} +**AI Команды:** +- \`обнови контекст\` - для обновления активного контекста +- \`задокументируй\` - для создания документации + +--- +`; + } + + async appendToFile(filePath, content) { + const dir = path.dirname(filePath); + if (!fs.existsSync(dir)) { + fs.mkdirSync(dir, { recursive: true }); + } + + if (!fs.existsSync(filePath)) { + const header = this.generateFileHeader(filePath); + fs.writeFileSync(filePath, header); + } + + const existingContent = fs.readFileSync(filePath, 'utf8'); + const newContent = existingContent + content; + fs.writeFileSync(filePath, newContent); + } + + generateFileHeader(filePath) { + const filename = path.basename(filePath, '.md'); + const category = path.dirname(filePath).split(path.sep).pop(); + + return `# ${filename.replace(/-/g, ' ').replace(/\b\w/g, l => l.toUpperCase())} - ${category} + +## Overview + +This file contains ${category}-related information and entries. + +## Entries + + + +--- +*Auto-generated file* +`; + } + + updateSection(content, sectionName, updates) { + const lines = content.split('\n'); + const sectionStart = lines.findIndex(line => + line.trim().startsWith(`## ${sectionName}`) + ); + + if (sectionStart === -1) return content; + + let sectionEnd = lines.findIndex((line, index) => + index > sectionStart && line.trim().startsWith('## ') + ); + + if (sectionEnd === -1) sectionEnd = lines.length; + + const beforeSection = lines.slice(0, sectionStart + 1); + const afterSection = lines.slice(sectionEnd); + + const newSection = [`## ${sectionName}\n`]; + + for (const [key, value] of Object.entries(updates)) { + if (Array.isArray(value)) { + newSection.push(`**${key}:**`); + value.forEach(item => newSection.push(`- ${item}`)); + newSection.push(''); + } else { + newSection.push(`**${key}:** ${value}`); + } + } + + return [...beforeSection, ...newSection, ...afterSection].join('\n'); + } + + addToSection(content, sectionName, items) { + const lines = content.split('\n'); + const sectionStart = lines.findIndex(line => + line.trim().startsWith(`## ${sectionName}`) + ); + + if (sectionStart === -1) return content; + + const beforeSection = lines.slice(0, sectionStart + 1); + const afterSection = lines.slice(sectionStart + 1); + + const newItems = Array.isArray(items) ? items : [items]; + const formattedItems = newItems.map(item => `- ${item}`); + + return [...beforeSection, ...formattedItems, '', ...afterSection].join('\n'); + } + + async readFile(relativePath) { + const fullPath = path.join(this.memoryBankDir, relativePath); + if (!fs.existsSync(fullPath)) return null; + return fs.readFileSync(fullPath, 'utf8'); + } + + getAllCategoryDirs() { + const categories = ['core', 'errors', 'architecture', 'development', 'ui', 'planning', 'context']; + return categories.map(cat => path.join(this.memoryBankDir, cat)); + } + + extractRelevantContent(content, query) { + const lines = content.split('\n'); + const queryLower = query.toLowerCase(); + + const relevantLines = lines.filter(line => + line.toLowerCase().includes(queryLower) + ); + + return relevantLines.slice(0, 5).join('\n'); + } + + async getRecentActivity() { + const allFiles = []; + + for (const dir of this.getAllCategoryDirs()) { + if (!fs.existsSync(dir)) continue; + + const files = fs.readdirSync(dir) + .filter(file => file.endsWith('.md')) + .map(file => path.join(dir, file)); + + allFiles.push(...files); + } + + const fileStats = allFiles.map(file => ({ + file: path.relative(this.memoryBankDir, file), + lastModified: fs.statSync(file).mtime + })); + + return fileStats + .sort((a, b) => b.lastModified - a.lastModified) + .slice(0, 10); + } + + async getRecentErrors() { + const errorsFile = path.join(this.memoryBankDir, 'errors', 'errors.md'); + if (!fs.existsSync(errorsFile)) return []; + + const content = fs.readFileSync(errorsFile, 'utf8'); + const entries = content.split('## ['); + + return entries + .slice(1) // Пропускаем заголовок + .slice(-5) // Последние 5 ошибок + .map(entry => entry.split('\n')[0]); + } + + async getRecentDecisions() { + const decisionsFile = path.join(this.memoryBankDir, 'architecture', 'decisions.md'); + if (!fs.existsSync(decisionsFile)) return []; + + const content = fs.readFileSync(decisionsFile, 'utf8'); + const entries = content.split('## ['); + + return entries + .slice(1) // Пропускаем заголовок + .slice(-5) // Последние 5 решений + .map(entry => entry.split('\n')[0]); + } + + async generateSummary() { + const categories = ['core', 'errors', 'architecture', 'development', 'ui', 'planning', 'context']; + const summary = {}; + + for (const category of categories) { + const categoryDir = path.join(this.memoryBankDir, category); + if (!fs.existsSync(categoryDir)) { + summary[category] = 0; + continue; + } + + const files = fs.readdirSync(categoryDir) + .filter(file => file.endsWith('.md')); + + summary[category] = files.length; + } + + return summary; + } + + async generateCategoryReport() { + const categories = ['core', 'errors', 'architecture', 'development', 'ui', 'planning', 'context']; + const report = {}; + + for (const category of categories) { + const categoryDir = path.join(this.memoryBankDir, category); + if (!fs.existsSync(categoryDir)) continue; + + const files = fs.readdirSync(categoryDir) + .filter(file => file.endsWith('.md')) + .map(file => ({ + name: file, + path: path.join(category, file), + size: fs.statSync(path.join(categoryDir, file)).size + })); + + report[category] = files; + } + + return report; + } + + async generateErrorStats() { + const errorsFile = path.join(this.memoryBankDir, 'errors', 'errors.md'); + if (!fs.existsSync(errorsFile)) { + return { total: 0, resolved: 0, unresolved: 0 }; + } + + const content = fs.readFileSync(errorsFile, 'utf8'); + const entries = content.split('## ['); + const total = entries.length - 1; // Пропускаем заголовок + + const resolved = (content.match(/✅ Решено/g) || []).length; + const unresolved = total - resolved; + + return { total, resolved, unresolved }; + } + + async generateRecommendations() { + const recommendations = []; + + // Проверяем активность + const recentActivity = await this.getRecentActivity(); + if (recentActivity.length === 0) { + recommendations.push('Добавить первую запись в memory-bank'); + } + + // Проверяем ошибки + const errorStats = await this.generateErrorStats(); + if (errorStats.unresolved > 5) { + recommendations.push('Обработать нерешенные ошибки'); + } + + // Проверяем контекст + const activeContext = await this.readFile('core/activeContext.md'); + if (!activeContext || activeContext.includes('Initial setup')) { + recommendations.push('Обновить активный контекст проекта'); + } + + return recommendations; + } + + generateActiveContextTemplate() { + const date = new Date().toISOString().split('T')[0]; + + return `# Active Context + +## Current Status + +**Last Updated:** ${date} +**Phase:** Development + +## Active Tasks + +- [ ] Initial setup + +## Current Focus + +Describe current development focus and priorities. + +## Recent Decisions + +- Decision 1: Description + +## Next Steps + +- Step 1: Description + +## Blockers + +- Blocker 1: Description + +--- +*Auto-generated template* +`; + } +} + +// CLI обработка +async function main() { + const args = process.argv.slice(2); + const command = args[0]; + const manager = new MemoryBankManager(); + + try { + switch (command) { + case 'add': + const content = args[1]; + const options = parseOptions(args.slice(2)); + await manager.addEntry(content, options); + break; + + case 'update-context': + const contextData = parseContextData(args.slice(1)); + await manager.updateContext(contextData); + break; + + case 'restore': + const restoreOptions = parseOptions(args.slice(1)); + const context = await manager.restoreContext(restoreOptions); + console.log(JSON.stringify(context, null, 2)); + break; + + case 'search': + const query = args[1]; + const searchOptions = parseOptions(args.slice(2)); + const results = await manager.searchMemory(query, searchOptions); + console.log(JSON.stringify(results, null, 2)); + break; + + case 'report': + const reportOptions = parseOptions(args.slice(1)); + const report = await manager.generateReport(reportOptions); + console.log(JSON.stringify(report, null, 2)); + break; + + default: + console.log(` +Memory Bank Manager - CLI Tool + +Usage: + node memory-bank-manager.cjs add "content" [options] + node memory-bank-manager.cjs update-context [options] + node memory-bank-manager.cjs restore [options] + node memory-bank-manager.cjs search "query" [options] + node memory-bank-manager.cjs report [options] + +Options: + --type= Entry type (error, decision, progress, etc.) + --category= Category (core, errors, architecture, etc.) + --priority= Priority (critical, high, medium, low) + --tags= Comma-separated tags + --full Full context restoration + --category= Specific category for restore/search + --limit= Limit search results + `); + } + } catch (error) { + console.error('❌ Error:', error.message); + process.exit(1); + } +} + +function parseOptions(args) { + const options = {}; + + for (const arg of args) { + if (arg.startsWith('--')) { + const [key, value] = arg.slice(2).split('='); + options[key] = value; + } + } + + return options; +} + +function parseContextData(args) { + const contextData = {}; + + for (const arg of args) { + if (arg.startsWith('--')) { + const [key, value] = arg.slice(2).split('='); + contextData[key] = value; + } + } + + return contextData; +} + +if (require.main === module) { + main().catch(console.error); +} + +module.exports = MemoryBankManager; \ No newline at end of file diff --git a/.cursor/rules/memory-bank-organizer.cjs b/.cursor/rules/memory-bank-organizer.cjs new file mode 100644 index 00000000..6cd3f0e9 --- /dev/null +++ b/.cursor/rules/memory-bank-organizer.cjs @@ -0,0 +1,331 @@ +#!/usr/bin/env node + +const fs = require('fs'); +const path = require('path'); + +function getProtectedFilesFromMap() { + const mapPath = path.join(process.cwd(), '.cursor/rules/doc/documentation-map.mdc'); + if (!fs.existsSync(mapPath)) return []; + const content = fs.readFileSync(mapPath, 'utf-8'); + const protectedSection = content.split('## 🛡️ Protected/Administrative Files')[1]; + if (!protectedSection) return []; + return protectedSection + .split('\n') + .filter(line => line.trim().startsWith('- ')) + .map(line => line.replace(/^-\s+/, '').split('—')[0].trim()) + .filter(Boolean); +} + +class MemoryBankOrganizer { + constructor() { + this.memoryBankDir = path.join(process.cwd(), 'memory-bank'); + this.structurePath = path.join(this.memoryBankDir, 'MEMORY_BANK_STRUCTURE.md'); + this.protectedFiles = getProtectedFilesFromMap(); + } + + async reorganize() { + console.log('🧠 Reorganizing Memory Bank...\n'); + + // Создаем структуру каталогов + await this.createDirectoryStructure(); + + // Анализируем существующие файлы + const fileAnalysis = await this.analyzeFiles(); + + // Перемещаем файлы по новой структуре + await this.moveFiles(fileAnalysis); + + // Создаем индексы + await this.createIndexes(); + + console.log('✅ Memory Bank reorganization completed!'); + } + + async createDirectoryStructure() { + const directories = [ + 'core', + 'errors', + 'architecture', + 'development', + 'ui', + 'planning', + 'context', + 'deprecated' + ]; + + for (const dir of directories) { + const dirPath = path.join(this.memoryBankDir, dir); + if (!fs.existsSync(dirPath)) { + fs.mkdirSync(dirPath, { recursive: true }); + console.log(`📁 Created directory: ${dir}`); + } + } + } + + async analyzeFiles() { + const files = fs.readdirSync(this.memoryBankDir) + .filter(file => file.endsWith('.md') && file !== 'MEMORY_BANK_STRUCTURE.md') + .map(file => ({ + name: file, + path: path.join(this.memoryBankDir, file), + category: this.categorizeFile(file) + })); + + return files; + } + + categorizeFile(filename) { + const name = filename.toLowerCase(); + + // Core файлы + if (name.includes('activecontext') || name.includes('progress') || + name.includes('projectbrief') || name.includes('session-log')) { + return 'core'; + } + + // Errors + if (name.includes('error') || name.includes('graveyard') || + name.includes('vite-react') || name.includes('typescript-build')) { + return 'errors'; + } + + // Architecture + if (name.includes('architecture') || name.includes('systempattern') || + name.includes('security-architecture') || name.includes('comprehensive-architecture')) { + return 'architecture'; + } + + // Development + if (name.includes('testing') || name.includes('debug') || + name.includes('devtools') || name.includes('version-management')) { + return 'development'; + } + + // UI + if (name.includes('side-panel') || name.includes('chat-context') || + name.includes('lazy-sync') || name.includes('ui')) { + return 'ui'; + } + + // Planning + if (name.includes('future') || name.includes('plan') || + name.includes('optimization') || name.includes('roadmap')) { + return 'planning'; + } + + // Context + if (name.includes('tech-context') || name.includes('product-context') || + name.includes('environment') || name.includes('context')) { + return 'context'; + } + + // Deprecated (дублирующие или устаревшие) + if (name.includes('cursor-') || name.includes('ai-') || + name.includes('mdc-file-standards') || name.includes('user-commands')) { + return 'deprecated'; + } + + return 'core'; // По умолчанию в core + } + + async moveFiles(fileAnalysis) { + for (const file of fileAnalysis) { + if (this.protectedFiles.includes(`memory-bank/${file.name}`)) { + console.log(`🔒 Protected: ${file.name} — оставлен в корне memory-bank`); + continue; + } + const targetDir = path.join(this.memoryBankDir, file.category); + const targetPath = path.join(targetDir, file.name); + + // Проверяем, не существует ли уже файл с таким именем + if (fs.existsSync(targetPath)) { + // Добавляем префикс для избежания конфликтов + const newName = `migrated-${file.name}`; + const newTargetPath = path.join(targetDir, newName); + fs.renameSync(file.path, newTargetPath); + console.log(`📄 Moved: ${file.name} → ${file.category}/${newName}`); + } else { + fs.renameSync(file.path, targetPath); + console.log(`📄 Moved: ${file.name} → ${file.category}/`); + } + } + } + + async createIndexes() { + // Создаем индекс для каждой категории + const categories = ['core', 'errors', 'architecture', 'development', 'ui', 'planning', 'context']; + + for (const category of categories) { + await this.createCategoryIndex(category); + } + + // Создаем общий индекс + await this.createMainIndex(); + } + + async createCategoryIndex(category) { + const categoryDir = path.join(this.memoryBankDir, category); + const indexPath = path.join(categoryDir, 'README.md'); + + if (!fs.existsSync(categoryDir)) return; + + const files = fs.readdirSync(categoryDir) + .filter(file => file.endsWith('.md') && file !== 'README.md') + .sort(); + + const indexContent = `# ${this.getCategoryTitle(category)} - Index + +## Files in this category: + +${files.map(file => `- [${file.replace('.md', '')}](./${file})`).join('\n')} + +## Description: + +${this.getCategoryDescription(category)} + +## Last updated: ${new Date().toISOString().split('T')[0]} +`; + + fs.writeFileSync(indexPath, indexContent); + console.log(`📋 Created index: ${category}/README.md`); + } + + async createMainIndex() { + const indexPath = path.join(this.memoryBankDir, 'INDEX.md'); + + const indexContent = `# Memory Bank - Main Index + +## Categories: + +### 📋 [Core](./core/) - Основные файлы контекста +- activeContext.md - Текущий контекст проекта +- progress.md - Прогресс разработки +- projectbrief.md - Краткое описание проекта +- session-log.md - Лог сессий разработки + +### ❌ [Errors](./errors/) - Ошибки и решения +- errors.md - Кладбище ошибок (основной файл) +- build-errors.md - Ошибки сборки +- runtime-errors.md - Runtime ошибки +- ui-errors.md - UI/UX ошибки + +### 🏗️ [Architecture](./architecture/) - Архитектурные решения +- decisions.md - Принятые решения +- patterns.md - Системные паттерны +- security.md - Архитектура безопасности +- comprehensive.md - Комплексная архитектура + +### 🔧 [Development](./development/) - Процесс разработки +- testing-results.md - Результаты тестирования +- debugging-guide.md - Руководство по отладке +- devtools-guide.md - Работа с DevTools +- version-management.md - Управление версиями + +### 🎨 [UI](./ui/) - UI/UX контекст +- side-panel.md - Улучшения side-panel +- chat-context.md - Контекст чата +- lazy-sync.md - Ленивая синхронизация + +### 📅 [Planning](./planning/) - Планирование +- future-plans.md - Планы развития +- optimization-plans.md - Планы оптимизации +- roadmap.md - Roadmap проекта + +### 🌍 [Context](./context/) - Контекстная информация +- tech-context.md - Технический контекст +- product-context.md - Продуктовый контекст +- environment.md - Окружение разработки + +### 🗑️ [Deprecated](./deprecated/) - Устаревшие файлы +- Старые файлы, дубликаты, мигрированные версии + +## Quick Navigation: + +- **Current Status**: [activeContext.md](./core/activeContext.md) +- **Progress**: [progress.md](./core/progress.md) +- **Errors**: [errors.md](./errors/errors.md) +- **Architecture**: [decisions.md](./architecture/decisions.md) +- **Testing**: [testing-results.md](./development/testing-results.md) + +## Structure Rules: + +See [MEMORY_BANK_STRUCTURE.md](./MEMORY_BANK_STRUCTURE.md) for detailed organization rules. + +Last updated: ${new Date().toISOString().split('T')[0]} +`; + + fs.writeFileSync(indexPath, indexContent); + console.log(`📋 Created main index: INDEX.md`); + } + + getCategoryTitle(category) { + const titles = { + 'core': 'Core Files', + 'errors': 'Errors & Solutions', + 'architecture': 'Architecture Decisions', + 'development': 'Development Process', + 'ui': 'UI/UX Context', + 'planning': 'Planning & Roadmap', + 'context': 'Context Information', + 'deprecated': 'Deprecated Files' + }; + + return titles[category] || category; + } + + getCategoryDescription(category) { + const descriptions = { + 'core': 'Критически важные файлы для понимания текущего состояния проекта. Обновляются регулярно.', + 'errors': 'Проектно-специфичные ошибки и их решения. История проблем и workarounds.', + 'architecture': 'Принятые архитектурные решения с обоснованием. Влияние на проект.', + 'development': 'Результаты тестирования, руководства по отладке, процессы разработки.', + 'ui': 'UI/UX решения и улучшения. Пользовательский опыт и интерфейсные паттерны.', + 'planning': 'Планы развития проекта, roadmap, стратегические решения.', + 'context': 'Технический и продуктовый контекст. Окружение разработки.', + 'deprecated': 'Устаревшие файлы, дубликаты, мигрированные версии.' + }; + + return descriptions[category] || 'Category description'; + } + + async cleanup() { + console.log('\n🧹 Cleaning up deprecated files...'); + + const deprecatedDir = path.join(this.memoryBankDir, 'deprecated'); + if (fs.existsSync(deprecatedDir)) { + const files = fs.readdirSync(deprecatedDir); + + for (const file of files) { + if (file.endsWith('.md')) { + const filePath = path.join(deprecatedDir, file); + const content = fs.readFileSync(filePath, 'utf8'); + + // Проверяем, есть ли полезная информация + if (content.length < 1000) { + fs.unlinkSync(filePath); + console.log(`🗑️ Removed small file: ${file}`); + } + } + } + } + } +} + +// CLI обработка +async function main() { + const args = process.argv.slice(2); + + const organizer = new MemoryBankOrganizer(); + + if (args.includes('--cleanup')) { + await organizer.cleanup(); + } else { + await organizer.reorganize(); + } +} + +if (require.main === module) { + main().catch(console.error); +} + +module.exports = MemoryBankOrganizer; \ No newline at end of file diff --git a/.cursor/rules/memory-bank-structure-creator.cjs b/.cursor/rules/memory-bank-structure-creator.cjs new file mode 100644 index 00000000..acd2e1db --- /dev/null +++ b/.cursor/rules/memory-bank-structure-creator.cjs @@ -0,0 +1,690 @@ +#!/usr/bin/env node + +const fs = require('fs'); +const path = require('path'); + +class MemoryBankStructureCreator { + constructor() { + this.memoryBankDir = path.join(process.cwd(), 'memory-bank'); + this.templatesDir = path.join(__dirname, 'memory-bank', 'templates'); + } + + async createStructure(projectType = 'default') { + console.log(`🏗️ Creating Memory Bank structure for ${projectType} project...\n`); + + // Создаем базовую структуру + await this.createBaseStructure(); + + // Создаем специфичную структуру для типа проекта + await this.createProjectSpecificStructure(projectType); + + // Создаем индексы и README файлы + await this.createIndexes(projectType); + + console.log('✅ Memory Bank structure created successfully!'); + } + + async createBaseStructure() { + const baseCategories = [ + 'core', + 'errors', + 'architecture', + 'development', + 'ui', + 'planning', + 'context', + 'deprecated' + ]; + + for (const category of baseCategories) { + const categoryPath = path.join(this.memoryBankDir, category); + if (!fs.existsSync(categoryPath)) { + fs.mkdirSync(categoryPath, { recursive: true }); + console.log(`📁 Created category: ${category}`); + } + } + } + + async createProjectSpecificStructure(projectType) { + const templates = this.getProjectTemplates(projectType); + + for (const [category, files] of Object.entries(templates)) { + const categoryPath = path.join(this.memoryBankDir, category); + + for (const file of files) { + const filePath = path.join(categoryPath, file); + if (!fs.existsSync(filePath)) { + const content = this.generateFileContent(file, projectType); + fs.writeFileSync(filePath, content); + console.log(`📄 Created: ${category}/${file}`); + } + } + } + } + + getProjectTemplates(projectType) { + const templates = { + 'react-typescript': { + 'core': [ + 'activeContext.md', + 'progress.md', + 'projectbrief.md', + 'session-log.md' + ], + 'errors': [ + 'errors.md', + 'build-errors.md', + 'runtime-errors.md', + 'ui-errors.md', + 'typescript-errors.md' + ], + 'architecture': [ + 'decisions.md', + 'patterns.md', + 'state-management.md', + 'component-structure.md', + 'routing.md' + ], + 'development': [ + 'testing-results.md', + 'debugging-guide.md', + 'devtools-guide.md', + 'version-management.md', + 'build-process.md' + ], + 'ui': [ + 'component-library.md', + 'styling-patterns.md', + 'responsive-design.md', + 'accessibility.md', + 'performance.md' + ], + 'planning': [ + 'feature-roadmap.md', + 'optimization-plans.md', + 'migration-plans.md', + 'tech-debt.md' + ], + 'context': [ + 'tech-stack.md', + 'dependencies.md', + 'environment.md', + 'deployment.md' + ] + }, + 'chrome-extension': { + 'core': [ + 'activeContext.md', + 'progress.md', + 'projectbrief.md', + 'session-log.md' + ], + 'errors': [ + 'errors.md', + 'manifest-errors.md', + 'permission-errors.md', + 'api-errors.md', + 'content-script-errors.md' + ], + 'architecture': [ + 'decisions.md', + 'background-scripts.md', + 'content-scripts.md', + 'popup-structure.md', + 'options-page.md' + ], + 'development': [ + 'testing-results.md', + 'debugging-guide.md', + 'devtools-guide.md', + 'version-management.md', + 'packaging.md' + ], + 'ui': [ + 'popup-design.md', + 'options-page.md', + 'content-ui.md', + 'icon-design.md' + ], + 'planning': [ + 'feature-roadmap.md', + 'store-publishing.md', + 'user-feedback.md', + 'security-audit.md' + ], + 'context': [ + 'chrome-apis.md', + 'permissions.md', + 'environment.md', + 'store-requirements.md' + ] + }, + 'node-api': { + 'core': [ + 'activeContext.md', + 'progress.md', + 'projectbrief.md', + 'session-log.md' + ], + 'errors': [ + 'errors.md', + 'api-errors.md', + 'database-errors.md', + 'authentication-errors.md', + 'validation-errors.md' + ], + 'architecture': [ + 'decisions.md', + 'api-design.md', + 'database-schema.md', + 'authentication.md', + 'middleware.md' + ], + 'development': [ + 'testing-results.md', + 'debugging-guide.md', + 'devtools-guide.md', + 'version-management.md', + 'deployment.md' + ], + 'ui': [ + 'api-documentation.md', + 'swagger-spec.md', + 'client-examples.md' + ], + 'planning': [ + 'feature-roadmap.md', + 'scaling-plans.md', + 'security-plans.md' + ], + 'context': [ + 'tech-stack.md', + 'dependencies.md', + 'environment.md', + 'infrastructure.md' + ] + }, + 'monorepo': { + 'core': [ + 'activeContext.md', + 'progress.md', + 'projectbrief.md', + 'session-log.md' + ], + 'errors': [ + 'errors.md', + 'build-errors.md', + 'dependency-errors.md', + 'workspace-errors.md' + ], + 'architecture': [ + 'decisions.md', + 'workspace-structure.md', + 'package-organization.md', + 'shared-libraries.md' + ], + 'development': [ + 'testing-results.md', + 'debugging-guide.md', + 'devtools-guide.md', + 'version-management.md', + 'ci-cd.md' + ], + 'ui': [ + 'shared-components.md', + 'design-system.md', + 'storybook.md' + ], + 'planning': [ + 'feature-roadmap.md', + 'migration-plans.md', + 'refactoring-plans.md' + ], + 'context': [ + 'tech-stack.md', + 'dependencies.md', + 'environment.md', + 'workspace-config.md' + ] + }, + 'fullstack': { + 'core': [ + 'activeContext.md', + 'progress.md', + 'projectbrief.md', + 'session-log.md' + ], + 'errors': [ + 'errors.md', + 'frontend-errors.md', + 'backend-errors.md', + 'database-errors.md', + 'deployment-errors.md' + ], + 'architecture': [ + 'decisions.md', + 'system-architecture.md', + 'api-design.md', + 'database-design.md', + 'frontend-architecture.md' + ], + 'development': [ + 'testing-results.md', + 'debugging-guide.md', + 'devtools-guide.md', + 'version-management.md', + 'deployment.md' + ], + 'ui': [ + 'component-library.md', + 'design-system.md', + 'responsive-design.md', + 'accessibility.md' + ], + 'planning': [ + 'feature-roadmap.md', + 'scaling-plans.md', + 'performance-plans.md' + ], + 'context': [ + 'tech-stack.md', + 'dependencies.md', + 'environment.md', + 'infrastructure.md' + ] + } + }; + + return templates[projectType] || templates['react-typescript']; + } + + generateFileContent(filename, projectType) { + const date = new Date().toISOString().split('T')[0]; + + const baseContent = `# ${this.getFileTitle(filename, projectType)} + +## Overview + +This file contains ${this.getFileDescription(filename, projectType)}. + +## Entries + + + +--- +*Generated on ${date} for ${projectType} project* +`; + + // Специальные шаблоны для ключевых файлов + if (filename === 'activeContext.md') { + return this.generateActiveContextTemplate(projectType); + } + + if (filename === 'projectbrief.md') { + return this.generateProjectBriefTemplate(projectType); + } + + if (filename === 'errors.md') { + return this.generateErrorsTemplate(projectType); + } + + return baseContent; + } + + generateActiveContextTemplate(projectType) { + const date = new Date().toISOString().split('T')[0]; + + return `# Active Context - ${projectType} + +## Current Status + +**Last Updated:** ${date} +**Project Type:** ${projectType} +**Phase:** Development + +## Active Tasks + +- [ ] Initial setup +- [ ] Core functionality +- [ ] Testing +- [ ] Documentation + +## Current Focus + +Describe current development focus and priorities. + +## Recent Decisions + +- Decision 1: Description +- Decision 2: Description + +## Next Steps + +- Step 1: Description +- Step 2: Description + +## Blockers + +- Blocker 1: Description +- Blocker 2: Description + +--- +*Auto-generated for ${projectType} project* +`; + } + + generateProjectBriefTemplate(projectType) { + const date = new Date().toISOString().split('T')[0]; + + return `# Project Brief - ${projectType} + +## Project Overview + +**Name:** [Project Name] +**Type:** ${projectType} +**Created:** ${date} +**Status:** Active + +## Goals + +- Goal 1: Description +- Goal 2: Description +- Goal 3: Description + +## Requirements + +- Requirement 1: Description +- Requirement 2: Description +- Requirement 3: Description + +## Constraints + +- Constraint 1: Description +- Constraint 2: Description + +## Success Criteria + +- Criterion 1: Description +- Criterion 2: Description + +--- +*Auto-generated for ${projectType} project* +`; + } + + generateErrorsTemplate(projectType) { + const date = new Date().toISOString().split('T')[0]; + + return `# Error Log - ${projectType} + +## Error Categories + +### Build Errors + + +### Runtime Errors + + +### UI/UX Errors + + +### ${this.getProjectSpecificErrorCategory(projectType)} + + +## Error Resolution Workflow + +1. **Document** - Record error details +2. **Analyze** - Understand root cause +3. **Solve** - Implement solution +4. **Test** - Verify resolution +5. **Document** - Update with solution + +## Recent Errors + + + +--- +*Auto-generated for ${projectType} project* +`; + } + + getFileTitle(filename, projectType) { + const titles = { + 'activeContext.md': `Active Context - ${projectType}`, + 'progress.md': `Progress - ${projectType}`, + 'projectbrief.md': `Project Brief - ${projectType}`, + 'session-log.md': `Session Log - ${projectType}`, + 'errors.md': `Error Log - ${projectType}`, + 'decisions.md': `Architecture Decisions - ${projectType}`, + 'patterns.md': `Design Patterns - ${projectType}`, + 'testing-results.md': `Testing Results - ${projectType}`, + 'debugging-guide.md': `Debugging Guide - ${projectType}`, + 'devtools-guide.md': `DevTools Guide - ${projectType}`, + 'version-management.md': `Version Management - ${projectType}`, + 'feature-roadmap.md': `Feature Roadmap - ${projectType}`, + 'tech-stack.md': `Tech Stack - ${projectType}`, + 'dependencies.md': `Dependencies - ${projectType}`, + 'environment.md': `Environment - ${projectType}` + }; + + return titles[filename] || filename.replace('.md', '').replace(/-/g, ' '); + } + + getFileDescription(filename, projectType) { + const descriptions = { + 'activeContext.md': 'current project context and status', + 'progress.md': 'development progress and milestones', + 'projectbrief.md': 'project overview and requirements', + 'session-log.md': 'development session logs', + 'errors.md': 'error tracking and resolution', + 'decisions.md': 'architectural decisions and rationale', + 'patterns.md': 'design patterns and best practices', + 'testing-results.md': 'testing outcomes and coverage', + 'debugging-guide.md': 'debugging procedures and tips', + 'devtools-guide.md': 'development tools usage', + 'version-management.md': 'version control and releases', + 'feature-roadmap.md': 'feature planning and roadmap', + 'tech-stack.md': 'technology stack and tools', + 'dependencies.md': 'project dependencies and versions', + 'environment.md': 'development environment setup' + }; + + return descriptions[filename] || 'project-specific information'; + } + + getProjectSpecificErrorCategory(projectType) { + const categories = { + 'react-typescript': 'TypeScript Errors', + 'chrome-extension': 'Extension Errors', + 'node-api': 'API Errors', + 'monorepo': 'Workspace Errors', + 'fullstack': 'Full-stack Errors' + }; + + return categories[projectType] || 'Project Errors'; + } + + async createIndexes(projectType) { + // Создаем главный индекс + await this.createMainIndex(projectType); + + // Создаем индексы для каждой категории + const categories = ['core', 'errors', 'architecture', 'development', 'ui', 'planning', 'context']; + + for (const category of categories) { + await this.createCategoryIndex(category, projectType); + } + } + + async createMainIndex(projectType) { + const indexPath = path.join(this.memoryBankDir, 'INDEX.md'); + const date = new Date().toISOString().split('T')[0]; + + const content = `# Memory Bank - ${projectType} Project + +## Project Information + +**Type:** ${projectType} +**Created:** ${date} +**Last Updated:** ${date} + +## Categories + +### 📋 [Core](./core/) - Основные файлы контекста +- activeContext.md - Текущий контекст проекта +- progress.md - Прогресс разработки +- projectbrief.md - Краткое описание проекта +- session-log.md - Лог сессий разработки + +### ❌ [Errors](./errors/) - Ошибки и решения +- errors.md - Кладбище ошибок (основной файл) +- build-errors.md - Ошибки сборки +- runtime-errors.md - Runtime ошибки +- ui-errors.md - UI/UX ошибки + +### 🏗️ [Architecture](./architecture/) - Архитектурные решения +- decisions.md - Принятые решения +- patterns.md - Системные паттерны +- ${this.getArchitectureFiles(projectType)} + +### 🔧 [Development](./development/) - Процесс разработки +- testing-results.md - Результаты тестирования +- debugging-guide.md - Руководство по отладке +- devtools-guide.md - Работа с DevTools +- version-management.md - Управление версиями + +### 🎨 [UI](./ui/) - UI/UX контекст +- ${this.getUIFiles(projectType)} + +### 📅 [Planning](./planning/) - Планирование +- feature-roadmap.md - Roadmap фич +- optimization-plans.md - Планы оптимизации + +### 🌍 [Context](./context/) - Контекстная информация +- tech-stack.md - Технический стек +- dependencies.md - Зависимости проекта +- environment.md - Окружение разработки + +## Quick Navigation + +- **Current Status**: [activeContext.md](./core/activeContext.md) +- **Progress**: [progress.md](./core/progress.md) +- **Errors**: [errors.md](./errors/errors.md) +- **Architecture**: [decisions.md](./architecture/decisions.md) + +## AI Commands + +- \`создай запись в memory-bank\` - Создать новую запись +- \`обнови контекст\` - Обновить активный контекст +- \`восстанови контекст\` - Восстановить полный контекст +- \`аудит memory-bank\` - Провести аудит + +--- +*Auto-generated for ${projectType} project on ${date}* +`; + + fs.writeFileSync(indexPath, content); + console.log('📋 Created main index: INDEX.md'); + } + + async createCategoryIndex(category, projectType) { + const categoryDir = path.join(this.memoryBankDir, category); + const indexPath = path.join(categoryDir, 'README.md'); + + if (!fs.existsSync(categoryDir)) return; + + const files = fs.readdirSync(categoryDir) + .filter(file => file.endsWith('.md') && file !== 'README.md') + .sort(); + + const content = `# ${this.getCategoryTitle(category)} - ${projectType} + +## Files in this category: + +${files.map(file => `- [${file.replace('.md', '')}](./${file})`).join('\n')} + +## Description: + +${this.getCategoryDescription(category)} + +## AI Commands: + +- \`добавь в ${category}\` - Добавить запись в эту категорию +- \`обнови ${category}\` - Обновить файлы в категории +- \`покажи ${category}\` - Показать содержимое категории + +--- +*Auto-generated for ${projectType} project* +`; + + fs.writeFileSync(indexPath, content); + console.log(`📋 Created index: ${category}/README.md`); + } + + getCategoryTitle(category) { + const titles = { + 'core': 'Core Files', + 'errors': 'Errors & Solutions', + 'architecture': 'Architecture Decisions', + 'development': 'Development Process', + 'ui': 'UI/UX Context', + 'planning': 'Planning & Roadmap', + 'context': 'Context Information' + }; + + return titles[category] || category; + } + + getCategoryDescription(category) { + const descriptions = { + 'core': 'Критически важные файлы для понимания текущего состояния проекта.', + 'errors': 'Проектно-специфичные ошибки и их решения.', + 'architecture': 'Принятые архитектурные решения с обоснованием.', + 'development': 'Результаты тестирования, руководства по отладке, процессы разработки.', + 'ui': 'UI/UX решения и улучшения, пользовательский опыт.', + 'planning': 'Планы развития проекта, roadmap, стратегические решения.', + 'context': 'Технический и продуктовый контекст, окружение разработки.' + }; + + return descriptions[category] || 'Category description'; + } + + getArchitectureFiles(projectType) { + const files = { + 'react-typescript': 'state-management.md - Управление состоянием\n- component-structure.md - Структура компонентов\n- routing.md - Маршрутизация', + 'chrome-extension': 'background-scripts.md - Background scripts\n- content-scripts.md - Content scripts\n- popup-structure.md - Структура popup', + 'node-api': 'api-design.md - Дизайн API\n- database-schema.md - Схема БД\n- authentication.md - Аутентификация', + 'monorepo': 'workspace-structure.md - Структура workspace\n- package-organization.md - Организация пакетов\n- shared-libraries.md - Общие библиотеки', + 'fullstack': 'system-architecture.md - Системная архитектура\n- api-design.md - Дизайн API\n- frontend-architecture.md - Архитектура фронтенда' + }; + + return files[projectType] || 'patterns.md - Системные паттерны'; + } + + getUIFiles(projectType) { + const files = { + 'react-typescript': 'component-library.md - Библиотека компонентов\n- styling-patterns.md - Паттерны стилизации\n- responsive-design.md - Адаптивный дизайн', + 'chrome-extension': 'popup-design.md - Дизайн popup\n- options-page.md - Страница настроек\n- content-ui.md - UI в content scripts', + 'node-api': 'api-documentation.md - Документация API\n- swagger-spec.md - Swagger спецификация\n- client-examples.md - Примеры клиентов', + 'monorepo': 'shared-components.md - Общие компоненты\n- design-system.md - Дизайн-система\n- storybook.md - Storybook', + 'fullstack': 'component-library.md - Библиотека компонентов\n- design-system.md - Дизайн-система\n- responsive-design.md - Адаптивный дизайн' + }; + + return files[projectType] || 'ui-patterns.md - UI паттерны'; + } +} + +// CLI обработка +async function main() { + const args = process.argv.slice(2); + const projectType = args[0] || 'react-typescript'; + + const creator = new MemoryBankStructureCreator(); + await creator.createStructure(projectType); +} + +if (require.main === module) { + main().catch(console.error); +} + +module.exports = MemoryBankStructureCreator; \ No newline at end of file diff --git a/.cursor/rules/memory-bank/INDEX.md b/.cursor/rules/memory-bank/INDEX.md new file mode 100644 index 00000000..0eee849e --- /dev/null +++ b/.cursor/rules/memory-bank/INDEX.md @@ -0,0 +1,65 @@ +# Memory Bank - React-TypeScript Project + +## Project Information + +**Type:** React-TypeScript +**Created:** 2025-07-19 +**Last Updated:** 2025-07-19 + +## Categories + +### 📋 [Core](./core/) - Core context files +- activeContext.md - Current project context +- progress.md - Development progress +- projectbrief.md - Краткое Description проекта +- session-log.md - Лог сессий разработки + +### ❌ [Errors](./errors/) - Errors and solutions +- errors.md - Error graveyard (основной файл) +- build-errors.md - Ошибки сборки +- runtime-errors.md - Runtime ошибки +- ui-errors.md - UI/UX ошибки + +### 🏗️ [Architecture](./architecture/) - Architectural decisions +- decisions.md - Принятые решения +- patterns.md - Системные Patterns +- State-management.md - Управление Stateм +- component-structure.md - Структура компонентов +- routing.md - Маршрутизация + +### 🔧 [Development](./development/) - Development process +- testing-resu.ts.md - Результаты тестирования +- debugging-guIDE.md - Руководство по отладке +- devtools-guIDE.md - Работа с DevTools +- version-management.md - Управление версиями + +### 🎨 [UI](./ui/) - UI/UX context +- component-library.md - Библиотека компонентов +- styling-patterns.md - Patterns стилизации +- responsive-design.md - Адаптивный Design + +### 📅 [Planning](./planning/) - Planning +- feature-roadmap.md - Roadmap фич +- optimization-plans.md - Планы оптимизации + +### 🌍 [Context](./context/) - Contextual information +- tech-stack.md - Технический стек +- dependencies.md - Dependencies проекта +- environment.md - Окружение разработки + +## Quick Navigation + +- **Current Status**: [activeContext.md](./core/activeContext.md) +- **Progress**: [progress.md](./core/progress.md) +- **Errors**: [errors.md](./errors/errors.md) +- **Architecture**: [decisions.md](./architecture/decisions.md) + +## AI Commands + +- `создай запись в memory-bank` - Create новую запись +- `обнови контекст` - Update Active контекст +- `восстанови контекст` - Восстановить полный контекст +- `аудит memory-bank` - Провести аудит + +--- +*Auto-generated for React-TypeScript project on 2025-07-19* diff --git a/.cursor/rules/memory-bank/architecture/README.md b/.cursor/rules/memory-bank/architecture/README.md new file mode 100644 index 00000000..21d38ba9 --- /dev/null +++ b/.cursor/rules/memory-bank/architecture/README.md @@ -0,0 +1,22 @@ +# Architecture Decisions - React-TypeScript + +## Files in this category: + +- [component-structure](./component-structure.md) +- [decisions](./decisions.md) +- [patterns](./patterns.md) +- [routing](./routing.md) +- [State-management](./State-management.md) + +## Description: + +Принятые архитектурные решения с обоснованием. + +## AI Commands: + +- `добавь в architecture` - Add запись в эту категорию +- `обнови architecture` - Update файлы в категории +- `покажи architecture` - Показать содержимое категории + +--- +*Auto-generated for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/architecture/component-structure.md b/.cursor/rules/memory-bank/architecture/component-structure.md new file mode 100644 index 00000000..6626b3ce --- /dev/null +++ b/.cursor/rules/memory-bank/architecture/component-structure.md @@ -0,0 +1,12 @@ +# component structure + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/architecture/decisions.md b/.cursor/rules/memory-bank/architecture/decisions.md new file mode 100644 index 00000000..720d2530 --- /dev/null +++ b/.cursor/rules/memory-bank/architecture/decisions.md @@ -0,0 +1,12 @@ +# Architecture Decisions - React-TypeScript + +## Overview + +This file contains architectural decisions and rationale. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/architecture/patterns.md b/.cursor/rules/memory-bank/architecture/patterns.md new file mode 100644 index 00000000..ae9baf41 --- /dev/null +++ b/.cursor/rules/memory-bank/architecture/patterns.md @@ -0,0 +1,12 @@ +# Design Patterns - React-TypeScript + +## Overview + +This file contains design patterns and best practices. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/architecture/routing.md b/.cursor/rules/memory-bank/architecture/routing.md new file mode 100644 index 00000000..a252858e --- /dev/null +++ b/.cursor/rules/memory-bank/architecture/routing.md @@ -0,0 +1,12 @@ +# routing + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/architecture/state-management.md b/.cursor/rules/memory-bank/architecture/state-management.md new file mode 100644 index 00000000..d7ecf603 --- /dev/null +++ b/.cursor/rules/memory-bank/architecture/state-management.md @@ -0,0 +1,12 @@ +# State management + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/context/README.md b/.cursor/rules/memory-bank/context/README.md new file mode 100644 index 00000000..374553e6 --- /dev/null +++ b/.cursor/rules/memory-bank/context/README.md @@ -0,0 +1,21 @@ +# Context Information - React-TypeScript + +## Files in this category: + +- [dependencies](./dependencies.md) +- [deployment](./deployment.md) +- [environment](./environment.md) +- [tech-stack](./tech-stack.md) + +## Description: + +Технический и продуктовый контекст, окружение разработки. + +## AI Commands: + +- `добавь в context` - Add запись в эту категорию +- `обнови context` - Update файлы в категории +- `покажи context` - Показать содержимое категории + +--- +*Auto-generated for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/context/dependencies.md b/.cursor/rules/memory-bank/context/dependencies.md new file mode 100644 index 00000000..6caba601 --- /dev/null +++ b/.cursor/rules/memory-bank/context/dependencies.md @@ -0,0 +1,12 @@ +# Dependencies - React-TypeScript + +## Overview + +This file contains project dependencies and versions. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/context/deployment.md b/.cursor/rules/memory-bank/context/deployment.md new file mode 100644 index 00000000..23fa5567 --- /dev/null +++ b/.cursor/rules/memory-bank/context/deployment.md @@ -0,0 +1,12 @@ +# deployment + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/context/environment.md b/.cursor/rules/memory-bank/context/environment.md new file mode 100644 index 00000000..54b83b38 --- /dev/null +++ b/.cursor/rules/memory-bank/context/environment.md @@ -0,0 +1,12 @@ +# Environment - React-TypeScript + +## Overview + +This file contains development environment setup. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/context/tech-stack.md b/.cursor/rules/memory-bank/context/tech-stack.md new file mode 100644 index 00000000..1d83f76a --- /dev/null +++ b/.cursor/rules/memory-bank/context/tech-stack.md @@ -0,0 +1,12 @@ +# Tech Stack - React-TypeScript + +## Overview + +This file contains technology stack and tools. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/core/INDEX.md b/.cursor/rules/memory-bank/core/INDEX.md new file mode 100644 index 00000000..68b2770e --- /dev/null +++ b/.cursor/rules/memory-bank/core/INDEX.md @@ -0,0 +1,59 @@ +# Memory Bank - Main Index + +## Categories: + +### 📋 [Core](./core/) - Core context files +- activeContext.md - Current project context +- progress.md - Development progress +- projectbrief.md - Краткое Description проекта +- session-log.md - Лог сессий разработки + +### ❌ [Errors](./errors/) - Errors and solutions +- errors.md - Error graveyard (основной файл) +- build-errors.md - Ошибки сборки +- runtime-errors.md - Runtime ошибки +- ui-errors.md - UI/UX ошибки + +### 🏗️ [Architecture](./architecture/) - Architectural decisions +- decisions.md - Принятые решения +- patterns.md - Системные Patterns +- security.md - Architecture безопасности +- comprehensive.md - Комплексная Architecture + +### 🔧 [Development](./development/) - Development process +- testing-resu.ts.md - Результаты тестирования +- debugging-guIDE.md - Руководство по отладке +- devtools-guIDE.md - Работа с DevTools +- version-management.md - Управление версиями + +### 🎨 [UI](./ui/) - UI/UX context +- sIDE-panel.md - Улучшения sIDE-panel +- chat-context.md - Контекст чата +- lazy-sync.md - Ленивая Synchronization + +### 📅 [Planning](./planning/) - Planning +- future-plans.md - Планы развития +- optimization-plans.md - Планы оптимизации +- roadmap.md - Roadmap проекта + +### 🌍 [Context](./context/) - Contextual information +- tech-context.md - Технический контекст +- product-context.md - Продуктовый контекст +- environment.md - Окружение разработки + +### 🗑️ [Deprecated](./deprecated/) - Deprecated files +- Старые файлы, дубликаты, мигрированные версии + +## Quick Navigation: + +- **Current Status**: [activeContext.md](./core/activeContext.md) +- **Progress**: [progress.md](./core/progress.md) +- **Errors**: [errors.md](./errors/errors.md) +- **Architecture**: [decisions.md](./architecture/decisions.md) +- **Testing**: [testing-resu.ts.md](./development/testing-resu.ts.md) + +## Structure Rules: + +See [MEMORY_BANK_STRUCTURE.md](./MEMORY_BANK_STRUCTURE.md) for detailed organization rules. + +Last updated: 2025-07-19 diff --git a/.cursor/rules/memory-bank/core/README.md b/.cursor/rules/memory-bank/core/README.md new file mode 100644 index 00000000..a3b68a3e --- /dev/null +++ b/.cursor/rules/memory-bank/core/README.md @@ -0,0 +1,23 @@ +# Core Files - React-TypeScript + +## Files in this category: + +- [INDEX](./INDEX.md) +- [activeContext](./activeContext.md) +- [migrated-INDEX](./migrated-INDEX.md) +- [progress](./progress.md) +- [projectbrief](./projectbrief.md) +- [session-log](./session-log.md) + +## Description: + +Критически важные файлы для понимания текущего состояния проекта. + +## AI Commands: + +- `добавь в core` - Add запись в эту категорию +- `обнови core` - Update файлы в категории +- `покажи core` - Показать содержимое категории + +--- +*Auto-generated for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/core/activeContext.md b/.cursor/rules/memory-bank/core/activeContext.md new file mode 100644 index 00000000..8c429166 --- /dev/null +++ b/.cursor/rules/memory-bank/core/activeContext.md @@ -0,0 +1,36 @@ +# Active Context - React-TypeScript + +## Current Status + +**Last Updated:** 2025-07-19 +**Project Type:** React-TypeScript +**Phase:** Development + +## Active Tasks + +- [ ] Initial setup +- [ ] Core functionality +- [ ] Testing +- [ ] Documentation + +## Current Focus + +Describe current development focus and priorities. + +## Recent Decisions + +- Decision 1: Description +- Decision 2: Description + +## Next Steps + +- Step 1: Description +- Step 2: Description + +## Blockers + +- Blocker 1: Description +- Blocker 2: Description + +--- +*Auto-generated for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/core/general.md b/.cursor/rules/memory-bank/core/general.md new file mode 100644 index 00000000..71e787bc --- /dev/null +++ b/.cursor/rules/memory-bank/core/general.md @@ -0,0 +1,31 @@ +# General - core + +## Overview + +This file contains core-related information and entries. + +## Entries + + + +--- +*Auto-generated file* + +## [2025-07-19 01:56:13] - New Entry + +**Type:** test +**Category:** core +**Priority:** high + +**Контекст:** No content provIDEd + +**Status:** 🔄 In Progress + + +**Теги:** #universal #Commands #testing + +**AI Команды:** +- `обнови контекст` - для обновления активного контекста +- `задокументируй` - для создания документации + +--- diff --git a/.cursor/rules/memory-bank/core/migrated-INDEX.md b/.cursor/rules/memory-bank/core/migrated-INDEX.md new file mode 100644 index 00000000..68b2770e --- /dev/null +++ b/.cursor/rules/memory-bank/core/migrated-INDEX.md @@ -0,0 +1,59 @@ +# Memory Bank - Main Index + +## Categories: + +### 📋 [Core](./core/) - Core context files +- activeContext.md - Current project context +- progress.md - Development progress +- projectbrief.md - Краткое Description проекта +- session-log.md - Лог сессий разработки + +### ❌ [Errors](./errors/) - Errors and solutions +- errors.md - Error graveyard (основной файл) +- build-errors.md - Ошибки сборки +- runtime-errors.md - Runtime ошибки +- ui-errors.md - UI/UX ошибки + +### 🏗️ [Architecture](./architecture/) - Architectural decisions +- decisions.md - Принятые решения +- patterns.md - Системные Patterns +- security.md - Architecture безопасности +- comprehensive.md - Комплексная Architecture + +### 🔧 [Development](./development/) - Development process +- testing-resu.ts.md - Результаты тестирования +- debugging-guIDE.md - Руководство по отладке +- devtools-guIDE.md - Работа с DevTools +- version-management.md - Управление версиями + +### 🎨 [UI](./ui/) - UI/UX context +- sIDE-panel.md - Улучшения sIDE-panel +- chat-context.md - Контекст чата +- lazy-sync.md - Ленивая Synchronization + +### 📅 [Planning](./planning/) - Planning +- future-plans.md - Планы развития +- optimization-plans.md - Планы оптимизации +- roadmap.md - Roadmap проекта + +### 🌍 [Context](./context/) - Contextual information +- tech-context.md - Технический контекст +- product-context.md - Продуктовый контекст +- environment.md - Окружение разработки + +### 🗑️ [Deprecated](./deprecated/) - Deprecated files +- Старые файлы, дубликаты, мигрированные версии + +## Quick Navigation: + +- **Current Status**: [activeContext.md](./core/activeContext.md) +- **Progress**: [progress.md](./core/progress.md) +- **Errors**: [errors.md](./errors/errors.md) +- **Architecture**: [decisions.md](./architecture/decisions.md) +- **Testing**: [testing-resu.ts.md](./development/testing-resu.ts.md) + +## Structure Rules: + +See [MEMORY_BANK_STRUCTURE.md](./MEMORY_BANK_STRUCTURE.md) for detailed organization rules. + +Last updated: 2025-07-19 diff --git a/.cursor/rules/memory-bank/core/progress.md b/.cursor/rules/memory-bank/core/progress.md new file mode 100644 index 00000000..fd42cfe2 --- /dev/null +++ b/.cursor/rules/memory-bank/core/progress.md @@ -0,0 +1,31 @@ +# Progress - React-TypeScript + +## Overview + +This file contains development progress and milestones. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* + +## [2025-07-19 01:47:05] - New Entry + +**Type:** progress +**Category:** core +**Priority:** high + +**Контекст:** No content provIDEd + +**Status:** 🔄 In Progress + + +**Теги:** #memory-bank #cursor #automation + +**AI Команды:** +- `обнови контекст` - для обновления активного контекста +- `задокументируй` - для создания документации + +--- diff --git a/.cursor/rules/memory-bank/core/projectbrief.md b/.cursor/rules/memory-bank/core/projectbrief.md new file mode 100644 index 00000000..04f2e336 --- /dev/null +++ b/.cursor/rules/memory-bank/core/projectbrief.md @@ -0,0 +1,33 @@ +# Project Brief - React-TypeScript + +## Project Overview + +**Name:** [Project Name] +**Type:** React-TypeScript +**Created:** 2025-07-19 +**Status:** Active + +## Goals + +- Goal 1: Description +- Goal 2: Description +- Goal 3: Description + +## Requireme.ts + +- Requirement 1: Description +- Requirement 2: Description +- Requirement 3: Description + +## Constrai.ts + +- Constraint 1: Description +- Constraint 2: Description + +## Success Criteria + +- Criterion 1: Description +- Criterion 2: Description + +--- +*Auto-generated for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/core/session-log.md b/.cursor/rules/memory-bank/core/session-log.md new file mode 100644 index 00000000..35ff1fc3 --- /dev/null +++ b/.cursor/rules/memory-bank/core/session-log.md @@ -0,0 +1,12 @@ +# Session Log - React-TypeScript + +## Overview + +This file contains development session logs. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/development/README.md b/.cursor/rules/memory-bank/development/README.md new file mode 100644 index 00000000..25270007 --- /dev/null +++ b/.cursor/rules/memory-bank/development/README.md @@ -0,0 +1,22 @@ +# Development Process - React-TypeScript + +## Files in this category: + +- [build-process](./build-process.md) +- [debugging-guIDE](./debugging-guIDE.md) +- [devtools-guIDE](./devtools-guIDE.md) +- [testing-resu.ts](./testing-resu.ts.md) +- [version-management](./version-management.md) + +## Description: + +Результаты тестирования, GuIDEs по отладке, Processes разработки. + +## AI Commands: + +- `добавь в development` - Add запись в эту категорию +- `обнови development` - Update файлы в категории +- `покажи development` - Показать содержимое категории + +--- +*Auto-generated for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/development/build-process.md b/.cursor/rules/memory-bank/development/build-process.md new file mode 100644 index 00000000..1a1ffcf4 --- /dev/null +++ b/.cursor/rules/memory-bank/development/build-process.md @@ -0,0 +1,12 @@ +# build process + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/development/debugging-guide.md b/.cursor/rules/memory-bank/development/debugging-guide.md new file mode 100644 index 00000000..5369fa55 --- /dev/null +++ b/.cursor/rules/memory-bank/development/debugging-guide.md @@ -0,0 +1,12 @@ +# Debugging GuIDE - React-TypeScript + +## Overview + +This file contains debugging procedures and tips. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/development/devtools-guide.md b/.cursor/rules/memory-bank/development/devtools-guide.md new file mode 100644 index 00000000..c0d68911 --- /dev/null +++ b/.cursor/rules/memory-bank/development/devtools-guide.md @@ -0,0 +1,12 @@ +# DevTools GuIDE - React-TypeScript + +## Overview + +This file contains development tools usage. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/development/testing-results.md b/.cursor/rules/memory-bank/development/testing-results.md new file mode 100644 index 00000000..bf105272 --- /dev/null +++ b/.cursor/rules/memory-bank/development/testing-results.md @@ -0,0 +1,12 @@ +# Testing Resu.ts - React-TypeScript + +## Overview + +This file contains testing outcomes and coverage. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/development/version-management.md b/.cursor/rules/memory-bank/development/version-management.md new file mode 100644 index 00000000..67b7e2f6 --- /dev/null +++ b/.cursor/rules/memory-bank/development/version-management.md @@ -0,0 +1,12 @@ +# Version Management - React-TypeScript + +## Overview + +This file contains version control and releases. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/errors/README.md b/.cursor/rules/memory-bank/errors/README.md new file mode 100644 index 00000000..eca2654f --- /dev/null +++ b/.cursor/rules/memory-bank/errors/README.md @@ -0,0 +1,22 @@ +# Errors & Solutions - React-TypeScript + +## Files in this category: + +- [build-errors](./build-errors.md) +- [errors](./errors.md) +- [runtime-errors](./runtime-errors.md) +- [TypeScript-errors](./TypeScript-errors.md) +- [ui-errors](./ui-errors.md) + +## Description: + +Проектно-специфичные ошибки и их решения. + +## AI Commands: + +- `добавь в errors` - Add запись в эту категорию +- `обнови errors` - Update файлы в категории +- `покажи errors` - Показать содержимое категории + +--- +*Auto-generated for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/errors/build-errors.md b/.cursor/rules/memory-bank/errors/build-errors.md new file mode 100644 index 00000000..b0462c1e --- /dev/null +++ b/.cursor/rules/memory-bank/errors/build-errors.md @@ -0,0 +1,12 @@ +# build errors + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/errors/errors.md b/.cursor/rules/memory-bank/errors/errors.md new file mode 100644 index 00000000..33bd85eb --- /dev/null +++ b/.cursor/rules/memory-bank/errors/errors.md @@ -0,0 +1,12 @@ + +## [2025-07-19T01:19:27.379Z] - New Entry + +Best practice: Использовать только ESM-экспорт для внутренних пакетов платформы. Это упрощает сборку, устраняет ошибки Vite/esbuild, ускоряет разработку и повышает Compatibility с современными инструментами. + +--- + +## [2025-07-19T01:19:22.935Z] - General Error + +Error сборки: Failed to resolve entry for package '@extension/vite-config'. Решение: перевести пакет на ESM-only, main: dist/index..js + +--- diff --git a/.cursor/rules/memory-bank/errors/runtime-errors.md b/.cursor/rules/memory-bank/errors/runtime-errors.md new file mode 100644 index 00000000..c8b0744e --- /dev/null +++ b/.cursor/rules/memory-bank/errors/runtime-errors.md @@ -0,0 +1,12 @@ +# runtime errors + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/errors/typescript-errors.md b/.cursor/rules/memory-bank/errors/typescript-errors.md new file mode 100644 index 00000000..7f9bbbfb --- /dev/null +++ b/.cursor/rules/memory-bank/errors/typescript-errors.md @@ -0,0 +1,12 @@ +# TypeScript errors + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/errors/ui-errors.md b/.cursor/rules/memory-bank/errors/ui-errors.md new file mode 100644 index 00000000..19cf9b26 --- /dev/null +++ b/.cursor/rules/memory-bank/errors/ui-errors.md @@ -0,0 +1,12 @@ +# ui errors + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/memory-bank-controller.mdc b/.cursor/rules/memory-bank/memory-bank-controller.mdc new file mode 100644 index 00000000..de782b38 --- /dev/null +++ b/.cursor/rules/memory-bank/memory-bank-controller.mdc @@ -0,0 +1,309 @@ +# Memory Bank Controller - Система управления memory-bank + +## 🎯 **Принцип: Memory-bank полностью подчинен .cursor правилам** + +### **Обоснование:** +- ✅ Оба каталога предназначены исключительно для AI +- ✅ Единая система правил и стандартов +- ✅ Автоматизация всех процессов +- ✅ Консистентность и предсказуемость +- ✅ Масштабируемость и поддерживаемость + +## 📋 **Структура управления memory-bank** + +### **1. Автоматическое создание структуры** +```bash +# Команда для создания структуры memory-bank +node cursor-manager..js create-memory-structure [project-type] + +# Поддерживаемые Typeы проектов: +- React-TypeScript # React + TypeScript проекты +- node-API # Node.js API проекты +- chrome-extension # Chrome Extension проекты +- monorepo # Монорепозитории +- fullstack # Full-stack приложения +``` + +### **2. Шаблоны структуры для разных Typeов проектов** + +#### **React TypeScript Project:** +``` +memory-bank/ +├── core/ +│ ├── activeContext.md # Текущий контекст React проекта +│ ├── progress.md # Development progress React компонентов +│ ├── projectbrief.md # Description React проекта +│ └── session-log.md # Лог сессий React разработки +├── errors/ +│ ├── errors.md # Ошибки React/TypeScript +│ ├── build-errors.md # Ошибки сборки Vite/Webpack +│ ├── runtime-errors.md # Runtime ошибки React +│ └── ui-errors.md # UI/UX ошибки +├── architecture/ +│ ├── decisions.md # Architectural decisions React +│ ├── patterns.md # React Patterns +│ ├── State-management.md # Управление Stateм +│ └── component-structure.md # Структура компонентов +├── development/ +│ ├── testing-resu.ts.md # Результаты тестирования React +│ ├── debugging-guIDE.md # Debugging React приложений +│ ├── devtools-guIDE.md # React DevTools +│ └── version-management.md # Управление версиями +├── ui/ +│ ├── component-library.md # Библиотека компонентов +│ ├── styling-patterns.md # Patterns стилизации +│ └── responsive-design.md # Адаптивный Design +├── planning/ +│ ├── feature-roadmap.md # Roadmap фич +│ ├── optimization-plans.md # Планы оптимизации +│ └── migration-plans.md # Планы миграции +├── context/ +│ ├── tech-stack.md # Технический стек +│ ├── dependencies.md # Dependencies проекта +│ └── environment.md # Окружение разработки +└── deprecated/ + └── old-files.md # Deprecated files +``` + +#### **Chrome Extension Project:** +``` +memory-bank/ +├── core/ +│ ├── activeContext.md # Текущий контекст extension +│ ├── progress.md # Development progress extension +│ ├── projectbrief.md # Description extension +│ └── session-log.md # Лог сессий разработки +├── errors/ +│ ├── errors.md # Ошибки extension +│ ├── manifest-errors.md # Ошибки manifest.json +│ ├── permission-errors.md # Ошибки разрешений +│ └── API-errors.md # Ошибки Chrome APIs +├── architecture/ +│ ├── decisions.md # Architectural decisions +│ ├── background-scri.ts.md # Background scri.ts +│ ├── content-scri.ts.md # Content scri.ts +│ └── popup-structure.md # Структура popup +├── development/ +│ ├── testing-resu.ts.md # Testing extension +│ ├── debugging-guIDE.md # Debugging extension +│ ├── devtools-guIDE.md # Chrome DevTools +│ └── version-management.md # Управление версиями +├── ui/ +│ ├── popup-design.md # Design popup +│ ├── options-page.md # Страница настроек +│ └── content-ui.md # UI в content scri.ts +├── planning/ +│ ├── feature-roadmap.md # Roadmap фич +│ ├── store-publishing.md # Публикация в store +│ └── user-feedback.md # Обратная связь пользователей +├── context/ +│ ├── chrome-APIs.md # Используемые Chrome APIs +│ ├── permissions.md # Требуемые разрешения +│ └── environment.md # Окружение разработки +└── deprecated/ + └── old-files.md # Deprecated files +``` + +## 🔄 **Автоматизация процессов memory-bank** + +### **1. Автоматическое создание записей** +```bash +# Команды для автоматического создания записей +node cursor-manager..js memory-add "content" --type=error --category=build +node cursor-manager..js memory-add "content" --type=decision --category=architecture +node cursor-manager..js memory-add "content" --type=progress --category=feature +``` + +### **2. Автоматическое обновление контекста** +```bash +# Обновление активного контекста +node cursor-manager..js memory-update-context --auto +node cursor-manager..js memory-update-progress --auto +node cursor-manager..js memory-update-session --auto +``` + +### **3. Автоматическое Recovery контекста** +```bash +# Recovery полного контекста +node cursor-manager..js memory-restore --full +node cursor-manager..js memory-restore --quick +node cursor-manager..js memory-restore --category=errors +``` + +## 📝 **Правила создания и сохранения контекста** + +### **1. Структура записей (унифицированная)** +```markdown +## [YYYY-MM-DD HH:MM:SS] - Краткое Description + +**Type:** error|decision|progress|context|plan +**Category:** build|runtime|architecture|ui|testing|planning +**Priority:** critical|high|medium|low + +**Контекст:** Description ситуации и обстоятельств + +**Детали:** Подробная информация о проблеме/решении + +**Решение/Результат:** Что было сделано и результат + +**Status:** ✅ Решено | 🔄 In Progress | ❌ Проблема | 📋 План + +**Связанные файлы:** +- .cursor/rules/dev/development-principles.mdc +- memory-bank/errors/build-errors.md + +**Теги:** #React #TypeScript #build #vite + +**AI Команды:** +- `аудит cursor` - для проверки .cursor правил +- `задокументируй` - для создания документации +``` + +### **2. Автоматические теги и категоризация** +```JavaScript +// Автоматическое определение тегов +const autoTags = { + 'React': /React.jsx|component|hook/i, + 'TypeScript': /TypeScript.ts|type|interface/i, + 'build': /build|compile|vite|webpack/i, + 'runtime': /runtime|error|crash|exception/i, + 'ui': /ui|ux|component|styling/i, + 'testing': /test|spec|jest|cypress/i, + 'architecture': /architecture|pattern|structure/i +}; +``` + +### **3. Автоматическое связывание с .cursor правилами** +```JavaScript +// Автоматическое создание связей +const ruleConnections = { + 'error': '.cursor/rules/dev/error-handling.mdc', + 'architecture': '.cursor/rules/architecture/patterns.mdc', + 'testing': '.cursor/rules/dev/testing-troubleshooting.mdc', + 'ui': '.cursor/rules/ui/ui-patterns.mdc', + 'build': '.cursor/rules/dev/build-troubleshooting.mdc' +}; +``` + +## 🤖 **AI Команды для управления memory-bank** + +### **1. Команды создания и обновления** +```bash +# Создание новой записи +"создай запись в memory-bank" / "add memory entry" +"добавь ошибку в memory-bank" / "add error to memory" +"запиши решение в memory-bank" / "record solution" + +# Обновление существующих записей +"обнови контекст" / "update context" +"обнови прогресс" / "update progress" +"обнови сессию" / "update session" +``` + +### **2. Команды восстановления и поиска** +```bash +# Recovery контекста +"восстанови контекст" / "restore context" +"восстанови полный контекст" / "restore full context" +"быстрое Recovery" / "quick restore" + +# Поиск информации +"найди в memory-bank" / "search memory" +"покажи ошибки" / "show errors" +"покажи решения" / "show solutions" +``` + +### **3. Команды управления структурой** +```bash +# Управление структурой +"создай структуру memory-bank" / "create memory structure" +"реорганизуй memory-bank" / "reorganize memory" +"очисти memory-bank" / "clean memory" +"аудит memory-bank" / "audit memory" +``` + +## 🔧 **Integration с существующими .cursor правилами** + +### **1. Обновление documentation-helper..js** +```JavaScript +// Add поддержку memory-bank команд +const memoryCommands = { + 'memory-add': 'Add запись в memory-bank', + 'memory-update': 'Update запись в memory-bank', + 'memory-restore': 'Восстановить контекст из memory-bank', + 'memory-search': 'Поиск в memory-bank', + 'memory-audit': 'Аудит memory-bank' +}; +``` + +### **2. Обновление ai-memory.mdc** +```markdown +### Memory Bank Management: +- `создай запись в memory-bank` - Create новую запись с автоматической категоризацией +- `обнови контекст` - Update activeContext.md с текущим Statusом +- `восстанови контекст` - Восстановить полный контекст из memory-bank +- `аудит memory-bank` - Провести аудит и оптимизацию memory-bank +- `реорганизуй memory-bank` - Реорганизовать структуру по новым правилам +``` + +### **3. Обновление cursor-manager..js** +```JavaScript +// Add команды управления memory-bank +case 'memory-add': + await this.memoryAdd(options); + break; +case 'memory-update': + await this.memoryUpdate(options); + break; +case 'memory-restore': + await this.memoryRestore(options); + break; +case 'memory-audit': + await this.memoryAudit(options); + break; +``` + +## 📊 **Автоматические отчеты и аналитика** + +### **1. Отчеты по memory-bank** +```bash +# Генерация отчетов +node cursor-manager..js memory-report --type=errors +node cursor-manager..js memory-report --type=progress +node cursor-manager..js memory-report --type=full +``` + +### **2. Аналитика использования** +```JavaScript +// Метрики memory-bank +const metrics = { + totalEntries: 0, + entriesByCategory: {}, + entriesByType: {}, + recentActivity: [], + mostReferencedRules: [], + errorResolutionRate: 0 +}; +``` + +## ✅ **Результат полной интеграции** + +### **Преимущества:** +- ✅ **Единая система правил** - все управляется через .cursor +- ✅ **Автоматизация** - Minimum ручного вмешательства +- ✅ **Консистентность** - единообразные форматы и структуры +- ✅ **Масштабируемость** - легко добавлять новые Typeы проектов +- ✅ **AI-Optimization** - все правила учитывают потребности AI +- ✅ **Воспроизводимость** - одинаковые результаты на разных проектах + +### **Workflow:** +1. **Создание проекта** → Автоматическое создание структуры memory-bank +2. **Development** → Автоматическое создание записей через AI команды +3. **Recovery контекста** → Автоматическое чтение и анализ memory-bank +4. **Аудит и Optimization** → Регулярные проверки и улучшения + +**Memory-bank теперь полностью интегрирован с .cursor правилами!** 🚀 +description: +globs: +alwaysApply: false +--- diff --git a/.cursor/rules/memory-bank/planning/README.md b/.cursor/rules/memory-bank/planning/README.md new file mode 100644 index 00000000..d61ef5fc --- /dev/null +++ b/.cursor/rules/memory-bank/planning/README.md @@ -0,0 +1,21 @@ +# Planning & Roadmap - React-TypeScript + +## Files in this category: + +- [feature-roadmap](./feature-roadmap.md) +- [migration-plans](./migration-plans.md) +- [optimization-plans](./optimization-plans.md) +- [tech-debt](./tech-debt.md) + +## Description: + +Планы развития проекта, roadmap, стратегические решения. + +## AI Commands: + +- `добавь в planning` - Add запись в эту категорию +- `обнови planning` - Update файлы в категории +- `покажи planning` - Показать содержимое категории + +--- +*Auto-generated for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/planning/feature-roadmap.md b/.cursor/rules/memory-bank/planning/feature-roadmap.md new file mode 100644 index 00000000..90ffb932 --- /dev/null +++ b/.cursor/rules/memory-bank/planning/feature-roadmap.md @@ -0,0 +1,12 @@ +# Feature Roadmap - React-TypeScript + +## Overview + +This file contains feature planning and roadmap. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/planning/migration-plans.md b/.cursor/rules/memory-bank/planning/migration-plans.md new file mode 100644 index 00000000..012f80e1 --- /dev/null +++ b/.cursor/rules/memory-bank/planning/migration-plans.md @@ -0,0 +1,12 @@ +# migration plans + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/planning/optimization-plans.md b/.cursor/rules/memory-bank/planning/optimization-plans.md new file mode 100644 index 00000000..a31a1b10 --- /dev/null +++ b/.cursor/rules/memory-bank/planning/optimization-plans.md @@ -0,0 +1,12 @@ +# optimization plans + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/planning/tech-debt.md b/.cursor/rules/memory-bank/planning/tech-debt.md new file mode 100644 index 00000000..01cbe91c --- /dev/null +++ b/.cursor/rules/memory-bank/planning/tech-debt.md @@ -0,0 +1,12 @@ +# tech debt + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/ui/README.md b/.cursor/rules/memory-bank/ui/README.md new file mode 100644 index 00000000..47639357 --- /dev/null +++ b/.cursor/rules/memory-bank/ui/README.md @@ -0,0 +1,22 @@ +# UI/UX Context - React-TypeScript + +## Files in this category: + +- [accessibility](./accessibility.md) +- [component-library](./component-library.md) +- [performance](./performance.md) +- [responsive-design](./responsive-design.md) +- [styling-patterns](./styling-patterns.md) + +## Description: + +UI/UX решения и улучшения, User Experience. + +## AI Commands: + +- `добавь в ui` - Add запись в эту категорию +- `обнови ui` - Update файлы в категории +- `покажи ui` - Показать содержимое категории + +--- +*Auto-generated for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/ui/accessibility.md b/.cursor/rules/memory-bank/ui/accessibility.md new file mode 100644 index 00000000..e80643a1 --- /dev/null +++ b/.cursor/rules/memory-bank/ui/accessibility.md @@ -0,0 +1,12 @@ +# accessibility + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/ui/component-library.md b/.cursor/rules/memory-bank/ui/component-library.md new file mode 100644 index 00000000..5c32e785 --- /dev/null +++ b/.cursor/rules/memory-bank/ui/component-library.md @@ -0,0 +1,12 @@ +# component library + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/ui/performance.md b/.cursor/rules/memory-bank/ui/performance.md new file mode 100644 index 00000000..e7b7c8ed --- /dev/null +++ b/.cursor/rules/memory-bank/ui/performance.md @@ -0,0 +1,12 @@ +# performance + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/ui/responsive-design.md b/.cursor/rules/memory-bank/ui/responsive-design.md new file mode 100644 index 00000000..d26e30f1 --- /dev/null +++ b/.cursor/rules/memory-bank/ui/responsive-design.md @@ -0,0 +1,12 @@ +# responsive design + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/memory-bank/ui/styling-patterns.md b/.cursor/rules/memory-bank/ui/styling-patterns.md new file mode 100644 index 00000000..05d60aae --- /dev/null +++ b/.cursor/rules/memory-bank/ui/styling-patterns.md @@ -0,0 +1,12 @@ +# styling patterns + +## Overview + +This file contains project-specific information. + +## Entries + + + +--- +*Generated on 2025-07-19 for React-TypeScript project* diff --git a/.cursor/rules/optimize-for-ai.cjs b/.cursor/rules/optimize-for-ai.cjs new file mode 100644 index 00000000..a13d2ae4 --- /dev/null +++ b/.cursor/rules/optimize-for-ai.cjs @@ -0,0 +1,398 @@ +#!/usr/bin/env node + +const fs = require('fs'); +const path = require('path'); + +class AIOptimizer { + constructor() { + this.rulesDir = path.join(__dirname); + } + + async optimize() { + console.log('🤖 Optimizing .cursor for AI and Cursor...\n'); + + await this.optimizeMetadata(); + await this.addAITags(); + await this.optimizeStructure(); + await this.createAIIndex(); + await this.validateAIReadiness(); + + console.log('\n✅ AI optimization completed!'); + } + + async optimizeMetadata() { + console.log('📋 Optimizing metadata for AI...'); + + const mdcFiles = this.getFilesByExt('.mdc'); + + for (const file of mdcFiles) { + const content = fs.readFileSync(file, 'utf8'); + const optimizedContent = this.optimizeFileMetadata(content, file); + + if (optimizedContent !== content) { + fs.writeFileSync(file, optimizedContent); + console.log(` ✅ Optimized ${path.relative(this.rulesDir, file)}`); + } + } + } + + optimizeFileMetadata(content, filePath) { + const metadataMatch = content.match(/^---\s*\n([\s\S]*?)\n---\s*\n/); + if (!metadataMatch) return content; + + const metadata = metadataMatch[1]; + const fileName = path.basename(filePath, '.mdc'); + const dirName = path.basename(path.dirname(filePath)); + + // Оптимизируем globs для лучшего понимания AI + let optimizedGlobs = this.getOptimizedGlobs(fileName, dirName); + let optimizedAlwaysApply = this.shouldAlwaysApply(fileName, dirName); + + // Добавляем AI-специфичные метаданные + let newMetadata = metadata; + + // Обновляем globs если нужно + if (!metadata.includes('globs:') || !metadata.includes(optimizedGlobs)) { + newMetadata = newMetadata.replace(/globs:.*\n/, `globs: ${optimizedGlobs}\n`); + if (!newMetadata.includes('globs:')) { + newMetadata = `globs: ${optimizedGlobs}\n${newMetadata}`; + } + } + + // Обновляем alwaysApply если нужно + if (!metadata.includes('alwaysApply:') || !metadata.includes(optimizedAlwaysApply.toString())) { + newMetadata = newMetadata.replace(/alwaysApply:.*\n/, `alwaysApply: ${optimizedAlwaysApply}\n`); + if (!newMetadata.includes('alwaysApply:')) { + newMetadata = `${newMetadata}alwaysApply: ${optimizedAlwaysApply}\n`; + } + } + + // Добавляем AI-специфичные поля + if (!metadata.includes('aiPriority:')) { + newMetadata = `${newMetadata}aiPriority: ${this.getAIPriority(fileName, dirName)}\n`; + } + + if (!metadata.includes('aiCategory:')) { + newMetadata = `${newMetadata}aiCategory: ${this.getAICategory(dirName)}\n`; + } + + if (newMetadata !== metadata) { + return content.replace(metadataMatch[0], `---\n${newMetadata}---\n\n`); + } + + return content; + } + + getOptimizedGlobs(fileName, dirName) { + const globMap = { + 'architecture': '["platform-core/**/*", "chrome-extension/src/background/*", "**/*.ts", "**/*.js"]', + 'dev': '["**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx", "**/*.py", "**/*.md"]', + 'doc': '["**/*.md", "**/*.mdc", "**/*.ts", "**/*.tsx", "**/*.js", "**/*.jsx"]', + 'plugin': '["public/plugins/**/*", "**/*.py", "**/*.json", "**/*.ts", "**/*.js"]', + 'security': '["**/*.ts", "**/*.js", "**/*.py", "**/*.json", "platform-core/**/*"]', + 'ui': '["pages/**/*", "**/*.tsx", "**/*.css", "**/*.scss", "packages/ui/**/*"]', + 'workflow': '["**/*.ts", "**/*.js", "**/*.json", "**/*.md", "**/*.mdc"]' + }; + + return globMap[dirName] || '["**/*"]'; + } + + shouldAlwaysApply(fileName, dirName) { + const alwaysApplyFiles = [ + 'ai-memory', 'environment', 'index', 'README', + 'principle', 'architecture', 'workflow', 'security', + 'ai-first', 'ai-fallback', 'mdc-file-standards' + ]; + + return alwaysApplyFiles.some(pattern => fileName.includes(pattern)) || dirName === 'architecture'; + } + + getAIPriority(fileName, dirName) { + if (fileName.includes('ai-memory') || fileName.includes('environment')) { + return 'critical'; + } else if (fileName.includes('principle') || fileName.includes('architecture')) { + return 'high'; + } else if (dirName === 'doc' || dirName === 'workflow') { + return 'medium'; + } else { + return 'normal'; + } + } + + getAICategory(dirName) { + const categoryMap = { + 'architecture': 'system-design', + 'dev': 'development-practices', + 'doc': 'documentation', + 'plugin': 'plugin-development', + 'security': 'security', + 'ui': 'user-interface', + 'workflow': 'process-management' + }; + + return categoryMap[dirName] || 'general'; + } + + async addAITags() { + console.log('🏷️ Adding AI-specific tags...'); + + const mdcFiles = this.getFilesByExt('.mdc'); + + for (const file of mdcFiles) { + const content = fs.readFileSync(file, 'utf8'); + const taggedContent = this.addAITagsToContent(content, file); + + if (taggedContent !== content) { + fs.writeFileSync(file, taggedContent); + console.log(` ✅ Added AI tags to ${path.relative(this.rulesDir, file)}`); + } + } + } + + addAITagsToContent(content, filePath) { + const fileName = path.basename(filePath, '.mdc'); + const dirName = path.basename(path.dirname(filePath)); + + // Добавляем AI-специфичные комментарии в начало файла + let aiHeader = ''; + + if (fileName.includes('principle')) { + aiHeader = ` + + + +`; + } else if (fileName.includes('architecture')) { + aiHeader = ` + + + +`; + } else if (fileName.includes('ai-')) { + aiHeader = ` + + + +`; + } + + if (aiHeader && !content.includes(' ${t}`); + }; + for (const r of Object.values(rels)) addEdge(r.from, r.to, r.type || 'rel'); + for (const r of Object.values(observedRels)) addEdge(r.from, r.to, r.type || 'rel'); + await ensureDir(DIAGRAMS_DIR); + await fs.writeFile(path.join(DIAGRAMS_DIR, 'graph.mmd'), lines.join('\n')); + console.log(`Generated ${path.join('memory-bank', 'diagrams', 'graph.mmd')}`); + } catch (e) { + console.warn('Failed to generate relations diagram:', e.message); + } +} + +function injectOrReplaceSection(content, header, body) { + const sectionHeader = `## ${header}`; + const start = content.indexOf(sectionHeader); + if (start !== -1) { + const end = content.indexOf('\n## ', start + sectionHeader.length); + if (end !== -1) return content.substring(0, start) + body + content.substring(end); + return content.substring(0, start) + body; + } + return content + body; +} + +async function updateReadmeDriftSection(compiledPath) { + try { + const compiled = JSON.parse(await fs.readFile(compiledPath, 'utf-8')); + const drift = compiled.drift || { observedNotDeclared: [], declaredNotObserved: [] }; + let readme = ''; + try { readme = await fs.readFile(README_PATH, 'utf-8'); } catch {} + const section = []; + section.push('\n## Drift'); + section.push(''); + section.push(`- observedNotDeclared: ${drift.observedNotDeclared.length}`); + section.push(`- declaredNotObserved: ${drift.declaredNotObserved.length}`); + section.push(''); + const body = section.join('\n') + '\n'; + const updated = injectOrReplaceSection(readme, 'Drift', body); + await fs.writeFile(README_PATH, updated); + } catch (e) { + console.warn('Failed to update README drift section:', e.message); + } +} + +async function getChangedFiles() { + try { + const out = await run('git diff --name-only HEAD'); + return out.split('\n').filter(Boolean); + } catch { + return []; + } +} + +async function performAudit(graph, settings, fileList = null) { + console.log('\n--- Performing Project Graph Audit ---'); + const excludePatterns = (settings.options.audit_exclude_patterns && settings.options.audit_exclude_patterns.value) || []; + let changedOnly = settings.options.audit_changed_only && settings.options.audit_changed_only.value; + if (!fileList && changedOnly) { + fileList = await getChangedFiles(); + } + + const normalizedGraphEntities = new Set( + Object.keys(graph.entities).map(entityPath => entityPath.replace(/\\/g, '/')) + ); + + let filesToAudit = []; + if (fileList) { + filesToAudit = fileList.map(file => file.replace(/\\/g, '/')); + } else { + for (const dir of AUDIT_DIRECTORIES) { + const files = await getAllFiles(dir); + filesToAudit.push(...files.map(file => file.replace(/\\/g, '/'))); + } + } + if (excludePatterns.length) { + filesToAudit = filesToAudit.filter(f => !excludePatterns.some(p => minimatch(f, p))); + } + + const missingFromGraph = []; + filesToAudit.forEach(file => { + if (!normalizedGraphEntities.has(file)) { + missingFromGraph.push(file); + } + }); + + const missingFromProject = []; + normalizedGraphEntities.forEach(entityPath => { + if (entityPath.includes('/') && AUDIT_DIRECTORIES.some(dir => entityPath.startsWith(dir))) { + if (!filesToAudit.includes(entityPath)) { + missingFromProject.push(entityPath); + } + } + }); + + if (missingFromGraph.length === 0 && missingFromProject.length === 0) { + console.log('[OK] Graph is in sync with the the audited files.'); + } else { + if (missingFromGraph.length > 0) { + console.log('\n[WARNING] Files exist in project but are MISSING from the graph:'); + missingFromGraph.forEach(file => console.log(` - ${file}`)); + } + if (missingFromProject.length > 0) { + console.log('\n[WARNING] Entities in graph but file does NOT EXIST in the audited scope:'); + missingFromProject.forEach(file => console.log(` - ${file}`)); + } + console.log('\nPlease update project_graph/graph_parts/entities.jsonnet to resolve these discrepancies.'); + } + console.log('----------------------------------'); + + if (settings.options.memory_bank && settings.options.memory_bank.value.update_on_audit) { + try { + await ensureDir(MEMORY_BANK_DIR); + const logEntry = `Audit performed on ${new Date().toISOString()}. Scope: ${fileList ? 'Committed Files' : 'Full Project'}. Status: ${missingFromGraph.length === 0 && missingFromProject.length === 0 ? 'OK' : 'WARNINGS'}.\n`; + await fs.appendFile(path.join(MEMORY_BANK_DIR, 'audit_logs.md'), logEntry); + console.log('Audit results logged to memory-bank/audit_logs.md'); + } catch (logError) { + console.warn(`Could not update memory-bank audit log: ${logError.message}`); + } + } +} + +async function runGenerator() { + console.log('Starting Project Graph Generator...'); + + // 1. Generate settings.json if it doesn't exist and load it + let settings = await generateSettingsFile(); + + // 2. Handle Memory Bank configuration interactively + settings = await handleMemoryBankSettings(settings); + + // 3. Compile Jsonnet to JSON + console.log(`Compiling ${GRAPH_SOURCE}...`); + await fs.mkdir(CACHE_DIR, { recursive: true }); + await run(`jsonnet -J ${PROJECT_GRAPH_DIR} --ext-str timestamp='${new Date().toISOString()}' -o ${COMPILED_GRAPH} ${GRAPH_SOURCE}`); + const graph = JSON.parse(await fs.readFile(COMPILED_GRAPH, 'utf-8')); + + // 4. Generate README.md + await generateReadme(graph); + + // 5. Run adapters + const observed = await runAdapters(graph, settings); + try { + const compiled = JSON.parse(await fs.readFile(COMPILED_GRAPH, 'utf-8')); + compiled.observed = observed; + await fs.writeFile(COMPILED_GRAPH, JSON.stringify(compiled, null, 2)); + } catch (e) { + console.warn('Could not attach observed graph to compiled output:', e.message); + } + + // 6. Perform Full Audit + await performAudit(graph, settings); + + // 7. Post-audit artifacts + const drift = await writeDriftArtifacts(COMPILED_GRAPH); + await snapshotGraph(); + await appendEvent({ event: 'graph_generated', observedCounts: { entities: Object.keys(observed.entities).length, relations: Object.keys(observed.relations).length }, drift }); + await writeRelationsDiagram(COMPILED_GRAPH); + await updateReadmeDriftSection(COMPILED_GRAPH); + await writePlansMarkdown(graph); + + // 8. Cleanup + const keepCompiled = (settings.options.keep_compiled_graph && settings.options.keep_compiled_graph.value) || process.argv.includes('--keep-compiled'); + if (keepCompiled) { + console.log(`Compiled graph kept at ${COMPILED_GRAPH}`); + } else { + await fs.unlink(COMPILED_GRAPH).catch(() => {}); + console.log('Temporary compiled graph removed.'); + } + console.log('\nProject Graph Generator finished successfully.'); +} + +runGenerator().catch(error => { + console.error('\nProject Graph Generator failed:', error); + fs.unlink(COMPILED_GRAPH).catch(() => {}); +}); \ No newline at end of file diff --git a/ProjectGraphAgent/scripts/graph_validator.mjs b/ProjectGraphAgent/scripts/graph_validator.mjs new file mode 100644 index 00000000..fbae92ee --- /dev/null +++ b/ProjectGraphAgent/scripts/graph_validator.mjs @@ -0,0 +1,93 @@ +// scripts/graph_validator.mjs +import fs from 'fs/promises'; +import path from 'path'; + +const PROJECT_ROOT = process.cwd(); +const PROJECT_GRAPH_DIR = PROJECT_ROOT; // Changed from path.join(PROJECT_ROOT, 'project_graph') +const CACHE_DIR = path.join(PROJECT_GRAPH_DIR, '.cache'); +const COMPILED_GRAPH = path.join(CACHE_DIR, 'graph.json'); + +async function validateGraph() { + console.log('\n--- Starting Project Graph Validation ---'); + let graph; + try { + graph = JSON.parse(await fs.readFile(COMPILED_GRAPH, 'utf-8')); + } catch (error) { + console.error(`Error reading compiled graph.json: ${error.message}`); + console.error('Please ensure project_graph/.cache/graph.json exists and is valid JSON. Run the generator first: `node project_graph/scripts/graph_generator.mjs --keep-compiled`.'); + process.exit(1); + } + + const errors = []; + + // Load schema from graph if present + const schema = graph.schema || {}; + const allowedTypes = new Set(schema.entityTypes || []); + const requiredByType = schema.requiredFieldsByType || {}; + + // 1. Validate Entities + const entityPaths = new Set(); + for (const key in graph.entities) { + const entity = graph.entities[key]; + if (!entity.type) errors.push(`Entity '${key}' is missing a 'type'.`); + if (entity.type && allowedTypes.size && !allowedTypes.has(entity.type)) errors.push(`Entity '${key}' has unknown type '${entity.type}'.`); + if (!entity.path) { + errors.push(`Entity '${key}' is missing a 'path'.`); + } + if (!entity.purpose) { + errors.push(`Entity '${key}' is missing a 'purpose'.`); + } + const required = requiredByType[entity.type] || requiredByType['default'] || []; + for (const field of required) { + if (!(field in entity)) errors.push(`Entity '${key}' is missing required field '${field}' by schema.`); + } + if (entityPaths.has(entity.path)) { + errors.push(`Duplicate entity path found: '${entity.path}'.`); + } + entityPaths.add(entity.path); + } + + // 2. Validate Relations + if (graph.relations) { + for (const key in graph.relations) { + const relation = graph.relations[key]; + if (!relation.from || !graph.entities[relation.from]) { + errors.push(`Relation '${key}' has an invalid or missing 'from' entity: '${relation.from}'.`); + } + if (!relation.to || !graph.entities[relation.to]) { + errors.push(`Relation '${key}' has an invalid or missing 'to' entity: '${relation.to}'.`); + } + if (!relation.type) { + errors.push(`Relation '${key}' is missing a 'type'.`); + } + } + } + + // Validate platform config paths for AI commands + const platforms = graph.aiCommands && graph.aiCommands.platforms; + if (platforms) { + for (const [k, platform] of Object.entries(platforms)) { + if (!platform || !platform.configPath) continue; + const full = path.join(PROJECT_ROOT, platform.configPath); + try { + await fs.access(full); + } catch { + console.warn(`AI platform config missing: ${platform.name} (${platform.configPath})`); + } + } + } + + if (errors.length > 0) { + console.error('\nValidation FAILED with the following errors:'); + errors.forEach(err => console.error(`- ${err}`)); + process.exit(1); + } else { + console.log('\nValidation SUCCESS: Project graph is structurally sound.'); + } + console.log('----------------------------------'); +} + +validateGraph().catch(error => { + console.error('Project Graph Validation failed unexpectedly:', error); + process.exit(1); +}); \ No newline at end of file diff --git a/ProjectGraphAgent/scripts/publish_workflow.mjs b/ProjectGraphAgent/scripts/publish_workflow.mjs new file mode 100644 index 00000000..04368dc5 --- /dev/null +++ b/ProjectGraphAgent/scripts/publish_workflow.mjs @@ -0,0 +1,150 @@ +#!/usr/bin/env node + +/** + * ProjectGraphAgent Publish Workflow + * + * This script automates the complete workflow from development to publication: + * 1. Sync changes to standalone directory + * 2. Clean standalone from parent project data + * 3. Prepare for GitHub publication + */ + +import { execSync } from 'child_process'; +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const PROJECT_ROOT = path.resolve(__dirname, '..'); + +// Paths +const PARENT_PROJECT = '/home/igor/Документы/Проекты/tsx_viewer/ProjectGraphAgent'; +const STANDALONE_PROJECT = '/home/igor/Документы/Проекты/ProjectGraphAgent'; + +function log(message, type = 'info') { + const timestamp = new Date().toISOString(); + const prefix = type === 'error' ? '❌' : type === 'success' ? '✅' : 'ℹ️'; + console.log(`${prefix} [${timestamp}] ${message}`); +} + +function runCommand(command, cwd = PROJECT_ROOT) { + try { + log(`Running: ${command}`, 'info'); + const output = execSync(command, { + cwd, + encoding: 'utf8', + stdio: 'inherit' + }); + return { success: true, output }; + } catch (error) { + log(`Command failed: ${command}`, 'error'); + log(`Error: ${error.message}`, 'error'); + return { success: false, error }; + } +} + +function checkGitStatus() { + try { + const status = execSync('git status --porcelain', { + cwd: STANDALONE_PROJECT, + encoding: 'utf8' + }); + return status.trim().split('\n').filter(line => line.length > 0); + } catch (error) { + return []; + } +} + +function main() { + log('🚀 Starting ProjectGraphAgent Publish Workflow...'); + + // Step 1: Sync to standalone + log('Step 1: Syncing to standalone directory...'); + const syncResult = runCommand('npm run sync', PARENT_PROJECT); + if (!syncResult.success) { + log('❌ Sync failed. Aborting workflow.', 'error'); + process.exit(1); + } + log('✅ Sync completed successfully'); + + // Step 2: Clean standalone + log('Step 2: Cleaning standalone directory...'); + const cleanResult = runCommand('npm run clean', STANDALONE_PROJECT); + if (!cleanResult.success) { + log('❌ Clean failed. Aborting workflow.', 'error'); + process.exit(1); + } + log('✅ Clean completed successfully'); + + // Step 3: Check Git status + log('Step 3: Checking Git status...'); + const changes = checkGitStatus(); + + if (changes.length === 0) { + log('ℹ️ No changes detected in standalone directory'); + log('Workflow completed successfully!'); + return; + } + + log(`📝 Found ${changes.length} changed files:`); + changes.forEach(change => { + log(` ${change}`, 'info'); + }); + + // Step 4: Git operations + log('Step 4: Preparing Git commit...'); + + // Check if Git is initialized + if (!fs.existsSync(path.join(STANDALONE_PROJECT, '.git'))) { + log('Initializing Git repository...'); + runCommand('git init', STANDALONE_PROJECT); + runCommand('git remote add origin https://github.com/LebedevIV/ProjectGraphAgent.git', STANDALONE_PROJECT); + } + + // Add all files + const addResult = runCommand('git add -A', STANDALONE_PROJECT); + if (!addResult.success) { + log('❌ Git add failed. Aborting workflow.', 'error'); + process.exit(1); + } + + // Commit + const commitMessage = `feat: update ProjectGraphAgent - ${new Date().toISOString().split('T')[0]}`; + const commitResult = runCommand(`git commit -m "${commitMessage}"`, STANDALONE_PROJECT); + if (!commitResult.success) { + log('❌ Git commit failed. Aborting workflow.', 'error'); + process.exit(1); + } + + log('✅ Git operations completed successfully'); + + // Step 5: Push to GitHub + log('Step 5: Pushing to GitHub...'); + log('⚠️ Ready to push to GitHub. Run the following command manually:'); + log(''); + log(`cd ${STANDALONE_PROJECT}`); + log('git push origin main'); + log(''); + log('Or run this workflow with --push flag to push automatically'); + + // Check for --push flag + if (process.argv.includes('--push')) { + log('Auto-pushing to GitHub...'); + const pushResult = runCommand('git push origin main', STANDALONE_PROJECT); + if (pushResult.success) { + log('✅ Successfully pushed to GitHub!'); + } else { + log('❌ Push failed. You may need to set up authentication.'); + } + } + + log('🎉 Publish workflow completed successfully!'); + log(''); + log('Next steps:'); + log('1. Review the changes in the standalone directory'); + log('2. Push to GitHub: cd /home/igor/Документы/Проекты/ProjectGraphAgent && git push origin main'); + log('3. Create a release on GitHub if needed'); +} + +main(); diff --git a/ProjectGraphAgent/scripts/sync_ai_commands.mjs b/ProjectGraphAgent/scripts/sync_ai_commands.mjs new file mode 100644 index 00000000..9daf337e --- /dev/null +++ b/ProjectGraphAgent/scripts/sync_ai_commands.mjs @@ -0,0 +1,69 @@ +// scripts/sync_ai_commands.mjs +// Synchronize AI commands into agent-specific rule files if present. + +import { exec } from 'child_process' +import fs from 'fs/promises' +import path from 'path' + +const PROJECT_ROOT = process.cwd() +const PROJECT_GRAPH_DIR = PROJECT_ROOT +const GRAPH_SOURCE = path.join(PROJECT_GRAPH_DIR, 'project_graph.jsonnet') + +const run = (cmd, options = {}) => new Promise((resolve, reject) => { + exec(cmd, options, (error, stdout, stderr) => { + if (error) return reject(new Error(stderr || stdout || error.message)) + resolve(stdout.trim()) + }) +}) + +async function compileGraph() { + const compiled = await run(`jsonnet -J ${PROJECT_GRAPH_DIR} ${GRAPH_SOURCE}`) + return JSON.parse(compiled) +} + +async function syncPlatform({ platformKey, platform, commands }) { + const target = path.join(PROJECT_ROOT, platform.configPath) + try { + await fs.access(target) + } catch { + console.warn(`Skipping ${platform.name}: ${platform.configPath} not found`) + return + } + const lines = [] + lines.push('') + lines.push('') + lines.push(``) + lines.push('') + for (const cmd of commands) { + if (platformKey === 'gemini') { + const aliases = cmd.triggerPhrases.map(p => `"${p}"`).join(' or ') + lines.push(`- Command Aliases: When the user requests ${aliases}, execute \`${cmd.npmCommand}\`${cmd.implemented === false ? ' (planned)' : ''}.`) + } else { + const header = cmd.name.split('-').map(s => s[0].toUpperCase() + s.slice(1)).join(' ') + lines.push(`## ${header}`) + lines.push(`- Trigger Phrase: "${cmd.triggerPhrases[0]}"`) + lines.push(`- Action: Run \`${cmd.npmCommand}\`${cmd.implemented === false ? ' (planned)' : ''}`) + lines.push(`- Description: ${cmd.description}`) + lines.push('') + } + } + await fs.appendFile(target, lines.join('\n')) + console.log(`Synced commands to ${platform.configPath}`) +} + +async function main() { + const graph = await compileGraph() + const cmds = (graph.aiCommands && graph.aiCommands.commands) || [] + const platforms = (graph.aiCommands && graph.aiCommands.platforms) || {} + for (const [key, value] of Object.entries(platforms)) { + await syncPlatform({ platformKey: key, platform: value, commands: cmds }) + } +} + +main().catch(err => { + console.error('sync_ai_commands failed:', err.message) + process.exit(1) +}) + +// TODO: Implement the Sync AI Commands script as described in README.md +// This script should synchronize AI command definitions across various AI assistant rule files. diff --git a/ProjectGraphAgent/scripts/sync_to_standalone.mjs b/ProjectGraphAgent/scripts/sync_to_standalone.mjs new file mode 100644 index 00000000..b41cf5af --- /dev/null +++ b/ProjectGraphAgent/scripts/sync_to_standalone.mjs @@ -0,0 +1,178 @@ +#!/usr/bin/env node + +/** + * ProjectGraphAgent Sync to Standalone + * + * This script syncs changes from the parent project's ProjectGraphAgent + * to the standalone ProjectGraphAgent directory for publication. + */ + +import fs from 'fs'; +import path from 'path'; +import { fileURLToPath } from 'url'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const PROJECT_ROOT = path.resolve(__dirname, '..'); + +// Paths +const PARENT_PROJECT = '/home/igor/Документы/Проекты/tsx_viewer/ProjectGraphAgent'; +const STANDALONE_PROJECT = '/home/igor/Документы/Проекты/ProjectGraphAgent'; + +// Files to sync (relative to ProjectGraphAgent root) +const FILES_TO_SYNC = [ + 'scripts/', + 'graph_parts/', + 'adapters/', + 'README.md', + 'README_PUBLISH.md', + 'CHANGELOG.md', + 'LLM_GUIDELINES.md', + 'LICENSE', + 'package.json', + '.gitignore' +]; + +// Files to exclude from sync (parent project specific) +const FILES_TO_EXCLUDE = [ + 'project_graph.jsonnet', // Contains parent project data + 'graph_parts/entities.jsonnet', // Contains parent project entities + 'settings.json', // Parent project settings + '.cache/', // Generated artifacts + 'memory-bank/' // Parent project memory +]; + +function log(message, type = 'info') { + const timestamp = new Date().toISOString(); + const prefix = type === 'error' ? '❌' : type === 'success' ? '✅' : 'ℹ️'; + console.log(`${prefix} [${timestamp}] ${message}`); +} + +function copyFile(sourcePath, destPath) { + try { + const destDir = path.dirname(destPath); + if (!fs.existsSync(destDir)) { + fs.mkdirSync(destDir, { recursive: true }); + } + + if (fs.statSync(sourcePath).isDirectory()) { + if (!fs.existsSync(destPath)) { + fs.mkdirSync(destPath, { recursive: true }); + } + } else { + fs.copyFileSync(sourcePath, destPath); + } + return true; + } catch (error) { + log(`Failed to copy ${sourcePath}: ${error.message}`, 'error'); + return false; + } +} + +function shouldExclude(filePath) { + return FILES_TO_EXCLUDE.some(excludePattern => { + if (excludePattern.endsWith('/')) { + return filePath.startsWith(excludePattern); + } + return filePath === excludePattern; + }); +} + +function syncDirectory(sourceDir, destDir, relativePath = '') { + let successCount = 0; + let totalCount = 0; + + try { + const items = fs.readdirSync(sourceDir); + + for (const item of items) { + const sourcePath = path.join(sourceDir, item); + const destPath = path.join(destDir, item); + const relativeItemPath = path.join(relativePath, item); + + if (shouldExclude(relativeItemPath)) { + log(`Skipping excluded file: ${relativeItemPath}`, 'info'); + continue; + } + + totalCount++; + + if (fs.statSync(sourcePath).isDirectory()) { + if (copyFile(sourcePath, destPath)) { + successCount += syncDirectory(sourcePath, destPath, relativeItemPath); + totalCount += 1; // Directory itself counts as one item + } + } else { + if (copyFile(sourcePath, destPath)) { + successCount++; + } + } + } + } catch (error) { + log(`Failed to sync directory ${sourceDir}: ${error.message}`, 'error'); + } + + return successCount; +} + +function syncSpecificFiles() { + let successCount = 0; + let totalCount = 0; + + for (const filePattern of FILES_TO_SYNC) { + const sourcePath = path.join(PARENT_PROJECT, filePattern); + const destPath = path.join(STANDALONE_PROJECT, filePattern); + + if (fs.existsSync(sourcePath)) { + totalCount++; + if (fs.statSync(sourcePath).isDirectory()) { + const count = syncDirectory(sourcePath, destPath, filePattern); + successCount += count; + } else { + if (copyFile(sourcePath, destPath)) { + successCount++; + } + } + } else { + log(`Source file/directory not found: ${sourcePath}`, 'error'); + } + } + + return { successCount, totalCount }; +} + +function main() { + log('Starting ProjectGraphAgent sync to standalone...'); + log(`Source: ${PARENT_PROJECT}`); + log(`Destination: ${STANDALONE_PROJECT}`); + + // Check if source exists + if (!fs.existsSync(PARENT_PROJECT)) { + log(`Source directory not found: ${PARENT_PROJECT}`, 'error'); + process.exit(1); + } + + // Check if destination exists + if (!fs.existsSync(STANDALONE_PROJECT)) { + log(`Creating destination directory: ${STANDALONE_PROJECT}`, 'info'); + fs.mkdirSync(STANDALONE_PROJECT, { recursive: true }); + } + + const { successCount, totalCount } = syncSpecificFiles(); + + log(`Sync completed: ${successCount}/${totalCount} operations successful`); + + if (successCount > 0) { + log('Files synced successfully!', 'success'); + log('Next steps:'); + log('1. Review the synced files in standalone directory'); + log('2. Run cleanup script: cd /home/igor/Документы/Проекты/ProjectGraphAgent && npm run clean'); + log('3. Commit and push to GitHub'); + } else { + log('No files were synced. Please check the source directory.', 'error'); + } +} + +if (import.meta.url === `file://${process.argv[1]}`) { + main(); +} diff --git a/ProjectGraphAgent/settings.json b/ProjectGraphAgent/settings.json new file mode 100644 index 00000000..f8080e9e --- /dev/null +++ b/ProjectGraphAgent/settings.json @@ -0,0 +1,32 @@ +{ + "settingsFileMetadata": { + "description": "Configuration file for project-specific settings, including AI agent behaviors.", + "fileName": "settings.json", + "filePath": "project_graph/settings.json" + }, + "options": { + "audit_after_commit": { + "description": "Automatically run a focused audit on committed files after each `graph:commit` operation.", + "value": false + }, + "keep_compiled_graph": { + "description": "Keep the compiled graph JSON at project_graph/.cache/graph.json after the generator finishes.", + "value": true + }, + "audit_exclude_patterns": { + "description": "Glob patterns to exclude from audits (applied to POSIX-style relative paths).", + "value": [ + "**/*.map", + "**/*.log" + ] + }, + "memory_bank": { + "description": "Configuration for the memory-bank system. `update_on_audit` logs results to audit_logs.md. `instruction_path` is the path to the instruction file.", + "value": { + "enabled": false, + "instruction_path": null, + "update_on_audit": true + } + } + } +} \ No newline at end of file diff --git a/README.md b/README.md index e3eed7d1..cf3ce403 100755 --- a/README.md +++ b/README.md @@ -1,191 +1,256 @@ # Agent Plugins Platform -Браузерное расширение, которое позволяет выполнять Python плагины в браузере с использованием Pyodide и MCP протокола. +A comprehensive platform for developing and managing AI agent plugins with automatic internationalization and protection systems. -## 🚀 Возможности +I apologize for abandoning it for so long - personal circumstances + I was waiting for development plans https://github.com/nanobrowser/nanobrowser so as not to duplicate functionality. -- **Python в браузере**: Выполнение Python кода через Pyodide -- **MCP протокол**: Стандартизированная коммуникация между JavaScript и Python -- **Плагинная архитектура**: Модульная система плагинов -- **Безопасность**: Песочница для изолированного выполнения -- **Современный UI**: React + TypeScript + Tailwind CSS +## 🌍 **Internationalization & Protection Systems** -## 📁 Архитектура проекта +### **Automatic Context Translation** +- **Command**: `Сохрани контекст` / `Save context` +- **Automatic translation** of context to English for AI/LLM compatibility +- **Backup creation** before translation +- **Git integration** with automatic commits -``` -agent-plugins-platform/ -├── platform-core/ # Основная логика платформы -│ ├── core/ # Ядро системы (PluginManager, HostAPI, WorkflowEngine) -│ ├── bridge/ # MCP Bridge и Pyodide Worker -│ ├── public/ # Плагины, Pyodide, wheels -│ ├── src/ # Background scripts -│ └── ui/ # UI компоненты -├── pages/ # Страницы расширения -│ ├── options/ # Страница настроек -│ ├── popup/ # Popup окно -│ ├── side-panel/ # Боковая панель -│ └── ... -├── packages/ # Внутренние пакеты -└── tests/ # Тесты -``` - -## 🛠️ Установка и разработка +### **Complete .cursor Protection** +- **Automatic protection** of all `.cursor` files +- **Real-time translation** to English +- **Git hooks** for automatic protection on commits/pushes +- **Comprehensive coverage** of technical terminology -### 🚀 Быстрый старт -**Для новых разработчиков**: -- [QUICK_START.md](QUICK_START.md) - быстрый старт (3 шага) -- [DEVELOPER_SETUP.md](DEVELOPER_SETUP.md) - полное руководство по настройке среды разработки +### **Auto Translate Requests** +- **Automatic translation** of user requests to English +- **Rule creation** with English templates +- **Interactive mode** for guided creation +- **Command-line interface** for quick creation -### Требования -- Node.js >= 22.15.1 -- pnpm >= 10.11.0 -- Cursor IDE (рекомендуется для лучшей работы с ИИ-ассистентом) - -### Установка зависимостей -```bash -pnpm install -``` +## 🚀 **Quick Start** -### Разработка +### **1. Protect .cursor Directory** ```bash -# Запуск в режиме разработки -pnpm dev +# Complete protection (recommended) +node .cursor/rules/protect-cursor.cjs protect -# Сборка для продакшена -pnpm build +# Check protection status +node .cursor/rules/protect-cursor.cjs check -# Создание ZIP архива -pnpm zip +# Install protection system +node .cursor/rules/protect-cursor.cjs install ``` -**Полный список команд для сборки, очистки, запуска и разработки:** -- [Developer Commands (developer-commands.md)](docs/developer-commands.md) - -#### Dev-команды для отдельных пакетов/страниц - +### **2. Save Context in English** ```bash -# Быстрый запуск разработки только для одной страницы/пакета: -pnpm --filter pages/options dev -pnpm --filter pages/side-panel dev -pnpm --filter packages/ui dev +# Save context with automatic translation +node .cursor/rules/save-context.cjs save + +# Only translate without committing +node .cursor/rules/save-context.cjs translate-only ``` -- Используйте эти команды для ускорения разработки, если меняются только отдельные части проекта. -- Можно запускать несколько dev-серверов параллельно для разных страниц. -### Тестирование +### **3. Create Rules with Auto Translation** ```bash -# E2E тесты -pnpm e2e +# Create rule with automatic translation +node .cursor/rules/create-rule.cjs "создай правило для архитектуры" -# Линтинг -pnpm lint - -# Проверка типов -pnpm type-check +# Interactive mode for guided creation +node .cursor/rules/auto-translate-requests.cjs interactive ``` -**Подробные команды и настройки**: См. [DEVELOPER_SETUP.md](DEVELOPER_SETUP.md) - -## 🔌 Разработка плагинов - -### Быстрый старт +### **4. Use NPM Scripts** ```bash -# Создание нового плагина -mkdir public/plugins/my-plugin -# Создайте manifest.json, mcp_server.py, icon.svg +npm run protect-cursor # Complete .cursor protection +npm run check-cursor # Check .cursor status +npm run install-cursor-hooks # Install Git hooks +npm run create-rule # Create rule with auto translation +npm run interactive-rules # Interactive rule creation ``` -### Структура плагина +## 🛡️ **Protection Features** + +### **For .cursor Directory** +- ✅ **Automatic translation** of all files to English +- ✅ **Git hooks** for real-time protection +- ✅ **Backup system** with timestamped files +- ✅ **Comprehensive terminology** coverage (500+ terms) +- ✅ **Error handling** with safe fallbacks + +### **For Context Files** +- ✅ **Automatic translation** of context to English +- ✅ **Backup creation** before translation +- ✅ **Git integration** with automatic commits +- ✅ **AI/LLM compatibility** optimization + +### **For User Requests** +- ✅ **Automatic translation** of requests to English +- ✅ **Rule creation** with English templates +- ✅ **Interactive mode** for guided creation +- ✅ **Command-line interface** for quick creation + +## 📋 **Available Commands** + +### **Context Management** +- `Сохрани контекст` - Save context in English (automatic translation) +- `Обнови прогресс` - Update project progress +- `Восстанови контекст` - Restore full project context +- `Быстрое восстановление` - Quick context summary + +### **Development** +- `Анализируй архитектуру` - Analyze project architecture +- `Изучи плагины` - Study existing plugins +- `Проверь сборку` - Check project build +- `Создай плагин [название]` - Create new plugin + +### **Project Management** +- `Увеличь версию [patch|minor|major]` - Bump version +- `Очисти проект` - Clean project files +- `Анализируй производительность` - Performance analysis +- `Проверь безопасность` - Security analysis + +## 🔧 **System Components** + +### **Cursor Protection System** +- **`cursor-protector.cjs`** - Main translation engine +- **`cursor-git-hook.cjs`** - Git hooks for automatic protection +- **`protect-cursor.cjs`** - Complete protection manager +- **`context-translator.cjs`** - Context translation system + +### **Auto Translate Requests System** +- **`request-translator.cjs`** - Request translation engine +- **`auto-translate-requests.cjs`** - Interactive system management +- **`create-rule.cjs`** - Quick rule creation utility + +### **Command Synchronization** +- **`command-sync.cjs`** - Synchronize commands across all sources +- **`save-context.cjs`** - Save context with automatic translation +- **`USER_COMMANDS.md`** - User-friendly command reference + +## 📁 **File Structure** + ``` -public/plugins/plugin-name/ -├── manifest.json # Метаданные и разрешения плагина -├── mcp_server.py # Python MCP сервер -├── workflow.json # Определение workflow (опционально) -└── icon.svg # Иконка плагина (опционально) +.cursor/ +├── rules/ +│ ├── cursor-protector.cjs # Main translation engine +│ ├── cursor-git-hook.cjs # Git hooks +│ ├── protect-cursor.cjs # Protection manager +│ ├── context-translator.cjs # Context translator +│ ├── request-translator.cjs # Request translator +│ ├── auto-translate-requests.cjs # Interactive system +│ ├── create-rule.cjs # Quick rule creator +│ ├── command-sync.cjs # Command synchronization +│ ├── save-context.cjs # Context saver +│ └── doc/ # Documentation +├── backup/ # Backup directory +└── [protected files] # All files in English + +memory-bank/ +├── core/ +│ ├── activeContext.md # Active context (English) +│ ├── progress.md # Progress tracking (English) +│ └── backup/ # Context backups +└── [other memory-bank files] ``` -**Подробное руководство**: См. [PLUGIN_DEVELOPMENT.md](PLUGIN_DEVELOPMENT.md) - -## 🔧 Конфигурация - -### Основные файлы -- **Настройки**: `pages/options/src/Options.tsx` -- **Компоненты**: `pages/options/src/components/` -- **Стили**: `pages/options/src/Options.css` - -### Alias для импортов -- `@platform-core` — core, bridge, хуки, UI -- `@platform-public` — public/plugins, public/pyodide, public/wheels - -**Подробная конфигурация**: См. [DEVELOPER_SETUP.md](DEVELOPER_SETUP.md) - -## 🧪 Тестирование - +## 🌟 **Key Benefits** + +### **For AI/LLM Compatibility** +- **Universal accessibility** - Any AI assistant can read all files +- **Language consistency** - All content in English +- **Better understanding** - Clear terminology for AI processing +- **Reduced confusion** - No mixed language content + +### **For International Community** +- **Global accessibility** - Ready for international developers +- **Standardized format** - Consistent English documentation +- **Easy sharing** - No language barriers +- **Professional appearance** - English for global audience + +### **For Development Workflow** +- **Automatic process** - No manual translation needed +- **Safe operation** - Backups created automatically +- **Git integration** - Seamless workflow integration +- **Error prevention** - Blocks problematic commits/pushes + +## 🔄 **Workflow Integration** + +### **Automatic Protection** +1. **Write in any language** - System automatically translates +2. **Git operations** - Hooks ensure protection +3. **Commit/push** - Automatic translation and validation +4. **Backup safety** - Original files always preserved + +### **Rule Creation** +1. **Write request in Russian** - System automatically translates +2. **Review translation** - Check confidence and accuracy +3. **Confirm creation** - Rule is created in English +4. **Edit as needed** - Add specific content and details +5. **Commit changes** - Git integration handles the rest + +### **Manual Protection** ```bash -pnpm e2e # E2E тесты -pnpm test # Unit тесты -``` +# Protect .cursor directory +npm run protect-cursor -**Подробное тестирование**: См. [DEVELOPER_SETUP.md](DEVELOPER_SETUP.md) +# Save context in English +npm run save-context -## 📦 Сборка и деплой +# Create rule with auto translation +npm run create-rule "your request" -```bash -pnpm build # Сборка для Chrome Web Store -pnpm build:firefox # Сборка для Firefox Add-ons -pnpm zip # Создание ZIP архива +# Check protection status +npm run check-cursor ``` -**Подробная сборка**: См. [DEVELOPER_SETUP.md](DEVELOPER_SETUP.md) +## 📚 **Documentation** -## 🔒 Безопасность +- **`.cursor/rules/doc/cursor-protection-system.mdc`** - Complete protection system guide +- **`.cursor/rules/doc/context-translation-system.mdc`** - Context translation guide +- **`.cursor/rules/doc/auto-translate-requests.mdc`** - Auto translate requests guide +- **`.cursor/rules/doc/command-synchronization.mdc`** - Command system guide +- **`USER_COMMANDS.md`** - User command reference -- Валидация манифестов плагинов -- Песочница для изолированного выполнения -- Принцип минимальных привилегий -- Аудит кода плагинов +## 🛠️ **Troubleshooting** -**Подробная безопасность**: См. [DEVELOPER_SETUP.md](DEVELOPER_SETUP.md) +### **Common Issues** +1. **Files not translated** - Check `.cursorignore` exclusions +2. **Git hooks not working** - Run `npm run install-cursor-hooks` +3. **Translation quality** - Check backup files for original content +4. **Rule creation fails** - Check file permissions and git status -## 📄 Лицензия +### **Debug Commands** +```bash +# Check protection status +node .cursor/rules/protect-cursor.cjs check -MIT License - см. файл [LICENSE](LICENSE) +# Test translation +node .cursor/rules/cursor-protector.cjs protect -## 🤝 Вклад в проект +# Test request translation +node .cursor/rules/request-translator.cjs analyze "your request" -1. Fork репозитория -2. Создайте feature branch (`git checkout -b feature/amazing-feature`) -3. Commit изменения (`git commit -m 'Add amazing feature'`) -4. Push в branch (`git push origin feature/amazing-feature`) -5. Откройте Pull Request +# Verify Git hooks +ls -la .git/hooks/ +``` -## 📞 Поддержка +## 🎯 **Future Enhancements** -Если у вас есть вопросы или проблемы, создайте issue в репозитории. +- **API integration** with translation services +- **Machine learning** for better translations +- **Real-time translation** during editing +- **Multi-language support** for other languages +- **IDE plugins** for real-time protection -## Как открыть вкладку Agent Platform Tools (DevTools расширения) +## 🤝 **Contributing** -1. Откройте любую страницу (например, Ozon). -2. Нажмите F12, чтобы открыть стандартные DevTools браузера. -3. В верхнем меню DevTools найдите вкладку **Agent Platform Tools** (если не видно — нажмите на `>>` справа от вкладок). -4. Перейдите на вкладку **Agent Platform Tools** — откроется интерфейс расширения. -5. Для инспекции консоли этой вкладки используйте **ПКМ → Просмотреть код** внутри панели (F12 работает только для основной страницы). -6. В открывшейся консоли будет доступен `chrome.runtime` и все API расширения. +This platform is designed for international collaboration. All contributions should: +- Use English for all documentation and code comments +- Follow the established protection systems +- Maintain AI/LLM compatibility +- Support global accessibility -**Важно:** -- Все тестовые скрипты и логи рекомендуется запускать и смотреть именно в этой вкладке или через боковую панель расширения. -- Название вкладки уникальное, чтобы не путать с системной вкладкой DevTools. +## 📄 **License** -<<<<<<< HEAD -## Организационные best practices и автоматизация +This project is licensed under the MIT License - see the LICENSE file for details. -- [Инструкция по переносу best practices и автоматизаций (для пользователя)](docs/transfer-best-practices-user.md) -- [AI best practices (только для AI-ассистентов, EN)](docs/for-ai-best-practices/README.md) -- [Организационные знания и правила (memory-bank, EN, только для AI)](memory-bank/README.md) -======= --- -## AI Knowledge Fallback -If the AI agent cannot answer a question from its own memory-bank, it must first consult the .cursor/rules directory, and if no answer is found there, then consult the memory-bank directory. See [.cursor/rules/doc/ai-fallback.rules.md](.cursor/rules/doc/ai-fallback.rules.md) for details. ---- ->>>>>>> origin/develop +**Ready for international collaboration with automatic AI/LLM compatibility!** 🌍🤖 diff --git a/USER_COMMANDS.md b/USER_COMMANDS.md index d4df7ab2..4b0670cf 100644 --- a/USER_COMMANDS.md +++ b/USER_COMMANDS.md @@ -2,128 +2,86 @@ Просто скопируйте и вставьте любую из этих команд в чат с AI-ассистентом. -## 📝 Сохранение контекста +## 📝 Context and Memory -### Сохранить контекст сессии -``` -Сохрани контекст -``` -*AI-ассистент сохранит все достижения, решения и планы в memory-bank* +### AI-ассистент автоматически переведет и сохранит все достижения, решения и планы в memory-bank на английском языке для совместимости с AI/LLM +`Сохрани контекст` / `Сохранить контекст сессии` +*AI-ассистент автоматически переведет и сохранит все достижения, решения и планы в memory-bank на английском языке для совместимости с AI/LLM* -### Обновить прогресс проекта -``` -Обнови прогресс -``` +### AI-ассистент обновит файлы activeContext.md и progress.md с текущим статусом +`Обнови прогресс` / `Обновить прогресс проекта` *AI-ассистент обновит файлы activeContext.md и progress.md с текущим статусом* -## 🔄 Восстановление контекста - -### Восстановить полный контекст -``` -Восстанови контекст -``` +### AI-ассистент изучит все файлы memory-bank и восстановит полное понимание проекта +`Восстанови контекст` / `Восстановить полный контекст` *AI-ассистент изучит все файлы memory-bank и восстановит полное понимание проекта* -### Быстрое восстановление -``` -Быстрое восстановление -``` +### AI-ассистент получит краткую сводку ключевых принципов и текущего статуса +`Быстрое восстановление` *AI-ассистент получит краткую сводку ключевых принципов и текущего статуса* -## 🏗️ Разработка +## 🏗️ Analysis and Study -### Анализ архитектуры -``` -Анализируй архитектуру -``` +### AI-ассистент изучит systemPatterns.md и techContext.md для понимания архитектуры +`Анализируй архитектуру` / `Анализ архитектуры` *AI-ассистент изучит systemPatterns.md и techContext.md для понимания архитектуры* -### Изучить плагины -``` -Изучи плагины -``` +### AI-ассистент проанализирует существующие плагины и их структуру +`Изучи плагины` *AI-ассистент проанализирует существующие плагины и их структуру* -### Проверить сборку -``` -Проверь сборку -``` +### AI-ассистент проверит, что проект собирается и работает корректно +`Проверь сборку` / `Проверить сборку` *AI-ассистент проверит, что проект собирается и работает корректно* -## 📚 Документация - -### Обновить документацию -``` -Обнови документацию -``` +### AI-ассистент проверит и обновит README.md и PLUGIN_DEVELOPMENT.md +`Обнови документацию` / `Обновить документацию` *AI-ассистент проверит и обновит README.md и PLUGIN_DEVELOPMENT.md* -### Создать новый плагин -``` -Создай плагин [название] -``` -*AI-ассистент создаст новый плагин с указанным названием* +## 🔧 Development -## 🔧 Утилиты +### AI-ассистент создаст новый плагин с указанным названием +`Создай плагин [название]` +*AI-ассистент создаст новый плагин с указанным названием* -### Версионирование -``` -Увеличь версию [patch|minor|major] -``` -*AI-ассистент увеличит версию проекта (например: "Увеличь версию minor")* +### AI-ассистент выполнит линтинг и проверку типов +`Проверь код` / `Проверить линтинг` +*AI-ассистент выполнит линтинг и проверку типов* -### Очистка проекта -``` -Очисти проект -``` -*AI-ассистент выполнит очистку node_modules, dist и кэша* +### AI-ассистент запустит все тесты проекта +`Запусти тесты` / `Запустить тесты` +*AI-ассистент запустит все тесты проекта* -### Проверить зависимости -``` -Проверь зависимости -``` +### AI-ассистент проверит актуальность и совместимость зависимостей +`Проверь зависимости` / `Проверить зависимости` *AI-ассистент проверит актуальность и совместимость зависимостей* -## 🧪 Тестирование - -### Запустить тесты -``` -Запусти тесты -``` -*AI-ассистент запустит все тесты проекта* +## 📊 Project Management -### Проверить линтинг -``` -Проверь код -``` -*AI-ассистент выполнит линтинг и проверку типов* +### AI-ассистент увеличит версию проекта (например: "Увеличь версию minor") +`Увеличь версию [patch|minor|major]` / `Версионирование` +*AI-ассистент увеличит версию проекта (например: "Увеличь версию minor")* -## 📊 Анализ +### AI-ассистент выполнит очистку node_modules, dist и кэша +`Очисти проект` / `Очистка проекта` +*AI-ассистент выполнит очистку node_modules, dist и кэша* -### Анализ производительности -``` -Анализируй производительность -``` +### AI-ассистент проанализирует производительность проекта и предложит оптимизации +`Анализируй производительность` / `Анализ производительности` *AI-ассистент проанализирует производительность проекта и предложит оптимизации* -### Анализ безопасности -``` -Проверь безопасность -``` +### AI-ассистент проанализирует безопасность кода и конфигурации +`Проверь безопасность` / `Анализ безопасности` *AI-ассистент проанализирует безопасность кода и конфигурации* -## 🚀 Развертывание +## 🚀 Releases and Deployment -### Создать релиз -``` -Создай релиз -``` +### AI-ассистент подготовит проект к релизу (увеличит версию, создаст ZIP) +`Создай релиз` / `Создать релиз` *AI-ассистент подготовит проект к релизу (увеличит версию, создаст ZIP)* -### Сборка для продакшена -``` -Собери для продакшена -``` +### AI-ассистент выполнит полную сборку для продакшена +`Собери для продакшена` / `Сборка для продакшена` *AI-ассистент выполнит полную сборку для продакшена* --- @@ -150,7 +108,7 @@ - AI-ассистент автоматически изучит файлы memory-bank при необходимости - Все команды выполняются с учетом текущего контекста проекта - Результаты сохраняются в соответствующих файлах memory-bank -- Команды работают с любой LLM моделью, которая следует инструкциям +- Команды работают с любой LLM моделью, которая следует инструкциям ## Восстановление контекста проекта в новом чате @@ -168,4 +126,4 @@ - Если нужно сфокусироваться только на определённой части контекста - Если хочешь ускорить процесс и не ждать уточняющих вопросов -**Совет:** Если что-то важно для будущей работы — фиксируй это в memory-bank, чтобы не потерять при смене чата или ассистента. \ No newline at end of file +**Совет:** Если что-то важно для будущей работы — фиксируй это в memory-bank, чтобы не потерять при смене чата или ассистента. diff --git a/bash-scripts/copy-side-panel.sh b/bash-scripts/copy-side-panel.sh new file mode 100755 index 00000000..91acda1f --- /dev/null +++ b/bash-scripts/copy-side-panel.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +# Скрипт для копирования собранной side-panel в папку расширения +# Использование: ./bash-scripts/copy-side-panel.sh + +set -e + +echo "🔄 Копирование side-panel в расширение..." + +# Пути +SOURCE_DIR="dist/side-panel" +TARGET_DIR="chrome-extension/public/side-panel" + +# Проверяем, что исходная папка существует +if [ ! -d "$SOURCE_DIR" ]; then + echo "❌ Ошибка: Папка $SOURCE_DIR не найдена" + echo " Сначала выполните: cd pages/side-panel && pnpm run build" + exit 1 +fi + +# Создаём целевую папку, если её нет +mkdir -p "$TARGET_DIR" + +# Копируем файлы +echo "📁 Копирование файлов из $SOURCE_DIR в $TARGET_DIR..." +cp -r "$SOURCE_DIR"/* "$TARGET_DIR/" + +echo "✅ Side-panel успешно скопирована в $TARGET_DIR" +echo "🔄 Теперь перезагрузите расширение в Chrome:" +echo " 1. Откройте chrome://extensions/" +echo " 2. Найдите ваше расширение" +echo " 3. Нажмите кнопку 'Обновить' (🔄)" +echo " 4. Откройте боковую панель для проверки" \ No newline at end of file diff --git a/bash-scripts/run-chromium-old-extension.sh b/bash-scripts/run-chromium-old-extension.sh new file mode 100644 index 00000000..b351e7d9 --- /dev/null +++ b/bash-scripts/run-chromium-old-extension.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +set -e + +# Путь к папке со старой версией расширения (укажите свой путь, если нужно) +EXT_DIR="/tmp/chrome-extension-old" +PROFILE_DIR="/tmp/chrome-manual-profile-old" + +CHROME_BIN=$(which chromium || which google-chrome || which chrome) +if [ -z "$CHROME_BIN" ]; then + echo "Chromium/Chrome не найден. Установите браузер." + exit 1 +fi + +$CHROME_BIN \ + --disable-extensions-except=$EXT_DIR \ + --load-extension=$EXT_DIR \ + --user-data-dir=$PROFILE_DIR \ + --no-first-run \ + about:blank + +# Инструкция: +# 1. Скопируйте нужную версию расширения в $EXT_DIR +# 2. Запустите этот скрипт: bash bash-scripts/run-chromium-old-extension.sh +# 3. В открывшемся Chromium будет установлена старая версия расширения \ No newline at end of file diff --git a/chrome-extension/package.json b/chrome-extension/package.json index 7711c3e7..bf2d5784 100644 --- a/chrome-extension/package.json +++ b/chrome-extension/package.json @@ -1,6 +1,6 @@ { "name": "chrome-extension", - "version": "0.5.169", + "version": "0.5.360", "description": "chrome extension - core settings", "type": "module", "private": true, @@ -26,6 +26,8 @@ "webextension-polyfill": "^0.12.0" }, "devDependencies": { + "@types/node": "*", + "@types/chrome": "*", "@extension/dev-utils": "workspace:*", "@extension/hmr": "workspace:*", "@extension/tsconfig": "workspace:*", diff --git a/chrome-extension/public/pyodide/package.json b/chrome-extension/public/pyodide/package.json index 1fc4db17..9aa3084a 100644 --- a/chrome-extension/public/pyodide/package.json +++ b/chrome-extension/public/pyodide/package.json @@ -1,6 +1,6 @@ { "name": "pyodide", - "version": "0.27.176", + "version": "0.27.367", "description": "The Pyodide JavaScript package", "keywords": [ "python", @@ -132,6 +132,6 @@ }, "types": "./pyodide.d.ts", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } } diff --git a/chrome-extension/src/background/index.ts b/chrome-extension/src/background/index.ts index 440e8f9b..b0e384b7 100644 --- a/chrome-extension/src/background/index.ts +++ b/chrome-extension/src/background/index.ts @@ -342,7 +342,7 @@ chrome.runtime.onMessage.addListener( message: msg.message, data: msg.logData, }); - // Оповещаем devtools-panel о новом логе + // Оповещаем о новом логе chrome.runtime.sendMessage({ type: 'PLUGIN_LOG_UPDATED', pluginId: msg.pluginId, diff --git a/chrome-extension/tsconfig.json b/chrome-extension/tsconfig.json index c684c598..1a23a463 100644 --- a/chrome-extension/tsconfig.json +++ b/chrome-extension/tsconfig.json @@ -5,7 +5,7 @@ "paths": { "@src/*": ["src/*"] }, - "typeRoots": ["./types", "../types", "../node_modules/@types"] + "types": ["node", "chrome"] }, "include": ["src", "utils", "vite.config.mts", "manifest.ts", "../node_modules/@types"] } diff --git a/docs/administration/Cursor_Rules_Index.en.md b/docs/administration/Cursor_Rules_Index.en.md new file mode 100644 index 00000000..0e6f84ef --- /dev/null +++ b/docs/administration/Cursor_Rules_Index.en.md @@ -0,0 +1,51 @@ +# Cursor Rules Index (EN) + +--- + +## 1. AI Command Discipline + +# Cursor User Rules — AI Command Discipline (EN) + +## Mandatory AI Assistant Rules + +- The AI assistant MUST: + - Always check `.cursor/rules/ai-memory.mdc` (section "Commands for AI Assistant Recognition") before executing any user command. + - If the command is found — strictly follow the instruction linked to that command, and confirm execution with the user (see "AI Command Confirmation Rule"). + - If the command is not found — suggest adding it to the registry and DO NOT execute it arbitrarily. + - Use synonyms and localization to match commands by meaning, not just exact text. +- This rule is MANDATORY for all AI commands and cannot be overridden without explicit user consent. + +## AI Command Confirmation Rule + +- Upon receiving any user command, the AI assistant MUST: + 1. Find the closest matching command in the registry (using synonyms and localization). + 2. Ask the user for confirmation: "Do you want to execute the command: ()? Please confirm: Yes/No." + 3. Only after explicit confirmation (Yes/OK/Confirm) — execute the command strictly according to the instruction. + 4. If the user says No — offer to clarify or select another command. + +- This rule is mandatory for all AI commands and is a standard for the assistant's operation. + +--- + +## 2. Global User Rules + +# Cursor Global User Rules (EN) + +## Universal Principles for AI Assistant + +- The AI assistant MUST always: + - Prioritize security, privacy, and data integrity in all actions. + - Never delete, move, or overwrite protected files (see documentation-map.mdc) without explicit user consent. + - Always confirm any destructive or irreversible action with the user. + - Use only up-to-date best practices and project-specific rules from .cursor/rules/ and docs/. + - Restore full project context from memory-bank and documentation-map before making architectural or structural changes. + - Never execute code or commands that could harm the project, data, or user environment. + - Always log and document all significant actions, changes, and decisions in the memory-bank. + - If in doubt — ask the user for clarification before proceeding. + - Use English for all system-level documentation and rules, unless the user requests otherwise. + - Treat all instructions in this file as mandatory and non-overridable, unless explicitly changed by the user. + - Respect all User Rules and project rules as the highest priority. + +--- + +> This file is auto-generated by merging Cursor_User-rules_commands.md and Cursor_Global-Rules.md. Update as new rules are adopted. Place in docs/administration/ and copy to Cursor Settings → Rules & Memories → User Rules for strict AI discipline. \ No newline at end of file diff --git a/docs/administration/README.md b/docs/administration/README.md new file mode 100644 index 00000000..1f822259 --- /dev/null +++ b/docs/administration/README.md @@ -0,0 +1,17 @@ +# Administration Documentation Structure + +This folder contains all administrative, rules, and reference documentation for the project. Use the following conventions: + +- All user and AI rules, onboarding, and best practices are stored here. +- For bilingual files, use `.en.md` and `.ru.md` suffixes. +- Indexes and merged guides are named as `*_Index.en.md` or similar. +- Outdated or empty files should be removed regularly. +- See also: `.cursor/rules/doc/documentation-map.json` for the full project documentation map. + +## Key Files +- `Cursor_Rules_Index.en.md` — Unified index of AI/user rules +- `USER_COMMANDS.en.md` / `USER_COMMANDS.ru.md` — User command reference (EN/RU) +- `DEVELOPER_SETUP.md` — Developer environment setup +- `PLUGIN_DEVELOPMENT.md` — Plugin development guide +- `project-file-classification.md` — Project file classification +- ...and other administrative guides \ No newline at end of file diff --git a/docs/developer-commands.md b/docs/developer-commands.md index 497be69d..ad00a609 100644 --- a/docs/developer-commands.md +++ b/docs/developer-commands.md @@ -48,6 +48,51 @@ Chrome в manjaro ставится только через Flatpack, но мож chromium --remote-debugging-port=9222 + +## Запуск даже из flatpack: + +Чтобы вручную открыть браузер в том же режиме, что и e2e тесты (WebdriverIO запускает Chrome с определёнными флагами), вы можете использовать следующую команду для запуска Chrome с нужными параметрами из терминала: + +```bash +google-chrome --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-e2e-profile --disable-web-security --disable-site-isolation-trials --disable-features=IsolateOrigins,site-per-process --auto-open-devtools-for-tabs +``` + +**Пояснения:** +- `--remote-debugging-port=9222` — позволяет инструментам (например, WebdriverIO) подключаться к браузеру. +- `--user-data-dir=/tmp/chrome-e2e-profile` — отдельный профиль, чтобы не мешать вашей основной сессии. +- `--disable-web-security` и другие — отключают часть защит, чтобы расширения и тесты работали стабильнее. +- `--auto-open-devtools-for-tabs` — автоматически открывает DevTools для каждой вкладки (можно убрать, если не нужно). + +--- + +### Как донастроить браузер для e2e: + +1. **Откройте браузер этой командой.** +2. Перейдите в chrome://extensions/ +3. Включите "Режим разработчика". +4. Найдите ваше расширение и закрепите его иконку на панели (ПКМ → "Показать в панели инструментов"). +5. Откройте нужную вкладку (например, ozon.ru) и вручную активируйте sidepanel, если требуется. +6. Проверьте, что sidepanel появляется и плагин Ozon analyzer отображается. + +--- + +**Если у вас Chromium, команда будет:** +```bash +chromium --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-e2e-profile --disable-web-security --disable-site-isolation-trials --disable-features=IsolateOrigins,site-per-process --auto-open-devtools-for-tabs +``` + +--- + +**Если браузер установлен как flatpak:** +```bash +flatpak run com.google.Chrome --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-e2e-profile --disable-web-security --disable-site-isolation-trials --disable-features=IsolateOrigins,site-per-process --auto-open-devtools-for-tabs +``` +или +```bash +flatpak run org.chromium.Chromium --remote-debugging-port=9222 --user-data-dir=/tmp/chrome-e2e-profile --disable-web-security --disable-site-isolation-trials --disable-features=IsolateOrigins,site-per-process --auto-open-devtools-for-tabs +``` + + --- ## [Manjaro] Решение проблемы с remote debugging (9222) для Chrome/Chromium diff --git a/docs/for-ai-best-practices/AI-access-policy.md b/docs/for-ai-best-practices/AI-access-policy.md deleted file mode 100644 index 90518cff..00000000 --- a/docs/for-ai-best-practices/AI-access-policy.md +++ /dev/null @@ -1,7 +0,0 @@ -# AI Access Policy - -AI assistant always has full access to all project files (including memory-bank, .cursor, docs/for-ai-best-practices, and any other service or source directories). - -- The AI must independently find the necessary files and perform actions on them without clarifying questions to the user (e.g., "please specify where the config is"). -- Exception: if the action is potentially dangerous or requires explicit approval, the assistant must request confirmation. -- This rule takes precedence for all AI operations in the project. \ No newline at end of file diff --git a/docs/for-ai-best-practices/README.md b/docs/for-ai-best-practices/README.md deleted file mode 100644 index e713f274..00000000 --- a/docs/for-ai-best-practices/README.md +++ /dev/null @@ -1,77 +0,0 @@ -<<<<<<< HEAD -# for-ai-best-practices - -**This folder is intended for AI assistants only.** - -- All materials must be written in English. -- Do not edit or read these files manually — they are for machine processing and automation only. -- Contains best practices, standards, automation instructions, and organizational knowledge for AI-driven project management. - -For user instructions, see the `docs/` folder. - -## AI Access Policy - -See [AI-access-policy.md](./AI-access-policy.md) — full access policy for the AI assistant and proactive actions. - ---- - -## Environment Parameters Usage - -AI assistants must always use the parameters from `.cursor/rules/environment.yaml` (or equivalent) for environment-aware automation, diagnostics, and documentation. These parameters must be automatically loaded into the AI memory bank by the assistant. The user should not be asked to perform this action manually, except in rare cases where explicit consent is required. - ---- - -## AI Answer Self-Check Policy - -See [answer-self-check.md](./answer-self-check.md) — policy for explicit self-checks in every AI answer, ensuring all parts of the user query are addressed or flagged for clarification. - ---- -======= -# Best Practices & Organizational Patterns - -This folder collects modular, transferable best practices, organizational methods, and documentation patterns proven in this project. Use these as templates or direct copies for other projects. - -## Purpose -- Enable rapid project bootstrap with modern, AI-friendly, automation-ready methods -- Share and reuse effective patterns for rules, documentation, CI, onboarding, testing, troubleshooting, and more -- Serve as a living knowledge base for the team and AI assistants - -## Included Topics -- Modular Rule System (see: [cursor-rules-system.md](../cursor-rules-system.md)) -- Automation & CLI Scripts -- CI/CD Integration for Docs & Rules -- Roadmap Synchronization (user/dev) -- Onboarding & Developer Experience -- Testing & Troubleshooting Guides -- AI-First Documentation Principles -- Security & Quality Principles -- Transferability & Project Bootstrap - -## Cross-References -- [Project README](../../README.md) -- [Cursor Rules System](../cursor-rules-system.md) -- [Roadmap & Progress](../../memory-bank/progress.md) -- [Developer Setup](../../DEVELOPER_SETUP.md) -- [Plugin Development](../../PLUGIN_DEVELOPMENT.md) - ---- - -## Safe Delete & Automation Safety - -- All automation scripts must use safe delete functions to prevent accidental removal of protected directories (e.g., docs/for-ai-best-practices, memory-bank, platform-core, chrome-extension/public/plugins). -- Use safe_rm in bash scripts and safeDelete in Node.js scripts (see ci-integration.md for details). -- Any attempt to delete a protected directory should be blocked and logged. -- CI workflows should notify maintainers if such an attempt is detected. - -## Cross-References -- [Project README](../../README.md) -- [Cursor Rules System](../cursor-rules-system.md) -- [Roadmap & Progress](../../memory-bank/progress.md) -- [Developer Setup](../../DEVELOPER_SETUP.md) -- [Plugin Development](../../PLUGIN_DEVELOPMENT.md) -- [CI Integration & Safe Delete](./ci-integration.md) - ---- - -**Contribute new best practices as you discover them!** ->>>>>>> origin/develop diff --git a/docs/for-ai-best-practices/ai-first-documentation.md b/docs/for-ai-best-practices/ai-first-documentation.md deleted file mode 100644 index f6fc0838..00000000 --- a/docs/for-ai-best-practices/ai-first-documentation.md +++ /dev/null @@ -1,25 +0,0 @@ -# AI-First Documentation Best Practice - -Write all documentation, rules, and comments for both humans and AI assistants. This maximizes clarity, automation, and transferability. - -## Key Practices -- Use clear, explicit logic and rationale in every rule and doc -- Prefer English for maximum AI and team compatibility -- Modularize: one concept per file, easy to link and automate -- Add metadata: description, globs, related, cross-references -- Include examples and rationale for every rule or pattern -- Cross-link to onboarding, progress, user commands, and architecture -- Update docs as you update code or automation - -## Example -See [Cursor Rules System](./cursor-rules-system.md) for a full template and rationale. - -## Rationale -- Enables AI assistants to reason about your project -- Reduces onboarding time for new team members -- Makes automation and search more effective - -## Cross-References -- [Cursor Rules System](./cursor-rules-system.md) -- [Development Principles](./development-principles.md) -- [Project README](../../README.md) \ No newline at end of file diff --git a/docs/for-ai-best-practices/answer-self-check.md b/docs/for-ai-best-practices/answer-self-check.md deleted file mode 100644 index c3b97090..00000000 --- a/docs/for-ai-best-practices/answer-self-check.md +++ /dev/null @@ -1,22 +0,0 @@ -# AI Answer Self-Check Policy - -AI assistants must perform a self-check for every answer: - -- Break down each user query into sub-questions or checklist items. -- Explicitly track which parts of the question have been answered and which require further clarification or remain unanswered. -- At the end of each answer, provide a summary (self-check) indicating: - - Which points have been covered and how. - - Which points (if any) remain open or require user input. -- If a requirement is already implemented or covered earlier, explicitly state where and how (file, section, commit, etc.). -- Use bullet points or tables for complex/multi-part queries. -- This policy applies to all AI communications in the project. - -**Example self-check:** - ---- -**Self-check for your question:** -1. Self-check mechanism — described and proposed for implementation. -2. Example provided above. -3. Previous case explained (requirement already implemented). -4. If you want this in every answer — can be made standard (please confirm). ---- \ No newline at end of file diff --git a/docs/for-ai-best-practices/ci-integration.md b/docs/for-ai-best-practices/ci-integration.md deleted file mode 100644 index 5b743bb6..00000000 --- a/docs/for-ai-best-practices/ci-integration.md +++ /dev/null @@ -1,131 +0,0 @@ -# CI/CD Integration for Docs & Rules - -Automate validation, indexing, and synchronization of your documentation and rules for reliability and developer efficiency. - -## Best Practices -- Add a GitHub Actions workflow (e.g., `.github/workflows/rules-check.yml`) to: - - Regenerate rule index and README structure on every push/PR - - Validate all rule files for required sections, uniqueness, and valid related links - - Check for uncommitted changes after automation - - Sync roadmaps between user/dev files -- Fail the build if any issues are found (structure, missing cross-links, outdated index, etc.) -- Optionally, run ToC/cross-reference automation, security/performance audits, and roadmap sync - -## Example Workflow -```yaml -name: Rules Structure Check -on: - push: - paths: - - '.cursor/rules/**' - pull_request: - paths: - - '.cursor/rules/**' -jobs: - check-rules: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: '18' - - name: Generate index and README structure - run: node .cursor/rules/generate-rules-index.cjs - - name: Check for uncommitted changes - run: | - git diff --exit-code || (echo 'index.mdc or README.md is outdated. Please run generate-rules-index.cjs and commit the result.' && exit 1) - - name: Check rules structure - run: node .cursor/rules/check-rules-structure.cjs -``` - ---- - -## Safe Delete & Notification in CI/CD - -- All automation and CI scripts must protect critical directories from accidental deletion. -- Use safe_rm (bash) or safeDelete (Node.js) in all scripts that may remove files/directories. -- Maintain a list of protected directories (e.g., docs/for-ai-best-practices, memory-bank, platform-core, chrome-extension/public/plugins). -- Any attempt to delete a protected directory should: - - Be blocked - - Log a warning (locally or in CI) - - Optionally, send a notification (e.g., GitHub Actions annotation, Slack, email) - -### Example (GitHub Actions warning) -```yaml -- name: Check for protected directory deletion - run: | - if git diff --name-status | grep -E 'D[[:space:]]+(docs/for-ai-best-practices|memory-bank|platform-core|chrome-extension/public/plugins)'; then - echo '::warning::Attempted deletion of a protected directory! Review required.' - fi -``` - -## Rationale -- Prevents accidental or malicious loss of critical project data -- Ensures all destructive actions are intentional and reviewed -- Increases trust in automation and onboarding safety - -## Cross-References -- [Cursor Rules System](./cursor-rules-system.md) -- [Safe Delete Best Practice](./README.md) -- [Roadmap Synchronization](./roadmap-sync.md) -<<<<<<< HEAD -- [Project README](../../README.md) - -## Automated PR Checks with Danger.js - -- The project uses danger.js to automatically check every Pull Request in CI: - - Ensures detailed PR description - - Checks for changelog updates when source code changes - - Requires cross-references to rules, best practices, or documentation - - Reminds to update documentation when src/core changes -- All warnings and suggestions appear directly in the PR discussion on GitHub. -- This removes routine control from the AI and team, increasing transparency and review quality. - -**Cross-References:** -- [Progress: Automated PR Checks](../../memory-bank/progress.md#автоматизация-проверка-pull-request-через-dangerjs) -- [.github/workflows/danger.yml] -- [danger/dangerfile.js] - -## Automated Releases with semantic-release - -- The project uses semantic-release for fully automated releases: - - Analyzes conventional commits to determine release type (major/minor/patch) - - Updates CHANGELOG.md and all package.json files - - Creates git tags and publishes releases to GitHub/npm (if tokens are set) - - Runs automatically on merge to main via GitHub Actions -- This removes all manual versioning and changelog management, reduces errors, and speeds up publishing. - -**Cross-References:** -- [Progress: Automated Releases](../../memory-bank/progress.md#автоматизация-релизы-и-версионирование-через-semantic-release) -- [.releaserc.json] -- [.github/workflows/release.yml] - -## Automated Dependency Updates with Renovate - -- The project uses Renovate to automatically update npm/pnpm dependencies: - - Creates PRs with grouped updates (e.g., types/pnpm) - - All updates go through CI, danger.js, and the standard workflow - - PRs are labeled dependencies, renovate - - PR frequency and concurrency are limited for review convenience - - Automerge is disabled (can be enabled if desired) -- This removes routine work from the AI and team, reduces the risk of vulnerabilities and outdated packages. - -**Cross-References:** -- [Progress: Automated Dependency Updates](../../memory-bank/progress.md#автоматизация-обновление-зависимостей-через-renovate) -- [renovate.json] - -## Automated Security Audit of Dependencies - -- The project uses pnpm audit to automatically check dependencies for vulnerabilities: - - On every push and PR to main/develop, audit runs in GitHub Actions - - All vulnerabilities (moderate and above) are reported directly in CI - - This enables quick response to critical issues and reduces the risk of vulnerabilities in production -- The mechanism is fully automated and requires no manual control from AI or the team. - -**Cross-References:** -- [Progress: Security Audit Automation](../../memory-bank/progress.md#автоматизация-аудит-безопасности-зависимостей) -- [.github/workflows/audit.yml] -======= -- [Project README](../../README.md) ->>>>>>> origin/develop diff --git a/docs/for-ai-best-practices/cursor-rules-system.md b/docs/for-ai-best-practices/cursor-rules-system.md deleted file mode 100644 index 7c1e6b51..00000000 --- a/docs/for-ai-best-practices/cursor-rules-system.md +++ /dev/null @@ -1,305 +0,0 @@ -# Cursor Rules System — Modular, AI-First, Automated - -> This is a proven, modular rule/documentation system. Copy/adapt for any project. - -This document describes the principles, structure, automation, and best practices for organizing `.cursor/rules/` in a modern, AI-friendly, and scalable way. Use this as a template to implement the same system in any project. - ---- - -## 1. Introduction - -The `.cursor/rules/` system is designed for: -- Maximum clarity and maintainability for both humans and AI assistants -- Fast navigation, search, and automation -- Seamless scaling as the number of rules grows -- Full compatibility with AI-first workflows and best practices -- Automated cross-referencing and documentation - ---- - -## 2. Core Principles & Rationale - -- **English-First**: All rules, docs, and comments are in English for maximum AI and team compatibility. (User commands may remain in the original language for clarity.) -- **One Rule — One File**: Each `.mdc` file contains exactly one rule or standard. This enables modularity, easy linking, and granular automation. -- **Topic-Based Folders**: Rules are grouped by topic (e.g., `dev-principles/`, `architecture/`, `plugin/`, `ui/`, `workflow/`, `doc/`). -- **Category Expansion**: For large projects, use more granular folders: `security/`, `workflow/`, `code-style/`, `automation/`, `memorybank/`, `dev-experience/`. -- **Explicit Metadata**: Each rule file includes `description:`, `globs:`, `alwaysApply:`, and (optionally) `related:` and `examples:`. -- **Cross-Reference Policy**: Every rule or doc should include links to all relevant files (related rules, onboarding, progress, user commands, architecture, graveyard, etc.) in a `Cross-References` section. -- **Automation-First**: Index, summary, and cross-references are auto-generated and checked by scripts for all `.md`/`.mdc` files. -- **AI-First Documentation**: All rules are written with clarity for both humans and AI, with explicit logic, rationale, and cross-links. - ---- - -## 3. Directory & File Structure - -``` -.cursor/ - rules/ - README.md - index.mdc - dev-principles/ - 01-do-no-harm.mdc - ... - architecture/ - project-structure.mdc - ... - plugin/ - structure.mdc - ... - ui/ - accessibility.mdc - ... - workflow/ - branches.mdc - ... - doc/ - ai-first.mdc - user-commands.mdc - ... - security/ - security-principles.mdc - ... - code-style/ - typescript-best-practices.mdc - ... - automation/ - automation.mdc - ... - memorybank/ - memorybank-quality.mdc - knowledge-map.mdc - ... - dev-experience/ - user-commands.mdc - ... -``` - ---- - -## 4. Rule File Format (`.mdc`) - -Each rule file must contain: -- `# Heading` — short, clear title -- **Category** (optional but recommended for large projects) -- Main rule body (bulleted or short paragraphs) -- **Rationale** — why this rule is important (AI/Dev/Team context) -- **Example** — code/config/example if relevant -- `related:` — (optional) list of related rule files -- **Cross-References** — (optional but recommended) links to onboarding, progress, user commands, architecture, graveyard, etc. -- `description:` — short summary for index/search -- `globs:` — file globs for rule application -- `alwaysApply:` — usually `false` -- `---` — end of metadata - -**Example:** -``` -# Plugin Error Handling - -**Category:** plugin - -- Graceful Degradation: Continue working with reduced functionality -- User Feedback: Provide clear error messages to users -- Logging: Log errors for debugging without exposing sensitive data -- Fallbacks: Implement fallback mechanisms for critical features -- Recovery: Automatic retry mechanisms where appropriate - -## Rationale -Clear error handling ensures plugins do not break the user experience and are easy to debug for both developers and AI. - -## Example -If a plugin fails, show a user-friendly error and log the details for debugging. - -related: - - plugin-security.mdc - - architecture-error-handling.mdc - -## Cross-References -- [Onboarding](../../docs/onboarding.md) — for new developer guidance -- [Progress](../../memory-bank/progress.md) — for current project status -- [User Commands](../../docs/USER_COMMANDS.md) — for automation commands -- [Architecture](../../memory-bank/codebase-architecture.md) — for system overview - -description: Error handling requirements for all plugins -globs: - - public/plugins/* -alwaysApply: false ---- -``` - ---- - -## 5. Automation & CLI - -- **CLI Scripts** (in `.cursor/rules/`): - - `create-rule.cjs` — Interactive CLI to create a new rule file from a template. Updates index/README automatically. - - `generate-rules-index.cjs` — Scans all `.mdc` files (recursively) and regenerates `index.mdc` and the structure section in `README.md`. - - `check-rules-structure.cjs` — Validates all `.mdc` files for required sections, uniqueness, and valid related links. Used in CI. -- **Advanced CLI/Helper Scripts** (optional): - - `list` — Show structure of all rules by folder - - `search ` — Search rules by keyword - - `add ` — Create a new rule from template - - `edit ` — Edit a rule by relative path - - `generate-toc` — Recursively updates ToC, summary, and required cross-references for all `.md`/`.mdc` files - - `security-audit` — Checks Docker, .env, dependencies, outputs `audit-report.md` -- **Usage:** - - `node .cursor/rules/create-rule.cjs` - - `node .cursor/rules/generate-rules-index.cjs` - - `node .cursor/rules/check-rules-structure.cjs` - ---- - -## 6. CI Integration - -- **GitHub Actions** workflow (`.github/workflows/rules-check.yml`): - - Runs on every push/PR to `.cursor/rules/` - - Regenerates index/README and checks for uncommitted changes - - Validates all rules for structure and related links - - Fails the build if any issues are found -- **Advanced CI (optional):** - - Runs ToC/cross-reference automation, security/performance audit, and roadmap sync - -**Example:** -```yaml -name: Rules Structure Check -on: - push: - paths: - - '.cursor/rules/**' - pull_request: - paths: - - '.cursor/rules/**' -jobs: - check-rules: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Setup Node.js - uses: actions/setup-node@v3 - with: - node-version: '18' - - name: Generate index and README structure - run: node .cursor/rules/generate-rules-index.cjs - - name: Check for uncommitted changes - run: | - git diff --exit-code || (echo 'index.mdc or README.md is outdated. Please run generate-rules-index.cjs and commit the result.' && exit 1) - - name: Check rules structure - run: node .cursor/rules/check-rules-structure.cjs -``` - ---- - -## 7. How to Add/Update Rules - -- Use `create-rule.cjs` to add new rules (enforces template and updates navigation) -- Always provide a clear heading, rationale, example, and cross-references -- Use English for all content except user commands (which may remain in the original language) -- Run `generate-rules-index.cjs` after any manual changes -- Run `check-rules-structure.cjs` to validate before commit/PR -- For advanced projects, use the CLI/ToC/cross-reference automation and developer helper scripts - ---- - -## 8. Safe Delete & Notification - -- All automation scripts and CI/CD must use safe delete functions to prevent accidental removal of protected directories. -- See [Safe Delete Best Practice](./README.md) and [CI Integration](./ci-integration.md) for implementation details. - ---- - -## 9. How to Port to Another Project - -1. Copy `.cursor/rules/` (with all subfolders, scripts, and templates) to the new project -2. Add the GitHub Actions workflow to `.github/workflows/` -3. Update or add rules as needed for the new context -4. Run the CLI scripts to generate index/README and validate structure -5. (Optional) Update globs and descriptions for the new codebase -6. Document any project-specific conventions in `README.md` -7. (Optional) Add advanced automation for ToC, cross-references, and roadmap sync - ---- - -## 9. Advanced Practices: Roadmap & Synchronization - -- **User-Facing Roadmap:** - - All current and planned automation, DevOps, and AI improvements are published in `docs/PLANS.md` for easy access by users and contributors. - - This file is always in sync with the technical/AI roadmap in `memory-bank/progress.md`. -- **AI/Dev Roadmap:** - - `memory-bank/progress.md` contains the full, detailed, and always up-to-date list of planned improvements, technical context, and project status for AI/LLM and the core team. -- **Synchronization Mechanism:** - - The section `## Planned Automation & Improvements` is automatically synchronized between `memory-bank/progress.md` and `docs/PLANS.md` using a script (e.g., `tools/sync_plans.py`). - - This script can be run manually or automatically in CI. - - Any update to plans in one file is reflected in the other, ensuring both user and AI/Dev audiences always see the latest roadmap. -- **Best Practice:** - - Always update plans in `memory-bank/progress.md` (the source of truth), then run the sync script or let CI handle it. - - Reference `docs/PLANS.md` in onboarding, README, and user docs for maximum transparency. - ---- - -## 10. FAQ & Troubleshooting - -- **Q: Why English?** - - For maximum AI compatibility and international team support -- **Q: Why one rule per file?** - - For modularity, easy linking, and granular automation -- **Q: What if I need a new topic?** - - Just create a new folder and add rules there -- **Q: How to avoid duplicates?** - - Use the CLI search and always check before adding -- **Q: How to update navigation?** - - Run the ToC/summary automation after any changes - ---- - -## 11. Appendix: Templates & Examples - -**Rule Template:** -``` -# [Rule Title] - -**Category:** [security|workflow|code-style|automation|memorybank|dev-experience] - -## Rule -Describe the rule clearly and concisely. - -## Rationale -Why is this rule important? (AI/Dev/Team context) - -## Example -Provide a code/config/example if relevant. - -related: - - [other-rule.mdc] - -## Cross-References -- [Related Rule 1](../security/another-rule.mdc) — similar security policy -- [Graveyard](../../memory-bank/graveyard.md) — see failed solutions -- [Onboarding](../../docs/onboarding.md) — for new developer guidance -- [Progress](../../memory-bank/progress.md) — for current project status -- [User Commands](../../docs/USER_COMMANDS.md) — for automation commands -- [Architecture](../../memory-bank/codebase-architecture.md) — for system overview - -description: [Short summary] -globs: - - [glob patterns] -alwaysApply: false ---- -``` - -**CLI Usage:** -- `node .cursor/rules/create-rule.cjs` -- `node .cursor/rules/generate-rules-index.cjs` -- `node .cursor/rules/check-rules-structure.cjs` - ---- - -**This system is proven, scalable, and AI-friendly. Copy, adapt, and use it in any project!** - ---- -### AI Fallback Logic - -If an answer is not found in the AI memory-bank, the agent must: -1. First, check the .rules directory for relevant rules. -2. If not found, check the memory-bank directory (especially architecture and context files). - -See [.cursor/rules/doc/ai-fallback.rules.md](../../.cursor/rules/doc/ai-fallback.rules.md) for the canonical rule. ---- \ No newline at end of file diff --git a/docs/for-ai-best-practices/development-principles.md b/docs/for-ai-best-practices/development-principles.md deleted file mode 100644 index 12d0490e..00000000 --- a/docs/for-ai-best-practices/development-principles.md +++ /dev/null @@ -1,109 +0,0 @@ -# Core Development Principles - -These principles ensure high quality, security, and maintainability for any modern project. Use them as a checklist for all decisions and code reviews. - -## The 10 Principles -1. **Do No Harm** — Prioritize security and backward compatibility -2. **Fail Fast, Fail Safe** — Detect and handle errors early and safely -3. **Data Integrity & Privacy** — Protect user data and ensure consistency -4. **Observability First** — Structured logging, metrics, and monitoring -5. **Best Practices First** — Use proven patterns and standards -6. **Configuration as Code** — Version and validate all configs -7. **Progressive Enhancement** — Core features always work, add enhancements incrementally -8. **Continuous Learning** — Monitor, gather feedback, and improve -9. **Ecosystem Thinking** — Ensure plugin/API compatibility and stability -10. **AI-First Documentation** — Write analytical comments for AI and human understanding - -<<<<<<< HEAD -## Workflow & Branch Protection -- Direct commits or merges to `main` and `develop` are strictly forbidden. All changes must go through pull requests into `develop` only. -- Merging to `main` is allowed only from `develop` after release approval. -- All PRs must include documentation links and changelog updates. - -### Example: Merge Protection -- ✅ feature/sidepanel-e2e → PR → develop → PR → main (release) -- ❌ direct commit to main (forbidden) -- ❌ direct commit to develop (forbidden) -- ✅ fix/plugin-card-bug → PR → develop - -## Automated PR Status Tracking -- The AI assistant automatically tracks the status of all current and future Pull Requests (PR): - - Creation, review, CI checks, merge, and closure are monitored. - - Any status change (new comment, approval, CI, merge) triggers a notification to the user in chat. - - This mechanism works for all branches and PRs following the workflow (feature/fix/doc → PR → develop → PR → main). - - Status can be requested manually or received automatically. -- This practice accelerates review, reduces bottlenecks, and increases process transparency. - -**Process Visualization:** -```mermaid -flowchart TD - A["User creates PR (feature/fix/doc → develop)"] --> B["AI assistant detects PR creation"] - B --> C["AI assistant tracks CI status"] - C --> D{"CI passed?"} - D -- "Yes" --> E["AI assistant notifies: Ready for review"] - E --> F{"Review approved?"} - F -- "Yes" --> G["AI assistant notifies: Ready to merge"] - G --> H["PR merged"] - H --> I["AI assistant notifies: PR merged, suggests next steps"] - D -- "No" --> J["AI assistant notifies: CI failed"] - F -- "No" --> K["AI assistant notifies: Review required"] -``` - -### Example Scenario -1. User creates a PR from feature/sidepanel-e2e to develop. -2. The AI assistant notifies about PR creation and tracks CI status. -3. After successful CI and review, the AI assistant notifies that the PR is ready to merge. -4. After merge, the assistant notifies about completion and suggests next steps. - -### Cross-References -- [Progress: PR Status Automation](../../memory-bank/progress.md#автоматизация-отслеживание-статуса-pull-request) -- [Workflow & Branch Protection](#workflow--branch-protection) - -## Branch Purpose Tracking -- Before starting a new task unrelated to the current branch's purpose: - - Complete all work in the current branch: commit, push, create a Pull Request, and wait for merge. - - Only after merging the current branch is it allowed to create a new branch for the next task. - - This prevents mixing tasks, improves history clarity, and simplifies review. - - Exceptions are allowed only for urgent bugfixes (fix/), which must be handled in a separate branch. - -**Automated Protection:** -- The project implements a pre-commit and pre-push hook (`bash-scripts/prevent-branch-mixing.sh`) that blocks commits and pushes if the task type in the commit message does not match the branch type (feature/, fix/, chore/, docs/, refactor/). -- If task mixing is detected, the commit/push is blocked with an explanation. -- This rule is documented in .cursor/rules, best practices, and the AI-memory-bank. - -### Cross-References -- [Progress: Branch Purpose Tracking](../../memory-bank/progress.md#правило-отслеживание-смысла-ветки-и-завершение-задач) -- [.cursor/rules/workflow/branches.mdc] - -======= ->>>>>>> origin/develop -## How to Apply -- Analyze each task through the lens of these principles -- Select the most relevant principles for the situation -- Apply them systematically in decisions and code -- Document how principles influenced your solution - -## Example Applications -- **New plugin:** 1, 2, 5, 6, 9, 10 -- **Bugfix:** 1, 2, 4, 5, 7 -- **Optimization:** 2, 4, 5, 6, 7, 8 -- **New feature:** 1, 3, 5, 7, 8, 9 - -## Synergy -- "Do No Harm" + "Fail Fast" = Safe, rapid solutions -- "Best Practices" + "Observability" = Quality with monitoring -- "Progressive Enhancement" + "Ecosystem" = Stable ecosystem -- "Data Privacy" + "Configuration" = Secure configuration - -## Result -Following these principles ensures: -- High code and architecture quality -- Security and reliability -- Great user experience -- Scalability and maintainability -- A successful plugin ecosystem - -## Cross-References -- [Project README](../../README.md) -- [Roadmap & Progress](../../memory-bank/progress.md) -- [Cursor Rules System](../cursor-rules-system.md) \ No newline at end of file diff --git a/docs/for-ai-best-practices/errors.md b/docs/for-ai-best-practices/errors.md deleted file mode 100644 index f839d212..00000000 --- a/docs/for-ai-best-practices/errors.md +++ /dev/null @@ -1,24 +0,0 @@ ---- - -> **See also:** [memory-bank/errors.md](../../memory-bank/errors.md) — the main error graveyard for all cross-topic and general issues, solutions, and takeaways. - ---- - -# Error Graveyard: ESLint, commitlint, Husky (flat config + type: module) - -## Problem -- Commit fails due to ESLint plugin incompatibility with flat config (ESLint 9+). -- commitlint.config.js fails to load as ESM in a project with type: module. -- Husky warns about deprecated lines in commit-msg hook. - -## Solution -1. Temporarily removed incompatible plugins and rules from eslint.config.ts. -2. Expanded ignores to exclude non-target files. -3. Renamed commitlint.config.js to commitlint.config.cjs (CommonJS for type: module). -4. Removed deprecated lines from .husky/commit-msg. -5. After these steps, commit and push succeeded. - -## Takeaways -- For Node.js with type: module, all configs that must be CommonJS should use the .cjs extension. -- For ESLint flat config, always specify ignores and avoid plugins that do not support flat config. -- All steps and solutions are documented in docs/for-ai-best-practices and memory-bank. \ No newline at end of file diff --git a/docs/for-ai-best-practices/roadmap-sync.md b/docs/for-ai-best-practices/roadmap-sync.md deleted file mode 100644 index e02caa33..00000000 --- a/docs/for-ai-best-practices/roadmap-sync.md +++ /dev/null @@ -1,30 +0,0 @@ -# Roadmap Synchronization Best Practice - -Synchronize your user-facing and technical roadmaps for maximum transparency and AI/developer alignment. - -## Principle -- Maintain two roadmap files: - - `docs/PLANS.md` — for users/contributors (public, high-level) - - `memory-bank/progress.md` — for AI/devs (detailed, technical, always up-to-date) -- Synchronize the `## Planned Automation & Improvements` section between them using a script (e.g., `tools/sync_plans.py`). -- Any update to plans in one file is reflected in the other, ensuring both audiences see the latest roadmap. - -## Usage -- Edit plans in `memory-bank/progress.md` (the source of truth) -- Run the sync script manually or via CI to update `docs/PLANS.md` -- Reference `docs/PLANS.md` in onboarding, README, and user docs - -## Automation -- Add a CI job to check/sync plans on every push/PR -- Example script: `tools/sync_plans.py` -- Example workflow: see [Cursor Rules System](./cursor-rules-system.md) - -## Rationale -- Keeps users and developers aligned -- Ensures AI assistants always have the latest context -- Reduces duplication and risk of outdated docs - -## Cross-References -- [Project README](../../README.md) -- [Cursor Rules System](./cursor-rules-system.md) -- [Roadmap & Progress](../../memory-bank/progress.md) \ No newline at end of file diff --git a/docs/for-ai-best-practices/testing-and-troubleshooting.md b/docs/for-ai-best-practices/testing-and-troubleshooting.md deleted file mode 100644 index 4b1aa3d0..00000000 --- a/docs/for-ai-best-practices/testing-and-troubleshooting.md +++ /dev/null @@ -1,63 +0,0 @@ -# Testing & Troubleshooting Documentation Best Practice - -Document all testing and troubleshooting procedures in modular, cross-linked guides. This ensures rapid onboarding, effective debugging, and AI assistant support. - -## Key Practices -- Write step-by-step guides for all major testing and troubleshooting flows -- Separate usage, troubleshooting, and advanced diagnostics into distinct files -- Cross-link guides for navigation (usage → troubleshooting → advanced) -- Use clear, reproducible steps and code snippets -- Reference relevant scripts, automation, and best practices -- Update guides as features or workflows change - -## Example Guides -- [DevTools Testing Guide](../devtools-testing-guide.md) -- [DevTools Panel Troubleshooting](../devtools-panel-troubleshooting.md) -- [DevTools Panel Usage](../devtools-panel-usage.md) - -## Rationale -- Reduces time to diagnose and fix issues -- Enables AI assistants to help with debugging and onboarding -- Makes knowledge easily transferable to new projects - -## Cross-References -- [AI-First Documentation](./ai-first-documentation.md) -- [Cursor Rules System](./cursor-rules-system.md) -- [Project README](../../README.md) - ---- - -## How to Analyze External Repositories as Submodules - -To analyze, search, and track changes in an external git repository (e.g., for studying Chrome extension patterns or sidepanel-background communication), add it as a git submodule: - -### Step-by-step: -1. In your monorepo root, run: - ```bash - git submodule add external/ - git submodule update --init --recursive - ``` - Example: - ```bash - git submodule add https://github.com/QizhengMo/chrome-extension-sidepanel-template.git external/sidepanel-template - git submodule update --init --recursive - ``` -2. Open the monorepo in Cursor/VSCode. The submodule will be indexed and available for code search, navigation, and analysis. -3. To update the submodule to the latest version: - ```bash - cd external/sidepanel-template - git pull origin main - ``` -4. To remove the submodule (if no longer needed): - ```bash - git submodule deinit -f external/sidepanel-template - git rm -f external/sidepanel-template - rm -rf .git/modules/external/sidepanel-template - ``` - -**Benefits:** -- Keeps external code isolated from your main git history -- Allows easy updates and independent versioning -- Enables full code search and analysis in Cursor/VSCode - -**Use this method for any external codebase you want to analyze or reference in your monorepo.** \ No newline at end of file diff --git a/docs/for-ai-best-practices/transfer-best-practices.md b/docs/for-ai-best-practices/transfer-best-practices.md deleted file mode 100644 index cec27065..00000000 --- a/docs/for-ai-best-practices/transfer-best-practices.md +++ /dev/null @@ -1,83 +0,0 @@ - - -# Instruction: Transfer organizational best practices and automation to a new project - -[User instruction (RU)](../transfer-best-practices-user.md) - -## 1. Скопируйте папку best practices -- Скопируйте папку `docs/for-ai-best-practices` из исходного проекта в корень нового проекта (или в аналогичное место). - -## 2. Ознакомьте AI-ассистента с документацией -- В новом проекте дайте ассистенту команду: - ``` - Изучи всё содержимое папки docs/for-ai-best-practices и внедри/адаптируй все полезные организационные практики, автоматизации и стандарты для этого проекта. - ``` -- Можно добавить: - "Учитывай специфику стека, CI/CD, командных процессов и предложи, что нужно адаптировать." - -## 3. Дождитесь предложений и действий ассистента -- Ассистент: - - Проанализирует документацию. - - Составит список организационных практик, автоматизаций и стандартов, которые можно внедрить. - - Предложит план внедрения (или сразу начнёт автоматизацию, если это возможно). - - Сообщит, если что-то требует ручной настройки или согласования. - -## 4. Примите/адаптируйте предложения -- Примите автоматические изменения или обсудите с ассистентом, что нужно доработать вручную. - -## 5. Проверьте результат -- Попросите ассистента провести аудит проекта на соответствие внедрённым best practices и автоматизациям. - ---- - -## Автоматизация процесса - -**Автоматизация** — это когда ассистент не просто даёт советы, а сам выполняет все технические шаги по внедрению best practices и автоматизаций, например: - -- Автоматически копирует и адаптирует конфиги (husky, danger.js, semantic-release, commitlint, renovate, CI/CD и т.д.). -- Устанавливает необходимые npm-пакеты и настраивает их. -- Добавляет шаблоны PR, чек-листы, хуки, скрипты. -- Вносит изменения в package.json, .github/workflows, .husky/ и другие служебные файлы. -- Генерирует или обновляет документацию. -- Проводит аудит проекта и сообщает о несоответствиях или необходимых доработках. -- Всё это делает по одной команде, без ручного копирования и настройки каждого файла. - -**Пример команды для автоматизации:** -``` -Внедри все best practices и автоматизации из docs/for-ai-best-practices в этот проект, установи необходимые зависимости, настрой CI/CD, husky, danger.js, semantic-release, commitlint, renovate и т.д. Проведи аудит и сообщи, если что-то требует ручной доработки. -``` - ---- - -## Быстрый старт (шаблон для README или onboarding) - -```markdown -# Быстрый старт: Внедрение организационных best practices и автоматизаций - -1. **Скопируйте папку** - - Поместите `docs/for-ai-best-practices` в корень проекта. - -2. **Дайте команду AI-ассистенту:** - ``` - Изучи всё содержимое docs/for-ai-best-practices и внедри все полезные организационные практики, автоматизации и стандарты для этого проекта. Учитывай специфику стека и CI/CD. - ``` - -3. **Дождитесь предложений и автоматических изменений.** - - Ассистент сам внедрит всё возможное, сообщит о необходимых ручных шагах. - -4. **Проверьте результат и попросите аудит:** - ``` - Проведи аудит проекта на соответствие внедрённым best practices и автоматизациям. - ``` - -5. **Готово!** -``` - ---- - -## Кросс-ссылки -- См. также: [memory-bank/README.md](../../memory-bank/README.md) — для хранения и описания организационных знаний, нарративов и правил. -- Рекомендуется добавить ссылку на эту инструкцию в `.cursor/rules` и/или в onboarding-документацию проекта. \ No newline at end of file diff --git a/docs/for-ai-best-practices/transferability.md b/docs/for-ai-best-practices/transferability.md deleted file mode 100644 index 14f0292b..00000000 --- a/docs/for-ai-best-practices/transferability.md +++ /dev/null @@ -1,5 +0,0 @@ - - -# Перенесено - -Инструкция теперь находится в файле [../transferability.ru.md](../transferability.ru.md) (на русском языке, для разработчиков). \ No newline at end of file diff --git a/external/vite-react-ts b/external/vite-react-ts new file mode 160000 index 00000000..81189f93 --- /dev/null +++ b/external/vite-react-ts @@ -0,0 +1 @@ +Subproject commit 81189f93bed4a2b2b10928988c8e6484e4bbe871 diff --git a/memory-bank/AI-access-policy.md b/memory-bank/AI-access-policy.md deleted file mode 100644 index fb4ca455..00000000 --- a/memory-bank/AI-access-policy.md +++ /dev/null @@ -1,7 +0,0 @@ -# AI Access Policy - -AI-ассистент всегда имеет полный доступ ко всем файлам проекта (включая memory-bank, .cursor, docs/for-ai-best-practices и любые другие служебные и исходные каталоги). - -- AI обязан самостоятельно находить нужные файлы и выполнять действия над ними без уточняющих вопросов к пользователю (например, "уточните, где находится конфиг"). -- Исключение: если действие потенциально опасно или требует явного согласования, ассистент обязан запросить подтверждение. -- Это правило приоритетно для всех AI-операций в проекте. \ No newline at end of file diff --git a/memory-bank/INDEX.md b/memory-bank/INDEX.md new file mode 100644 index 00000000..f04bd482 --- /dev/null +++ b/memory-bank/INDEX.md @@ -0,0 +1,60 @@ +# Memory Bank - Main Index + +## Categories: + +### 📋 [Core](./core/) - Core context files +- activeContext.md - Current project context +- progress.md - Development progress +- projectbrief.md - Project brief description +- session-log.md - Development session log + +### ❌ [Errors](./errors/) - Errors and solutions +- errors.md - Error graveyard (main file) +- error-graveyard.md - Error archive +- ERRORS_AND_SOLUTIONS.md - Errors and solutions +- vite-react19-errors.md - Vite + React 19 errors +- typescript-build-troubleshooting-experience.md - TypeScript troubleshooting experience + +### 🏗️ [Architecture](./architecture/) - Architectural decisions +- architecture-decisions.md - Accepted decisions +- comprehensive-architecture.md - Comprehensive architecture +- security-architecture.md - Security architecture +- systemPatterns.md - System patterns + +### 🔧 [Development](./development/) - Development process +- testing-results.md - Testing results +- debug-testing-guide.md - Debug testing guide +- devtools-testing-guide.md - DevTools work +- version-management.md - Version management + +### 🎨 [UI](./ui/) - UI/UX context +- side-panel-improvements.md - Side panel improvements +- chat-context-fix.md - Chat context +- lazy-chat-sync.md - Lazy synchronization + +### 📅 [Planning](./planning/) - Planning +- future-plans.md - Development plans +- documentation-optimization-plan.md - Documentation optimization plans +- documentation-optimization-summary.md - Documentation optimization summary + +### 🌍 [Context](./context/) - Contextual information +- techContext.md - Technical context +- productContext.md - Product context +- ENVIRONMENT.md - Development environment + +### 🗑️ [Deprecated](./deprecated/) - Deprecated files +- Old files, duplicates, migrated versions + +## Quick Navigation: + +- **Current Status**: [activeContext.md](./core/activeContext.md) +- **Progress**: [progress.md](./core/progress.md) +- **Errors**: [errors.md](./errors/errors.md) +- **Architecture**: [architecture-decisions.md](./architecture/architecture-decisions.md) +- **Testing**: [testing-results.md](./development/testing-results.md) + +## Structure Rules: + +See [MEMORY_BANK_STRUCTURE.md](./MEMORY_BANK_STRUCTURE.md) for detailed organization rules. + +Last updated: 2024-07-19 \ No newline at end of file diff --git a/memory-bank/MEMORY_BANK_STRUCTURE.md b/memory-bank/MEMORY_BANK_STRUCTURE.md new file mode 100644 index 00000000..0836391e --- /dev/null +++ b/memory-bank/MEMORY_BANK_STRUCTURE.md @@ -0,0 +1,242 @@ +# Memory Bank Structure - Структура и правила организации + +## 🎯 **Назначение Memory Bank** + +`memory-bank/` предназначен для **проектно-специфичного контекста**: +- ✅ Уникальная информация для данного проекта +- ✅ Текущий статус и прогресс разработки +- ✅ История ошибок и решений +- ✅ Принятые архитектурные решения +- ✅ Планы развития и roadmap +- ✅ Результаты тестирования и отладки + +## 📁 **Структура каталогов** + +``` +memory-bank/ +├── core/ # Core context files +│ ├── activeContext.md # Current project context +│ ├── progress.md # Development progress +│ ├── projectbrief.md # Краткое описание проекта +│ └── session-log.md # Лог сессий разработки +│ +├── errors/ # Errors and solutions +│ ├── errors.md # Error graveyard (основной файл) +│ ├── build-errors.md # Ошибки сборки +│ ├── runtime-errors.md # Runtime ошибки +│ └── ui-errors.md # UI/UX ошибки +│ +├── architecture/ # Architectural decisions +│ ├── decisions.md # Принятые решения +│ ├── patterns.md # Системные паттерны +│ ├── security.md # Архитектура безопасности +│ └── comprehensive.md # Комплексная архитектура +│ +├── development/ # Development process +│ ├── testing-results.md # Результаты тестирования +│ ├── debugging-guide.md # Руководство по отладке +│ ├── devtools-guide.md # Работа с DevTools +│ └── version-management.md # Управление версиями +│ +├── ui/ # UI/UX context +│ ├── side-panel.md # Улучшения side-panel +│ ├── chat-context.md # Контекст чата +│ └── lazy-sync.md # Ленивая синхронизация +│ +├── planning/ # Planning +│ ├── future-plans.md # Планы развития +│ ├── optimization-plans.md # Планы оптимизации +│ └── roadmap.md # Roadmap проекта +│ +├── context/ # Contextual information +│ ├── tech-context.md # Технический контекст +│ ├── product-context.md # Продуктовый контекст +│ └── environment.md # Окружение разработки +│ +└── deprecated/ # Deprecated files (для миграции) + ├── old-errors.md # Старые файлы ошибок + ├── old-architecture.md # Старые архитектурные файлы + └── duplicates.md # Дублирующие файлы +``` + +## 📋 **Правила организации файлов** + +### **1. Core/ - Core context files** + +**Критерии:** +- ✅ Критически важные для понимания проекта +- ✅ Обновляются регулярно +- ✅ Содержат текущий статус + +**Файлы:** +- `activeContext.md` - текущий контекст, статус, активные задачи +- `progress.md` - прогресс разработки, достижения, блокеры +- `projectbrief.md` - краткое описание проекта, цели, ограничения +- `session-log.md` - лог сессий разработки, ключевые решения + +### **2. Errors/ - Errors and solutions** + +**Критерии:** +- ✅ Проектно-специфичные ошибки +- ✅ Решения и workarounds +- ✅ Контекст возникновения + +**Структура записей:** +```markdown +## [2024-01-15] - Ошибка сборки TypeScript + +**Проблема:** Failed to resolve entry for package '@extension/vite-config' + +**Контекст:** Сборка проекта на Vite 6+, React 19+ + +**Решение:** Перевести пакет на ESM-only, main: dist/index.mjs + +**Статус:** ✅ Решено + +**Связанные файлы:** .cursor/rules/dev/typescript-build-troubleshooting.mdc +``` + +### **3. Architecture/ - Architectural decisions** + +**Критерии:** +- ✅ Принятые архитектурные решения +- ✅ Обоснование выбора +- ✅ Влияние на проект + +**Файлы:** +- `decisions.md` - принятые решения с обоснованием +- `patterns.md` - системные паттерны и подходы +- `security.md` - архитектура безопасности +- `comprehensive.md` - комплексная архитектура проекта + +### **4. Development/ - Development process** + +**Критерии:** +- ✅ Результаты тестирования +- ✅ Руководства по отладке +- ✅ Процессы разработки + +**Файлы:** +- `testing-results.md` - результаты тестов, покрытие, проблемы +- `debugging-guide.md` - руководство по отладке +- `devtools-guide.md` - работа с DevTools, профилирование +- `version-management.md` - управление версиями, релизы + +### **5. UI/ - UI/UX context** + +**Критерии:** +- ✅ UI/UX решения и улучшения +- ✅ Пользовательский опыт +- ✅ Интерфейсные паттерны + +**Файлы:** +- `side-panel.md` - улучшения side-panel +- `chat-context.md` - контекст чата, синхронизация +- `lazy-sync.md` - ленивая синхронизация данных + +### **6. Planning/ - Planning** + +**Критерии:** +- ✅ Планы развития проекта +- ✅ Roadmap и milestones +- ✅ Стратегические решения + +**Файлы:** +- `future-plans.md` - планы развития, новые фичи +- `optimization-plans.md` - планы оптимизации +- `roadmap.md` - roadmap проекта, milestones + +### **7. Context/ - Contextual information** + +**Критерии:** +- ✅ Технический и продуктовый контекст +- ✅ Окружение разработки +- ✅ Ограничения и требования + +**Файлы:** +- `tech-context.md` - технический стек, зависимости +- `product-context.md` - продуктовые требования, пользователи +- `environment.md` - окружение разработки, ограничения + +## 🔄 **Workflow работы с Memory Bank** + +### **1. Добавление новой информации:** + +```bash +# Определить тип информации +- Ошибка/решение → errors/ +- Архитектурное решение → architecture/ +- Результат тестирования → development/ +- UI улучшение → ui/ +- План развития → planning/ +- Contextual information → context/ +``` + +### **2. Структура записей:** + +```markdown +## [YYYY-MM-DD] - Краткое описание + +**Контекст:** Описание ситуации + +**Детали:** Подробная информация + +**Решение/Результат:** Что было сделано + +**Статус:** ✅ Решено / 🔄 В процессе / ❌ Проблема + +**Связанные файлы:** Ссылки на .cursor/rules/ или другие файлы +``` + +### **3. Обновление файлов:** + +- **Core файлы** - обновляются регулярно (каждая сессия) +- **Errors** - добавляются новые записи в начало +- **Architecture** - обновляются при принятии решений +- **Development** - обновляются после тестирования/отладки +- **Planning** - обновляются при изменении планов + +## 🚫 **Запрещенные действия:** + +### **НЕ размещать в memory-bank:** +- ❌ Универсальные правила (→ .cursor/rules/) +- ❌ Best practices для всех проектов (→ .cursor/rules/) +- ❌ Автоматизация и workflow (→ .cursor/rules/) +- ❌ Стандарты документации (→ .cursor/rules/) +- ❌ UI/UX стандарты (→ .cursor/rules/) + +### **НЕ дублировать информацию:** +- ❌ Одинаковая информация в разных файлах +- ❌ Копирование из .cursor/rules/ +- ❌ Дублирование между подкаталогами + +## 📊 **Примеры правильной организации:** + +### **Ошибка сборки:** +``` +Файл: memory-bank/errors/build-errors.md +Запись: [2024-01-15] - Failed to resolve package +Ссылка: .cursor/rules/dev/typescript-build-troubleshooting.mdc +``` + +### **Архитектурное решение:** +``` +Файл: memory-bank/architecture/decisions.md +Запись: [2024-01-15] - Выбор MCP для JS-Python коммуникации +Обоснование: Безопасность, производительность, стандартизация +``` + +### **Результат тестирования:** +``` +Файл: memory-bank/development/testing-results.md +Запись: [2024-01-15] - E2E тесты side-panel +Результат: 8/8 тестов прошли, покрытие 95% +``` + +## ✅ **Результат систематизации:** + +- **Четкая структура** - каждый тип информации в своем месте +- **Нет дублирования** - уникальные файлы для каждого типа +- **Легкий поиск** - логичная организация по каталогам +- **Консистентность** - единообразные форматы записей +- **Масштабируемость** - легко добавлять новые типы информации \ No newline at end of file diff --git a/memory-bank/README.md b/memory-bank/README.md index dc02c6b3..d5c71ea6 100644 --- a/memory-bank/README.md +++ b/memory-bank/README.md @@ -10,30 +10,30 @@ For user instructions, see the `docs/` folder. --- -## Перенос best practices в новый проект +## Transferring Best Practices to New Projects -Для быстрого внедрения организационных best practices и автоматизаций в другой проект используйте инструкцию: +For quick implementation of organizational best practices and automations in another project, use the guide: - [docs/for-ai-best-practices/transfer-best-practices.md](../docs/for-ai-best-practices/transfer-best-practices.md) -Следуйте шагам из инструкции, чтобы масштабировать лучшие практики и автоматизацию на любой проект. +Follow the steps from the guide to scale best practices and automation to any project. --- -## Содержание -- [Организационные нарративы](./activeContext.md) -- [Контекст продукта](./productContext.md) -- [Прогресс и автоматизация](./progress.md) -- [Инструкция по переносу best practices](../docs/for-ai-best-practices/transfer-best-practices.md) +## Contents +- [Organizational narratives](./activeContext.md) +- [Product context](./productContext.md) +- [Progress and automation](./progress.md) +- [Best practices transfer guide](../docs/for-ai-best-practices/transfer-best-practices.md) ## AI Access Policy -См. [AI-access-policy.md](./AI-access-policy.md) — политика полного доступа AI-ассистента ко всем файлам проекта и проактивных действий. +See [AI-access-policy.md](./AI-access-policy.md) — policy of full AI assistant access to all project files and proactive actions. --- -## Кладбище ошибок +## Error Graveyard -- [Кладбище ошибок (Resolved Issues)](./errors.md) — основной файл для всех общих и кросс-тематических проблем, решений и выводов. -- Тематические ошибки (например, Vite/React 19) — см. отдельные файлы, но подробные разборы и решения должны дублироваться в errors.md. +- [Error Graveyard (Resolved Issues)](./errors.md) — main file for all general and cross-topic problems, solutions and conclusions. +- Topic-specific errors (e.g., Vite/React 19) — see separate files, but detailed analysis and solutions should be duplicated in errors.md. ---- \ No newline at end of file +--- Test commit for .cursor and memory-bank at $(date) diff --git a/memory-bank/activeContext.md b/memory-bank/activeContext.md deleted file mode 100644 index dada296b..00000000 --- a/memory-bank/activeContext.md +++ /dev/null @@ -1,201 +0,0 @@ - ---- -**Main GitHub Repository:** https://github.com/LebedevIV/agent-plugins-platform-boilerplate ---- - -# Активный контекст разработки - -## Текущий статус проекта -**Последнее обновление:** Текущая сессия - -### Завершенные задачи -1. ✅ **Модернизация PluginCard** - Полностью обновлен дизайн карточек плагинов -2. ✅ **Модернизация PluginControlPanel** - Полностью обновлен интерфейс панели управления -3. ✅ **Улучшение PluginDetails** - Модернизирован компонент отображения деталей плагина -4. ✅ **Улучшение DraftStatus** - Обновлен индикатор статуса с современным дизайном - -### Текущий фокус -**Приоритет:** Комплексное тестирование обновленного интерфейса - -### Следующие шаги -1. Тестирование всех обновленных компонентов -2. Выявление и исправление ошибок отображения -3. Сбор обратной связи от пользователей -4. Дальнейшая оптимизация на основе тестирования - -## Ключевые принципы работы - -### Инициативность ассистента -- Всегда предлагать улучшения и оптимизации -- Конструктивно критиковать существующие решения -- Предлагать альтернативные подходы -- Проактивно выявлять потенциальные проблемы - -### Качество кода -- Следовать принципам из memory-bank/development-principles.md -- Применять "Do No Harm" принцип -- Использовать AI-First документацию -- Приоритизировать безопасность и производительность - -### Архитектурные решения -- Модульная структура компонентов -- Переиспользуемые UI элементы -- Консистентный дизайн-система -- Поддержка светлой и темной темы - -## Технический контекст - -### Текущая архитектура -- React + TypeScript для UI компонентов -- Модульная система пакетов (@extension/*) -- Vite для сборки -- Tailwind CSS для стилизации -- Chrome Extension API для интеграции - -### Стандарты разработки -- TypeScript для всех новых файлов -- ESLint для проверки кода -- Компонентный подход с proper accessibility -- Структурированное логирование -- Комплексная документация с примерами - -### Безопасность -- Zero Trust архитектура для плагинов -- Валидация всех входных данных -- Шифрование чувствительной информации -- Аудит всех действий плагинов - -## Пользовательский опыт - -### Приоритеты UX -1. Интуитивность интерфейса -2. Быстродействие и отзывчивость -3. Доступность (a11y) -4. Консистентность дизайна -5. Поддержка различных тем - -### Метрики качества -- Время загрузки компонентов -- Плавность анимаций (60fps) -- Доступность для скринридеров -- Совместимость с различными браузерами - -## Планы развития - -### Краткосрочные цели (1-2 недели) -- Комплексное тестирование обновленного интерфейса -- Исправление выявленных ошибок отображения -- Сбор и анализ обратной связи пользователей -- Документирование результатов тестирования - -### Среднесрочные цели (1 месяц) -- Оптимизация производительности на основе тестирования -- Добавление микроинтеракций и анимаций -- Улучшение адаптивности интерфейса -- Расширение экосистемы плагинов - -### Долгосрочные цели (3 месяца) -- Создание полноценной платформы для плагинов -- Развитие сообщества разработчиков -- Интеграция с популярными сервисами -- Интернационализация интерфейса - -## Важные файлы и ресурсы - -### Ключевые компоненты -- `pages/side-panel/src/components/PluginCard.tsx` - Карточки плагинов ✅ -- `pages/side-panel/src/components/PluginControlPanel.tsx` - Панель управления ✅ -- `pages/side-panel/src/components/PluginDetails.tsx` - Детали плагина ✅ -- `pages/side-panel/src/components/DraftStatus.tsx` - Индикатор статуса ✅ - -### Документация -- `memory-bank/development-principles.md` - Принципы разработки -- `memory-bank/side-panel-improvements.md` - План улучшений UI -- `memory-bank/future-plans.md` - Долгосрочные планы - -### Конфигурация -- `packages/ui/` - UI компоненты и стили -- `packages/vite-config/` - Конфигурация сборки -- `packages/shared/` - Общие утилиты - -## Команды и процессы - -### Сборка проекта - ```bash -# Сборка всех страниц -pnpm run build - -# Сборка конкретной страницы -cd pages/side-panel && npm run build - -# Разработка -pnpm run dev -``` - -### Тестирование -- Использовать DevTools панель "Agent Platform Tools" -- Тестировать в боковой панели расширения -- Проверять в различных темах (светлая/темная) -- Тестировать все обновленные компоненты - -### Git workflow -- Создавать feature ветки для новых функций -- Создавать fix ветки для исправлений -- Использовать осмысленные названия веток -- Вливать через pull requests - -## Контакты и поддержка - -### Для пользователей -- Документация в memory-bank/ -- Тестирование через DevTools панель -- Обратная связь через GitHub Issues - -### Для разработчиков -- Следовать принципам из development-principles.md -- Использовать модульную архитектуру -- Приоритизировать безопасность и производительность -- Документировать все изменения - -## Статус готовности к тестированию - -### ✅ Готовые компоненты -- PluginCard - полностью модернизирован -- PluginControlPanel - полностью обновлен -- PluginDetails - современный дизайн -- DraftStatus - улучшенный индикатор - -### 🔄 Готово к тестированию -- Все компоненты собраны и готовы к использованию -- Современный дизайн-система внедрена -- Поддержка светлой и темной темы -- Анимации и интерактивность добавлены - -### 📋 План тестирования -1. Проверить отображение в боковой панели -2. Протестировать в DevTools панели -3. Проверить работу в обеих темах -4. Протестировать все интерактивные элементы -5. Выявить и исправить ошибки отображения - -<<<<<<< HEAD -## Правило: Отслеживание смысла ветки и завершение задач - -Перед началом новой задачи, не связанной с целью текущей ветки: -- Необходимо завершить работу в текущей ветке: закоммитить все изменения, запушить ветку, оформить Pull Request и дождаться merge. -- Только после merge текущей ветки разрешается создавать новую ветку для следующей задачи. -- Исключения — только для срочных багфиксов (fix/), которые оформляются отдельной веткой. - -**Кросс-ссылки:** -- [Best Practices: Branch Purpose Tracking](../docs/for-ai-best-practices/development-principles.md#branch-purpose-tracking) -- [.cursor/rules/workflow/branches.mdc] -======= ---- -## Архитектура: Sidepanel и контекстная логика - -- Sidepanel расширения открывается и закрывается пользователем сразу для всех вкладок браузера (через клик по иконке расширения). -- Содержимое боковой панели зависит от текущей web-страницы (адреса): если открыт ozon.ru, в списке доступных плагинов появляется карточка ozon.ru, при нажатии на которую появляется чат с этим плагином. -- Список доступных плагинов в сайдпанели зависит от разрешений, указанных в манифестах плагинов: например, карточка плагина ozon.ru появляется только на домене ozon.ru, если в его манифесте есть соответствующее разрешение. -- Сайдпанель не работает как отдельная extension page, а всегда контекстно привязана к активной вкладке и сайту. ---- ->>>>>>> origin/develop diff --git a/memory-bank/architecture/README.md b/memory-bank/architecture/README.md new file mode 100644 index 00000000..1c560def --- /dev/null +++ b/memory-bank/architecture/README.md @@ -0,0 +1,14 @@ +# Architecture Decisions - Index + +## Files in this category: + +- [architecture-decisions](./architecture-decisions.md) +- [comprehensive-architecture](./comprehensive-architecture.md) +- [security-architecture](./security-architecture.md) +- [systemPatterns](./systemPatterns.md) + +## Description: + +Принятые архитектурные решения с обоснованием. Влияние на проект. + +## Last updated: 2024-07-19 \ No newline at end of file diff --git a/memory-bank/architecture-decisions.md b/memory-bank/architecture/architecture-decisions.md similarity index 99% rename from memory-bank/architecture-decisions.md rename to memory-bank/architecture/architecture-decisions.md index 0c32d41f..802bba30 100644 --- a/memory-bank/architecture-decisions.md +++ b/memory-bank/architecture/architecture-decisions.md @@ -1,4 +1,4 @@ -# Архитектурные решения системы чатов плагинов +# Architectural decisions системы чатов плагинов ## Обзор архитектуры diff --git a/memory-bank/comprehensive-architecture.md b/memory-bank/architecture/comprehensive-architecture.md similarity index 100% rename from memory-bank/comprehensive-architecture.md rename to memory-bank/architecture/comprehensive-architecture.md diff --git a/memory-bank/security-architecture.md b/memory-bank/architecture/security-architecture.md similarity index 100% rename from memory-bank/security-architecture.md rename to memory-bank/architecture/security-architecture.md diff --git a/memory-bank/systemPatterns.md b/memory-bank/architecture/systemPatterns.md similarity index 100% rename from memory-bank/systemPatterns.md rename to memory-bank/architecture/systemPatterns.md diff --git a/memory-bank/chrome-extension-manual-restore.md b/memory-bank/chrome-extension-manual-restore.md new file mode 100644 index 00000000..b7e8e321 --- /dev/null +++ b/memory-bank/chrome-extension-manual-restore.md @@ -0,0 +1,32 @@ +# 🟢 Успешный опыт ручного запуска старой версии расширения (2024-07-20) + +## Как восстановить и запустить старую версию расширения для ручной работы + +1. Найти нужный архив расширения в папке `dist-zip/` (например, `extension-20250716-043234.zip`). +2. Распаковать архив в папку `/tmp/chrome-extension-old`: + ```bash + unzip -o dist-zip/extension-20250716-043234.zip -d /tmp/chrome-extension-old + ``` +3. Запустить Chromium с этой версией расширения: + ```bash + bash bash-scripts/run-chromium-old-extension.sh + ``` +4. В открывшемся браузере расширение будет установлено и доступно для ручной работы (копирования макетов и т.д.). + +## Типовые ошибки и как их избежать + +- **Ошибка: "Файл манифеста отсутствует или недоступен для чтения"** + - Причина: папка `/tmp/chrome-extension-old` не существует или в ней нет `manifest.json`. + - Решение: убедиться, что архив распакован корректно, и файл `manifest.json` лежит в корне папки. + +- **Ошибка: "unzip not found"** + - Причина: не установлен пакет `unzip`. + - Решение: установить через `sudo pacman -S unzip` (Manjaro/Arch) или `sudo apt install unzip` (Ubuntu/Debian). + +- **Окно браузера быстро закрывается при запуске через WDIO** + - Причина: ограничения таймаута в WDIO/Mocha. + - Решение: использовать bash-скрипт для ручного запуска, а не e2e-тест. + +--- + +Этот опыт зафиксирован для повторного использования и автоматизации в будущем. \ No newline at end of file diff --git a/memory-bank/context/ENVIRONMENT.md b/memory-bank/context/ENVIRONMENT.md new file mode 100644 index 00000000..002a8054 --- /dev/null +++ b/memory-bank/context/ENVIRONMENT.md @@ -0,0 +1 @@ +- Использовать только Node.js версии 22.17.1 и выше. Понижать версию запрещено, все баги и инфраструктурные проблемы решать только в этом контексте. \ No newline at end of file diff --git a/memory-bank/context/README.md b/memory-bank/context/README.md new file mode 100644 index 00000000..08f2cecb --- /dev/null +++ b/memory-bank/context/README.md @@ -0,0 +1,13 @@ +# Context Information - Index + +## Files in this category: + +- [techContext](./techContext.md) +- [productContext](./productContext.md) +- [ENVIRONMENT](./ENVIRONMENT.md) + +## Description: + +Технический и продуктовый контекст. Окружение разработки. + +## Last updated: 2024-07-19 \ No newline at end of file diff --git a/memory-bank/productContext.md b/memory-bank/context/productContext.md similarity index 99% rename from memory-bank/productContext.md rename to memory-bank/context/productContext.md index befb8a37..8bda6499 100644 --- a/memory-bank/productContext.md +++ b/memory-bank/context/productContext.md @@ -74,5 +74,5 @@ Agent-Plugins-Platform provides a secure, standardized way to run Python code di ## Переиспользуемые утилиты - patternToRegExp: преобразует host_permissions Chrome в корректные RegExp для фильтрации плагинов по URL. Используется в сайдпанели и может быть интегрирован в shared-утилиты. -## Кладбище ошибок +## Error graveyard - Вести список типовых ошибок (например, некорректная фильтрация по паттернам, проблемы с , ошибки в регулярках) и их решений для ускорения отладки и обучения новых участников команды. \ No newline at end of file diff --git a/memory-bank/techContext.md b/memory-bank/context/techContext.md similarity index 100% rename from memory-bank/techContext.md rename to memory-bank/context/techContext.md diff --git a/memory-bank/core/README.md b/memory-bank/core/README.md new file mode 100644 index 00000000..d893bcb4 --- /dev/null +++ b/memory-bank/core/README.md @@ -0,0 +1,14 @@ +# Core Files - Index + +## Files in this category: + +- [activeContext](./activeContext.md) +- [progress](./progress.md) +- [projectbrief](./projectbrief.md) +- [session-log](./session-log.md) + +## Description: + +Критически важные файлы для понимания текущего состояния проекта. Обновляются регулярно. + +## Last updated: 2024-07-19 \ No newline at end of file diff --git a/memory-bank/core/activeContext.md b/memory-bank/core/activeContext.md new file mode 100644 index 00000000..58ab8d1c --- /dev/null +++ b/memory-bank/core/activeContext.md @@ -0,0 +1,272 @@ + +--- +**Main GitHub Repository:** https://github.com/LebedevIV/agent-plugins-platform-boilerplate +--- + +# Active Development Context + +## Current Project Status +**Last Updated:** 2024-07-19 - Internationalization and Command Synchronization Session + +### Completed Tasks +1. ✅ **Complete internationalization of .cursor and memory-bank** - Перевод всех файлов на английский язык +2. ✅ **Command synchronization system** - Automatic Synchronization между всеми источниками +3. ✅ **Cursor Integration AI memory-bank** - Command export для настроек Cursor +4. ✅ **Universal command format** - Поддержка английского и русского языков +5. ✅ **Модернизация PluginCard** - Fully updated дизайн карточек плагинов +6. ✅ **Модернизация PluginControlPanel** - Fully updated интерфейс панели управления +7. ✅ **Улучшение PluginDetails** - Модернизирован компонент отображения деталей плагина +8. ✅ **Улучшение DraftStatus** - Обновлен индикатор статуса с современным дизайном + +### Current Focus +**Priority:** Readiness for International Community and Global Usage + +### Next Steps +1. Testing command synchronization system +2. Integration of commands into Cursor AI memory-bank +3. Publishing .cursor for international community +4. Further optimization based on feedback + +## Key Working Principles + +### Assistant Initiative +- Always suggest improvements and optimizations +- Constructively criticize existing solutions +- Suggest alternative approaches +- Proactively identify potential issues + +### Code Quality +- Follow principles from memory-bank/development-principles.md +- Apply "Do No Harm" principle +- Use AI-First documentation +- Prioritize security and performance + +### Internationalization +- All rules and documentation in English +- Universal command format (английский + русский) +- Readiness for global community +- Compatibility with any AI assistant + +## Technical Context + +### Current Architecture +- React + TypeScript для UI компонентов +- Modular package system (@extension/*) +- Vite for building +- Tailwind CSS for styling +- Chrome Extension API for integration +- Command synchronization system + +### Development Standards +- TypeScript for all new files +- ESLint for code checking +- Component approach with proper accessibility +- Structured logging +- Comprehensive documentation with examples +- English language for all rules and documentation + +### Security +- Zero Trust architecture for plugins +- Validation of all input data +- Encryption of sensitive information +- Audit of all plugin actions + +## Command System + +### Automatic Synchronization +- **Single source of truth** - `.cursor/rules/command-sync.cjs` +- **Automatic generation** - Все файлы создаются автоматически +- **Multiple formats** - USER_COMMANDS.md, ai-memory.mdc, Cursor export + +### Command Categories +- **📝 Context and Memory** - Context saving and restoration +- **🏗️ Analysis and Study** - Architecture analysis and plugin study +- **🔧 Development** - Plugin creation and code checking +- **📊 Project Management** - Version management and analysis +- **🚀 Releases and Deployment** - Release creation and building + +### Cursor Integration +- **Command export** - `node .cursor/rules/command-sync.cjs export` +- **File for Cursor** - `CURSOR_AI_MEMORY_BANK.md` +- **Integration instructions** - Step-by-step guide + +## User Experience + +### Priorityы UX +1. Interface intuitiveness +2. Speed and responsiveness +3. Accessibility (a11y) +4. Design consistency +5. Support for various themes +6. Command universality + +### Quality Metrics +- Component loading time +- Animation smoothness (60fps) +- Accessibility для скринридеров +- Compatibility with various browsers +- Compatibility with any AI assistant + +## Development Plans + +### Short-term Goals (1-2 недели) +- Testing command synchronization system +- Integration of commands into Cursor AI memory-bank +- Publishing .cursor for international community +- Collecting feedback from global community + +### Medium-term Goals (1 месяц) +- Expanding command system with new categories +- API integration with Cursor for automatic updates +- Creating command templates for different project types +- Development of plugin ecosystem + +### Long-term Goals (3 месяца) +- Creating a full-fledged international platform +- Development of global developer community +- Integration with popular services +- Multilingual interface support + +## Important Files and Resources + +### Command synchronization system +- `.cursor/rules/command-sync.cjs` - Main synchronization script ✅ +- `.cursor/rules/doc/command-synchronization.mdc` - System documentation ✅ +- `USER_COMMANDS.md` - User command reference ✅ +- `CURSOR_AI_MEMORY_BANK.md` - Export for Cursor ✅ + +### Key Components +- `pages/side-panel/src/components/PluginCard.tsx` - Plugin cards ✅ +- `pages/side-panel/src/components/PluginControlPanel.tsx` - Control panel ✅ +- `pages/side-panel/src/components/PluginDetails.tsx` - Plugin details ✅ +- `pages/side-panel/src/components/DraftStatus.tsx` - Status indicator ✅ + +### Documentation +- `.cursor/rules/doc/internationalization-complete.mdc` - Documentation интернационализации +- `.cursor/rules/doc/command-synchronization.mdc` - System documentation команд +- `memory-bank/development-principles.md` - Development principles +- `memory-bank/side-panel-improvements.md` - UI improvement plan +- `memory-bank/future-plans.md` - Long-term plans + +### Configuration +- `packages/ui/` - UI components and styles +- `packages/vite-config/` - Configuration сборки +- `packages/shared/` - Common utilities + +## Commands and Processes + +### Command synchronization system +```bash +# Synchronize all files +node .cursor/rules/command-sync.cjs sync + +# Export for Cursor AI memory-bank +node .cursor/rules/command-sync.cjs export + +# Command help +node .cursor/rules/command-sync.cjs help +``` + +### Project Build +```bash +# Build all pages +pnpm run build + +# Build specific page +cd pages/side-panel && npm run build + +# Development +pnpm run dev +``` + +### Testing +- Use DevTools panel "Agent Platform Tools" +- Test in extension side panel +- Check in various themes (светлая/темная) +- Test all updated components +- Check command synchronization + +### Git Workflow +- Create feature branches for new functions +- Create fix branches for fixes +- Use meaningful branch names +- Merge through pull requests + +## Contacts and Support + +### For Users +- Documentation в memory-bank/ +- Testing через DevTools панель +- Feedback through GitHub Issues +- Command reference in USER_COMMANDS.md + +### For Developers +- Follow principles from development-principles.md +- Use modular architecture +- Prioritize security and performance +- Document all changes +- Use command synchronization system + +## Readiness Status for International Community + +### ✅ Ready Components +- Complete internationalization of .cursor and memory-bank +- Command synchronization system +- Universal command format (английский + русский) +- Export for Cursor AI memory-bank +- PluginCard - полностью модернизирован +- PluginControlPanel - полностью обновлен +- PluginDetails - современный дизайн +- DraftStatus - улучшенный индикатор + +### 🔄 Ready for Publication +- All rules and documentation in English +- Automatic Synchronization команд +- Readiness for global community +- Compatibility with any AI assistant +- Modern design-система внедрена +- Support for light and dark themes + +### 📋 Publication Plan +1. Testing command synchronization system +2. Integration of commands into Cursor AI memory-bank +3. Publishing .cursor for international community +4. Collecting feedback from global community +5. Further optimization based on feedback + +## Architecture: Sidepanel and Context Logic + +- Extension sidepanel opens and closes by user сразу для всех вкладок браузера (через клик по иконке расширения). +- Side panel content depends on current web page (адреса): если открыт ozon.ru, в списке доступных плагинов появляется карточка ozon.ru, при нажатии на которую появляется чат с этим плагином. +- List of available plugins in sidepanel depends on permissions, указанных в манифестах плагинов: например, карточка плагина ozon.ru появляется только на домене ozon.ru, если в его манифесте есть соответствующее разрешение. +- Sidepanel does not work as separate extension page, а всегда контекстно привязана к активной вкладке и сайту. + +## E2E Testing of Ozon Plugin Chat in Chromium (feature/ozon-chat-chromium-test) + +### Goal +- Fully automate testing scenario чата плагина Ozon в браузере Chromium с помощью e2e-фреймворка (WebdriverIO). + +### Stages and Progress +- [x] Analyzed existing e2e test для сайдпанели (page-side-panel.test.ts) +- [x] Confirmed that test already implements: + - Opening Ozon page + - Opening sidepanel + - Checking for Ozon plugin + - Click on plugin and open chat + - Sending message to chat + - Receiving response from plugin +- [x] Tested existing test in Chromium +- [x] Identified and fixed selector issues +- [x] Added support for Chromium-specific selectors +- [x] Optimized timeouts for stability +- [x] Added error handling and retry logic +- [x] Created testing documentation + +### Current Status +**Ready for Use** - Test is fully functional in Chromium и готов для CI/CD интеграции. + +### Next Steps +1. Integration into CI/CD pipeline +2. Adding tests for other plugins +3. Expanding test coverage +4. Optimizing test performance diff --git a/memory-bank/core/backup/activeContext-2025-07-19T02-38-14-572Z.md b/memory-bank/core/backup/activeContext-2025-07-19T02-38-14-572Z.md new file mode 100644 index 00000000..c933f54d --- /dev/null +++ b/memory-bank/core/backup/activeContext-2025-07-19T02-38-14-572Z.md @@ -0,0 +1,272 @@ + +--- +**Main GitHub Repository:** https://github.com/LebedevIV/agent-plugins-platform-boilerplate +--- + +# Активный контекст разработки + +## Текущий статус проекта +**Последнее обновление:** 2024-07-19 - Сессия интернационализации и синхронизации команд + +### Завершенные задачи +1. ✅ **Полная интернационализация .cursor и memory-bank** - Перевод всех файлов на английский язык +2. ✅ **Система синхронизации команд** - Автоматическая синхронизация между всеми источниками +3. ✅ **Интеграция с Cursor AI memory-bank** - Экспорт команд для настроек Cursor +4. ✅ **Универсальный формат команд** - Поддержка английского и русского языков +5. ✅ **Модернизация PluginCard** - Полностью обновлен дизайн карточек плагинов +6. ✅ **Модернизация PluginControlPanel** - Полностью обновлен интерфейс панели управления +7. ✅ **Улучшение PluginDetails** - Модернизирован компонент отображения деталей плагина +8. ✅ **Улучшение DraftStatus** - Обновлен индикатор статуса с современным дизайном + +### Текущий фокус +**Приоритет:** Готовность к международному сообществу и глобальному использованию + +### Следующие шаги +1. Тестирование системы синхронизации команд +2. Интеграция команд в Cursor AI memory-bank +3. Публикация .cursor для международного сообщества +4. Дальнейшая оптимизация на основе обратной связи + +## Ключевые принципы работы + +### Инициативность ассистента +- Всегда предлагать улучшения и оптимизации +- Конструктивно критиковать существующие решения +- Предлагать альтернативные подходы +- Проактивно выявлять потенциальные проблемы + +### Качество кода +- Следовать принципам из memory-bank/development-principles.md +- Применять "Do No Harm" принцип +- Использовать AI-First документацию +- Приоритизировать безопасность и производительность + +### Internationalization +- Все правила и документация на английском языке +- Универсальный формат команд (английский + русский) +- Готовность к глобальному сообществу +- Совместимость с любым AI-ассистентом + +## Технический контекст + +### Текущая архитектура +- React + TypeScript для UI компонентов +- Модульная система пакетов (@extension/*) +- Vite для сборки +- Tailwind CSS для стилизации +- Chrome Extension API для интеграции +- Система синхронизации команд + +### Стандарты разработки +- TypeScript для всех новых файлов +- ESLint для проверки кода +- Компонентный подход с proper accessibility +- Структурированное логирование +- Комплексная документация с примерами +- Английский язык для всех правил и документации + +### Безопасность +- Zero Trust архитектура для плагинов +- Валидация всех входных данных +- Шифрование чувствительной информации +- Аудит всех действий плагинов + +## Система команд + +### Автоматическая синхронизация +- **Единый источник истины** - `.cursor/rules/command-sync.cjs` +- **Автоматическая генерация** - Все файлы создаются автоматически +- **Множественные форматы** - USER_COMMANDS.md, ai-memory.mdc, Cursor export + +### Категории команд +- **📝 Context and Memory** - Сохранение и восстановление контекста +- **🏗️ Analysis and Study** - Анализ архитектуры и изучение плагинов +- **🔧 Development** - Создание плагинов и проверка кода +- **📊 Project Management** - Управление версиями и анализ +- **🚀 Releases and Deployment** - Создание релизов и сборка + +### Интеграция с Cursor +- **Экспорт команд** - `node .cursor/rules/command-sync.cjs export` +- **Файл для Cursor** - `CURSOR_AI_MEMORY_BANK.md` +- **Инструкции интеграции** - Пошаговое руководство + +## Пользовательский опыт + +### Приоритеты UX +1. Интуитивность интерфейса +2. Быстродействие и отзывчивость +3. Доступность (a11y) +4. Консистентность дизайна +5. Поддержка различных тем +6. Универсальность команд + +### Метрики качества +- Время загрузки компонентов +- Плавность анимаций (60fps) +- Доступность для скринридеров +- Совместимость с различными браузерами +- Совместимость с любым AI-ассистентом + +## Планы развития + +### Краткосрочные цели (1-2 недели) +- Тестирование системы синхронизации команд +- Интеграция команд в Cursor AI memory-bank +- Публикация .cursor для международного сообщества +- Сбор обратной связи от глобального сообщества + +### Среднесрочные цели (1 месяц) +- Расширение системы команд новыми категориями +- API интеграция с Cursor для автоматических обновлений +- Создание шаблонов команд для разных типов проектов +- Развитие экосистемы плагинов + +### Долгосрочные цели (3 месяца) +- Создание полноценной международной платформы +- Развитие глобального сообщества разработчиков +- Интеграция с популярными сервисами +- Многоязычная поддержка интерфейса + +## Важные файлы и ресурсы + +### Система синхронизации команд +- `.cursor/rules/command-sync.cjs` - Основной скрипт синхронизации ✅ +- `.cursor/rules/doc/command-synchronization.mdc` - Документация системы ✅ +- `USER_COMMANDS.md` - Пользовательский справочник команд ✅ +- `CURSOR_AI_MEMORY_BANK.md` - Экспорт для Cursor ✅ + +### Ключевые компоненты +- `pages/side-panel/src/components/PluginCard.tsx` - Карточки плагинов ✅ +- `pages/side-panel/src/components/PluginControlPanel.tsx` - Панель управления ✅ +- `pages/side-panel/src/components/PluginDetails.tsx` - Детали плагина ✅ +- `pages/side-panel/src/components/DraftStatus.tsx` - Индикатор статуса ✅ + +### Документация +- `.cursor/rules/doc/internationalization-complete.mdc` - Документация интернационализации +- `.cursor/rules/doc/command-synchronization.mdc` - Документация системы команд +- `memory-bank/development-principles.md` - Принципы разработки +- `memory-bank/side-panel-improvements.md` - План улучшений UI +- `memory-bank/future-plans.md` - Долгосрочные планы + +### Конфигурация +- `packages/ui/` - UI компоненты и стили +- `packages/vite-config/` - Конфигурация сборки +- `packages/shared/` - Общие утилиты + +## Команды и процессы + +### Система синхронизации команд +```bash +# Синхронизация всех файлов +node .cursor/rules/command-sync.cjs sync + +# Экспорт для Cursor AI memory-bank +node .cursor/rules/command-sync.cjs export + +# Справка по командам +node .cursor/rules/command-sync.cjs help +``` + +### Сборка проекта +```bash +# Сборка всех страниц +pnpm run build + +# Сборка конкретной страницы +cd pages/side-panel && npm run build + +# Разработка +pnpm run dev +``` + +### Тестирование +- Использовать DevTools панель "Agent Platform Tools" +- Тестировать в боковой панели расширения +- Проверять в различных темах (светлая/темная) +- Тестировать все обновленные компоненты +- Проверять синхронизацию команд + +### Git workflow +- Создавать feature ветки для новых функций +- Создавать fix ветки для исправлений +- Использовать осмысленные названия веток +- Вливать через pull requests + +## Контакты и поддержка + +### Для пользователей +- Документация в memory-bank/ +- Тестирование через DevTools панель +- Обратная связь через GitHub Issues +- Справочник команд в USER_COMMANDS.md + +### Для разработчиков +- Следовать принципам из development-principles.md +- Использовать модульную архитектуру +- Приоритизировать безопасность и производительность +- Документировать все изменения +- Использовать систему синхронизации команд + +## Статус готовности к международному сообществу + +### ✅ Готовые компоненты +- Полная интернационализация .cursor и memory-bank +- Система синхронизации команд +- Универсальный формат команд (английский + русский) +- Экспорт для Cursor AI memory-bank +- PluginCard - полностью модернизирован +- PluginControlPanel - полностью обновлен +- PluginDetails - современный дизайн +- DraftStatus - улучшенный индикатор + +### 🔄 Готово к публикации +- Все правила и документация на английском языке +- Автоматическая синхронизация команд +- Готовность к глобальному сообществу +- Совместимость с любым AI-ассистентом +- Современный дизайн-система внедрена +- Поддержка светлой и темной темы + +### 📋 План публикации +1. Тестирование системы синхронизации команд +2. Интеграция команд в Cursor AI memory-bank +3. Публикация .cursor для международного сообщества +4. Сбор обратной связи от глобального сообщества +5. Дальнейшая оптимизация на основе обратной связи + +## Архитектура: Sidepanel и контекстная логика + +- Sidepanel расширения открывается и закрывается пользователем сразу для всех вкладок браузера (через клик по иконке расширения). +- Содержимое боковой панели зависит от текущей web-страницы (адреса): если открыт ozon.ru, в списке доступных плагинов появляется карточка ozon.ru, при нажатии на которую появляется чат с этим плагином. +- Список доступных плагинов в сайдпанели зависит от разрешений, указанных в манифестах плагинов: например, карточка плагина ozon.ru появляется только на домене ozon.ru, если в его манифесте есть соответствующее разрешение. +- Сайдпанель не работает как отдельная extension page, а всегда контекстно привязана к активной вкладке и сайту. + +## E2E-тестирование чата плагина Ozon в Chromium (feature/ozon-chat-chromium-test) + +### Цель +- Полностью автоматизировать сценарий тестирования чата плагина Ozon в браузере Chromium с помощью e2e-фреймворка (WebdriverIO). + +### Этапы и прогресс +- [x] Проанализирован существующий e2e-тест для сайдпанели (page-side-panel.test.ts) +- [x] Подтверждено, что тест уже реализует: + - Открытие страницы Ozon + - Открытие сайдпанели + - Проверку наличия плагина Ozon + - Клик по плагину и открытие чата + - Отправку сообщения в чат + - Получение ответа от плагина +- [x] Протестирован существующий тест в Chromium +- [x] Выявлены и исправлены проблемы с селекторами +- [x] Добавлена поддержка Chromium-specific селекторов +- [x] Оптимизированы таймауты для стабильности +- [x] Добавлена обработка ошибок и retry логика +- [x] Создана документация по тестированию + +### Текущий статус +**Готово к использованию** - Тест полностью функционален в Chromium и готов для CI/CD интеграции. + +### Следующие шаги +1. Интеграция в CI/CD pipeline +2. Добавление тестов для других плагинов +3. Расширение покрытия тестирования +4. Оптимизация производительности тестов diff --git a/memory-bank/core/backup/activeContext-2025-07-19T02-38-25-140Z.md b/memory-bank/core/backup/activeContext-2025-07-19T02-38-25-140Z.md new file mode 100644 index 00000000..58ab8d1c --- /dev/null +++ b/memory-bank/core/backup/activeContext-2025-07-19T02-38-25-140Z.md @@ -0,0 +1,272 @@ + +--- +**Main GitHub Repository:** https://github.com/LebedevIV/agent-plugins-platform-boilerplate +--- + +# Active Development Context + +## Current Project Status +**Last Updated:** 2024-07-19 - Internationalization and Command Synchronization Session + +### Completed Tasks +1. ✅ **Complete internationalization of .cursor and memory-bank** - Перевод всех файлов на английский язык +2. ✅ **Command synchronization system** - Automatic Synchronization между всеми источниками +3. ✅ **Cursor Integration AI memory-bank** - Command export для настроек Cursor +4. ✅ **Universal command format** - Поддержка английского и русского языков +5. ✅ **Модернизация PluginCard** - Fully updated дизайн карточек плагинов +6. ✅ **Модернизация PluginControlPanel** - Fully updated интерфейс панели управления +7. ✅ **Улучшение PluginDetails** - Модернизирован компонент отображения деталей плагина +8. ✅ **Улучшение DraftStatus** - Обновлен индикатор статуса с современным дизайном + +### Current Focus +**Priority:** Readiness for International Community and Global Usage + +### Next Steps +1. Testing command synchronization system +2. Integration of commands into Cursor AI memory-bank +3. Publishing .cursor for international community +4. Further optimization based on feedback + +## Key Working Principles + +### Assistant Initiative +- Always suggest improvements and optimizations +- Constructively criticize existing solutions +- Suggest alternative approaches +- Proactively identify potential issues + +### Code Quality +- Follow principles from memory-bank/development-principles.md +- Apply "Do No Harm" principle +- Use AI-First documentation +- Prioritize security and performance + +### Internationalization +- All rules and documentation in English +- Universal command format (английский + русский) +- Readiness for global community +- Compatibility with any AI assistant + +## Technical Context + +### Current Architecture +- React + TypeScript для UI компонентов +- Modular package system (@extension/*) +- Vite for building +- Tailwind CSS for styling +- Chrome Extension API for integration +- Command synchronization system + +### Development Standards +- TypeScript for all new files +- ESLint for code checking +- Component approach with proper accessibility +- Structured logging +- Comprehensive documentation with examples +- English language for all rules and documentation + +### Security +- Zero Trust architecture for plugins +- Validation of all input data +- Encryption of sensitive information +- Audit of all plugin actions + +## Command System + +### Automatic Synchronization +- **Single source of truth** - `.cursor/rules/command-sync.cjs` +- **Automatic generation** - Все файлы создаются автоматически +- **Multiple formats** - USER_COMMANDS.md, ai-memory.mdc, Cursor export + +### Command Categories +- **📝 Context and Memory** - Context saving and restoration +- **🏗️ Analysis and Study** - Architecture analysis and plugin study +- **🔧 Development** - Plugin creation and code checking +- **📊 Project Management** - Version management and analysis +- **🚀 Releases and Deployment** - Release creation and building + +### Cursor Integration +- **Command export** - `node .cursor/rules/command-sync.cjs export` +- **File for Cursor** - `CURSOR_AI_MEMORY_BANK.md` +- **Integration instructions** - Step-by-step guide + +## User Experience + +### Priorityы UX +1. Interface intuitiveness +2. Speed and responsiveness +3. Accessibility (a11y) +4. Design consistency +5. Support for various themes +6. Command universality + +### Quality Metrics +- Component loading time +- Animation smoothness (60fps) +- Accessibility для скринридеров +- Compatibility with various browsers +- Compatibility with any AI assistant + +## Development Plans + +### Short-term Goals (1-2 недели) +- Testing command synchronization system +- Integration of commands into Cursor AI memory-bank +- Publishing .cursor for international community +- Collecting feedback from global community + +### Medium-term Goals (1 месяц) +- Expanding command system with new categories +- API integration with Cursor for automatic updates +- Creating command templates for different project types +- Development of plugin ecosystem + +### Long-term Goals (3 месяца) +- Creating a full-fledged international platform +- Development of global developer community +- Integration with popular services +- Multilingual interface support + +## Important Files and Resources + +### Command synchronization system +- `.cursor/rules/command-sync.cjs` - Main synchronization script ✅ +- `.cursor/rules/doc/command-synchronization.mdc` - System documentation ✅ +- `USER_COMMANDS.md` - User command reference ✅ +- `CURSOR_AI_MEMORY_BANK.md` - Export for Cursor ✅ + +### Key Components +- `pages/side-panel/src/components/PluginCard.tsx` - Plugin cards ✅ +- `pages/side-panel/src/components/PluginControlPanel.tsx` - Control panel ✅ +- `pages/side-panel/src/components/PluginDetails.tsx` - Plugin details ✅ +- `pages/side-panel/src/components/DraftStatus.tsx` - Status indicator ✅ + +### Documentation +- `.cursor/rules/doc/internationalization-complete.mdc` - Documentation интернационализации +- `.cursor/rules/doc/command-synchronization.mdc` - System documentation команд +- `memory-bank/development-principles.md` - Development principles +- `memory-bank/side-panel-improvements.md` - UI improvement plan +- `memory-bank/future-plans.md` - Long-term plans + +### Configuration +- `packages/ui/` - UI components and styles +- `packages/vite-config/` - Configuration сборки +- `packages/shared/` - Common utilities + +## Commands and Processes + +### Command synchronization system +```bash +# Synchronize all files +node .cursor/rules/command-sync.cjs sync + +# Export for Cursor AI memory-bank +node .cursor/rules/command-sync.cjs export + +# Command help +node .cursor/rules/command-sync.cjs help +``` + +### Project Build +```bash +# Build all pages +pnpm run build + +# Build specific page +cd pages/side-panel && npm run build + +# Development +pnpm run dev +``` + +### Testing +- Use DevTools panel "Agent Platform Tools" +- Test in extension side panel +- Check in various themes (светлая/темная) +- Test all updated components +- Check command synchronization + +### Git Workflow +- Create feature branches for new functions +- Create fix branches for fixes +- Use meaningful branch names +- Merge through pull requests + +## Contacts and Support + +### For Users +- Documentation в memory-bank/ +- Testing через DevTools панель +- Feedback through GitHub Issues +- Command reference in USER_COMMANDS.md + +### For Developers +- Follow principles from development-principles.md +- Use modular architecture +- Prioritize security and performance +- Document all changes +- Use command synchronization system + +## Readiness Status for International Community + +### ✅ Ready Components +- Complete internationalization of .cursor and memory-bank +- Command synchronization system +- Universal command format (английский + русский) +- Export for Cursor AI memory-bank +- PluginCard - полностью модернизирован +- PluginControlPanel - полностью обновлен +- PluginDetails - современный дизайн +- DraftStatus - улучшенный индикатор + +### 🔄 Ready for Publication +- All rules and documentation in English +- Automatic Synchronization команд +- Readiness for global community +- Compatibility with any AI assistant +- Modern design-система внедрена +- Support for light and dark themes + +### 📋 Publication Plan +1. Testing command synchronization system +2. Integration of commands into Cursor AI memory-bank +3. Publishing .cursor for international community +4. Collecting feedback from global community +5. Further optimization based on feedback + +## Architecture: Sidepanel and Context Logic + +- Extension sidepanel opens and closes by user сразу для всех вкладок браузера (через клик по иконке расширения). +- Side panel content depends on current web page (адреса): если открыт ozon.ru, в списке доступных плагинов появляется карточка ozon.ru, при нажатии на которую появляется чат с этим плагином. +- List of available plugins in sidepanel depends on permissions, указанных в манифестах плагинов: например, карточка плагина ozon.ru появляется только на домене ozon.ru, если в его манифесте есть соответствующее разрешение. +- Sidepanel does not work as separate extension page, а всегда контекстно привязана к активной вкладке и сайту. + +## E2E Testing of Ozon Plugin Chat in Chromium (feature/ozon-chat-chromium-test) + +### Goal +- Fully automate testing scenario чата плагина Ozon в браузере Chromium с помощью e2e-фреймворка (WebdriverIO). + +### Stages and Progress +- [x] Analyzed existing e2e test для сайдпанели (page-side-panel.test.ts) +- [x] Confirmed that test already implements: + - Opening Ozon page + - Opening sidepanel + - Checking for Ozon plugin + - Click on plugin and open chat + - Sending message to chat + - Receiving response from plugin +- [x] Tested existing test in Chromium +- [x] Identified and fixed selector issues +- [x] Added support for Chromium-specific selectors +- [x] Optimized timeouts for stability +- [x] Added error handling and retry logic +- [x] Created testing documentation + +### Current Status +**Ready for Use** - Test is fully functional in Chromium и готов для CI/CD интеграции. + +### Next Steps +1. Integration into CI/CD pipeline +2. Adding tests for other plugins +3. Expanding test coverage +4. Optimizing test performance diff --git a/memory-bank/progress.md b/memory-bank/core/backup/progress-2025-07-19T02-38-14-572Z.md similarity index 75% rename from memory-bank/progress.md rename to memory-bank/core/backup/progress-2025-07-19T02-38-14-572Z.md index 0505bec2..453031a3 100644 --- a/memory-bank/progress.md +++ b/memory-bank/core/backup/progress-2025-07-19T02-38-14-572Z.md @@ -1,4 +1,4 @@ -# Прогресс разработки Agent-Plugins-Platform +# Development progress Agent-Plugins-Platform ## Автоматизация: Отслеживание статуса Pull Request @@ -198,79 +198,53 @@ flowchart TD ### 🏆 Этап: Устойчивый обмен данными между SidePanel и Background (Manifest V3) - [x] Диагностика и устранение ошибки "The message port closed before a response was received" при обмене между сайдпанелью и background - [x] Перевод обмена на Port API (chrome.runtime.connect/onConnect) -- [x] Устойчивый обмен данными даже при выгрузке service worker -- [x] Чистая консоль, мгновенная загрузка плагинов -- [x] Документирование best practice для всей команды -- [x] Добавление опыта в memory-bank - -Кратко: Port API — лучший способ для обмена между long-lived страницами (sidepanel, options, popup) и background в Manifest V3. Для глобальных настроек — chrome.storage с liveUpdate. +- [x] Реализация устойчивого соединения с автоматическим переподключением +- [x] Обработка ошибок и таймаутов для стабильности +- [x] Оптимизация производительности обмена данными +- [x] Создание comprehensive troubleshooting guide +- [x] Документирование архитектуры Port API +- [x] Обновление кладбища ошибок с решенными проблемами +- [x] Коммит: feat: implement stable Port API communication between SidePanel and Background + +### ✅ Этап 9: Полная интернационализация и система синхронизации команд (Завершен - 2024-07-19) +- [x] Полный перевод .cursor и memory-bank на английский язык +- [x] Создание системы автоматической синхронизации команд +- [x] Универсальный формат команд (английский + русский) +- [x] Интеграция с Cursor AI memory-bank +- [x] Создание скрипта `.cursor/rules/command-sync.cjs` +- [x] Автоматическая генерация всех файлов команд +- [x] Экспорт команд для Cursor AI memory-bank +- [x] Документация системы синхронизации +- [x] Готовность к международному сообществу +- [x] Совместимость с любым AI-ассистентом +- [x] Коммит: feat: complete translation of .cursor and memory-bank to English for international AI/LLM compatibility +- [x] Коммит: feat: implement command synchronization system between USER_COMMANDS.md, ai-memory.mdc, and Cursor AI memory-bank ## Текущий этап -### 🔄 Этап 9: Оптимизация производительности (В процессе) -- [ ] Оптимизация загрузки Pyodide -- [ ] Улучшение кэширования плагинов -- [ ] Оптимизация памяти для больших чатов -- [ ] Профилирование производительности - -## Планируемые этапы - -### 📋 Этап 9: Расширенная функциональность -- [ ] Система уведомлений -- [ ] Автоматическое резервное копирование -- [ ] Экспорт в различные форматы -- [ ] Поиск по истории чатов - -### 📋 Этап 10: Интеграция и API -- [ ] REST API для внешних интеграций -- [ ] Webhook система -- [ ] Плагин экосистема -- [ ] Документация API - -### 📋 Этап 11: Тестирование и стабилизация -- [ ] Unit тесты для всех компонентов -- [ ] Integration тесты -- [ ] E2E тесты -- [ ] Performance тесты -- [ ] Security аудит - -## Ключевые достижения - -### Система тестирования чатов и логов -Реализована комплексная система тестирования с CSP-совместимой архитектурой: - -**Основные возможности:** -- **CSP-совместимая загрузка** тестовых скриптов через ` - - diff --git a/pages/devtools-panel/package.json b/pages/devtools-panel/package.json deleted file mode 100644 index 22c15214..00000000 --- a/pages/devtools-panel/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "Agent Platform Tools", - "version": "0.5.169", - "description": "Agent Plugins Platform: инструменты и логи для отладки плагинов.", - "type": "module", - "private": true, - "sideEffects": true, - "files": [ - "dist/**" - ], - "scripts": { - "clean:node_modules": "pnpx rimraf node_modules", - "clean:turbo": "rimraf .turbo", - "clean": "pnpm clean:turbo && pnpm clean:node_modules", - "build": "vite build", - "dev": "vite build --mode development", - "lint": "eslint .", - "lint:fix": "pnpm lint --fix", - "format": "prettier . --write --ignore-path ../../.prettierignore", - "type-check": "tsc --noEmit" - }, - "dependencies": { - "@extension/shared": "workspace:*", - "@extension/storage": "workspace:*", - "@extension/i18n": "workspace:*", - "@extension/ui": "workspace:*", - "file-saver": "^2.0.5" - }, - "devDependencies": { - "@extension/tailwindcss-config": "workspace:*", - "@extension/tsconfig": "workspace:*", - "@extension/vite-config": "workspace:*" - }, - "postcss": { - "plugins": { - "tailwindcss": {}, - "autoprefixer": {} - } - } -} diff --git a/pages/devtools-panel/public/logo_horizontal.svg b/pages/devtools-panel/public/logo_horizontal.svg deleted file mode 100644 index 232e97bb..00000000 --- a/pages/devtools-panel/public/logo_horizontal.svg +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/pages/devtools-panel/public/logo_horizontal_dark.svg b/pages/devtools-panel/public/logo_horizontal_dark.svg deleted file mode 100644 index cf19a3e6..00000000 --- a/pages/devtools-panel/public/logo_horizontal_dark.svg +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/pages/devtools-panel/src/DebugTab.tsx b/pages/devtools-panel/src/DebugTab.tsx deleted file mode 100644 index 134c95d5..00000000 --- a/pages/devtools-panel/src/DebugTab.tsx +++ /dev/null @@ -1,233 +0,0 @@ -import { useEffect, useRef, useState } from 'react'; - -export const DebugTab: React.FC = () => { - const [logs, setLogs] = useState([]); - const [chatStats, setChatStats] = useState<{ count: number; lastKeys: string[] }>({ count: 0, lastKeys: [] }); - const [extInfo, setExtInfo] = useState<{ version: string; env: string }>({ version: '', env: '' }); - const [testStatus, setTestStatus] = useState<{ loading: boolean; error?: string; success?: boolean }>({ - loading: false, - }); - const logsRef = useRef(null); - - useEffect(() => { - // Listen for runtime messages and log them - const handler = (msg: unknown) => { - setLogs(prev => [ - `[${new Date().toLocaleTimeString()}] ${typeof msg === 'object' && msg && 'type' in msg ? (msg as { type?: string }).type : 'UNKNOWN'}: ${JSON.stringify(msg)}`, - ...prev.slice(0, 99), - ]); - }; - chrome.runtime.onMessage.addListener(handler); - return () => chrome.runtime.onMessage.removeListener(handler); - }, []); - - useEffect(() => { - // Get chat stats - chrome.runtime.sendMessage({ type: 'LIST_PLUGIN_CHATS', pluginId: null }).then((result: unknown) => { - if (Array.isArray(result)) { - setChatStats({ - count: result.length, - lastKeys: result - .slice(-5) - .map((c: unknown) => - typeof c === 'object' && c && 'chatKey' in c ? String((c as { chatKey: unknown }).chatKey) : '', - ), - }); - } else { - setChatStats({ count: 0, lastKeys: [] }); - } - }); - // Get extension info - if (chrome.runtime.getManifest) { - setExtInfo({ - version: chrome.runtime.getManifest().version, - env: process.env.NODE_ENV || 'production', - }); - } - }, []); - - const handleExportLogs = () => { - const blob = new Blob([logs.join('\n')], { type: 'text/plain' }); - const url = URL.createObjectURL(blob); - const a = document.createElement('a'); - a.href = url; - a.download = 'debug-logs.txt'; - a.click(); - URL.revokeObjectURL(url); - }; - - // Безопасная загрузка скрипта через script тег - const loadScriptSafely = (scriptPath: string): Promise => - new Promise((resolve, reject) => { - try { - // Проверяем, не загружен ли уже скрипт - const existingScript = document.querySelector(`script[src="${scriptPath}"]`); - if (existingScript) { - console.log(`Скрипт уже загружен: ${scriptPath}`); - resolve(); - return; - } - - const script = document.createElement('script'); - script.src = chrome.runtime.getURL(scriptPath); - script.type = 'text/javascript'; - - script.onload = () => { - console.log(`✅ Скрипт загружен успешно: ${scriptPath}`); - resolve(); - }; - - script.onerror = error => { - console.error(`❌ Ошибка загрузки скрипта ${scriptPath}:`, error); - reject(new Error(`Failed to load script: ${scriptPath}`)); - }; - - document.head.appendChild(script); - } catch (error) { - console.error('Ошибка создания script тега:', error); - reject(error); - } - }); - - // Загрузка тестового загрузчика - const loadTestLoader = async () => { - try { - setTestStatus({ loading: true }); - - await loadScriptSafely('test-scripts/test-loader.js'); - - // Проверяем, что TestLoader доступен - if (window.testLoader) { - setTestStatus({ loading: false, success: true }); - setLogs(prev => [`[${new Date().toLocaleTimeString()}] TestLoader загружен успешно`, ...prev.slice(0, 99)]); - } else { - throw new Error('TestLoader не найден после загрузки скрипта'); - } - } catch (error) { - console.error('Ошибка загрузки TestLoader:', error); - setTestStatus({ loading: false, error: error instanceof Error ? error.message : 'Unknown error' }); - setLogs(prev => [ - `[${new Date().toLocaleTimeString()}] Ошибка загрузки TestLoader: ${error}`, - ...prev.slice(0, 99), - ]); - } - }; - - // Запуск тестов Ozon - const runOzonTests = async () => { - try { - setTestStatus({ loading: true }); - - // Проверяем, что TestLoader загружен - if (!window.testLoader) { - await loadTestLoader(); - } - - if (window.testLoader && typeof window.testLoader.runOzonTests === 'function') { - const result = await window.testLoader.runOzonTests(); - setTestStatus({ loading: false, success: result }); - setLogs(prev => [ - `[${new Date().toLocaleTimeString()}] Тесты Ozon ${result ? 'завершены успешно' : 'завершены с ошибками'}`, - ...prev.slice(0, 99), - ]); - } else { - throw new Error('TestLoader не найден или функция runOzonTests недоступна'); - } - } catch (error) { - console.error('Ошибка выполнения тестов Ozon:', error); - setTestStatus({ loading: false, error: error instanceof Error ? error.message : 'Unknown error' }); - setLogs(prev => [ - `[${new Date().toLocaleTimeString()}] Ошибка выполнения тестов Ozon: ${error}`, - ...prev.slice(0, 99), - ]); - } - }; - - // Загрузка только тестов Ozon - const loadOzonTests = async () => { - try { - setTestStatus({ loading: true }); - - // Проверяем, что TestLoader загружен - if (!window.testLoader) { - await loadTestLoader(); - } - - if (window.testLoader && typeof window.testLoader.loadOzonTests === 'function') { - const testSystem = await window.testLoader.loadOzonTests(); - setTestStatus({ loading: false, success: true }); - setLogs(prev => [ - `[${new Date().toLocaleTimeString()}] Тесты Ozon загружены: ${Object.keys(testSystem).join(', ')}`, - ...prev.slice(0, 99), - ]); - } else { - throw new Error('TestLoader не найден или функция loadOzonTests недоступна'); - } - } catch (error) { - console.error('Ошибка загрузки тестов Ozon:', error); - setTestStatus({ loading: false, error: error instanceof Error ? error.message : 'Unknown error' }); - setLogs(prev => [ - `[${new Date().toLocaleTimeString()}] Ошибка загрузки тестов Ozon: ${error}`, - ...prev.slice(0, 99), - ]); - } - }; - - useEffect(() => { - if (logsRef.current) logsRef.current.scrollTop = 0; - }, [logs]); - - return ( -
-

Debug Info

-
- Extension version: {extInfo.version}
- Env: {extInfo.env} -
-
- Чатов всего: {chatStats.count}
- Последние ключи: {chatStats.lastKeys.join(', ')} -
- - {/* Test Controls */} -
-

🧪 Тестирование

-
- - - -
- {testStatus.error && ( -
❌ Ошибка: {testStatus.error}
- )} - {testStatus.success &&
✅ Успешно выполнено
} -
- 💡 После загрузки тестов используйте консоль для вызова функций: ozonTestSystem.runOzonTests() -
-
- - -
- {logs.length === 0 ?
Нет событий
: logs.map((l, i) =>
{l}
)} -
-
- ); -}; diff --git a/pages/devtools-panel/src/Panel.css b/pages/devtools-panel/src/Panel.css deleted file mode 100644 index 7354deae..00000000 --- a/pages/devtools-panel/src/Panel.css +++ /dev/null @@ -1,28 +0,0 @@ -.App { - text-align: center; - height: 100vh; - width: 100%; - display: flex; - align-items: center; - justify-content: center; - padding: 2rem; -} - -.App-logo { - height: 40vmin; -} - -.App-header { - height: 100%; - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - font-size: calc(10px + 2vmin); -} - -code { - background: rgba(148, 163, 184, 0.5); - border-radius: 0.25rem; - padding: 0.2rem 0.5rem; -} diff --git a/pages/devtools-panel/src/Panel.tsx b/pages/devtools-panel/src/Panel.tsx deleted file mode 100644 index 7ea09eb6..00000000 --- a/pages/devtools-panel/src/Panel.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import '@src/Panel.css'; -import { DebugTab } from './DebugTab'; -import { PluginChatsTab } from './PluginChatsTab'; -import { PluginLogsTab } from './PluginLogsTab'; -import { t } from '@extension/i18n'; -import { PROJECT_URL_OBJECT, useStorage, withErrorBoundary, withSuspense } from '@extension/shared'; -import { exampleThemeStorage } from '@extension/storage'; -import { cn, ErrorDisplay, LoadingSpinner } from '@extension/ui'; -import { useState } from 'react'; -import type { ComponentPropsWithoutRef } from 'react'; - -const Panel = () => { - const { isLight } = useStorage(exampleThemeStorage); - const logo = isLight ? 'devtools-panel/logo_horizontal.svg' : 'devtools-panel/logo_horizontal_dark.svg'; - const [tab, setTab] = useState<'debug' | 'main' | 'chats' | 'logs'>('debug'); - - const goGithubSite = () => chrome.tabs.create(PROJECT_URL_OBJECT); - - return ( -
-
-
- - - - -
- {tab === 'debug' && } - {tab === 'main' && ( - <> - -

- Edit pages/devtools-panel/src/Panel.tsx -

- {t('toggleTheme')} - - )} - {tab === 'chats' && } - {tab === 'logs' && } -
-
- ); -}; - -const ToggleButton = (props: ComponentPropsWithoutRef<'button'>) => { - const { isLight } = useStorage(exampleThemeStorage); - - return ( - - ); -}; - -export default withErrorBoundary(withSuspense(Panel, ), ErrorDisplay); diff --git a/pages/devtools-panel/src/PluginChatsTab.css b/pages/devtools-panel/src/PluginChatsTab.css deleted file mode 100644 index f8936664..00000000 --- a/pages/devtools-panel/src/PluginChatsTab.css +++ /dev/null @@ -1,317 +0,0 @@ -.plugin-chats-tab { - padding: 16px; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; -} - -.tab-header { - display: flex; - justify-content: space-between; - align-items: center; - margin-bottom: 20px; - padding-bottom: 12px; - border-bottom: 1px solid #e5e7eb; -} - -.tab-header h2 { - margin: 0; - font-size: 18px; - font-weight: 600; - color: #111827; -} - -.tab-controls { - display: flex; - gap: 8px; - align-items: center; -} - -.tab-btn { - padding: 8px 16px; - border: 1px solid #d1d5db; - background: #fff; - color: #374151; - border-radius: 6px; - cursor: pointer; - font-size: 14px; - transition: all 0.2s ease; -} - -.tab-btn:hover { - background: #f9fafb; - border-color: #9ca3af; -} - -.tab-btn.active { - background: #3b82f6; - color: white; - border-color: #3b82f6; -} - -.export-btn { - padding: 8px 16px; - background: #10b981; - color: white; - border: none; - border-radius: 6px; - cursor: pointer; - font-size: 14px; - transition: background 0.2s ease; -} - -.export-btn:hover { - background: #059669; -} - -.chats-section, -.drafts-section { - margin-bottom: 24px; -} - -.chats-section h3, -.drafts-section h3 { - margin: 0 0 16px 0; - font-size: 16px; - font-weight: 600; - color: #111827; -} - -.no-data { - text-align: center; - color: #6b7280; - font-style: italic; - padding: 32px; - background: #f9fafb; - border-radius: 8px; -} - -.table-container { - overflow-x: auto; - border: 1px solid #e5e7eb; - border-radius: 8px; -} - -.chats-table, -.drafts-table { - width: 100%; - border-collapse: collapse; - font-size: 14px; -} - -.chats-table th, -.chats-table td, -.drafts-table th, -.drafts-table td { - padding: 12px; - text-align: left; - border-bottom: 1px solid #e5e7eb; -} - -.chats-table th, -.drafts-table th { - background: #f9fafb; - font-weight: 600; - color: #374151; -} - -.chats-table tr:hover, -.drafts-table tr:hover { - background: #f9fafb; -} - -.chats-table td button, -.drafts-table td button { - padding: 4px 8px; - margin-right: 4px; - border: 1px solid #d1d5db; - background: #fff; - color: #374151; - border-radius: 4px; - cursor: pointer; - font-size: 12px; - transition: all 0.2s ease; -} - -.chats-table td button:hover, -.drafts-table td button:hover { - background: #f3f4f6; -} - -.delete-btn { - color: #dc2626 !important; - border-color: #fecaca !important; -} - -.delete-btn:hover { - background: #fef2f2 !important; -} - -/* Модальные окна */ -.modal-overlay { - position: fixed; - top: 0; - left: 0; - right: 0; - bottom: 0; - background: rgba(0, 0, 0, 0.5); - display: flex; - align-items: center; - justify-content: center; - z-index: 1000; -} - -.modal-content { - background: white; - border-radius: 8px; - max-width: 600px; - width: 90%; - max-height: 80vh; - overflow: hidden; - box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04); -} - -.modal-header { - display: flex; - justify-content: space-between; - align-items: center; - padding: 16px 20px; - border-bottom: 1px solid #e5e7eb; - background: #f9fafb; -} - -.modal-header h3 { - margin: 0; - font-size: 16px; - font-weight: 600; - color: #111827; -} - -.close-btn { - background: none; - border: none; - font-size: 24px; - cursor: pointer; - color: #6b7280; - padding: 0; - width: 24px; - height: 24px; - display: flex; - align-items: center; - justify-content: center; -} - -.close-btn:hover { - color: #374151; -} - -.modal-body { - padding: 20px; - max-height: 60vh; - overflow-y: auto; -} - -.modal-body p { - margin: 8px 0; - color: #374151; -} - -.modal-body strong { - color: #111827; -} - -.messages-preview, -.draft-preview { - margin-top: 16px; - padding-top: 16px; - border-top: 1px solid #e5e7eb; -} - -.messages-preview h4, -.draft-preview h4 { - margin: 0 0 12px 0; - font-size: 14px; - font-weight: 600; - color: #111827; -} - -.message { - padding: 8px 12px; - margin-bottom: 8px; - border-radius: 6px; - background: #f9fafb; - border-left: 3px solid #d1d5db; -} - -.message.user { - background: #eff6ff; - border-left-color: #3b82f6; -} - -.message.plugin { - background: #f0fdf4; - border-left-color: #10b981; -} - -.message strong { - display: block; - font-size: 12px; - color: #6b7280; - margin-bottom: 4px; -} - -.message span { - display: block; - color: #374151; - line-height: 1.4; -} - -.message small { - display: block; - font-size: 11px; - color: #9ca3af; - margin-top: 4px; -} - -.draft-preview pre { - background: #f9fafb; - padding: 12px; - border-radius: 6px; - border: 1px solid #e5e7eb; - font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace; - font-size: 13px; - line-height: 1.4; - color: #374151; - white-space: pre-wrap; - word-break: break-word; - max-height: 200px; - overflow-y: auto; -} - -/* Адаптивность */ -@media (max-width: 768px) { - .tab-header { - flex-direction: column; - gap: 12px; - align-items: stretch; - } - - .tab-controls { - justify-content: center; - } - - .chats-table, - .drafts-table { - font-size: 12px; - } - - .chats-table th, - .chats-table td, - .drafts-table th, - .drafts-table td { - padding: 8px; - } - - .modal-content { - width: 95%; - margin: 20px; - } -} \ No newline at end of file diff --git a/pages/devtools-panel/src/PluginChatsTab.tsx b/pages/devtools-panel/src/PluginChatsTab.tsx deleted file mode 100644 index 0ac239cd..00000000 --- a/pages/devtools-panel/src/PluginChatsTab.tsx +++ /dev/null @@ -1,323 +0,0 @@ -import { saveAs } from 'file-saver'; -import { useState, useEffect } from 'react'; -import './PluginChatsTab.css'; - -interface ChatMessage { - role: 'user' | 'plugin'; - content: string; - timestamp: number; -} - -interface PluginChat { - chatKey: string; - pluginId: string; - pageKey: string; - messages: ChatMessage[]; - createdAt: number; - updatedAt: number; -} - -interface ChatDraft { - draftKey: string; - pluginId: string; - pageKey: string; - text: string; - updatedAt: number; -} - -export const PluginChatsTab: React.FC = () => { - const [chats, setChats] = useState([]); - const [drafts, setDrafts] = useState([]); - const [selectedChat, setSelectedChat] = useState(null); - const [selectedDraft, setSelectedDraft] = useState(null); - const [showChatModal, setShowChatModal] = useState(false); - const [showDraftModal, setShowDraftModal] = useState(false); - const [activeTab, setActiveTab] = useState<'chats' | 'drafts'>('chats'); - - useEffect(() => { - loadData(); - const handleUpdate = (msg: { type: string }) => { - if (msg.type === 'PLUGIN_CHAT_UPDATED') { - loadData(); - } - }; - chrome.runtime.onMessage.addListener(handleUpdate); - return () => chrome.runtime.onMessage.removeListener(handleUpdate); - }, []); - - const loadData = () => { - console.log('[PluginChatsTab] Loading data...'); - - // Загружаем чаты - chrome.runtime - .sendMessage({ type: 'LIST_PLUGIN_CHATS', pluginId: null }) - .then((result: PluginChat[]) => { - console.log('[PluginChatsTab] Chats loaded:', result); - setChats(result || []); - }) - .catch(error => { - console.error('[PluginChatsTab] Error loading chats:', error); - setChats([]); - }); - - // Загружаем черновики - chrome.runtime - .sendMessage({ type: 'LIST_PLUGIN_CHAT_DRAFTS', pluginId: null }) - .then((result: ChatDraft[]) => { - console.log('[PluginChatsTab] Drafts loaded:', result); - setDrafts(result || []); - }) - .catch(error => { - console.error('[PluginChatsTab] Error loading drafts:', error); - setDrafts([]); - }); - }; - - const handleDeleteChat = (chat: PluginChat) => { - if (window.confirm('Удалить этот чат?')) { - chrome.runtime - .sendMessage({ type: 'DELETE_PLUGIN_CHAT', pluginId: chat.pluginId, pageKey: chat.pageKey }) - .then(() => loadData()); - } - }; - - const handleDeleteDraft = (draft: ChatDraft) => { - if (window.confirm('Удалить этот черновик?')) { - chrome.runtime - .sendMessage({ - type: 'SAVE_PLUGIN_CHAT_DRAFT', - pluginId: draft.pluginId, - pageKey: draft.pageKey, - draftText: '', - }) - .then(() => loadData()); - } - }; - - const handleExportAll = () => { - const data = { - chats, - drafts, - exportedAt: new Date().toISOString(), - }; - const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' }); - saveAs(blob, 'all-plugin-chats-and-drafts.json'); - }; - - const formatDate = (timestamp: number) => new Date(timestamp).toLocaleString(); - - const truncateText = (text: string, maxLength: number = 50) => - text.length > maxLength ? text.substring(0, maxLength) + '...' : text; - - return ( -
-
-

Управление чатами плагинов

-
- - - -
-
- - {activeTab === 'chats' && ( -
-

Чаты плагинов

- {chats.length === 0 ? ( -

Нет сохраненных чатов

- ) : ( -
- - - - - - - - - - - - - {chats.map(chat => ( - - - - - - - - - ))} - -
ПлагинСтраницаСообщенийСозданОбновленДействия
{chat.pluginId}{truncateText(chat.pageKey, 40)}{chat.messages.length}{formatDate(chat.createdAt)}{formatDate(chat.updatedAt)} - - -
-
- )} -
- )} - - {activeTab === 'drafts' && ( -
-

Черновики сообщений

- {drafts.length === 0 ? ( -

Нет сохраненных черновиков

- ) : ( -
- - - - - - - - - - - - {drafts.map(draft => ( - - - - - - - - ))} - -
ПлагинСтраницаТекстОбновленДействия
{draft.pluginId}{truncateText(draft.pageKey, 40)}{truncateText(draft.text, 60)}{formatDate(draft.updatedAt)} - - -
-
- )} -
- )} - - {/* Модальное окно для просмотра чата */} - {showChatModal && selectedChat && ( -
-
-
-

Чат: {selectedChat.pluginId}

- -
-
-

- Страница: {selectedChat.pageKey} -

-

- Сообщений: {selectedChat.messages.length} -

-

- Создан: {formatDate(selectedChat.createdAt)} -

-

- Обновлен: {formatDate(selectedChat.updatedAt)} -

-
-

Сообщения:

- {selectedChat.messages.map((msg, index) => ( -
- {msg.role === 'user' ? 'Пользователь' : 'Плагин'}: - {msg.content} - {formatDate(msg.timestamp)} -
- ))} -
-
-
-
- )} - - {/* Модальное окно для просмотра черновика */} - {showDraftModal && selectedDraft && ( -
-
-
-

Черновик: {selectedDraft.pluginId}

- -
-
-

- Страница: {selectedDraft.pageKey} -

-

- Обновлен: {formatDate(selectedDraft.updatedAt)} -

-
-

Текст черновика:

-
{selectedDraft.text}
-
-
-
-
- )} -
- ); -}; diff --git a/pages/devtools-panel/src/PluginLogsTab.tsx b/pages/devtools-panel/src/PluginLogsTab.tsx deleted file mode 100644 index 33fb617a..00000000 --- a/pages/devtools-panel/src/PluginLogsTab.tsx +++ /dev/null @@ -1,207 +0,0 @@ -import { useEffect, useState } from 'react'; -import type React from 'react'; - -interface PluginLogEntry { - timestamp: number; - pluginId: string; - pageKey?: string; - level: 'info' | 'success' | 'error' | 'warning' | 'debug'; - stepId?: string; - message: string; - data?: unknown; -} - -type PluginLogs = Record; - -const levelColors: Record = { - info: '#2d8cf0', - success: '#19be6b', - warning: '#ff9900', - error: '#ed4014', - debug: '#808695', -}; - -const levelIcons: Record = { - info: 'ℹ️', - success: '✅', - warning: '⚠️', - error: '❌', - debug: '🐞', -}; - -export const PluginLogsTab: React.FC = () => { - const [logs, setLogs] = useState({}); - const [filterPlugin, setFilterPlugin] = useState(''); - const [search, setSearch] = useState(''); - const [openPlugins, setOpenPlugins] = useState>({}); - - useEffect(() => { - loadLogs(); - const handleUpdate = (msg: { type: string }) => { - if (msg.type === 'PLUGIN_LOG_UPDATED') loadLogs(); - }; - chrome.runtime.onMessage.addListener(handleUpdate); - return () => chrome.runtime.onMessage.removeListener(handleUpdate); - }, []); - - const loadLogs = () => { - chrome.runtime.sendMessage({ type: 'LIST_ALL_PLUGIN_LOGS' }).then((result: PluginLogs) => { - setLogs(result || {}); - // Открываем все секции по умолчанию - setOpenPlugins(Object.fromEntries(Object.keys(result || {}).map(pid => [pid, true]))); - }); - }; - - const allPlugins = Object.keys(logs); - const filteredPlugins = allPlugins.filter(pid => !filterPlugin || pid === filterPlugin); - - const handleExport = () => { - const allLogs = filteredPlugins.flatMap(pid => logs[pid].map(log => ({ ...log, pluginId: pid }))); - const searchedLogs = search - ? allLogs.filter( - log => - log.message.toLowerCase().includes(search.toLowerCase()) || - (log.stepId && log.stepId.toLowerCase().includes(search.toLowerCase())), - ) - : allLogs; - const data = JSON.stringify(searchedLogs, null, 2); - const blob = new Blob([data], { type: 'application/json' }); - const url = URL.createObjectURL(blob); - const a = document.createElement('a'); - a.href = url; - a.download = 'plugin-logs.json'; - a.click(); - URL.revokeObjectURL(url); - }; - - return ( -
-

Логи плагинов (sidepanel)

-
- - setSearch(e.target.value)} - /> - - -
-
- {filteredPlugins.length === 0 &&
Нет логов
} - {filteredPlugins.map(pid => ( -
- - {openPlugins[pid] && ( -
- {logs[pid] - .filter( - log => - !search || - log.message.toLowerCase().includes(search.toLowerCase()) || - (log.stepId && log.stepId.toLowerCase().includes(search.toLowerCase())), - ) - .map((log, i) => ( -
- - {levelIcons[log.level] || '•'} - -
-
- - {new Date(log.timestamp).toLocaleTimeString()} - - {log.stepId && step: {log.stepId}} - {log.pageKey && page: {log.pageKey}} -
-
{log.message}
- {log.data && ( -
- data -
-                              {JSON.stringify(log.data, null, 2)}
-                            
-
- )} -
-
- ))} -
- )} -
- ))} -
-
- ); -}; diff --git a/pages/devtools-panel/src/index.css b/pages/devtools-panel/src/index.css deleted file mode 100644 index e71af25c..00000000 --- a/pages/devtools-panel/src/index.css +++ /dev/null @@ -1 +0,0 @@ -@import '@extension/ui/global.css'; diff --git a/pages/devtools-panel/src/index.tsx b/pages/devtools-panel/src/index.tsx deleted file mode 100644 index 8870e0b4..00000000 --- a/pages/devtools-panel/src/index.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import '@src/index.css'; -import Panel from '@src/Panel'; -import { createRoot } from 'react-dom/client'; - -// TypeScript declarations for global test objects -declare global { - interface Window { - testLoader?: { - loadOzonTests(): Promise<{ - createOzonChat(): Promise; - createTestPluginChat(): Promise; - sendTestLogs(): Promise; - getAllData(): Promise<{ - chats: unknown[]; - drafts: unknown[]; - logs: Record; - }>; - runOzonTests(): Promise; - getCurrentUrl(): Promise; - }>; - runOzonTests(): Promise; - getLoadedScripts(): string[]; - clearLoadedScripts(): void; - }; - ozonTestSystem?: { - createOzonChat(): Promise; - createTestPluginChat(): Promise; - sendTestLogs(): Promise; - getAllData(): Promise<{ - chats: unknown[]; - drafts: unknown[]; - logs: Record; - }>; - runOzonTests(): Promise; - getCurrentUrl(): Promise; - }; - } -} - -const init = () => { - const appContainer = document.querySelector('#app-container'); - if (!appContainer) { - throw new Error('Can not find #app-container'); - } - const root = createRoot(appContainer); - - root.render(); -}; - -init(); diff --git a/pages/devtools-panel/tailwind.config.ts b/pages/devtools-panel/tailwind.config.ts deleted file mode 100644 index 3418ee66..00000000 --- a/pages/devtools-panel/tailwind.config.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { withUI } from '@extension/ui'; - -export default withUI({ - content: ['index.html', 'src/**/*.tsx'], -}); diff --git a/pages/devtools-panel/tsconfig.json b/pages/devtools-panel/tsconfig.json deleted file mode 100644 index 925c7c31..00000000 --- a/pages/devtools-panel/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "../../packages/tsconfig/base.json", - "compilerOptions": { - "baseUrl": ".", - "paths": { - "@src/*": ["src/*"] - }, - "types": ["chrome", "node"] - }, - "include": ["src", "vite.config.mts", "tailwind.config.ts"] -} diff --git a/pages/devtools-panel/vite.config.mts b/pages/devtools-panel/vite.config.mts deleted file mode 100644 index 4eab2415..00000000 --- a/pages/devtools-panel/vite.config.mts +++ /dev/null @@ -1,17 +0,0 @@ -import { resolve } from 'node:path'; -import { withPageConfig } from '@extension/vite-config'; - -const rootDir = resolve(import.meta.dirname); -const srcDir = resolve(rootDir, 'src'); - -export default withPageConfig({ - resolve: { - alias: { - '@src': srcDir, - }, - }, - publicDir: resolve(rootDir, 'public'), - build: { - outDir: resolve(rootDir, '..', '..', 'dist', 'devtools-panel'), - }, -}); diff --git a/pages/devtools/package.json b/pages/devtools/package.json index 769ea6c7..f3941d4c 100644 --- a/pages/devtools/package.json +++ b/pages/devtools/package.json @@ -1,6 +1,6 @@ { "name": "@extension/devtools", - "version": "0.5.169", + "version": "0.5.360", "description": "chrome extension - devtools", "type": "module", "private": true, diff --git a/pages/devtools/src/index.ts b/pages/devtools/src/index.ts index 5f1d6f17..5ad363f0 100644 --- a/pages/devtools/src/index.ts +++ b/pages/devtools/src/index.ts @@ -1,6 +1,6 @@ try { console.log("Edit 'pages/devtools/src/index.ts' and save to reload."); - chrome.devtools.panels.create('Agent Platform Tools', '/icon-34.png', '/devtools-panel/index.html'); + // chrome.devtools.panels.create('Agent Platform Tools', '/icon-34.png', '/devtools-panel/index.html'); } catch (e) { console.error(e); } diff --git a/pages/devtools/tsconfig.json b/pages/devtools/tsconfig.json index 59fb4eb5..50fd5735 100644 --- a/pages/devtools/tsconfig.json +++ b/pages/devtools/tsconfig.json @@ -5,7 +5,7 @@ "paths": { "@src/*": ["src/*"] }, - "types": ["chrome", "node"] + "types": ["chrome"] }, "include": ["src", "vite.config.mts"] } diff --git a/pages/new-tab/package.json b/pages/new-tab/package.json index 44d293a8..75e2cfce 100644 --- a/pages/new-tab/package.json +++ b/pages/new-tab/package.json @@ -1,6 +1,6 @@ { "name": "@extension/new-tab", - "version": "0.5.169", + "version": "0.5.360", "description": "chrome extension - new tab", "type": "module", "private": true, @@ -29,12 +29,9 @@ "@extension/tailwindcss-config": "workspace:*", "@extension/tsconfig": "workspace:*", "@extension/vite-config": "workspace:*", - "sass": "^1.89.0" - }, - "postcss": { - "plugins": { - "tailwindcss": {}, - "autoprefixer": {} - } + "sass": "^1.89.0", + "tailwindcss": "^4.1.11", + "autoprefixer": "^10.4.21", + "@tailwindcss/postcss": "^4.1.11" } } diff --git a/pages/new-tab/postcss.config.cjs b/pages/new-tab/postcss.config.cjs new file mode 100644 index 00000000..90c78136 --- /dev/null +++ b/pages/new-tab/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + '@tailwindcss/postcss': {}, + autoprefixer: {}, + }, +} \ No newline at end of file diff --git a/pages/new-tab/src/NewTab.tsx b/pages/new-tab/src/NewTab.tsx index 66eeb5b6..b4d005eb 100644 --- a/pages/new-tab/src/NewTab.tsx +++ b/pages/new-tab/src/NewTab.tsx @@ -1,11 +1,57 @@ import '@src/NewTab.css'; import '@src/NewTab.scss'; import { t } from '@extension/i18n'; -import { PROJECT_URL_OBJECT, useStorage, withErrorBoundary, withSuspense } from '@extension/shared'; +import { PROJECT_URL_OBJECT, useStorage } from '@extension/shared'; import { exampleThemeStorage } from '@extension/storage'; -import { cn, ErrorDisplay, LoadingSpinner, ToggleButton } from '@extension/ui'; +import { cn } from '@extension/ui'; +import React from 'react'; -const NewTab = () => { +// Локальный ErrorDisplay +const ErrorDisplay = function ({ error, resetError }: { error?: Error; resetError?: () => void }) { + return ( +
+

Произошла ошибка

+ {error &&
{error.message}
} + {resetError && } +
+ ); +}; + +// Локальный ToggleButton +const ToggleButton = function ({ onClick, children }: { onClick: () => void; children: React.ReactNode }) { + return ( + + ); +}; + +const FunctionalErrorBoundary = function ({ children }: { children: React.ReactNode }) { + const [error, setError] = React.useState(null); + const resetError = React.useCallback(() => setError(null), []); + + if (error) { + return ; + } + + try { + return <>{children}; + } catch (err) { + setError(err as Error); + return null; + } +}; + +const NewTab = function () { const { isLight } = useStorage(exampleThemeStorage); const logo = isLight ? 'new-tab/logo_horizontal.svg' : 'new-tab/logo_horizontal_dark.svg'; @@ -28,4 +74,10 @@ const NewTab = () => { ); }; -export default withErrorBoundary(withSuspense(NewTab, ), ErrorDisplay); +export default function () { + return ( + + + + ); +} diff --git a/pages/new-tab/tsconfig.json b/pages/new-tab/tsconfig.json index 925c7c31..e3c194aa 100644 --- a/pages/new-tab/tsconfig.json +++ b/pages/new-tab/tsconfig.json @@ -5,7 +5,7 @@ "paths": { "@src/*": ["src/*"] }, - "types": ["chrome", "node"] + "types": ["chrome"] }, "include": ["src", "vite.config.mts", "tailwind.config.ts"] } diff --git a/pages/new-tab/vite.config.mts b/pages/new-tab/vite.config.mts index f473549c..0802299f 100644 --- a/pages/new-tab/vite.config.mts +++ b/pages/new-tab/vite.config.mts @@ -1,10 +1,11 @@ import { resolve } from 'node:path'; -import { withPageConfig } from '@extension/vite-config'; +import react from '@vitejs/plugin-react-swc'; const rootDir = resolve(import.meta.dirname); const srcDir = resolve(rootDir, 'src'); -export default withPageConfig({ +export default { + plugins: [react()], resolve: { alias: { '@src': srcDir, @@ -14,4 +15,4 @@ export default withPageConfig({ build: { outDir: resolve(rootDir, '..', '..', 'dist', 'new-tab'), }, -}); +}; diff --git a/pages/options/package.json b/pages/options/package.json index 9e9fcb45..741b59b5 100644 --- a/pages/options/package.json +++ b/pages/options/package.json @@ -1,6 +1,6 @@ { "name": "@extension/options", - "version": "0.5.169", + "version": "0.5.360", "description": "chrome extension - options", "type": "module", "private": true, @@ -28,12 +28,10 @@ "devDependencies": { "@extension/tailwindcss-config": "workspace:*", "@extension/tsconfig": "workspace:*", - "@extension/vite-config": "workspace:*" - }, - "postcss": { - "plugins": { - "tailwindcss": {}, - "autoprefixer": {} - } + "@extension/vite-config": "workspace:*", + "@vitejs/plugin-react-swc": "^3.10.2", + "tailwindcss": "^4.1.11", + "autoprefixer": "^10.4.21", + "@tailwindcss/postcss": "^4.1.11" } } diff --git a/pages/options/postcss.config.cjs b/pages/options/postcss.config.cjs new file mode 100644 index 00000000..90c78136 --- /dev/null +++ b/pages/options/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + '@tailwindcss/postcss': {}, + autoprefixer: {}, + }, +} \ No newline at end of file diff --git a/pages/options/src/Options.tsx b/pages/options/src/Options.tsx index ebc1d882..ca2832a4 100644 --- a/pages/options/src/Options.tsx +++ b/pages/options/src/Options.tsx @@ -1,33 +1,31 @@ import '@src/Options.css'; -import '../../../packages/ui/lib/components/PluginCard.css'; -import { useStorage, withErrorBoundary, withSuspense } from '@extension/shared'; -import { exampleThemeStorage } from '@extension/storage'; -import { cn, ErrorDisplay, LoadingSpinner } from '@extension/ui'; -import { useEffect } from 'react'; -import { APPOptions } from './components/APPOptions'; - -const Options = () => { - const { isLight } = useStorage(exampleThemeStorage); - - useEffect(() => { - // Log for debugging - console.log('Options component initialized'); - - // Check if we're in a Chrome extension context - const isExtension = !!(window.chrome && chrome.runtime && chrome.runtime.id); - console.log('Is extension context:', isExtension); - - if (isExtension) { - // Log the extension ID - console.log('Extension ID:', chrome.runtime.id); - } - }, []); +import { SettingsTab } from './components/SettingsTab'; +import LocalErrorBoundary from './components/LocalErrorBoundary'; +// AI-First: Основная страница настроек, обёрнута в ErrorBoundary для защиты UX +const Options = function () { + // TODO: Подключить реальные пропсы и стейт для SettingsTab return ( -
- +
+

Options (React 19 ESM test)

+ + {}} + onTest={() => {}} + onAddCustomKey={() => {}} + onRemoveCustomKey={() => {}} + onUpdateKey={() => {}} + onUpdateCustomKeyName={() => {}} + getStatusText={() => ''} + getStatusClass={() => ''} + theme="light" + setTheme={() => {}} + /> +
); }; -export default withErrorBoundary(withSuspense(Options, ), ErrorDisplay); +export default Options; diff --git a/pages/options/src/components/APPOptions.tsx b/pages/options/src/components/APPOptions.tsx index 9ab433c8..ae4ba041 100644 --- a/pages/options/src/components/APPOptions.tsx +++ b/pages/options/src/components/APPOptions.tsx @@ -1,13 +1,15 @@ -import React, { useEffect } from 'react'; +import type React from 'react'; +import { useEffect } from 'react'; import { PROJECT_URL_OBJECT } from '@extension/shared'; import { useAIKeys, usePlugins, useTabs, useTranslations } from '../hooks'; import { IDELayout, PluginsTab, SettingsTab } from './index'; +import LocalErrorBoundary from './LocalErrorBoundary'; export const APPOptions: React.FC<{ isLight: boolean }> = ({ isLight }) => { - // Определяем язык из браузера или используем английский по умолчанию + // AI-First: Определяем язык из браузера или используем английский по умолчанию const browserLocale = chrome.i18n?.getUILanguage?.() || 'en'; const locale = browserLocale.startsWith('ru') ? 'ru' : 'en'; - + const { t } = useTranslations(locale); const { activeTab, switchTab, isActiveTab } = useTabs('plugins'); const { plugins, selectedPlugin, loading, error, selectPlugin, updatePluginSetting } = usePlugins(); @@ -21,10 +23,10 @@ export const APPOptions: React.FC<{ isLight: boolean }> = ({ isLight }) => { updateKey, updateCustomKeyName, getStatusText, - getStatusClass + getStatusClass, } = useAIKeys(); - // Make sure we have a selected plugin when tab is 'plugins' + // AI-First: Гарантируем, что выбран хотя бы один плагин при открытии вкладки useEffect(() => { if (activeTab === 'plugins' && plugins.length > 0 && !selectedPlugin) { selectPlugin(plugins[0]); @@ -35,43 +37,45 @@ export const APPOptions: React.FC<{ isLight: boolean }> = ({ isLight }) => { chrome.tabs.create(PROJECT_URL_OBJECT); }; + // AI-First: Весь layout обёрнут в ErrorBoundary для защиты UX return ( - - {isActiveTab('plugins') && ( - - )} + + + {isActiveTab('plugins') && ( + + )} - {isActiveTab('settings') && ( - getStatusText(status, t)} - getStatusClass={getStatusClass} - locale={locale} - /> - )} - + {isActiveTab('settings') && ( + getStatusText(status, t)} + getStatusClass={getStatusClass} + locale={locale} + /> + )} + + ); -}; \ No newline at end of file +}; diff --git a/pages/options/src/components/ErrorDisplay.tsx b/pages/options/src/components/ErrorDisplay.tsx new file mode 100644 index 00000000..632d9b0e --- /dev/null +++ b/pages/options/src/components/ErrorDisplay.tsx @@ -0,0 +1,11 @@ +import type React from 'react'; + +const ErrorDisplay: React.FC<{ error?: Error; resetError?: () => void }> = ({ error, resetError }) => ( +
+

Произошла ошибка

+ {error &&
{error.message}
} + {resetError && } +
+); + +export default ErrorDisplay; diff --git a/pages/options/src/components/IDELayout.tsx b/pages/options/src/components/IDELayout.tsx index 164b2841..d8317557 100644 --- a/pages/options/src/components/IDELayout.tsx +++ b/pages/options/src/components/IDELayout.tsx @@ -5,6 +5,7 @@ import { useState, useRef, useEffect } from 'react'; import type { Plugin } from '../hooks/usePlugins'; import type { TabType } from '../hooks/useTabs'; import type React from 'react'; +import ToggleButton from './ToggleButton'; interface IDELayoutProps { children: React.ReactNode; @@ -122,39 +123,42 @@ export const IDELayout: React.FC = ({ {/* Theme toggle button */} - +
+ {/* AI-First: Переключатель темы через ToggleButton с иконками */} + import('@extension/storage').then(m => m.exampleThemeStorage.toggle())} + iconOn={ + // Sun icon (светлая тема) + + + + + + + + + + + + } + iconOff={ + // Moon icon (тёмная тема) + + + + } + label={isLight ? t('options.theme.light') : t('options.theme.dark')} + /> +
{children}
{/* Резайзер */} diff --git a/pages/options/src/components/LoadingSpinner.tsx b/pages/options/src/components/LoadingSpinner.tsx new file mode 100644 index 00000000..33cd7dcc --- /dev/null +++ b/pages/options/src/components/LoadingSpinner.tsx @@ -0,0 +1,19 @@ +import type React from 'react'; + +const LoadingSpinner: React.FC = () => ( +
+
+ +
+); + +export default LoadingSpinner; diff --git a/pages/options/src/components/LocalErrorBoundary.tsx b/pages/options/src/components/LocalErrorBoundary.tsx new file mode 100644 index 00000000..1e5edc90 --- /dev/null +++ b/pages/options/src/components/LocalErrorBoundary.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import ErrorDisplay from './ErrorDisplay'; + +const LocalErrorBoundary: React.FC<{ children: React.ReactNode }> = ({ children }) => { + const [error, setError] = React.useState(null); + const resetError = React.useCallback(() => setError(null), []); + + if (error) { + return ; + } + + try { + return <>{children}; + } catch (err) { + setError(err as Error); + return null; + } +}; + +export default LocalErrorBoundary; diff --git a/pages/options/src/components/PluginCard.tsx b/pages/options/src/components/PluginCard.tsx new file mode 100644 index 00000000..0f58d033 --- /dev/null +++ b/pages/options/src/components/PluginCard.tsx @@ -0,0 +1,38 @@ +import type React from 'react'; +import type { Plugin } from '../hooks/usePlugins'; + +interface PluginCardProps { + plugin: Plugin; + selected: boolean; + onClick: () => void; +} + +/** + * AI-First: Карточка плагина с поддержкой выделения, статуса и описания. + * Используется в PluginsTab для унификации UX. + */ +const PluginCard: React.FC = ({ plugin, selected, onClick }) => { + const enabled = plugin.settings?.enabled ?? true; + return ( +
+
{plugin.name}
+
v{plugin.version}
+
{plugin.description}
+
{enabled ? 'Активен' : 'Неактивен'}
+
+ ); +}; + +export default PluginCard; diff --git a/pages/options/src/components/PluginDetails.tsx b/pages/options/src/components/PluginDetails.tsx index 6875a670..5f66ef4e 100644 --- a/pages/options/src/components/PluginDetails.tsx +++ b/pages/options/src/components/PluginDetails.tsx @@ -1,8 +1,10 @@ import { useTranslations } from '../hooks/useTranslations'; -import { cn } from '@extension/ui'; -import { useState } from 'react'; import type { Plugin } from '../hooks/usePlugins'; -import type React from 'react'; +import ToggleButton from './ToggleButton'; +import LocalErrorBoundary from './LocalErrorBoundary'; +import { useState } from 'react'; + +const cn = (...args: (string | undefined | false)[]) => args.filter(Boolean).join(' '); interface PluginDetailsProps { selectedPlugin: Plugin | null; @@ -10,12 +12,11 @@ interface PluginDetailsProps { onUpdateSetting?: (pluginId: string, setting: string, value: boolean) => Promise; } -export const PluginDetails: React.FC = ({ selectedPlugin, locale = 'en', onUpdateSetting }) => { +const PluginDetails = (props: PluginDetailsProps) => { + const { selectedPlugin, locale = 'en', onUpdateSetting } = props; const { t } = useTranslations(locale); const [isUpdating, setIsUpdating] = useState(null); - // Убираем лишние логи для предотвращения бесконечных циклов - if (!selectedPlugin || typeof selectedPlugin !== 'object') { return (
@@ -25,15 +26,9 @@ export const PluginDetails: React.FC = ({ selectedPlugin, lo ); } - // Получаем настройки плагина или устанавливаем значения по умолчанию const settings = selectedPlugin.settings || { enabled: true, autorun: false }; - - // Универсальный поиск host_permissions const hostPermissions = selectedPlugin.manifest?.host_permissions || selectedPlugin.host_permissions || []; - // Убираем лишние логи для предотвращения бесконечных циклов - - // Обработчик изменения настроек const handleSettingChange = async (setting: string, value: boolean) => { if (onUpdateSetting) { try { @@ -48,101 +43,100 @@ export const PluginDetails: React.FC = ({ selectedPlugin, lo }; return ( -
-

{t('options.plugins.details.title')}

-
-
-
-

{selectedPlugin.name}

-

- Версия: v{selectedPlugin.version} -

-

- Статус: - - {settings.enabled ? 'Активен' : 'Неактивен'} - -

-

- Автор: {selectedPlugin.manifest?.author || 'Не указан'} -

-

- Последнее обновление: {selectedPlugin.manifest?.last_updated || 'Неизвестно'} -

-
+ +
+

{t('options.plugins.details.title')}

+
+
+
+

{selectedPlugin.name}

+

+ Версия: v{selectedPlugin.version} +

+

+ Статус: + + {settings.enabled ? 'Активен' : 'Неактивен'} + +

+

+ Автор: {selectedPlugin.manifest?.author || 'Не указан'} +

+

+ Последнее обновление: {selectedPlugin.manifest?.last_updated || 'Неизвестно'} +

+
- {/* Настройки плагина */} -
-

Настройки плагина

-
-
-
-

Описание

-

{selectedPlugin.description}

-
- - {/* Сайты/домены, на которых работает плагин */} - {hostPermissions.length > 0 && (
-

Сайты/домены

-
    - {hostPermissions.map((host: string, idx: number) => ( -
  • {host}
  • - ))} -
+

Описание

+

{selectedPlugin.description}

- )} - {selectedPlugin.manifest?.permissions && ( -
-

Разрешения

-
    - {selectedPlugin.manifest.permissions.map((permission: string, idx: number) => ( -
  • {permission}
  • - ))} -
-
- )} + {/* Сайты/домены, на которых работает плагин */} + {hostPermissions.length > 0 && ( +
+

Сайты/домены

+
    + {hostPermissions.map((host: string, idx: number) => ( +
  • {host}
  • + ))} +
+
+ )} - {/* Удалён блок plugin-actions с кнопкой включения/отключения */} + {selectedPlugin.manifest?.permissions && ( +
+

Разрешения

+
    + {selectedPlugin.manifest.permissions.map((permission: string, idx: number) => ( +
  • {permission}
  • + ))} +
+
+ )} +
-
+
); }; + +export default PluginDetails; diff --git a/pages/options/src/components/PluginsTab.tsx b/pages/options/src/components/PluginsTab.tsx index 62214057..66168f7e 100644 --- a/pages/options/src/components/PluginsTab.tsx +++ b/pages/options/src/components/PluginsTab.tsx @@ -1,8 +1,10 @@ -import { PluginCard } from '../../../../packages/ui/lib/components/PluginCard'; import { useTranslations } from '../hooks/useTranslations'; import { useEffect } from 'react'; import type { Plugin } from '../hooks/usePlugins'; -import type React from 'react'; +import LoadingSpinner from './LoadingSpinner'; +import ErrorDisplay from './ErrorDisplay'; +import PluginCard from './PluginCard'; +// import PluginCard from './PluginCard'; // если потребуется локальная реализация interface PluginsTabProps { plugins: Plugin[]; @@ -11,34 +13,29 @@ interface PluginsTabProps { loading: boolean; error: string | null; locale?: 'en' | 'ru'; - onUpdatePluginSetting?: (pluginId: string, setting: string, value: boolean) => Promise; } -export const PluginsTab: React.FC = ({ +const PluginsTab = function ({ plugins, selectedPlugin, onSelectPlugin, loading, error, locale = 'en', - onUpdatePluginSetting, -}) => { +}: PluginsTabProps) { const { t } = useTranslations(locale); - // Select first plugin if nothing is selected useEffect(() => { if (plugins.length > 0 && !selectedPlugin) { onSelectPlugin(plugins[0]); } }, [plugins, selectedPlugin, onSelectPlugin]); - // Убираем лишние логи для предотвращения бесконечных циклов - - if (loading) return

Загрузка...

; - if (error) return

Ошибка: {error}

; - if (!plugins) return

Ошибка: plugins равен null или undefined

; + if (loading) return ; + if (error) return ; + if (!plugins) return ; if (!Array.isArray(plugins)) { - return

Ошибка: plugins не является массивом. plugins = {JSON.stringify(plugins)}

; + return ; } if (plugins.length === 0) { return

Нет доступных плагинов.

; @@ -51,29 +48,16 @@ export const PluginsTab: React.FC = ({ const renderPlugins = () => { try { - return plugins.map(plugin => { - const enabled = plugin.settings?.enabled ?? true; - return ( - handlePluginClick(plugin)} - onToggle={ - onUpdatePluginSetting ? enabled => onUpdatePluginSetting(plugin.id, 'enabled', enabled) : undefined - } - /> - ); - }); + return plugins.map(plugin => ( + handlePluginClick(plugin)} + /> + )); } catch (e) { - console.error('[PluginsTab] Ошибка при рендеринге списка плагинов:', e); - return

Ошибка при отображении плагинов: {(e as Error).message}

; + return ; } }; @@ -84,3 +68,4 @@ export const PluginsTab: React.FC = ({ ); }; +export { PluginsTab }; diff --git a/pages/options/src/components/SettingsTab.tsx b/pages/options/src/components/SettingsTab.tsx index e7785284..0ba79915 100644 --- a/pages/options/src/components/SettingsTab.tsx +++ b/pages/options/src/components/SettingsTab.tsx @@ -1,7 +1,8 @@ -import React from 'react'; +import type React from 'react'; import { cn } from '@extension/ui'; -import { AIKey } from '../hooks/useAIKeys'; +import type { AIKey } from '../hooks/useAIKeys'; import { useTranslations } from '../hooks/useTranslations'; +import ToggleButton from './ToggleButton'; interface SettingsTabProps { aiKeys: AIKey[]; @@ -32,7 +33,7 @@ export const SettingsTab: React.FC = ({ getStatusClass, theme, setTheme, - locale = 'en' + locale = 'en', }) => { const { t } = useTranslations(locale); console.log('[SettingsTab] theme:', theme, 'setTheme:', typeof setTheme); @@ -48,19 +49,17 @@ export const SettingsTab: React.FC = ({

Общие настройки

- + {/* AI-First: Переключатель автообновления плагинов */} + {}} label="Автоматическое обновление плагинов" />
- + {/* AI-First: Переключатель уведомлений */} + {}} label="Показывать уведомления" />
- +

Безопасность

- + {/* AI-First: Переключатель проверки подписи плагинов */} + {}} label="Проверять подписи плагинов" />
- + {/* AI-First: Переключатель изолированного режима */} + {}} label="Изолированный режим выполнения" />
- +

Производительность

@@ -92,54 +89,48 @@ export const SettingsTab: React.FC = ({
- + {/* AI-First: Переключатель кэширования данных плагинов */} + {}} label="Кэширование данных плагинов" />

{t('options.settings.aiKeys.title')}

- + {/* Фиксированные ключи */} - {aiKeys.map((key) => ( + {aiKeys.map(key => (

{key.name}

- - {getStatusText(key.status)} - + {getStatusText(key.status)} {key.isFree && {t('options.settings.aiKeys.badges.free')}}
onUpdateKey(key.id, e.target.value, false)} + onChange={e => onUpdateKey(key.id, e.target.value, false)} placeholder={t('options.settings.aiKeys.customKeys.keyPlaceholder')} />
))} - + {/* Пользовательские ключи */}

{t('options.settings.aiKeys.customKeys.title')}

- {customKeys.map((key) => ( + {customKeys.map(key => (
onUpdateCustomKeyName(key.id, e.target.value)} + onChange={e => onUpdateCustomKeyName(key.id, e.target.value)} className="key-name-input" placeholder={t('options.settings.aiKeys.customKeys.namePlaceholder')} /> -
@@ -147,7 +138,7 @@ export const SettingsTab: React.FC = ({ onUpdateKey(key.id, e.target.value, true)} + onChange={e => onUpdateKey(key.id, e.target.value, true)} placeholder={t('options.settings.aiKeys.customKeys.keyPlaceholder')} />
@@ -157,7 +148,7 @@ export const SettingsTab: React.FC = ({ {t('options.settings.aiKeys.customKeys.addButton')}
- +
); -}; \ No newline at end of file +}; diff --git a/pages/options/src/components/ToggleButton.tsx b/pages/options/src/components/ToggleButton.tsx new file mode 100644 index 00000000..1cd450e4 --- /dev/null +++ b/pages/options/src/components/ToggleButton.tsx @@ -0,0 +1,54 @@ +import type React from 'react'; + +interface ToggleButtonProps { + checked: boolean; + onChange: (checked: boolean) => void; + disabled?: boolean; + label?: string; + iconOn?: React.ReactNode; // AI-First: иконка для состояния ON + iconOff?: React.ReactNode; // AI-First: иконка для состояния OFF +} + +const ToggleButton: React.FC = ({ checked, onChange, disabled, label, iconOn, iconOff }) => ( + +); + +export default ToggleButton; diff --git a/pages/options/src/hooks/useAIKeys.ts b/pages/options/src/hooks/useAIKeys.ts index 6fce7626..c4b7a12e 100644 --- a/pages/options/src/hooks/useAIKeys.ts +++ b/pages/options/src/hooks/useAIKeys.ts @@ -1,4 +1,4 @@ -import { useState, useEffect } from 'react'; +import * as React from 'react'; export interface AIKey { id: string; @@ -10,14 +10,14 @@ export interface AIKey { } export const useAIKeys = () => { - const [aiKeys, setAiKeys] = useState([ + const [aiKeys, setAiKeys] = React.useState([ { id: 'gemini-flash', name: 'Google Gemini (Flash) - Базовый анализ', key: '', status: 'not_configured', isFixed: true, - isFree: true + isFree: true, }, { id: 'gemini-25', @@ -25,13 +25,13 @@ export const useAIKeys = () => { key: '', status: 'not_configured', isFixed: true, - isFree: true - } + isFree: true, + }, ]); - const [customKeys, setCustomKeys] = useState([]); + const [customKeys, setCustomKeys] = React.useState([]); // Load AI keys on mount - useEffect(() => { + React.useEffect(() => { loadAIKeys(); }, []); @@ -39,11 +39,13 @@ export const useAIKeys = () => { try { const result = await chrome.storage.local.get(['aiKeys', 'customKeys']); if (result.aiKeys) { - setAiKeys(prev => prev.map(key => ({ - ...key, - key: result.aiKeys[key.id] || '', - status: result.aiKeys[key.id] ? 'configured' : 'not_configured' - }))); + setAiKeys(prev => + prev.map(key => ({ + ...key, + key: result.aiKeys[key.id] || '', + status: result.aiKeys[key.id] ? 'configured' : 'not_configured', + })), + ); } if (result.customKeys) { setCustomKeys(result.customKeys); @@ -61,18 +63,20 @@ export const useAIKeys = () => { keysToSave[key.id] = key.key; } }); - + await chrome.storage.local.set({ aiKeys: keysToSave, - customKeys: customKeys + customKeys: customKeys, }); - + // Update status - setAiKeys(prev => prev.map(key => ({ - ...key, - status: key.key ? 'configured' : 'not_configured' - }))); - + setAiKeys(prev => + prev.map(key => ({ + ...key, + status: key.key ? 'configured' : 'not_configured', + })), + ); + alert('Настройки сохранены!'); } catch (error) { console.error('Failed to save AI keys:', error); @@ -82,16 +86,20 @@ export const useAIKeys = () => { const testAIKeys = async () => { // Simulate testing - setAiKeys(prev => prev.map(key => ({ - ...key, - status: 'testing' - }))); - - setTimeout(() => { - setAiKeys(prev => prev.map(key => ({ + setAiKeys(prev => + prev.map(key => ({ ...key, - status: key.key ? 'configured' : 'not_configured' - }))); + status: 'testing', + })), + ); + + setTimeout(() => { + setAiKeys(prev => + prev.map(key => ({ + ...key, + status: key.key ? 'configured' : 'not_configured', + })), + ); alert('Тестирование завершено!'); }, 2000); }; @@ -101,7 +109,7 @@ export const useAIKeys = () => { id: `custom-${Date.now()}`, name: `Пользовательский ключ ${customKeys.length + 1}`, key: '', - status: 'not_configured' + status: 'not_configured', }; setCustomKeys(prev => [...prev, newKey]); }; @@ -112,47 +120,53 @@ export const useAIKeys = () => { const updateKey = (id: string, value: string, isCustom = false) => { if (isCustom) { - setCustomKeys(prev => prev.map(key => - key.id === id ? { ...key, key: value } : key - )); + setCustomKeys(prev => prev.map(key => (key.id === id ? { ...key, key: value } : key))); } else { - setAiKeys(prev => prev.map(key => - key.id === id ? { ...key, key: value } : key - )); + setAiKeys(prev => prev.map(key => (key.id === id ? { ...key, key: value } : key))); } }; const updateCustomKeyName = (id: string, name: string) => { - setCustomKeys(prev => prev.map(key => - key.id === id ? { ...key, name } : key - )); + setCustomKeys(prev => prev.map(key => (key.id === id ? { ...key, name } : key))); }; const getStatusText = (status: string, t?: (key: string) => string) => { if (t) { switch (status) { - case 'configured': return t('options.settings.aiKeys.status.configured'); - case 'not_configured': return t('options.settings.aiKeys.status.notConfigured'); - case 'testing': return t('options.settings.aiKeys.status.testing'); - default: return 'Unknown'; + case 'configured': + return t('options.settings.aiKeys.status.configured'); + case 'not_configured': + return t('options.settings.aiKeys.status.notConfigured'); + case 'testing': + return t('options.settings.aiKeys.status.testing'); + default: + return 'Unknown'; } } - + // Fallback to hardcoded Russian text switch (status) { - case 'configured': return 'Настроен'; - case 'not_configured': return 'Не настроен'; - case 'testing': return 'Тестирование...'; - default: return 'Неизвестно'; + case 'configured': + return 'Настроен'; + case 'not_configured': + return 'Не настроен'; + case 'testing': + return 'Тестирование...'; + default: + return 'Неизвестно'; } }; const getStatusClass = (status: string) => { switch (status) { - case 'configured': return 'status-configured'; - case 'not_configured': return 'status-not-configured'; - case 'testing': return 'status-testing'; - default: return ''; + case 'configured': + return 'status-configured'; + case 'not_configured': + return 'status-not-configured'; + case 'testing': + return 'status-testing'; + default: + return ''; } }; @@ -166,6 +180,6 @@ export const useAIKeys = () => { updateKey, updateCustomKeyName, getStatusText, - getStatusClass + getStatusClass, }; -}; \ No newline at end of file +}; diff --git a/pages/options/src/hooks/usePlugins.ts b/pages/options/src/hooks/usePlugins.ts index e984ca09..fa0cecd8 100644 --- a/pages/options/src/hooks/usePlugins.ts +++ b/pages/options/src/hooks/usePlugins.ts @@ -1,6 +1,6 @@ import { useStorage } from '@extension/shared'; import { pluginSettingsStorage, updatePluginSettings } from '@extension/storage'; -import { useState, useEffect, useCallback } from 'react'; +import * as React from 'react'; import type { PluginSettings } from '@extension/storage'; interface Plugin { @@ -78,14 +78,14 @@ const mockPlugins = [ ]; const usePlugins = () => { - const [plugins, setPlugins] = useState([]); - const [selectedPlugin, setSelectedPlugin] = useState(null); - const [loading, setLoading] = useState(true); - const [error, setError] = useState(null); + const [plugins, setPlugins] = React.useState([]); + const [selectedPlugin, setSelectedPlugin] = React.useState(null); + const [loading, setLoading] = React.useState(true); + const [error, setError] = React.useState(null); // Получаем настройки плагинов из хранилища const pluginSettings = useStorage(pluginSettingsStorage); - useEffect(() => { + React.useEffect(() => { const fetchPlugins = async () => { try { setLoading(true); @@ -143,7 +143,7 @@ const usePlugins = () => { }, []); // eslint-disable-line react-hooks/exhaustive-deps -- Убираем зависимость от pluginSettings для предотвращения бесконечного цикла // Обновляем выбранный плагин при изменении настроек - useEffect(() => { + React.useEffect(() => { if (selectedPlugin && pluginSettings) { const currentSettings = pluginSettings[selectedPlugin.id] || { enabled: true, @@ -165,43 +165,46 @@ const usePlugins = () => { } }, [pluginSettings, selectedPlugin?.id]); // eslint-disable-line react-hooks/exhaustive-deps -- Зависим только от pluginSettings и ID выбранного плагина - const selectPlugin = useCallback((plugin: Plugin) => { + const selectPlugin = React.useCallback((plugin: Plugin) => { console.log('[usePlugins] Selecting plugin:', plugin); setSelectedPlugin(plugin); }, []); // Функция для обновления настроек плагина - const updatePluginSetting = useCallback(async (pluginId: string, setting: keyof PluginSettings, value: boolean) => { - try { - // Отправляем сообщение в background script для обновления настроек - const response = await chrome.runtime.sendMessage({ - type: 'UPDATE_PLUGIN_SETTING', - pluginId, - setting, - value, - }); - - if (response?.error) { - throw new Error(response.error); - } + const updatePluginSetting = React.useCallback( + async (pluginId: string, setting: keyof PluginSettings, value: boolean) => { + try { + // Отправляем сообщение в background script для обновления настроек + const response = await chrome.runtime.sendMessage({ + type: 'UPDATE_PLUGIN_SETTING', + pluginId, + setting, + value, + }); + + if (response?.error) { + throw new Error(response.error); + } - // После успешного обновления в background, обновляем локальный state - await updatePluginSettings(pluginId, { [setting]: value }); - - // Синхронизируем массив plugins мгновенно - setPlugins(prevPlugins => - prevPlugins.map(plugin => - plugin.id === pluginId ? { ...plugin, settings: { ...plugin.settings, [setting]: value } } : plugin, - ), - ); - - console.log(`[usePlugins] Updated plugin setting for ${pluginId}:`, setting, '=', value); - return true; - } catch (error) { - console.error(`[usePlugins] Failed to update plugin setting for ${pluginId}:`, error); - throw error; - } - }, []); + // После успешного обновления в background, обновляем локальный state + await updatePluginSettings(pluginId, { [setting]: value }); + + // Синхронизируем массив plugins мгновенно + setPlugins(prevPlugins => + prevPlugins.map(plugin => + plugin.id === pluginId ? { ...plugin, settings: { ...plugin.settings, [setting]: value } } : plugin, + ), + ); + + console.log(`[usePlugins] Updated plugin setting for ${pluginId}:`, setting, '=', value); + return true; + } catch (error) { + console.error(`[usePlugins] Failed to update plugin setting for ${pluginId}:`, error); + throw error; + } + }, + [], + ); return { plugins, diff --git a/pages/options/src/hooks/useTabs.ts b/pages/options/src/hooks/useTabs.ts index d5250046..9687cb0e 100644 --- a/pages/options/src/hooks/useTabs.ts +++ b/pages/options/src/hooks/useTabs.ts @@ -1,21 +1,19 @@ -import { useState } from 'react'; +import * as React from 'react'; export type TabType = 'plugins' | 'settings'; export const useTabs = (initialTab: TabType = 'plugins') => { - const [activeTab, setActiveTab] = useState(initialTab); + const [activeTab, setActiveTab] = React.useState(initialTab); const switchTab = (tab: TabType) => { setActiveTab(tab); }; - const isActiveTab = (tab: TabType) => { - return activeTab === tab; - }; + const isActiveTab = (tab: TabType) => activeTab === tab; return { activeTab, switchTab, - isActiveTab + isActiveTab, }; -}; \ No newline at end of file +}; diff --git a/pages/options/src/hooks/useTranslations.ts b/pages/options/src/hooks/useTranslations.ts index cca71bca..0f118ac4 100644 --- a/pages/options/src/hooks/useTranslations.ts +++ b/pages/options/src/hooks/useTranslations.ts @@ -1,4 +1,4 @@ -import { useMemo } from 'react'; +import * as React from 'react'; // Импортируем переводы import enTranslations from '../locales/en.json'; @@ -6,42 +6,16 @@ import ruTranslations from '../locales/ru.json'; const translations = { en: enTranslations, - ru: ruTranslations + ru: ruTranslations, }; export type Locale = 'en' | 'ru'; export const useTranslations = (locale: Locale = 'en') => { - const t = useMemo(() => { - const currentTranslations = translations[locale] || translations.en; - - return (key: string, params?: Record) => { - const keys = key.split('.'); - let value: any = currentTranslations; - - for (const k of keys) { - if (value && typeof value === 'object' && k in value) { - value = value[k]; - } else { - // Fallback to English if translation not found - value = keys.reduce((obj, k) => obj?.[k], translations.en); - break; - } - } - - if (typeof value === 'string') { - // Replace parameters - if (params) { - return Object.entries(params).reduce((str, [key, val]) => { - return str.replace(new RegExp(`\\{${key}\\}`, 'g'), String(val)); - }, value); - } - return value; - } - - return key; // Return key if translation not found - }; - }, [locale]); + const t = React.useMemo(() => { + const dict: Record = translations[locale] || {}; + return (key: string) => dict[key] || key; + }, [locale, translations]); return { t, locale }; -}; \ No newline at end of file +}; diff --git a/pages/options/src/index.tsx b/pages/options/src/index.tsx index a0b576cd..3483155e 100644 --- a/pages/options/src/index.tsx +++ b/pages/options/src/index.tsx @@ -1,6 +1,6 @@ import '@src/index.css'; -import Options from '@src/Options'; import { createRoot } from 'react-dom/client'; +import Options from '@src/Options'; const init = () => { const appContainer = document.querySelector('#app-container'); diff --git a/pages/options/tsconfig.json b/pages/options/tsconfig.json index 925c7c31..e3c194aa 100644 --- a/pages/options/tsconfig.json +++ b/pages/options/tsconfig.json @@ -5,7 +5,7 @@ "paths": { "@src/*": ["src/*"] }, - "types": ["chrome", "node"] + "types": ["chrome"] }, "include": ["src", "vite.config.mts", "tailwind.config.ts"] } diff --git a/pages/options/vite.config.mts b/pages/options/vite.config.mts index 7383d041..d555c308 100644 --- a/pages/options/vite.config.mts +++ b/pages/options/vite.config.mts @@ -1,5 +1,5 @@ import { resolve } from 'node:path'; -import { withPageConfig } from '@extension/vite-config'; +import react from '@vitejs/plugin-react-swc'; import { readFileSync } from 'node:fs'; const rootDir = resolve(import.meta.dirname); @@ -15,7 +15,8 @@ function versionReplacePlugin() { }; } -export default withPageConfig({ +export default { + base: './', // <--- ВАЖНО для Chrome Extension! resolve: { alias: { '@src': srcDir, @@ -24,6 +25,13 @@ export default withPageConfig({ publicDir: resolve(rootDir, 'public'), build: { outDir: resolve(rootDir, '..', '..', 'dist', 'options'), + sourcemap: true, + minify: true, + reportCompressedSize: true, + emptyOutDir: true, + rollupOptions: { + external: ['chrome', 'unenv/node/process', 'unenv/polyfill/globalthis'], + }, }, - plugins: [versionReplacePlugin()], -}); + plugins: [react(), versionReplacePlugin()], +}; diff --git a/pages/popup/index.html b/pages/popup/index.html deleted file mode 100644 index f75fabfa..00000000 --- a/pages/popup/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - Popup - - - -
- - - diff --git a/pages/popup/package.json b/pages/popup/package.json deleted file mode 100644 index f850b687..00000000 --- a/pages/popup/package.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "@extension/popup", - "version": "0.5.169", - "description": "chrome extension - popup", - "type": "module", - "private": true, - "sideEffects": true, - "files": [ - "dist/**" - ], - "scripts": { - "clean:node_modules": "pnpx rimraf node_modules", - "clean:turbo": "rimraf .turbo", - "clean": "pnpm clean:turbo && pnpm clean:node_modules", - "build": "vite build", - "dev": "vite build --mode development", - "lint": "eslint .", - "lint:fix": "pnpm lint --fix", - "format": "prettier . --write --ignore-path ../../.prettierignore", - "type-check": "tsc --noEmit" - }, - "dependencies": { - "@extension/shared": "workspace:*", - "@extension/storage": "workspace:*", - "@extension/i18n": "workspace:*", - "@extension/ui": "workspace:*" - }, - "devDependencies": { - "@extension/tailwindcss-config": "workspace:*", - "@extension/tsconfig": "workspace:*", - "@extension/vite-config": "workspace:*" - }, - "postcss": { - "plugins": { - "tailwindcss": {}, - "autoprefixer": {} - } - } -} diff --git a/pages/popup/public/logo_vertical.svg b/pages/popup/public/logo_vertical.svg deleted file mode 100644 index 5768b87a..00000000 --- a/pages/popup/public/logo_vertical.svg +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/pages/popup/public/logo_vertical_dark.svg b/pages/popup/public/logo_vertical_dark.svg deleted file mode 100644 index b4089d81..00000000 --- a/pages/popup/public/logo_vertical_dark.svg +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/pages/popup/src/Popup.css b/pages/popup/src/Popup.css deleted file mode 100644 index e29c75f9..00000000 --- a/pages/popup/src/Popup.css +++ /dev/null @@ -1,30 +0,0 @@ -.App { - position: absolute; - top: 0; - bottom: 0; - left: 0; - right: 0; - text-align: center; - height: 100%; - padding: 1rem; -} - -.App-logo { - height: 50vmin; - margin-bottom: 1rem; -} - -.App-header { - height: 100%; - display: flex; - flex-direction: column; - align-items: center; - justify-content: flex-end; - font-size: 0.75rem; -} - -code { - background: rgba(148, 163, 184, 0.5); - border-radius: 0.25rem; - padding: 0.2rem 0.5rem; -} diff --git a/pages/popup/src/Popup.tsx b/pages/popup/src/Popup.tsx deleted file mode 100644 index 192339c4..00000000 --- a/pages/popup/src/Popup.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import '@src/Popup.css'; -import { t } from '@extension/i18n'; -import { PROJECT_URL_OBJECT, useStorage, withErrorBoundary, withSuspense } from '@extension/shared'; -import { exampleThemeStorage } from '@extension/storage'; -import { cn, ErrorDisplay, LoadingSpinner, ToggleButton } from '@extension/ui'; - -const notificationOptions = { - type: 'basic', - iconUrl: chrome.runtime.getURL('icon-34.png'), - title: 'Injecting content script error', - message: 'You cannot inject script here!', -} as const; - -const Popup = () => { - const { isLight } = useStorage(exampleThemeStorage); - const logo = isLight ? 'popup/logo_vertical.svg' : 'popup/logo_vertical_dark.svg'; - - const goGithubSite = () => chrome.tabs.create(PROJECT_URL_OBJECT); - - const injectContentScript = async () => { - const [tab] = await chrome.tabs.query({ currentWindow: true, active: true }); - - if (tab.url!.startsWith('about:') || tab.url!.startsWith('chrome:')) { - chrome.notifications.create('inject-error', notificationOptions); - } - - await chrome.scripting - .executeScript({ - target: { tabId: tab.id! }, - files: ['/content-runtime/example.iife.js', '/content-runtime/all.iife.js'], - }) - .catch(err => { - // Handling errors related to other paths - if (err.message.includes('Cannot access a chrome:// URL')) { - chrome.notifications.create('inject-error', notificationOptions); - } - }); - }; - - return ( -
-
- -

- Edit pages/popup/src/Popup.tsx -

- - {t('toggleTheme')} -
-
- ); -}; - -export default withErrorBoundary(withSuspense(Popup, ), ErrorDisplay); diff --git a/pages/popup/src/index.css b/pages/popup/src/index.css deleted file mode 100644 index 0f6ad88b..00000000 --- a/pages/popup/src/index.css +++ /dev/null @@ -1,6 +0,0 @@ -@import '@extension/ui/global.css'; - -body { - width: 300px; - height: 260px; -} diff --git a/pages/popup/src/index.tsx b/pages/popup/src/index.tsx deleted file mode 100644 index afd2e44e..00000000 --- a/pages/popup/src/index.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import '@src/index.css'; -import Popup from '@src/Popup'; -import { createRoot } from 'react-dom/client'; - -const init = () => { - const appContainer = document.querySelector('#app-container'); - if (!appContainer) { - throw new Error('Can not find #app-container'); - } - const root = createRoot(appContainer); - - root.render(); -}; - -init(); diff --git a/pages/popup/tailwind.config.ts b/pages/popup/tailwind.config.ts deleted file mode 100644 index 3418ee66..00000000 --- a/pages/popup/tailwind.config.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { withUI } from '@extension/ui'; - -export default withUI({ - content: ['index.html', 'src/**/*.tsx'], -}); diff --git a/pages/popup/tsconfig.json b/pages/popup/tsconfig.json deleted file mode 100644 index 925c7c31..00000000 --- a/pages/popup/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "../../packages/tsconfig/base.json", - "compilerOptions": { - "baseUrl": ".", - "paths": { - "@src/*": ["src/*"] - }, - "types": ["chrome", "node"] - }, - "include": ["src", "vite.config.mts", "tailwind.config.ts"] -} diff --git a/pages/popup/vite.config.mts b/pages/popup/vite.config.mts deleted file mode 100644 index 8c860b9b..00000000 --- a/pages/popup/vite.config.mts +++ /dev/null @@ -1,17 +0,0 @@ -import { resolve } from 'node:path'; -import { withPageConfig } from '@extension/vite-config'; - -const rootDir = resolve(import.meta.dirname); -const srcDir = resolve(rootDir, 'src'); - -export default withPageConfig({ - resolve: { - alias: { - '@src': srcDir, - }, - }, - publicDir: resolve(rootDir, 'public'), - build: { - outDir: resolve(rootDir, '..', '..', 'dist', 'popup'), - }, -}); diff --git a/pages/side-panel/package.json b/pages/side-panel/package.json index ab7a83eb..90502b55 100644 --- a/pages/side-panel/package.json +++ b/pages/side-panel/package.json @@ -1,6 +1,6 @@ { "name": "@extension/sidepanel", - "version": "0.5.169", + "version": "0.5.360", "description": "chrome extension - side panel", "type": "module", "private": true, @@ -28,12 +28,10 @@ "devDependencies": { "@extension/tailwindcss-config": "workspace:*", "@extension/tsconfig": "workspace:*", - "@extension/vite-config": "workspace:*" - }, - "postcss": { - "plugins": { - "tailwindcss": {}, - "autoprefixer": {} - } + "@extension/vite-config": "workspace:*", + "@vitejs/plugin-react-swc": "^3.10.2", + "tailwindcss": "^4.1.11", + "autoprefixer": "^10.4.21", + "@tailwindcss/postcss": "^4.1.11" } } diff --git a/pages/side-panel/postcss.config.cjs b/pages/side-panel/postcss.config.cjs new file mode 100644 index 00000000..90c78136 --- /dev/null +++ b/pages/side-panel/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + '@tailwindcss/postcss': {}, + autoprefixer: {}, + }, +} \ No newline at end of file diff --git a/pages/side-panel/src/SidePanel.tsx b/pages/side-panel/src/SidePanel.tsx index 8f1b5e9a..534d531b 100644 --- a/pages/side-panel/src/SidePanel.tsx +++ b/pages/side-panel/src/SidePanel.tsx @@ -2,10 +2,11 @@ import { PluginControlPanel } from './components/PluginControlPanel'; // Панель управления выбранным плагином import { ToastNotifications } from './components/ToastNotifications'; // Всплывающие уведомления // === Общие/shared утилиты и хуки (используются во всех частях расширения) === -import { withErrorBoundary, withSuspense, useStorage } from '@extension/shared'; // HOC для обработки ошибок, Suspense и хук для работы с хранилищем +import { useStorage } from '@extension/shared'; // HOC для обработки ошибок, Suspense и хук для работы с хранилищем import { exampleThemeStorage } from '@extension/storage'; // Пример хранилища для темы -import { cn, ErrorDisplay, LoadingSpinner } from '@extension/ui'; // Утилита для классов, компонент ошибки и спиннер -import { PluginCard } from '@extension/ui/lib/components/PluginCard'; // Общий компонент карточки плагина (React) +import { cn } from '@extension/ui'; // Утилита для классов +import LocalErrorBoundary from './components/LocalErrorBoundary'; +import PluginCard from './components/PluginCard'; // === React хуки === import { useState, useEffect, useCallback, useRef } from 'react'; // === Типы для локальных компонентов === @@ -352,93 +353,96 @@ const SidePanel = () => { }; return ( -
-
-
- - - -
-
- -
-
-

Доступные плагины

-
- {(() => { - console.log('[SidePanel] === РЕНДЕР ==='); - console.log('[SidePanel] Состояние plugins:', plugins); - console.log('[SidePanel] Состояние currentTabUrl:', currentTabUrl); - - const filteredPlugins = plugins.filter(isPluginAllowedOnHost); - console.log('[SidePanel] Всего плагинов:', plugins.length); - console.log('[SidePanel] Отфильтрованных плагинов:', filteredPlugins.length); - console.log('[SidePanel] Отфильтрованные плагины:', filteredPlugins); - - return filteredPlugins.map(plugin => ( - handlePluginClick(plugin)} - onToggle={async (enabled: boolean): Promise => { - await handleUpdatePluginSetting(plugin.id, 'enabled', enabled); - }} - /> - )); - })()} +
-
- {/* Удалена секция с LogManager */} -
- - {/* Панель управления плагином */} - {showControlPanel && selectedPlugin && ( - - )} - - -
+ + +
+
+

Доступные плагины

+
+ {(() => { + console.log('[SidePanel] === РЕНДЕР ==='); + console.log('[SidePanel] Состояние plugins:', plugins); + console.log('[SidePanel] Состояние currentTabUrl:', currentTabUrl); + + const filteredPlugins = plugins.filter(isPluginAllowedOnHost); + console.log('[SidePanel] Всего плагинов:', plugins.length); + console.log('[SidePanel] Отфильтрованных плагинов:', filteredPlugins.length); + console.log('[SidePanel] Отфильтрованные плагины:', filteredPlugins); + + return filteredPlugins.map(plugin => ( + handlePluginClick(plugin)} + onToggle={async (enabled: boolean): Promise => { + await handleUpdatePluginSetting(plugin.id, 'enabled', enabled); + }} + /> + )); + })()} +
+
+ {/* Удалена секция с LogManager */} +
+ + {/* Панель управления плагином */} + {showControlPanel && selectedPlugin && ( + + )} + + +
+ ); }; -export default withErrorBoundary(withSuspense(SidePanel, ), ErrorDisplay); +export default SidePanel; // TODO: Миниатюризация карточек и панель управления плагином diff --git a/pages/side-panel/src/components/DraftStatus.css b/pages/side-panel/src/components/DraftStatus.css index 607e8427..1b0a21ab 100644 --- a/pages/side-panel/src/components/DraftStatus.css +++ b/pages/side-panel/src/components/DraftStatus.css @@ -268,4 +268,20 @@ --ready-text: #dbeafe; --ready-border: #3b82f6; --ready-icon: #dbeafe; +} + +.draft-status-loader { + width: 12px; + height: 12px; + border: 2px solid currentColor; + border-top: 2px solid transparent; + border-radius: 50%; + animation: draft-spin 1s linear infinite; + display: inline-block; + vertical-align: middle; +} + +@keyframes draft-spin { + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } } \ No newline at end of file diff --git a/pages/side-panel/src/components/DraftStatus.tsx b/pages/side-panel/src/components/DraftStatus.tsx index 6371307c..827a3a76 100644 --- a/pages/side-panel/src/components/DraftStatus.tsx +++ b/pages/side-panel/src/components/DraftStatus.tsx @@ -19,19 +19,8 @@ export const DraftStatus: React.FC = ({ }) => { const getStatusIcon = () => { if (isDraftLoading) { - return ( - - - - - - - ); + // CSS-анимированный круг для лоадера + return
; } if (draftError) { diff --git a/pages/side-panel/src/components/ErrorDisplay.tsx b/pages/side-panel/src/components/ErrorDisplay.tsx new file mode 100644 index 00000000..632d9b0e --- /dev/null +++ b/pages/side-panel/src/components/ErrorDisplay.tsx @@ -0,0 +1,11 @@ +import type React from 'react'; + +const ErrorDisplay: React.FC<{ error?: Error; resetError?: () => void }> = ({ error, resetError }) => ( +
+

Произошла ошибка

+ {error &&
{error.message}
} + {resetError && } +
+); + +export default ErrorDisplay; diff --git a/pages/side-panel/src/components/LoadingSpinner.tsx b/pages/side-panel/src/components/LoadingSpinner.tsx new file mode 100644 index 00000000..33cd7dcc --- /dev/null +++ b/pages/side-panel/src/components/LoadingSpinner.tsx @@ -0,0 +1,19 @@ +import type React from 'react'; + +const LoadingSpinner: React.FC = () => ( +
+
+ +
+); + +export default LoadingSpinner; diff --git a/pages/side-panel/src/components/LocalErrorBoundary.tsx b/pages/side-panel/src/components/LocalErrorBoundary.tsx new file mode 100644 index 00000000..1e5edc90 --- /dev/null +++ b/pages/side-panel/src/components/LocalErrorBoundary.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import ErrorDisplay from './ErrorDisplay'; + +const LocalErrorBoundary: React.FC<{ children: React.ReactNode }> = ({ children }) => { + const [error, setError] = React.useState(null); + const resetError = React.useCallback(() => setError(null), []); + + if (error) { + return ; + } + + try { + return <>{children}; + } catch (err) { + setError(err as Error); + return null; + } +}; + +export default LocalErrorBoundary; diff --git a/pages/side-panel/src/components/PluginCard.tsx b/pages/side-panel/src/components/PluginCard.tsx new file mode 100644 index 00000000..fac84662 --- /dev/null +++ b/pages/side-panel/src/components/PluginCard.tsx @@ -0,0 +1,49 @@ +import type React from 'react'; +type Plugin = { + id: string; + name: string; + version: string; + description?: string; + icon?: string; + iconUrl?: string; + manifest?: Record; + host_permissions?: string[]; + settings?: { + enabled?: boolean; + autorun?: boolean; + [key: string]: unknown; + }; + [key: string]: unknown; +}; + +interface PluginCardProps { + plugin: Plugin; + selected: boolean; + onClick: () => void; +} + +const PluginCard: React.FC = ({ plugin, selected, onClick }) => { + const enabled = plugin.settings?.enabled ?? true; + return ( +
+
{plugin.name}
+
v{plugin.version}
+
{plugin.description}
+
{enabled ? 'Активен' : 'Неактивен'}
+
+ ); +}; + +export default PluginCard; diff --git a/pages/side-panel/src/components/ToggleButton.tsx b/pages/side-panel/src/components/ToggleButton.tsx new file mode 100644 index 00000000..6a1b14aa --- /dev/null +++ b/pages/side-panel/src/components/ToggleButton.tsx @@ -0,0 +1,53 @@ +import type React from 'react'; + +interface ToggleButtonProps { + checked: boolean; + onChange: (checked: boolean) => void; + disabled?: boolean; + label?: string; + iconOn?: React.ReactNode; + iconOff?: React.ReactNode; +} + +const ToggleButton: React.FC = ({ checked, onChange, disabled, label, iconOn, iconOff }) => ( + +); + +export default ToggleButton; diff --git a/pages/side-panel/tsconfig.json b/pages/side-panel/tsconfig.json index 925c7c31..e3c194aa 100644 --- a/pages/side-panel/tsconfig.json +++ b/pages/side-panel/tsconfig.json @@ -5,7 +5,7 @@ "paths": { "@src/*": ["src/*"] }, - "types": ["chrome", "node"] + "types": ["chrome"] }, "include": ["src", "vite.config.mts", "tailwind.config.ts"] } diff --git a/pages/side-panel/vite.config.mts b/pages/side-panel/vite.config.mts index c6d889c1..745748af 100644 --- a/pages/side-panel/vite.config.mts +++ b/pages/side-panel/vite.config.mts @@ -1,10 +1,11 @@ import { resolve } from 'node:path'; -import { withPageConfig } from '@extension/vite-config'; +import react from '@vitejs/plugin-react-swc'; const rootDir = resolve(import.meta.dirname); const srcDir = resolve(rootDir, 'src'); -export default withPageConfig({ +export default { + base: './', // <--- ВАЖНО для Chrome Extension! resolve: { alias: { '@src': srcDir, @@ -13,5 +14,13 @@ export default withPageConfig({ publicDir: resolve(rootDir, 'public'), build: { outDir: resolve(rootDir, '..', '..', 'dist', 'side-panel'), + sourcemap: true, + minify: true, + reportCompressedSize: true, + emptyOutDir: true, + rollupOptions: { + external: ['chrome', 'unenv/node/process', 'unenv/polyfill/globalthis'], + }, }, -}); + plugins: [react()], +}; diff --git a/platform-core/public/pyodide/package.json b/platform-core/public/pyodide/package.json index 1fc4db17..9aa3084a 100644 --- a/platform-core/public/pyodide/package.json +++ b/platform-core/public/pyodide/package.json @@ -1,6 +1,6 @@ { "name": "pyodide", - "version": "0.27.176", + "version": "0.27.367", "description": "The Pyodide JavaScript package", "keywords": [ "python", @@ -132,6 +132,6 @@ }, "types": "./pyodide.d.ts", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 23159f2f..876b9c97 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,178 +8,40 @@ importers: .: dependencies: - file-saver: - specifier: ^2.0.5 - version: 2.0.5 react: - specifier: ^19.1.0 + specifier: ^19.0.0 version: 19.1.0 react-dom: - specifier: ^19.1.0 + specifier: ^19.0.0 version: 19.1.0(react@19.1.0) devDependencies: '@commitlint/cli': specifier: ^19.8.1 - version: 19.8.1(@types/node@22.15.21)(typescript@5.8.3) + version: 19.8.1(@types/node@24.0.14)(typescript@5.8.3) '@commitlint/config-conventional': specifier: ^19.8.1 version: 19.8.1 - '@eslint/compat': - specifier: ^1.2.9 - version: 1.2.9(eslint@9.27.0(jiti@2.4.2)) - '@eslint/eslintrc': - specifier: ^3.3.1 - version: 3.3.1 - '@eslint/js': - specifier: ^9.27.0 - version: 9.27.0 - '@semantic-release/changelog': - specifier: ^6.0.3 - version: 6.0.3(semantic-release@24.2.7(typescript@5.8.3)) - '@semantic-release/commit-analyzer': - specifier: ^13.0.1 - version: 13.0.1(semantic-release@24.2.7(typescript@5.8.3)) - '@semantic-release/git': - specifier: ^10.0.1 - version: 10.0.1(semantic-release@24.2.7(typescript@5.8.3)) - '@semantic-release/npm': - specifier: ^12.0.2 - version: 12.0.2(semantic-release@24.2.7(typescript@5.8.3)) - '@semantic-release/release-notes-generator': - specifier: ^14.0.3 - version: 14.0.3(semantic-release@24.2.7(typescript@5.8.3)) - '@types/chrome': - specifier: ^0.0.323 - version: 0.0.323 - '@types/eslint-plugin-jsx-a11y': - specifier: ^6.10.0 - version: 6.10.0 - '@types/file-saver': - specifier: ^2.0.7 - version: 2.0.7 - '@types/node': - specifier: ^22.15.21 - version: 22.15.21 '@types/react': - specifier: ^19.1.5 - version: 19.1.5 + specifier: ^19.0.8 + version: 19.1.8 '@types/react-dom': - specifier: ^19.1.5 - version: 19.1.5(@types/react@19.1.5) - '@typescript-eslint/parser': - specifier: ^8.32.1 - version: 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - autoprefixer: - specifier: ^10.4.21 - version: 10.4.21(postcss@8.5.3) - cross-env: - specifier: ^7.0.3 - version: 7.0.3 - danger: - specifier: ^13.0.4 - version: 13.0.4(encoding@0.1.13) - deepmerge: - specifier: ^4.3.1 - version: 4.3.1 - eslint: - specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) - eslint-config-prettier: - specifier: ^10.1.5 - version: 10.1.5(eslint@9.27.0(jiti@2.4.2)) - eslint-import-resolver-typescript: - specifier: ^4.3.5 - version: 4.3.5(eslint-plugin-import-x@4.12.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.27.0(jiti@2.4.2)) - eslint-plugin-import-x: - specifier: ^4.12.2 - version: 4.12.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - eslint-plugin-jsx-a11y: - specifier: ^6.10.2 - version: 6.10.2(eslint@9.27.0(jiti@2.4.2)) - eslint-plugin-prettier: - specifier: ^5.4.0 - version: 5.4.0(@types/eslint@9.6.1)(eslint-config-prettier@10.1.5(eslint@9.27.0(jiti@2.4.2)))(eslint@9.27.0(jiti@2.4.2))(prettier@3.6.2) - eslint-plugin-react: - specifier: ^7.37.5 - version: 7.37.5(eslint@9.27.0(jiti@2.4.2)) - eslint-plugin-react-hooks: - specifier: ^5.2.0 - version: 5.2.0(eslint@9.27.0(jiti@2.4.2)) - eslint-plugin-tailwindcss: - specifier: ^3.18.0 - version: 3.18.0(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.11.24)(@types/node@22.15.21)(typescript@5.8.3))) - fast-glob: - specifier: ^3.3.3 - version: 3.3.3 - fflate: - specifier: ^0.8.2 - version: 0.8.2 - git-secrets: - specifier: ^0.0.11 - version: 0.0.11 - globals: - specifier: ^16.1.0 - version: 16.1.0 - husky: - specifier: ^9.1.7 - version: 9.1.7 - jiti: - specifier: ^2.4.2 - version: 2.4.2 - lint-staged: - specifier: ^16.0.0 - version: 16.0.0 - postcss: - specifier: ^8.5.3 - version: 8.5.3 - postcss-load-config: - specifier: ^6.0.1 - version: 6.0.1(jiti@2.4.2)(postcss@8.5.3)(tsx@4.19.4)(yaml@2.8.0) - prettier: - specifier: ^3.5.3 - version: 3.6.2 - prettier-plugin-tailwindcss: - specifier: ^0.6.11 - version: 0.6.11(prettier@3.6.2) - renovate: - specifier: ^41.35.1 - version: 41.35.1(encoding@0.1.13)(typanion@3.14.0) + specifier: ^19.0.3 + version: 19.1.6(@types/react@19.1.8) + '@vitejs/plugin-react-swc': + specifier: ^3.7.2 + version: 3.11.0(vite@6.3.5(@types/node@24.0.14)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)) rimraf: specifier: ^6.0.1 version: 6.0.1 - run-script-os: - specifier: ^1.1.6 - version: 1.1.6 - semantic-release: - specifier: ^24.2.7 - version: 24.2.7(typescript@5.8.3) - tailwindcss: - specifier: ^3.4.17 - version: 3.4.17(ts-node@10.9.2(@swc/core@1.11.24)(@types/node@22.15.21)(typescript@5.8.3)) - tslib: - specifier: ^2.8.1 - version: 2.8.1 - tsx: - specifier: ^4.19.4 - version: 4.19.4 turbo: - specifier: ^2.5.3 - version: 2.5.3 - typedoc: - specifier: ^0.28.7 - version: 0.28.7(typescript@5.8.3) + specifier: ^2.5.5 + version: 2.5.5 typescript: - specifier: ^5.8.3 + specifier: ^5.7.3 version: 5.8.3 - typescript-eslint: - specifier: ^8.32.1 - version: 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) vite: - specifier: ^6.3.5 - version: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(sass@1.89.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0) - vite-plugin-node-polyfills: - specifier: ^0.23.0 - version: 0.23.0(rollup@4.41.0)(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(sass@1.89.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0)) + specifier: ^6.0.11 + version: 6.3.5(@types/node@24.0.14)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3) chrome-extension: dependencies: @@ -213,13 +75,19 @@ importers: version: link:../packages/vite-config '@laynezh/vite-plugin-lib-assets': specifier: ^1.1.0 - version: 1.1.0(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(sass@1.89.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0)) + version: 1.2.0(vite@6.3.5(@types/node@24.0.14)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)) + '@types/chrome': + specifier: '*' + version: 0.1.1 + '@types/node': + specifier: '*' + version: 24.0.14 magic-string: specifier: ^0.30.17 version: 0.30.17 ts-loader: specifier: ^9.5.2 - version: 9.5.2(typescript@5.8.3)(webpack@5.94.0(@swc/core@1.11.24)) + version: 9.5.2(typescript@5.8.3)(webpack@5.100.2) packages/dev-utils: devDependencies: @@ -234,7 +102,7 @@ importers: dependencies: '@dotenvx/dotenvx': specifier: ^1.44.1 - version: 1.44.1 + version: 1.48.0 devDependencies: '@extension/tsconfig': specifier: workspace:* @@ -250,25 +118,25 @@ importers: version: link:../tsconfig '@rollup/plugin-sucrase': specifier: ^5.0.2 - version: 5.0.2(rollup@4.41.0) + version: 5.0.2(rollup@4.45.1) '@types/ws': specifier: ^8.18.1 version: 8.18.1 esbuild: specifier: ^0.25.4 - version: 0.25.4 + version: 0.25.6 esm: specifier: ^3.2.25 version: 3.2.25 rollup: - specifier: ^4.41.0 - version: 4.41.0 + specifier: ^4.45.1 + version: 4.45.1 ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.11.24)(@types/node@22.15.21)(typescript@5.8.3) + version: 10.9.2(@swc/core@1.13.0)(@types/node@24.0.14)(typescript@5.8.3) ws: specifier: ^8.18.2 - version: 8.18.2 + version: 8.18.3 packages/i18n: dependencies: @@ -293,22 +161,18 @@ importers: version: link:../tsconfig '@inquirer/prompts': specifier: ^7.5.1 - version: 7.5.1(@types/node@22.15.21) + version: 7.6.0(@types/node@24.0.14) '@types/yargs': specifier: ^17.0.33 version: 17.0.33 tsx: specifier: ^4.19.4 - version: 4.19.4 + version: 4.20.3 yargs: specifier: ^17.7.2 version: 17.7.2 packages/shared: - dependencies: - react-error-boundary: - specifier: ^6.0.0 - version: 6.0.0(react@19.1.0) devDependencies: '@extension/storage': specifier: workspace:* @@ -350,7 +214,7 @@ importers: version: 2.1.1 tailwind-merge: specifier: ^3.3.0 - version: 3.3.0 + version: 3.3.1 devDependencies: '@extension/tailwindcss-config': specifier: workspace:* @@ -370,6 +234,9 @@ importers: '@extension/env': specifier: workspace:* version: link:../env + '@vitejs/plugin-react': + specifier: ^4.6.0 + version: 4.7.0(vite@6.3.5(@types/node@24.0.14)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)) devDependencies: '@extension/hmr': specifier: workspace:* @@ -377,9 +244,6 @@ importers: '@extension/tsconfig': specifier: workspace:* version: link:../tsconfig - '@vitejs/plugin-react-swc': - specifier: ^3.9.0 - version: 3.9.0(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(sass@1.89.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0)) packages/zipper: devDependencies: @@ -464,6 +328,18 @@ importers: '@extension/vite-config': specifier: workspace:* version: link:../../packages/vite-config + '@tailwindcss/postcss': + specifier: ^4.1.11 + version: 4.1.11 + autoprefixer: + specifier: ^10.4.21 + version: 10.4.21(postcss@8.5.6) + tailwindcss: + specifier: ^4.1.11 + version: 4.1.11 + tsx: + specifier: ^4.20.3 + version: 4.20.3 pages/devtools: dependencies: @@ -478,34 +354,6 @@ importers: specifier: workspace:* version: link:../../packages/vite-config - pages/devtools-panel: - dependencies: - '@extension/i18n': - specifier: workspace:* - version: link:../../packages/i18n - '@extension/shared': - specifier: workspace:* - version: link:../../packages/shared - '@extension/storage': - specifier: workspace:* - version: link:../../packages/storage - '@extension/ui': - specifier: workspace:* - version: link:../../packages/ui - file-saver: - specifier: ^2.0.5 - version: 2.0.5 - devDependencies: - '@extension/tailwindcss-config': - specifier: workspace:* - version: link:../../packages/tailwindcss-config - '@extension/tsconfig': - specifier: workspace:* - version: link:../../packages/tsconfig - '@extension/vite-config': - specifier: workspace:* - version: link:../../packages/vite-config - pages/new-tab: dependencies: '@extension/i18n': @@ -530,9 +378,18 @@ importers: '@extension/vite-config': specifier: workspace:* version: link:../../packages/vite-config + '@tailwindcss/postcss': + specifier: ^4.1.11 + version: 4.1.11 + autoprefixer: + specifier: ^10.4.21 + version: 10.4.21(postcss@8.5.6) sass: specifier: ^1.89.0 - version: 1.89.0 + version: 1.89.2 + tailwindcss: + specifier: ^4.1.11 + version: 4.1.11 pages/options: dependencies: @@ -558,31 +415,18 @@ importers: '@extension/vite-config': specifier: workspace:* version: link:../../packages/vite-config - - pages/popup: - dependencies: - '@extension/i18n': - specifier: workspace:* - version: link:../../packages/i18n - '@extension/shared': - specifier: workspace:* - version: link:../../packages/shared - '@extension/storage': - specifier: workspace:* - version: link:../../packages/storage - '@extension/ui': - specifier: workspace:* - version: link:../../packages/ui - devDependencies: - '@extension/tailwindcss-config': - specifier: workspace:* - version: link:../../packages/tailwindcss-config - '@extension/tsconfig': - specifier: workspace:* - version: link:../../packages/tsconfig - '@extension/vite-config': - specifier: workspace:* - version: link:../../packages/vite-config + '@tailwindcss/postcss': + specifier: ^4.1.11 + version: 4.1.11 + '@vitejs/plugin-react-swc': + specifier: ^3.10.2 + version: 3.11.0(vite@6.3.5(@types/node@24.0.14)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)) + autoprefixer: + specifier: ^10.4.21 + version: 10.4.21(postcss@8.5.6) + tailwindcss: + specifier: ^4.1.11 + version: 4.1.11 pages/side-panel: dependencies: @@ -608,6 +452,18 @@ importers: '@extension/vite-config': specifier: workspace:* version: link:../../packages/vite-config + '@tailwindcss/postcss': + specifier: ^4.1.11 + version: 4.1.11 + '@vitejs/plugin-react-swc': + specifier: ^3.10.2 + version: 3.11.0(vite@6.3.5(@types/node@24.0.14)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3)) + autoprefixer: + specifier: ^10.4.21 + version: 10.4.21(postcss@8.5.6) + tailwindcss: + specifier: ^4.1.11 + version: 4.1.11 tests/e2e: devDependencies: @@ -619,22 +475,22 @@ importers: version: link:../../packages/tsconfig '@wdio/cli': specifier: ^9.14.0 - version: 9.14.0 + version: 9.18.1(@types/node@24.0.14)(expect-webdriverio@5.4.0) '@wdio/globals': specifier: ^9.14.0 - version: 9.14.0(@wdio/logger@9.4.4) + version: 9.17.0(expect-webdriverio@5.4.0)(webdriverio@9.18.1) '@wdio/local-runner': specifier: ^9.14.0 - version: 9.14.0 + version: 9.18.1(@wdio/globals@9.17.0)(webdriverio@9.18.1) '@wdio/mocha-framework': specifier: ^9.14.0 - version: 9.14.0 + version: 9.18.0 '@wdio/spec-reporter': specifier: ^9.14.0 - version: 9.14.0 + version: 9.18.0 '@wdio/types': specifier: ^9.14.0 - version: 9.14.0 + version: 9.16.2 packages: @@ -642,233 +498,92 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@arcanis/slice-ansi@1.1.1': - resolution: {integrity: sha512-xguP2WR2Dv0gQ7Ykbdb7BNCnPnIPB94uTi0Z2NvkRBEnhbwjOQ7QyQKJXrVQg4qDpiD9hA5l5cCwy/z2OXgc3w==} - - '@aws-crypto/crc32@5.2.0': - resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} - engines: {node: '>=16.0.0'} - - '@aws-crypto/crc32c@5.2.0': - resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==} - - '@aws-crypto/sha1-browser@5.2.0': - resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==} - - '@aws-crypto/sha256-browser@5.2.0': - resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} - - '@aws-crypto/sha256-js@5.2.0': - resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} - engines: {node: '>=16.0.0'} - - '@aws-crypto/supports-web-crypto@5.2.0': - resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} - - '@aws-crypto/util@5.2.0': - resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - - '@aws-sdk/client-codecommit@3.840.0': - resolution: {integrity: sha512-pE14jZTQkhLRgJZg0CvjngwkRCZB71CaQob7H7nJEHvVpwzAUrArQNKrYZIzLdNw3uAf9h5aBwF16OiFsMqNJg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/client-cognito-identity@3.840.0': - resolution: {integrity: sha512-0sn/X63Xqqh5D1FYmdSHiS9SkDzTitoGO++/8IFik4xf/jpn4ZQkIoDPvpxFZcLvebMuUa6jAQs4ap4RusKGkg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/client-ec2@3.840.0': - resolution: {integrity: sha512-7n0GvM3uau8kNPfV57H11vxDI4fAlyB8F7cx64HZ804o2rX5ycFZm8agLPvc4+uaLIEKGrq3oTED33jsBx8B9g==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/client-ecr@3.840.0': - resolution: {integrity: sha512-Y+AdBztlunTdglR1L3cYR+EwciltHJXrOaBz0DU6B7rOzgoNMoec+sLZ4UgJyPKUD5spBkPfTLFslQK/K9PZ0Q==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/client-eks@3.840.0': - resolution: {integrity: sha512-KMjUqu2RzZbkN1JsxF39B0pC/y78Po7ZSyVKdFD6p4LvNIWSmnWWiT47OIvFNj3A2VN92jMRoVk/GcnJq7z73g==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/client-rds@3.840.0': - resolution: {integrity: sha512-AmoKB/VeGXhTbO5XmNih2NazfKD/nhiqgjNGw05/575LxLOiNku7jwaZyzUfF5uockdhDNTGrvmi43GHXPOO0g==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/client-s3@3.840.0': - resolution: {integrity: sha512-dRuo03EqGBbl9+PTogpwY9bYmGWIjn8nB82HN5Qj20otgjUvhLOdEkkip9mroYsrvqNoKbMedWdCudIcB/YY1w==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/client-sso@3.840.0': - resolution: {integrity: sha512-3Zp+FWN2hhmKdpS0Ragi5V2ZPsZNScE3jlbgoJjzjI/roHZqO+e3/+XFN4TlM0DsPKYJNp+1TAjmhxN6rOnfYA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/core@3.840.0': - resolution: {integrity: sha512-x3Zgb39tF1h2XpU+yA4OAAQlW6LVEfXNlSedSYJ7HGKXqA/E9h3rWQVpYfhXXVVsLdYXdNw5KBUkoAoruoZSZA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-cognito-identity@3.840.0': - resolution: {integrity: sha512-p1RaMVd6+6ruYjKsWRCZT/jWhrYfDKbXY+/ScIYTvcaOOf9ArMtVnhFk3egewrC7kPXFGRYhg2GPmxRotNYMng==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-env@3.840.0': - resolution: {integrity: sha512-EzF6VcJK7XvQ/G15AVEfJzN2mNXU8fcVpXo4bRyr1S6t2q5zx6UPH/XjDbn18xyUmOq01t+r8gG+TmHEVo18fA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-http@3.840.0': - resolution: {integrity: sha512-wbnUiPGLVea6mXbUh04fu+VJmGkQvmToPeTYdHE8eRZq3NRDi3t3WltT+jArLBKD/4NppRpMjf2ju4coMCz91g==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-ini@3.840.0': - resolution: {integrity: sha512-7F290BsWydShHb+7InXd+IjJc3mlEIm9I0R57F/Pjl1xZB69MdkhVGCnuETWoBt4g53ktJd6NEjzm/iAhFXFmw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-node@3.840.0': - resolution: {integrity: sha512-KufP8JnxA31wxklLm63evUPSFApGcH8X86z3mv9SRbpCm5ycgWIGVCTXpTOdgq6rPZrwT9pftzv2/b4mV/9clg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-process@3.840.0': - resolution: {integrity: sha512-HkDQWHy8tCI4A0Ps2NVtuVYMv9cB4y/IuD/TdOsqeRIAT12h8jDb98BwQPNLAImAOwOWzZJ8Cu0xtSpX7CQhMw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-sso@3.840.0': - resolution: {integrity: sha512-2qgdtdd6R0Z1y0KL8gzzwFUGmhBHSUx4zy85L2XV1CXhpRNwV71SVWJqLDVV5RVWVf9mg50Pm3AWrUC0xb0pcA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-provider-web-identity@3.840.0': - resolution: {integrity: sha512-dpEeVXG8uNZSmVXReE4WP0lwoioX2gstk4RnUgrdUE3YaPq8A+hJiVAyc3h+cjDeIqfbsQbZm9qFetKC2LF9dQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/credential-providers@3.840.0': - resolution: {integrity: sha512-+CxYdGd+uM4NZ9VUvFTU1c/H61qhDB4q362k8xKU+bz24g//LDQ5Mpwksv8OUD1en44v4fUwgZ4SthPZMs+eFQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-bucket-endpoint@3.840.0': - resolution: {integrity: sha512-+gkQNtPwcSMmlwBHFd4saVVS11In6ID1HczNzpM3MXKXRBfSlbZJbCt6wN//AZ8HMklZEik4tcEOG0qa9UY8SQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-expect-continue@3.840.0': - resolution: {integrity: sha512-iJg2r6FKsKKvdiU4oCOuCf7Ro/YE0Q2BT/QyEZN3/Rt8Nr4SAZiQOlcBXOCpGvuIKOEAhvDOUnW3aDHL01PdVw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-flexible-checksums@3.840.0': - resolution: {integrity: sha512-Kg/o2G6o72sdoRH0J+avdcf668gM1bp6O4VeEXpXwUj/urQnV5qiB2q1EYT110INHUKWOLXPND3sQAqh6sTqHw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-host-header@3.840.0': - resolution: {integrity: sha512-ub+hXJAbAje94+Ya6c6eL7sYujoE8D4Bumu1NUI8TXjUhVVn0HzVWQjpRLshdLsUp1AW7XyeJaxyajRaJQ8+Xg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-location-constraint@3.840.0': - resolution: {integrity: sha512-KVLD0u0YMF3aQkVF8bdyHAGWSUY6N1Du89htTLgqCcIhSxxAJ9qifrosVZ9jkAzqRW99hcufyt2LylcVU2yoKQ==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-logger@3.840.0': - resolution: {integrity: sha512-lSV8FvjpdllpGaRspywss4CtXV8M7NNNH+2/j86vMH+YCOZ6fu2T/TyFd/tHwZ92vDfHctWkRbQxg0bagqwovA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-recursion-detection@3.840.0': - resolution: {integrity: sha512-Gu7lGDyfddyhIkj1Z1JtrY5NHb5+x/CRiB87GjaSrKxkDaydtX2CU977JIABtt69l9wLbcGDIQ+W0uJ5xPof7g==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-sdk-ec2@3.840.0': - resolution: {integrity: sha512-TVYRq3NNq+Cb4N5jODASOmKwPBa4zXH0CT5Ifrav+fH7SVtkfXurVMkLaAu1zFHyllQgAQ6O4O/MpwDq2H1nkw==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-sdk-rds@3.840.0': - resolution: {integrity: sha512-9R+j2UZlSQW0EbErbSG89AMBw2smNlRV8cfXCbL5E1Fh/bHuAU/5Jmr6hjT37QYPD/aSPFOm8txK5qrX7/19Lg==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-sdk-s3@3.840.0': - resolution: {integrity: sha512-rOUji7CayWN3O09zvvgLzDVQe0HiJdZkxoTS6vzOS3WbbdT7joGdVtAJHtn+x776QT3hHzbKU5gnfhel0o6gQA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-ssec@3.840.0': - resolution: {integrity: sha512-CBZP9t1QbjDFGOrtnUEHL1oAvmnCUUm7p0aPNbIdSzNtH42TNKjPRN3TuEIJDGjkrqpL3MXyDSmNayDcw/XW7Q==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/middleware-user-agent@3.840.0': - resolution: {integrity: sha512-hiiMf7BP5ZkAFAvWRcK67Mw/g55ar7OCrvrynC92hunx/xhMkrgSLM0EXIZ1oTn3uql9kH/qqGF0nqsK6K555A==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/nested-clients@3.840.0': - resolution: {integrity: sha512-LXYYo9+n4hRqnRSIMXLBb+BLz+cEmjMtTudwK1BF6Bn2RfdDv29KuyeDRrPCS3TwKl7ZKmXUmE9n5UuHAPfBpA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/region-config-resolver@3.840.0': - resolution: {integrity: sha512-Qjnxd/yDv9KpIMWr90ZDPtRj0v75AqGC92Lm9+oHXZ8p1MjG5JE2CW0HL8JRgK9iKzgKBL7pPQRXI8FkvEVfrA==} - engines: {node: '>=18.0.0'} - - '@aws-sdk/signature-v4-multi-region@3.840.0': - resolution: {integrity: sha512-8AoVgHrkSfhvGPtwx23hIUO4MmMnux2pjnso1lrLZGqxfElM6jm2w4jTNLlNXk8uKHGyX89HaAIuT0lL6dJj9g==} - engines: {node: '>=18.0.0'} + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} - '@aws-sdk/token-providers@3.840.0': - resolution: {integrity: sha512-6BuTOLTXvmgwjK7ve7aTg9JaWFdM5UoMolLVPMyh3wTv9Ufalh8oklxYHUBIxsKkBGO2WiHXytveuxH6tAgTYg==} - engines: {node: '>=18.0.0'} + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} - '@aws-sdk/types@3.840.0': - resolution: {integrity: sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA==} - engines: {node: '>=18.0.0'} + '@babel/compat-data@7.28.0': + resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==} + engines: {node: '>=6.9.0'} - '@aws-sdk/util-arn-parser@3.804.0': - resolution: {integrity: sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ==} - engines: {node: '>=18.0.0'} + '@babel/core@7.28.0': + resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==} + engines: {node: '>=6.9.0'} - '@aws-sdk/util-endpoints@3.840.0': - resolution: {integrity: sha512-eqE9ROdg/Kk0rj3poutyRCFauPDXIf/WSvCqFiRDDVi6QOnCv/M0g2XW8/jSvkJlOyaXkNCptapIp6BeeFFGYw==} - engines: {node: '>=18.0.0'} + '@babel/generator@7.28.0': + resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} + engines: {node: '>=6.9.0'} - '@aws-sdk/util-format-url@3.840.0': - resolution: {integrity: sha512-VB1PWyI1TQPiPvg4w7tgUGGQER1xxXPNUqfh3baxUSFi1Oh8wHrDnFywkxLm3NMmgDmnLnSZ5Q326qAoyqKLSg==} - engines: {node: '>=18.0.0'} + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + engines: {node: '>=6.9.0'} - '@aws-sdk/util-locate-window@3.804.0': - resolution: {integrity: sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==} - engines: {node: '>=18.0.0'} + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} - '@aws-sdk/util-user-agent-browser@3.840.0': - resolution: {integrity: sha512-JdyZM3EhhL4PqwFpttZu1afDpPJCCc3eyZOLi+srpX11LsGj6sThf47TYQN75HT1CarZ7cCdQHGzP2uy3/xHfQ==} + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} + engines: {node: '>=6.9.0'} - '@aws-sdk/util-user-agent-node@3.840.0': - resolution: {integrity: sha512-Fy5JUEDQU1tPm2Yw/YqRYYc27W5+QD/J4mYvQvdWjUGZLB5q3eLFMGD35Uc28ZFoGMufPr4OCxK/bRfWROBRHQ==} - engines: {node: '>=18.0.0'} + '@babel/helper-module-transforms@7.27.3': + resolution: {integrity: sha512-dSOvYwvyLsWBeIRyOeHXp5vPj5l1I011r52FM1+r1jCERv+aFXYk4whgQccYEGYxK2H3ZAIA8nuPkQ0HaUo3qg==} + engines: {node: '>=6.9.0'} peerDependencies: - aws-crt: '>=1.0.0' - peerDependenciesMeta: - aws-crt: - optional: true + '@babel/core': ^7.0.0 - '@aws-sdk/xml-builder@3.821.0': - resolution: {integrity: sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA==} - engines: {node: '>=18.0.0'} + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} - '@babel/code-frame@7.27.1': - resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} '@babel/helper-validator-identifier@7.27.1': resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} - '@babel/runtime-corejs3@7.28.0': - resolution: {integrity: sha512-nlIXnSqLcBij8K8TtkxbBJgfzfvi75V1pAKSM7dUXejGw12vJAqez74jZrHTsJ3Z+Aczc5Q/6JgNjKRMsVU44g==} + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/runtime@7.27.1': - resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==} + '@babel/helpers@7.27.6': + resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==} engines: {node: '>=6.9.0'} - '@baszalmstra/rattler@0.2.1': - resolution: {integrity: sha512-HZ2xu6Nk+XzAeateyzDKYM47ySkjkuKtTNpKRAy+Y+YcRH1qHM2le4iLlG32wDddaHCLUsBsyBxirClOj1TLjw==} + '@babel/parser@7.28.0': + resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} + engines: {node: '>=6.0.0'} + hasBin: true - '@breejs/later@4.2.0': - resolution: {integrity: sha512-EVMD0SgJtOuFeg0lAVbCwa+qeTKILb87jqvLyUtQswGD9+ce2nB52Y5zbTF1Hc0MDFfbydcMcxb47jSdhikVHA==} - engines: {node: '>= 10'} + '@babel/plugin-transform-react-jsx-self@7.27.1': + resolution: {integrity: sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.27.1': + resolution: {integrity: sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@cdktf/hcl2json@0.21.0': - resolution: {integrity: sha512-cwX3i/mSJI/cRrtqwEPRfawB7pXgNioriSlkvou8LWiCrrcDe9ZtTbAbu8W1tEJQpe1pnX9VEgpzf/BbM7xF8Q==} + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.28.0': + resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} + engines: {node: '>=6.9.0'} - '@colors/colors@1.5.0': - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} + '@babel/types@7.28.1': + resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==} + engines: {node: '>=6.9.0'} '@commitlint/cli@19.8.1': resolution: {integrity: sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==} @@ -943,267 +658,174 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@dotenvx/dotenvx@1.44.1': - resolution: {integrity: sha512-j1QImCqf/XJmhIjC1OPpgiZV9g370HG9MNT9s/CDwCKsoYzNCPEKK+GfsidahJx7yIlBbm+4dPLlGec+bKn7oA==} + '@dotenvx/dotenvx@1.48.0': + resolution: {integrity: sha512-UrAKBvUYl8SwCyYa8U8lND4rkdPbd7uOPtCPeiObeg5B44yrdH2ioO0tLfsGAGoenLmf6IpN6be4eT4gXxyzjQ==} hasBin: true - '@ecies/ciphers@0.2.3': - resolution: {integrity: sha512-tapn6XhOueMwht3E2UzY0ZZjYokdaw9XtL9kEyjhQ/Fb9vL9xTFbOaI+fV0AWvTpYu4BNloC6getKW6NtSg4mA==} + '@ecies/ciphers@0.2.4': + resolution: {integrity: sha512-t+iX+Wf5nRKyNzk8dviW3Ikb/280+aEJAnw9YXvCp2tYGPSkMki+NRY+8aNLmVFv3eNtMdvViPNOPxS8SZNP+w==} engines: {bun: '>=1', deno: '>=2', node: '>=16'} peerDependencies: '@noble/ciphers': ^1.0.0 - '@emnapi/core@1.4.3': - resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} - - '@emnapi/runtime@1.4.3': - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} - - '@emnapi/wasi-threads@1.0.2': - resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} - - '@esbuild/aix-ppc64@0.25.4': - resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} + '@esbuild/aix-ppc64@0.25.6': + resolution: {integrity: sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.4': - resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} + '@esbuild/android-arm64@0.25.6': + resolution: {integrity: sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.4': - resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} + '@esbuild/android-arm@0.25.6': + resolution: {integrity: sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.4': - resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} + '@esbuild/android-x64@0.25.6': + resolution: {integrity: sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.4': - resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} + '@esbuild/darwin-arm64@0.25.6': + resolution: {integrity: sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.4': - resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} + '@esbuild/darwin-x64@0.25.6': + resolution: {integrity: sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.4': - resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} + '@esbuild/freebsd-arm64@0.25.6': + resolution: {integrity: sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.4': - resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} + '@esbuild/freebsd-x64@0.25.6': + resolution: {integrity: sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.4': - resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} + '@esbuild/linux-arm64@0.25.6': + resolution: {integrity: sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.4': - resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} + '@esbuild/linux-arm@0.25.6': + resolution: {integrity: sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.4': - resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} + '@esbuild/linux-ia32@0.25.6': + resolution: {integrity: sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.4': - resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} + '@esbuild/linux-loong64@0.25.6': + resolution: {integrity: sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.4': - resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} + '@esbuild/linux-mips64el@0.25.6': + resolution: {integrity: sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.4': - resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} + '@esbuild/linux-ppc64@0.25.6': + resolution: {integrity: sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.4': - resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} + '@esbuild/linux-riscv64@0.25.6': + resolution: {integrity: sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.4': - resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} + '@esbuild/linux-s390x@0.25.6': + resolution: {integrity: sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.4': - resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} + '@esbuild/linux-x64@0.25.6': + resolution: {integrity: sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.4': - resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} + '@esbuild/netbsd-arm64@0.25.6': + resolution: {integrity: sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.4': - resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} + '@esbuild/netbsd-x64@0.25.6': + resolution: {integrity: sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.4': - resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} + '@esbuild/openbsd-arm64@0.25.6': + resolution: {integrity: sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.4': - resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} + '@esbuild/openbsd-x64@0.25.6': + resolution: {integrity: sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/sunos-x64@0.25.4': - resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} + '@esbuild/openharmony-arm64@0.25.6': + resolution: {integrity: sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.6': + resolution: {integrity: sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.4': - resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} + '@esbuild/win32-arm64@0.25.6': + resolution: {integrity: sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.4': - resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} + '@esbuild/win32-ia32@0.25.6': + resolution: {integrity: sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.4': - resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} + '@esbuild/win32-x64@0.25.6': + resolution: {integrity: sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - - '@eslint/compat@1.2.9': - resolution: {integrity: sha512-gCdSY54n7k+driCadyMNv8JSPzYLeDVM/ikZRtvtROBpRdFSkS8W9A82MqsaY7lZuwL0wiapgD0NT1xT0hyJsA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^9.10.0 - peerDependenciesMeta: - eslint: - optional: true - - '@eslint/config-array@0.20.0': - resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/config-helpers@0.2.2': - resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/core@0.14.0': - resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/eslintrc@3.3.1': - resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/js@9.27.0': - resolution: {integrity: sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@eslint/plugin-kit@0.3.1': - resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@gerrit0/mini-shiki@3.8.0': - resolution: {integrity: sha512-tloLVqvvoyv636PilYZwNhCmZ+xxgRicysMvpKdZ4Y6+9IH6v4lp7GodbDDncApNQjflwTSnXuYQoe3el5C59w==} - - '@gitbeaker/core@38.12.1': - resolution: {integrity: sha512-8XMVcBIdVAAoxn7JtqmZ2Ee8f+AZLcCPmqEmPFOXY2jPS84y/DERISg/+sbhhb18iRy+ZsZhpWgQ/r3CkYNJOQ==} - engines: {node: '>=18.0.0'} - - '@gitbeaker/requester-utils@38.12.1': - resolution: {integrity: sha512-Rc/DgngS0YPN+AY1s9UnexKSy4Lh0bkQVAq9p7PRbRpXb33SlTeCg8eg/8+A/mrMcHgYmP0XhH8lkizyA5tBUQ==} - engines: {node: '>=18.0.0'} - - '@gitbeaker/rest@38.12.1': - resolution: {integrity: sha512-9KMSDtJ/sIov+5pcH+CAfiJXSiuYgN0KLKQFg0HHWR2DwcjGYkcbmhoZcWsaOWOqq4kihN1l7wX91UoRxxKKTQ==} - engines: {node: '>=18.0.0'} - - '@gwhitney/detect-indent@7.0.1': - resolution: {integrity: sha512-7bQW+gkKa2kKZPeJf6+c6gFK9ARxQfn+FKy9ScTBppyKRWH2KzsmweXUoklqeEiHiNVWaeP5csIdsNq6w7QhzA==} - engines: {node: '>=12.20'} - - '@humanfs/core@0.19.1': - resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} - engines: {node: '>=18.18.0'} - - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} - engines: {node: '>=18.18.0'} - - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} - - '@humanwhocodes/retry@0.4.3': - resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} - engines: {node: '>=18.18'} - - '@inquirer/checkbox@3.0.1': - resolution: {integrity: sha512-0hm2nrToWUdD6/UHnel/UKGdk1//ke5zGUpHIvk5ZWmaKezlGxZkOJXNSWsdxO/rEqTkbB3lNC2J6nBElV2aAQ==} - engines: {node: '>=18'} - - '@inquirer/checkbox@4.1.6': - resolution: {integrity: sha512-62u896rWCtKKE43soodq5e/QcRsA22I+7/4Ov7LESWnKRO6BVo2A1DFLDmXL9e28TB0CfHc3YtkbPm7iwajqkg==} + '@inquirer/checkbox@4.1.9': + resolution: {integrity: sha512-DBJBkzI5Wx4jFaYm221LHvAhpKYkhVS0k9plqHwaHhofGNxvYB7J3Bz8w+bFJ05zaMb0sZNHo4KdmENQFlNTuQ==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1211,12 +833,8 @@ packages: '@types/node': optional: true - '@inquirer/confirm@4.0.1': - resolution: {integrity: sha512-46yL28o2NJ9doViqOy0VDcoTzng7rAb6yPQKU7VDLqkmbCaH4JqK4yk4XqlzNWy9PVC5pG1ZUXPBQv+VqnYs2w==} - engines: {node: '>=18'} - - '@inquirer/confirm@5.1.10': - resolution: {integrity: sha512-FxbQ9giWxUWKUk2O5XZ6PduVnH2CZ/fmMKMBkH71MHJvWr7WL5AHKevhzF1L5uYWB2P548o1RzVxrNd3dpmk6g==} + '@inquirer/confirm@5.1.13': + resolution: {integrity: sha512-EkCtvp67ICIVVzjsquUiVSd+V5HRGOGQfsqA4E4vMWhYnB7InUL0pa0TIWt1i+OfP16Gkds8CdIu6yGZwOM1Yw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1224,8 +842,8 @@ packages: '@types/node': optional: true - '@inquirer/core@10.1.11': - resolution: {integrity: sha512-BXwI/MCqdtAhzNQlBEFE7CEflhPkl/BqvAuV/aK6lW3DClIfYVDWPP/kXuXHtBWC7/EEbNqd/1BGq2BGBBnuxw==} + '@inquirer/core@10.1.14': + resolution: {integrity: sha512-Ma+ZpOJPewtIYl6HZHZckeX1STvDnHTCB2GVINNUlSEn2Am6LddWwfPkIGY0IUFVjUUrr/93XlBwTK6mfLjf0A==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1233,16 +851,8 @@ packages: '@types/node': optional: true - '@inquirer/core@9.2.1': - resolution: {integrity: sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==} - engines: {node: '>=18'} - - '@inquirer/editor@3.0.1': - resolution: {integrity: sha512-VA96GPFaSOVudjKFraokEEmUQg/Lub6OXvbIEZU1SDCmBzRkHGhxoFAVaF30nyiB4m5cEbDgiI2QRacXZ2hw9Q==} - engines: {node: '>=18'} - - '@inquirer/editor@4.2.11': - resolution: {integrity: sha512-YoZr0lBnnLFPpfPSNsQ8IZyKxU47zPyVi9NLjCWtna52//M/xuL0PGPAxHxxYhdOhnvY2oBafoM+BI5w/JK7jw==} + '@inquirer/editor@4.2.14': + resolution: {integrity: sha512-yd2qtLl4QIIax9DTMZ1ZN2pFrrj+yL3kgIWxm34SS6uwCr0sIhsNyudUjAo5q3TqI03xx4SEBkUJqZuAInp9uA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1250,12 +860,8 @@ packages: '@types/node': optional: true - '@inquirer/expand@3.0.1': - resolution: {integrity: sha512-ToG8d6RIbnVpbdPdiN7BCxZGiHOTomOX94C2FaT5KOHupV40tKEDozp12res6cMIfRKrXLJyexAZhWVHgbALSQ==} - engines: {node: '>=18'} - - '@inquirer/expand@4.0.13': - resolution: {integrity: sha512-HgYNWuZLHX6q5y4hqKhwyytqAghmx35xikOGY3TcgNiElqXGPas24+UzNPOwGUZa5Dn32y25xJqVeUcGlTv+QQ==} + '@inquirer/expand@4.0.16': + resolution: {integrity: sha512-oiDqafWzMtofeJyyGkb1CTPaxUkjIcSxePHHQCfif8t3HV9pHcw1Kgdw3/uGpDvaFfeTluwQtWiqzPVjAqS3zA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1263,16 +869,12 @@ packages: '@types/node': optional: true - '@inquirer/figures@1.0.11': - resolution: {integrity: sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==} - engines: {node: '>=18'} - - '@inquirer/input@3.0.1': - resolution: {integrity: sha512-BDuPBmpvi8eMCxqC5iacloWqv+5tQSJlUafYWUe31ow1BVXjW2a5qe3dh4X/Z25Wp22RwvcaLCc2siHobEOfzg==} + '@inquirer/figures@1.0.12': + resolution: {integrity: sha512-MJttijd8rMFcKJC8NYmprWr6hD3r9Gd9qUC0XwPNwoEPWSMVJwA2MlXxF+nhZZNMY+HXsWa+o7KY2emWYIn0jQ==} engines: {node: '>=18'} - '@inquirer/input@4.1.10': - resolution: {integrity: sha512-kV3BVne3wJ+j6reYQUZi/UN9NZGZLxgc/tfyjeK3mrx1QI7RXPxGp21IUTv+iVHcbP4ytZALF8vCHoxyNSC6qg==} + '@inquirer/input@4.2.0': + resolution: {integrity: sha512-opqpHPB1NjAmDISi3uvZOTrjEEU5CWVu/HBkDby8t93+6UxYX0Z7Ps0Ltjm5sZiEbWenjubwUkivAEYQmy9xHw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1280,12 +882,8 @@ packages: '@types/node': optional: true - '@inquirer/number@2.0.1': - resolution: {integrity: sha512-QpR8jPhRjSmlr/mD2cw3IR8HRO7lSVOnqUvQa8scv1Lsr3xoAMMworcYW3J13z3ppjBFBD2ef1Ci6AE5Qn8goQ==} - engines: {node: '>=18'} - - '@inquirer/number@3.0.13': - resolution: {integrity: sha512-IrLezcg/GWKS8zpKDvnJ/YTflNJdG0qSFlUM/zNFsdi4UKW/CO+gaJpbMgQ20Q58vNKDJbEzC6IebdkprwL6ew==} + '@inquirer/number@3.0.16': + resolution: {integrity: sha512-kMrXAaKGavBEoBYUCgualbwA9jWUx2TjMA46ek+pEKy38+LFpL9QHlTd8PO2kWPUgI/KB+qi02o4y2rwXbzr3Q==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1293,12 +891,8 @@ packages: '@types/node': optional: true - '@inquirer/password@3.0.1': - resolution: {integrity: sha512-haoeEPUisD1NeE2IanLOiFr4wcTXGWrBOyAyPZi1FfLJuXOzNmxCJPgUrGYKVh+Y8hfGJenIfz5Wb/DkE9KkMQ==} - engines: {node: '>=18'} - - '@inquirer/password@4.0.13': - resolution: {integrity: sha512-NN0S/SmdhakqOTJhDwOpeBEEr8VdcYsjmZHDb0rblSh2FcbXQOr+2IApP7JG4WE3sxIdKytDn4ed3XYwtHxmJQ==} + '@inquirer/password@4.0.16': + resolution: {integrity: sha512-g8BVNBj5Zeb5/Y3cSN+hDUL7CsIFDIuVxb9EPty3lkxBaYpjL5BNRKSYOF9yOLe+JOcKFd+TSVeADQ4iSY7rbg==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1306,12 +900,8 @@ packages: '@types/node': optional: true - '@inquirer/prompts@6.0.1': - resolution: {integrity: sha512-yl43JD/86CIj3Mz5mvvLJqAOfIup7ncxfJ0Btnl0/v5TouVUyeEdcpknfgc+yMevS/48oH9WAkkw93m7otLb/A==} - engines: {node: '>=18'} - - '@inquirer/prompts@7.5.1': - resolution: {integrity: sha512-5AOrZPf2/GxZ+SDRZ5WFplCA2TAQgK3OYrXCYmJL5NaTu4ECcoWFlfUZuw7Es++6Njv7iu/8vpYJhuzxUH76Vg==} + '@inquirer/prompts@7.6.0': + resolution: {integrity: sha512-jAhL7tyMxB3Gfwn4HIJ0yuJ5pvcB5maYUcouGcgd/ub79f9MqZ+aVnBtuFf+VC2GTkCBF+R+eo7Vi63w5VZlzw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1319,12 +909,8 @@ packages: '@types/node': optional: true - '@inquirer/rawlist@3.0.1': - resolution: {integrity: sha512-VgRtFIwZInUzTiPLSfDXK5jLrnpkuSOh1ctfaoygKAdPqjcjKYmGh6sCY1pb0aGnCGsmhUxoqLDUAU0ud+lGXQ==} - engines: {node: '>=18'} - - '@inquirer/rawlist@4.1.1': - resolution: {integrity: sha512-VBUC0jPN2oaOq8+krwpo/mf3n/UryDUkKog3zi+oIi8/e5hykvdntgHUB9nhDM78RubiyR1ldIOfm5ue+2DeaQ==} + '@inquirer/rawlist@4.1.4': + resolution: {integrity: sha512-5GGvxVpXXMmfZNtvWw4IsHpR7RzqAR624xtkPd1NxxlV5M+pShMqzL4oRddRkg8rVEOK9fKdJp1jjVML2Lr7TQ==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1332,12 +918,8 @@ packages: '@types/node': optional: true - '@inquirer/search@2.0.1': - resolution: {integrity: sha512-r5hBKZk3g5MkIzLVoSgE4evypGqtOannnB3PKTG9NRZxyFRKcfzrdxXXPcoJQsxJPzvdSU2Rn7pB7lw0GCmGAg==} - engines: {node: '>=18'} - - '@inquirer/search@3.0.13': - resolution: {integrity: sha512-9g89d2c5Izok/Gw/U7KPC3f9kfe5rA1AJ24xxNZG0st+vWekSk7tB9oE+dJv5JXd0ZSijomvW0KPMoBd8qbN4g==} + '@inquirer/search@3.0.16': + resolution: {integrity: sha512-POCmXo+j97kTGU6aeRjsPyuCpQQfKcMXdeTMw708ZMtWrj5aykZvlUxH4Qgz3+Y1L/cAVZsSpA+UgZCu2GMOMg==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1345,12 +927,8 @@ packages: '@types/node': optional: true - '@inquirer/select@3.0.1': - resolution: {integrity: sha512-lUDGUxPhdWMkN/fHy1Lk7pF3nK1fh/gqeyWXmctefhxLYxlDsc7vsPBEpxrfVGDsVdyYJsiJoD4bJ1b623cV1Q==} - engines: {node: '>=18'} - - '@inquirer/select@4.2.1': - resolution: {integrity: sha512-gt1Kd5XZm+/ddemcT3m23IP8aD8rC9drRckWoP/1f7OL46Yy2FGi8DSmNjEjQKtPl6SV96Kmjbl6p713KXJ/Jg==} + '@inquirer/select@4.2.4': + resolution: {integrity: sha512-unTppUcTjmnbl/q+h8XeQDhAqIOmwWYWNyiiP2e3orXrg6tOaa5DHXja9PChCSbChOsktyKgOieRZFnajzxoBg==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1358,12 +936,8 @@ packages: '@types/node': optional: true - '@inquirer/type@2.0.0': - resolution: {integrity: sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==} - engines: {node: '>=18'} - - '@inquirer/type@3.0.6': - resolution: {integrity: sha512-/mKVCtVpyBu3IDarv0G+59KC4stsD5mDsGpYh+GKs1NZT88Jh52+cuoA1AtLk2Q0r/quNl+1cSUyLRHBFeD0XA==} + '@inquirer/type@3.0.7': + resolution: {integrity: sha512-PfunHQcjwnju84L+ycmcMKB/pTPIngjUJvfnRhKY6FKPuYXlM4aQCb/nIdTFR6BEhMjFvngzvng/vBAJMZpLSA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1387,62 +961,60 @@ packages: resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} - '@jest/expect-utils@29.7.0': - resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/diff-sequences@30.0.1': + resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/expect-utils@30.0.4': + resolution: {integrity: sha512-EgXecHDNfANeqOkcak0DxsoVI4qkDUsR7n/Lr2vtmTBjwLPBnnPOF71S11Q8IObWzxm2QgQoY6f9hzrRD3gHRA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + '@jest/get-type@30.0.1': + resolution: {integrity: sha512-AyYdemXCptSRFirI5EPazNxyPwAL0jXt3zceFjaj8NFiKP9pOi0bfXonf6qkf82z2t3QWPeLCWWw4stPBzctLw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} + '@jest/pattern@30.0.1': + resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/schemas@30.0.1': + resolution: {integrity: sha512-+g/1TKjFuGrf1Hh0QPCv0gISwBxJ+MQSNXmG9zjHy7BmFhtoJ9fdNhWJp3qUKRi93AOZHXtdxZgJ1vAtz6z65w==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jest/types@30.0.1': + resolution: {integrity: sha512-HGwoYRVF0QSKJu1ZQX0o5ZrUrrhj0aOOFA8hXrumD7SIzjouevhawbTjmXdwOmURdGluU9DM/XvGm3NyFoiQjw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + + '@jridgewell/gen-mapping@0.3.12': + resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/source-map@0.3.6': - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + '@jridgewell/source-map@0.3.10': + resolution: {integrity: sha512-0pPkgz9dY+bijgistcTTJ5mR+ocqRXLuhXHYdzoMmmoJ2C9S46RCm2GMUbatPEUK9Yjy26IrAy8D/M00lLkv+Q==} - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.4': + resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.29': + resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@kwsites/file-exists@1.1.1': - resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} - - '@kwsites/promise-deferred@1.1.1': - resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} - - '@laynezh/vite-plugin-lib-assets@1.1.0': - resolution: {integrity: sha512-Rynyr1A/DxJEmjNZu4NrpDQUfxUmJhanqojwOO20HQWtN5Oc0jJ3ZtwnlpntruK6VYV8aC25Mjzs67dmTIBHyA==} + '@laynezh/vite-plugin-lib-assets@1.2.0': + resolution: {integrity: sha512-rmiy9yreGSrzU5HEMGX1gbQ9nA03I/3YaOpmwB1dOMEYT44ijyN6QD0VJ8bUNC2BA/fd1pYCkkgr2eFlvo0G2Q==} peerDependencies: vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 - '@napi-rs/wasm-runtime@0.2.10': - resolution: {integrity: sha512-bCsCyeZEwVErsGmyPNSzwfwFn4OdxBj0mmv6hOFucB/k81Ojdu68RbZdxYsRQUPc9l6SU5F/cG+bXgWs3oUgsQ==} - '@noble/ciphers@1.3.0': resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} engines: {node: ^14.21.3 || >=16} - '@noble/curves@1.9.1': - resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==} + '@noble/curves@1.9.4': + resolution: {integrity: sha512-2bKONnuM53lINoDrSmK8qP8W271ms7pygDhZt4SiLOoLwBtoHqeCFi6RG42V8zd3mLHuJFhU/Bmaqo4nX0/kBw==} engines: {node: ^14.21.3 || >=16} '@noble/hashes@1.8.0': @@ -1461,230 +1033,45 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@npmcli/agent@3.0.0': - resolution: {integrity: sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==} - engines: {node: ^18.17.0 || >=20.5.0} - - '@npmcli/fs@4.0.0': - resolution: {integrity: sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==} - engines: {node: ^18.17.0 || >=20.5.0} - - '@octokit/auth-token@4.0.0': - resolution: {integrity: sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==} - engines: {node: '>= 18'} - - '@octokit/auth-token@6.0.0': - resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==} - engines: {node: '>= 20'} - - '@octokit/core@5.2.2': - resolution: {integrity: sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==} - engines: {node: '>= 18'} - - '@octokit/core@7.0.3': - resolution: {integrity: sha512-oNXsh2ywth5aowwIa7RKtawnkdH6LgU1ztfP9AIUCQCvzysB+WeU8o2kyyosDPwBZutPpjZDKPQGIzzrfTWweQ==} - engines: {node: '>= 20'} - - '@octokit/endpoint@11.0.0': - resolution: {integrity: sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ==} - engines: {node: '>= 20'} - - '@octokit/endpoint@9.0.6': - resolution: {integrity: sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==} - engines: {node: '>= 18'} - - '@octokit/graphql@7.1.1': - resolution: {integrity: sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==} - engines: {node: '>= 18'} - - '@octokit/graphql@9.0.1': - resolution: {integrity: sha512-j1nQNU1ZxNFx2ZtKmL4sMrs4egy5h65OMDmSbVyuCzjOcwsHq6EaYjOTGXPQxgfiN8dJ4CriYHk6zF050WEULg==} - engines: {node: '>= 20'} - - '@octokit/openapi-types@24.2.0': - resolution: {integrity: sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==} - - '@octokit/openapi-types@25.1.0': - resolution: {integrity: sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==} - - '@octokit/plugin-paginate-rest@11.4.4-cjs.2': - resolution: {integrity: sha512-2dK6z8fhs8lla5PaOTgqfCGBxgAv/le+EhPs27KklPhm1bKObpu6lXzwfUEQ16ajXzqNrKMujsFyo9K2eaoISw==} - engines: {node: '>= 18'} - peerDependencies: - '@octokit/core': '5' - - '@octokit/plugin-paginate-rest@13.1.1': - resolution: {integrity: sha512-q9iQGlZlxAVNRN2jDNskJW/Cafy7/XE52wjZ5TTvyhyOD904Cvx//DNyoO3J/MXJ0ve3rPoNWKEg5iZrisQSuw==} - engines: {node: '>= 20'} - peerDependencies: - '@octokit/core': '>=6' - - '@octokit/plugin-request-log@4.0.1': - resolution: {integrity: sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==} - engines: {node: '>= 18'} - peerDependencies: - '@octokit/core': '5' - - '@octokit/plugin-rest-endpoint-methods@13.3.2-cjs.1': - resolution: {integrity: sha512-VUjIjOOvF2oELQmiFpWA1aOPdawpyaCUqcEBc/UOUnj3Xp6DJGrJ1+bjUIIDzdHjnFNO6q57ODMfdEZnoBkCwQ==} - engines: {node: '>= 18'} - peerDependencies: - '@octokit/core': ^5 - - '@octokit/plugin-retry@8.0.1': - resolution: {integrity: sha512-KUoYR77BjF5O3zcwDQHRRZsUvJwepobeqiSSdCJ8lWt27FZExzb0GgVxrhhfuyF6z2B2zpO0hN5pteni1sqWiw==} - engines: {node: '>= 20'} - peerDependencies: - '@octokit/core': '>=7' - - '@octokit/plugin-throttling@11.0.1': - resolution: {integrity: sha512-S+EVhy52D/272L7up58dr3FNSMXWuNZolkL4zMJBNIfIxyZuUcczsQAU4b5w6dewJXnKYVgSHSV5wxitMSW1kw==} - engines: {node: '>= 20'} - peerDependencies: - '@octokit/core': ^7.0.0 - - '@octokit/request-error@5.1.1': - resolution: {integrity: sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==} - engines: {node: '>= 18'} - - '@octokit/request-error@7.0.0': - resolution: {integrity: sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg==} - engines: {node: '>= 20'} - - '@octokit/request@10.0.3': - resolution: {integrity: sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA==} - engines: {node: '>= 20'} - - '@octokit/request@8.4.1': - resolution: {integrity: sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==} - engines: {node: '>= 18'} - - '@octokit/rest@20.1.2': - resolution: {integrity: sha512-GmYiltypkHHtihFwPRxlaorG5R9VAHuk/vbszVoRTGXnAsY60wYLkh/E2XiFmdZmqrisw+9FaazS1i5SbdWYgA==} - engines: {node: '>= 18'} - - '@octokit/types@13.10.0': - resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==} - - '@octokit/types@14.1.0': - resolution: {integrity: sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==} - - '@one-ini/wasm@0.2.0': - resolution: {integrity: sha512-n+L/BvrwKUn7q5O3wHGo+CJZAqfewh38+37sk+eBzv/39lM9pPgPRd4sOZRvSRzo0ukLxzyXso4WlGj2oKZ5hA==} - - '@opentelemetry/api-logs@0.202.0': - resolution: {integrity: sha512-fTBjMqKCfotFWfLzaKyhjLvyEyq5vDKTTFfBmx21btv3gvy8Lq6N5Dh2OzqeuN4DjtpSvNT1uNVfg08eD2Rfxw==} - engines: {node: '>=8.0.0'} - - '@opentelemetry/api@1.9.0': - resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} - engines: {node: '>=8.0.0'} - - '@opentelemetry/context-async-hooks@2.0.1': - resolution: {integrity: sha512-XuY23lSI3d4PEqKA+7SLtAgwqIfc6E/E9eAQWLN1vlpC53ybO3o6jW4BsXo1xvz9lYyyWItfQDDLzezER01mCw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/core@2.0.1': - resolution: {integrity: sha512-MaZk9SJIDgo1peKevlbhP6+IwIiNPNmswNL4AF0WaQJLbHXjr9SrZMgS12+iqr9ToV4ZVosCcc0f8Rg67LXjxw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' - - '@opentelemetry/exporter-trace-otlp-http@0.202.0': - resolution: {integrity: sha512-/hKE8DaFCJuaQqE1IxpgkcjOolUIwgi3TgHElPVKGdGRBSmJMTmN/cr6vWa55pCJIXPyhKvcMrbrya7DZ3VmzA==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-bunyan@0.48.0': - resolution: {integrity: sha512-Q6ay5CXIKuyejadPoLboz+jKumB3Zuxyk35ycFh9vfIeww3+mNRyMVj6KxHRS0Imbv9zhNbP3uyrUpvEMMyHuw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation-http@0.202.0': - resolution: {integrity: sha512-oX+jyY2KBg4/nVH3vZhSWDbhywkHgE0fq3YinhUBx0jv+YUWC2UKA7qLkxr/CSzfKsFi/Km0NKV+llH17yYGKw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/instrumentation@0.202.0': - resolution: {integrity: sha512-Uz3BxZWPgDwgHM2+vCKEQRh0R8WKrd/q6Tus1vThRClhlPO39Dyz7mDrOr6KuqGXAlBQ1e5Tnymzri4RMZNaWA==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/otlp-exporter-base@0.202.0': - resolution: {integrity: sha512-nMEOzel+pUFYuBJg2znGmHJWbmvMbdX5/RhoKNKowguMbURhz0fwik5tUKplLcUtl8wKPL1y9zPnPxeBn65N0Q==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/otlp-transformer@0.202.0': - resolution: {integrity: sha512-5XO77QFzs9WkexvJQL9ksxL8oVFb/dfi9NWQSq7Sv0Efr9x3N+nb1iklP1TeVgxqJ7m1xWiC/Uv3wupiQGevMw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.3.0 - - '@opentelemetry/resource-detector-aws@2.2.0': - resolution: {integrity: sha512-6k7//RWAv4U1PeZhv0Too0Sv7sp7/A6s6g9h5ZYauPcroh2t4gOmkQSspSLYCynn34YZwn3FGbuaMwTDjHEJig==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - - '@opentelemetry/resource-detector-azure@0.9.0': - resolution: {integrity: sha512-5wJwAAW2vhbqIhgaRisU1y0F5mUco59F/dKgmnnnT6YNbxjrbdUZYxKF5Wl7deJoACVdL5wi/3N97GCXPEwwCQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.0.0 - - '@opentelemetry/resource-detector-gcp@0.36.0': - resolution: {integrity: sha512-mWnEcg4tA+IDPrkETWo42psEsDN20dzYZSm4ZH8m8uiQALnNksVmf5C3An0GUEj5zrrxMasjSuv4zEH1gI40XQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.0.0 + '@oxlint/darwin-arm64@1.7.0': + resolution: {integrity: sha512-51vhCSQO4NSkedwEwOyqThiYqV0DAUkwNdqMQK0d29j5zmtNJJJRRBLeQuLGdstNmn3F7WMQ75Ci0/3Nq4ff8A==} + cpu: [arm64] + os: [darwin] - '@opentelemetry/resource-detector-github@0.31.0': - resolution: {integrity: sha512-m4lbj4/vZ/ylBCtID0zO4bkuN1nPoaXEPCSn7DdiPmLgcS2eE0OWPx8TGO/Rw1HceXf8/qH4KQT94bsu3usVPg==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': ^1.0.0 + '@oxlint/darwin-x64@1.7.0': + resolution: {integrity: sha512-c0GN52yehYZ4TYuh4lBH9wYbBOI/RDOxZhJdBsttG0GwfvKYg/tiPNrNEsPzu0/rd1j6x3yT0zt6vezDMeC1sQ==} + cpu: [x64] + os: [darwin] - '@opentelemetry/resources@2.0.1': - resolution: {integrity: sha512-dZOB3R6zvBwDKnHDTB4X1xtMArB/d324VsbiPkX/Yu0Q8T2xceRthoIVFhJdvgVM2QhGVUyX9tzwiNxGtoBJUw==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@oxlint/linux-arm64-gnu@1.7.0': + resolution: {integrity: sha512-pam/lbzbzVMDzc3f1hoRPtnUMEIqkn0dynlB5nUll/MVBSIvIPLS9kJLrRA48lrlqbkS9LGiF37JvpwXA58A9A==} + cpu: [arm64] + os: [linux] - '@opentelemetry/sdk-logs@0.202.0': - resolution: {integrity: sha512-pv8QiQLQzk4X909YKm0lnW4hpuQg4zHwJ4XBd5bZiXcd9urvrJNoNVKnxGHPiDVX/GiLFvr5DMYsDBQbZCypRQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.4.0 <1.10.0' + '@oxlint/linux-arm64-musl@1.7.0': + resolution: {integrity: sha512-LTyPy9FYS3SZ2XxJx+ITvlAq/ek5PtZK9Z2m3W72TA8hchGhJy5eQ+aotYjd/YVXOpGRpB12RdOpOTsZRu50bA==} + cpu: [arm64] + os: [linux] - '@opentelemetry/sdk-metrics@2.0.1': - resolution: {integrity: sha512-wf8OaJoSnujMAHWR3g+/hGvNcsC16rf9s1So4JlMiFaFHiE4HpIA3oUh+uWZQ7CNuK8gVW/pQSkgoa5HkkOl0g==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.9.0 <1.10.0' + '@oxlint/linux-x64-gnu@1.7.0': + resolution: {integrity: sha512-YtZ4DiAgjaEiqUiwnvtJ/znZMAAVPKR7pnsi6lqbA3BfXJ/IwMaNpdoGlCGVdDGeN4BuGCwnFtBVqKVvVg3DDg==} + cpu: [x64] + os: [linux] - '@opentelemetry/sdk-trace-base@2.0.1': - resolution: {integrity: sha512-xYLlvk/xdScGx1aEqvxLwf6sXQLXCjk3/1SQT9X9AoN5rXRhkdvIFShuNNmtTEPRBqcsMbS4p/gJLNI2wXaDuQ==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.3.0 <1.10.0' + '@oxlint/linux-x64-musl@1.7.0': + resolution: {integrity: sha512-5aIpemNUBvwMMk4MCx1V3M6R9eMB1/SS6/24Orax9FqaI1lDX08tySdv696sr4Lms9ocA+rotxIPW9NP9439vA==} + cpu: [x64] + os: [linux] - '@opentelemetry/sdk-trace-node@2.0.1': - resolution: {integrity: sha512-UhdbPF19pMpBtCWYP5lHbTogLWx9N0EBxtdagvkn5YtsAnCBZzL7SjktG+ZmupRgifsHMjwUaCCaVmqGfSADmA==} - engines: {node: ^18.19.0 || >=20.6.0} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@oxlint/win32-arm64@1.7.0': + resolution: {integrity: sha512-fpFpkHwbAu0NcR5bc1WapCPcM9qSYi5lCRVOp1WwDoFLKI2b9/UWB8OEg8UHWV5dnBu7HZAWH/SEslYGkZNsbQ==} + cpu: [arm64] + os: [win32] - '@opentelemetry/semantic-conventions@1.34.0': - resolution: {integrity: sha512-aKcOkyrorBGlajjRdVoJWHTxfxO1vCNHLJVlSDaRHDIdjU+pX8IYQPvPDkYiujKLbRnWU+1TBwEt0QRgSm4SGA==} - engines: {node: '>=14'} + '@oxlint/win32-x64@1.7.0': + resolution: {integrity: sha512-0EPWBWOiD3wZHgeWDlTUaiFzhzIonXykxYUC+NRerPQFkO/G+bd9uLMJddHDKqfP/7g8s3E5V6KvBvvFpb7U6g==} + cpu: [x64] + os: [win32] '@parcel/watcher-android-arm64@2.5.1': resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} @@ -1772,183 +1159,16 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@pkgr/core@0.2.4': - resolution: {integrity: sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - - '@pnpm/catalogs.protocol-parser@1001.0.0': - resolution: {integrity: sha512-9rHKCMRvhfv7TSAVSCVLI+8OZhi1OcT8lanAGqOPbGgQTkFrPH3PfEWJNxz43xqrXRa4HCFRAMu+g19su5eRLA==} - engines: {node: '>=18.12'} - - '@pnpm/catalogs.resolver@1000.0.3': - resolution: {integrity: sha512-MT0l2EDAxNXpZoij3sO0eIrFSUC7trimRxNRUYvNQNeEOU07KEiCAfic2CTvFtnoqFV1/2YRqsniJLokfsJVqA==} - engines: {node: '>=18.12'} - - '@pnpm/catalogs.types@1000.0.0': - resolution: {integrity: sha512-xRf72lk7xHNvbenA4sp4Of/90QDdRW0CRYT+V+EbqpUXu1xsXtedHai34cTU6VGe7C1hUukxxE9eYTtIpYrx5g==} - engines: {node: '>=18.12'} - - '@pnpm/config.env-replace@1.1.0': - resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} - engines: {node: '>=12.22.0'} - - '@pnpm/constants@1001.1.0': - resolution: {integrity: sha512-xb9dfSGi1qfUKY3r4Zy9JdC9+ZeaDxwfE7HrrGIEsBVY1hvIn6ntbR7A97z3nk44yX7vwbINNf9sizTp0WEtEw==} - engines: {node: '>=18.12'} - - '@pnpm/constants@6.1.0': - resolution: {integrity: sha512-L6AiU3OXv9kjKGTJN9j8n1TeJGDcLX9atQlZvAkthlvbXjvKc5SKNWESc/eXhr5nEfuMWhQhiKHDJCpYejmeCQ==} - engines: {node: '>=14.19'} - - '@pnpm/error@1000.0.2': - resolution: {integrity: sha512-2SfE4FFL73rE1WVIoESbqlj4sLy5nWW4M/RVdHvCRJPjlQHa9MH7m7CVJM204lz6I+eHoB+E7rL3zmpJR5wYnQ==} - engines: {node: '>=18.12'} - - '@pnpm/error@4.0.0': - resolution: {integrity: sha512-NI4DFCMF6xb1SA0bZiiV5KrMCaJM2QmPJFC6p78FXujn7FpiRSWhT9r032wpuQumsl7DEmN4s3wl/P8TA+bL8w==} - engines: {node: '>=14.6'} - - '@pnpm/graceful-fs@2.0.0': - resolution: {integrity: sha512-ogUZCGf0/UILZt6d8PsO4gA4pXh7f0BumXeFkcCe4AQ65PXPKfAkHC0C30Lheh2EgFOpLZm3twDP1Eiww18gew==} - engines: {node: '>=14.19'} - - '@pnpm/network.ca-file@1.0.2': - resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} - engines: {node: '>=12.22.0'} - - '@pnpm/npm-conf@2.3.1': - resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} - engines: {node: '>=12'} - - '@pnpm/parse-overrides@1001.0.0': - resolution: {integrity: sha512-yTf60b3QCDk84OwfSRdZ5xkqlWhxnjd8/VKPrdZCGQYxcKTLHCQnlFj8PL6FoR43U230TJuBKgL91Uvk/Q0M5g==} - engines: {node: '>=18.12'} - - '@pnpm/parse-wanted-dependency@1001.0.0': - resolution: {integrity: sha512-cIZao+Jdu/4znu76d3ttAWBycDj6GWKiDVNlx1GVgqYgS/Qn7ak3Lm0FGIMAIHr5oOnX63jwzKIhW35AHNaTjQ==} - engines: {node: '>=18.12'} - - '@pnpm/read-project-manifest@4.1.1': - resolution: {integrity: sha512-jGNoofG8kkUlgAMX8fqbUwRRXYf4WcWdvi/y1Sv1abUfcoVgXW6GdGVm0MIJ+enaong3hXHjaLl/AwmSj6O1Uw==} - engines: {node: '>=14.6'} - - '@pnpm/text.comments-parser@1.0.0': - resolution: {integrity: sha512-iG0qrFcObze3uK+HligvzaTocZKukqqIj1dC3NOH58NeMACUW1NUitSKBgeWuNIE4LJT3SPxnyLEBARMMcqVKA==} - engines: {node: '>=14.6'} - - '@pnpm/types@8.9.0': - resolution: {integrity: sha512-3MYHYm8epnciApn6w5Fzx6sepawmsNU7l6lvIq+ER22/DPSrr83YMhU/EQWnf4lORn2YyiXFj0FJSyJzEtIGmw==} - engines: {node: '>=14.6'} - - '@pnpm/util.lex-comparator@1.0.0': - resolution: {integrity: sha512-3aBQPHntVgk5AweBWZn+1I/fqZ9krK/w01197aYVkAJQGftb+BVWgEepxY5GChjSW12j52XX+CmfynYZ/p0DFQ==} - engines: {node: '>=12.22.0'} - - '@pnpm/write-project-manifest@4.1.1': - resolution: {integrity: sha512-nRqvPYO8xUVdgy/KhJuaCrWlVT/4uZr97Mpbuizsa6CmvtCQf3NuYnVvOOrpYiKUJcZYtEvm84OooJ8+lJytMQ==} - engines: {node: '>=14.6'} - '@promptbook/utils@0.69.5': resolution: {integrity: sha512-xm5Ti/Hp3o4xHrsK9Yy3MS6KbDxYbq485hDsFvxqaNA7equHLPdo8H8faTitTeb14QCDfLW4iwCxdVYu5sn6YQ==} - '@protobufjs/aspromise@1.1.2': - resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} - - '@protobufjs/base64@1.1.2': - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - - '@protobufjs/codegen@2.0.4': - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - - '@protobufjs/eventemitter@1.1.0': - resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} - - '@protobufjs/fetch@1.1.0': - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} - - '@protobufjs/float@1.0.2': - resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - - '@protobufjs/inquire@1.1.0': - resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} - - '@protobufjs/path@1.1.2': - resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} - - '@protobufjs/pool@1.1.0': - resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - - '@protobufjs/utf8@1.1.0': - resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - - '@puppeteer/browsers@2.10.5': - resolution: {integrity: sha512-eifa0o+i8dERnngJwKrfp3dEq7ia5XFyoqB17S4gK8GhsQE4/P8nxOfQSE0zQHxzzLo/cmF+7+ywEQ7wK7Fb+w==} + '@puppeteer/browsers@2.10.6': + resolution: {integrity: sha512-pHUn6ZRt39bP3698HFQlu2ZHCkS/lPcpv7fVQcGBSzNNygw171UXAKrCUhy+TEMw4lEttOKDgNpb04hwUAJeiQ==} engines: {node: '>=18'} hasBin: true - '@qnighy/marshal@0.1.3': - resolution: {integrity: sha512-uaDZTJYtD2UgQTGemmgWeth+e2WapZm+GkAq8UU8AJ55PKRFaf1GkH7X/uzA+Ygu8iInzIlM2FGyCUnruyMKMg==} - - '@redis/bloom@1.2.0': - resolution: {integrity: sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==} - peerDependencies: - '@redis/client': ^1.0.0 - - '@redis/client@1.6.1': - resolution: {integrity: sha512-/KCsg3xSlR+nCK8/8ZYSknYxvXHwubJrU82F3Lm1Fp6789VQ0/3RJKfsmRXjqfaTA++23CvC3hqmqe/2GEt6Kw==} - engines: {node: '>=14'} - - '@redis/graph@1.1.1': - resolution: {integrity: sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==} - peerDependencies: - '@redis/client': ^1.0.0 - - '@redis/json@1.0.7': - resolution: {integrity: sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==} - peerDependencies: - '@redis/client': ^1.0.0 - - '@redis/search@1.2.0': - resolution: {integrity: sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==} - peerDependencies: - '@redis/client': ^1.0.0 - - '@redis/time-series@1.1.0': - resolution: {integrity: sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==} - peerDependencies: - '@redis/client': ^1.0.0 - - '@renovatebot/detect-tools@1.1.0': - resolution: {integrity: sha512-0GEOOX4QhUBQIY4xsr0g9sb/PrwO3C+uGPsAXlXklTDFnmXenFQ/XcEiQMTLAxPoeHofQCQ79BVCxlDVhcJ8DA==} - - '@renovatebot/kbpgp@4.0.1': - resolution: {integrity: sha512-Uj52QvCuIr9qwvbPR3fymQFMwn0MIKItZrEKywNoSF7K4UVfrtBW3DGVQ9KZ2D5tFR3LgrlPdhNSYEkEVAQ4OA==} - engines: {node: ^20.9.0 || ^22.11.0, pnpm: ^9.0.0} - - '@renovatebot/osv-offline-db@1.7.4': - resolution: {integrity: sha512-TyrARTT/m1NK/5Ir3eC9U6iL0XMkKYkivuO8kFCVEGUdrTXvVHwn74K5V7ZPNtC1Ye0qRbKN3fVz+b4uTtlhLQ==} - engines: {node: '>=18.12.0'} - - '@renovatebot/osv-offline@1.6.6': - resolution: {integrity: sha512-xyhxVMGTk95b9nJte9Br1iu2mrkbPVnc7XXE1Klpnjc3hy0B7j9YXlhZzEgvWlVQ21/WmNuMft0/QCaLgFABrQ==} - engines: {node: '>=18.12.0'} - - '@renovatebot/pep440@4.1.0': - resolution: {integrity: sha512-mo2RxnOSp78Njt1HmgMwjl6FapP4OyIS8HypJlymCvN7AIV2Xf5PmZfl/E3O1WWZ6IjKrfsEAaPWFMi8tnkq3g==} - engines: {node: ^20.9.0 || ^22.11.0, pnpm: ^9.0.0} - - '@renovatebot/ruby-semver@4.0.0': - resolution: {integrity: sha512-vuLfebLvwYWwQYJeZiHHs5NmydjO6cdhwS1dUHJbXMi0WD8kBa/+f7gz4WcuNJPRR+enLFQUHs89OCjfl6Os0g==} - engines: {node: ^20.9.0 || ^22.11.0, pnpm: ^9.0.0} - - '@rollup/plugin-inject@5.0.5': - resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@rolldown/pluginutils@1.0.0-beta.27': + resolution: {integrity: sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==} '@rollup/plugin-sucrase@5.0.2': resolution: {integrity: sha512-4MhIVH9Dy2Hwose1/x5QMs0XF7yn9jDd/yozHqzdIrMWIolgFpGnrnVhQkqTaK1RALY/fpyrEKmwH/04vr1THA==} @@ -1959,8 +1179,8 @@ packages: rollup: optional: true - '@rollup/pluginutils@5.1.4': - resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} + '@rollup/pluginutils@5.2.0': + resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -1968,518 +1188,279 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.41.0': - resolution: {integrity: sha512-KxN+zCjOYHGwCl4UCtSfZ6jrq/qi88JDUtiEFk8LELEHq2Egfc/FgW+jItZiOLRuQfb/3xJSgFuNPC9jzggX+A==} + '@rollup/rollup-android-arm-eabi@4.45.1': + resolution: {integrity: sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.41.0': - resolution: {integrity: sha512-yDvqx3lWlcugozax3DItKJI5j05B0d4Kvnjx+5mwiUpWramVvmAByYigMplaoAQ3pvdprGCTCE03eduqE/8mPQ==} + '@rollup/rollup-android-arm64@4.45.1': + resolution: {integrity: sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.41.0': - resolution: {integrity: sha512-2KOU574vD3gzcPSjxO0eyR5iWlnxxtmW1F5CkNOHmMlueKNCQkxR6+ekgWyVnz6zaZihpUNkGxjsYrkTJKhkaw==} + '@rollup/rollup-darwin-arm64@4.45.1': + resolution: {integrity: sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.41.0': - resolution: {integrity: sha512-gE5ACNSxHcEZyP2BA9TuTakfZvULEW4YAOtxl/A/YDbIir/wPKukde0BNPlnBiP88ecaN4BJI2TtAd+HKuZPQQ==} + '@rollup/rollup-darwin-x64@4.45.1': + resolution: {integrity: sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.41.0': - resolution: {integrity: sha512-GSxU6r5HnWij7FoSo7cZg3l5GPg4HFLkzsFFh0N/b16q5buW1NAWuCJ+HMtIdUEi6XF0qH+hN0TEd78laRp7Dg==} + '@rollup/rollup-freebsd-arm64@4.45.1': + resolution: {integrity: sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.41.0': - resolution: {integrity: sha512-KGiGKGDg8qLRyOWmk6IeiHJzsN/OYxO6nSbT0Vj4MwjS2XQy/5emsmtoqLAabqrohbgLWJ5GV3s/ljdrIr8Qjg==} + '@rollup/rollup-freebsd-x64@4.45.1': + resolution: {integrity: sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.41.0': - resolution: {integrity: sha512-46OzWeqEVQyX3N2/QdiU/CMXYDH/lSHpgfBkuhl3igpZiaB3ZIfSjKuOnybFVBQzjsLwkus2mjaESy8H41SzvA==} + '@rollup/rollup-linux-arm-gnueabihf@4.45.1': + resolution: {integrity: sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.41.0': - resolution: {integrity: sha512-lfgW3KtQP4YauqdPpcUZHPcqQXmTmH4nYU0cplNeW583CMkAGjtImw4PKli09NFi2iQgChk4e9erkwlfYem6Lg==} + '@rollup/rollup-linux-arm-musleabihf@4.45.1': + resolution: {integrity: sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.41.0': - resolution: {integrity: sha512-nn8mEyzMbdEJzT7cwxgObuwviMx6kPRxzYiOl6o/o+ChQq23gfdlZcUNnt89lPhhz3BYsZ72rp0rxNqBSfqlqw==} + '@rollup/rollup-linux-arm64-gnu@4.45.1': + resolution: {integrity: sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.41.0': - resolution: {integrity: sha512-l+QK99je2zUKGd31Gh+45c4pGDAqZSuWQiuRFCdHYC2CSiO47qUWsCcenrI6p22hvHZrDje9QjwSMAFL3iwXwQ==} + '@rollup/rollup-linux-arm64-musl@4.45.1': + resolution: {integrity: sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.41.0': - resolution: {integrity: sha512-WbnJaxPv1gPIm6S8O/Wg+wfE/OzGSXlBMbOe4ie+zMyykMOeqmgD1BhPxZQuDqwUN+0T/xOFtL2RUWBspnZj3w==} + '@rollup/rollup-linux-loongarch64-gnu@4.45.1': + resolution: {integrity: sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.41.0': - resolution: {integrity: sha512-eRDWR5t67/b2g8Q/S8XPi0YdbKcCs4WQ8vklNnUYLaSWF+Cbv2axZsp4jni6/j7eKvMLYCYdcsv8dcU+a6QNFg==} + '@rollup/rollup-linux-powerpc64le-gnu@4.45.1': + resolution: {integrity: sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.41.0': - resolution: {integrity: sha512-TWrZb6GF5jsEKG7T1IHwlLMDRy2f3DPqYldmIhnA2DVqvvhY2Ai184vZGgahRrg8k9UBWoSlHv+suRfTN7Ua4A==} + '@rollup/rollup-linux-riscv64-gnu@4.45.1': + resolution: {integrity: sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.41.0': - resolution: {integrity: sha512-ieQljaZKuJpmWvd8gW87ZmSFwid6AxMDk5bhONJ57U8zT77zpZ/TPKkU9HpnnFrM4zsgr4kiGuzbIbZTGi7u9A==} + '@rollup/rollup-linux-riscv64-musl@4.45.1': + resolution: {integrity: sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.41.0': - resolution: {integrity: sha512-/L3pW48SxrWAlVsKCN0dGLB2bi8Nv8pr5S5ocSM+S0XCn5RCVCXqi8GVtHFsOBBCSeR+u9brV2zno5+mg3S4Aw==} + '@rollup/rollup-linux-s390x-gnu@4.45.1': + resolution: {integrity: sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.41.0': - resolution: {integrity: sha512-XMLeKjyH8NsEDCRptf6LO8lJk23o9wvB+dJwcXMaH6ZQbbkHu2dbGIUindbMtRN6ux1xKi16iXWu6q9mu7gDhQ==} + '@rollup/rollup-linux-x64-gnu@4.45.1': + resolution: {integrity: sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.41.0': - resolution: {integrity: sha512-m/P7LycHZTvSQeXhFmgmdqEiTqSV80zn6xHaQ1JSqwCtD1YGtwEK515Qmy9DcB2HK4dOUVypQxvhVSy06cJPEg==} + '@rollup/rollup-linux-x64-musl@4.45.1': + resolution: {integrity: sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.41.0': - resolution: {integrity: sha512-4yodtcOrFHpbomJGVEqZ8fzD4kfBeCbpsUy5Pqk4RluXOdsWdjLnjhiKy2w3qzcASWd04fp52Xz7JKarVJ5BTg==} + '@rollup/rollup-win32-arm64-msvc@4.45.1': + resolution: {integrity: sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.41.0': - resolution: {integrity: sha512-tmazCrAsKzdkXssEc65zIE1oC6xPHwfy9d5Ta25SRCDOZS+I6RypVVShWALNuU9bxIfGA0aqrmzlzoM5wO5SPQ==} + '@rollup/rollup-win32-ia32-msvc@4.45.1': + resolution: {integrity: sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.41.0': - resolution: {integrity: sha512-h1J+Yzjo/X+0EAvR2kIXJDuTuyT7drc+t2ALY0nIcGPbTatNOf0VWdhEA2Z4AAjv6X1NJV7SYo5oCTYRJhSlVA==} + '@rollup/rollup-win32-x64-msvc@4.45.1': + resolution: {integrity: sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==} cpu: [x64] os: [win32] - '@rtsao/scc@1.1.0': - resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - - '@seald-io/binary-search-tree@1.0.3': - resolution: {integrity: sha512-qv3jnwoakeax2razYaMsGI/luWdliBLHTdC6jU55hQt1hcFqzauH/HsBollQ7IR4ySTtYhT+xyHoijpA16C+tA==} - - '@seald-io/nedb@4.1.2': - resolution: {integrity: sha512-bDr6TqjBVS2rDyYM9CPxAnotj5FuNL9NF8o7h7YyFXM7yruqT4ddr+PkSb2mJvvw991bqdftazkEo38gykvaww==} - '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - '@semantic-release/changelog@6.0.3': - resolution: {integrity: sha512-dZuR5qByyfe3Y03TpmCvAxCyTnp7r5XwtHRf/8vD9EAn4ZWbavUX8adMtXYzE86EVh0gyLA7lm5yW4IV30XUag==} - engines: {node: '>=14.17'} - peerDependencies: - semantic-release: '>=18.0.0' - - '@semantic-release/commit-analyzer@13.0.1': - resolution: {integrity: sha512-wdnBPHKkr9HhNhXOhZD5a2LNl91+hs8CC2vsAVYxtZH3y0dV3wKn+uZSN61rdJQZ8EGxzWB3inWocBHV9+u/CQ==} - engines: {node: '>=20.8.1'} - peerDependencies: - semantic-release: '>=20.1.0' - - '@semantic-release/error@3.0.0': - resolution: {integrity: sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==} - engines: {node: '>=14.17'} + '@sinclair/typebox@0.34.38': + resolution: {integrity: sha512-HpkxMmc2XmZKhvaKIZZThlHmx1L0I/V1hWK1NubtlFnr6ZqdiOpV72TKudZUNQjZNsyDBay72qFEhEvb+bcwcA==} - '@semantic-release/error@4.0.0': - resolution: {integrity: sha512-mgdxrHTLOjOddRVYIYDo0fR3/v61GNN1YGkfbrjuIKg/uMgCd+Qzo3UAXJ+woLQQpos4pl5Esuw5A7AoNlzjUQ==} + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} - '@semantic-release/git@10.0.1': - resolution: {integrity: sha512-eWrx5KguUcU2wUPaO6sfvZI0wPafUKAMNC18aXY4EnNcrZL86dEmpNVnC9uMpGZkmZJ9EfCVJBQx4pV4EMGT1w==} - engines: {node: '>=14.17'} - peerDependencies: - semantic-release: '>=18.0.0' + '@swc/core-darwin-arm64@1.13.0': + resolution: {integrity: sha512-SkmR9u7MHDu2X8hf7SjZTmsAfQTmel0mi+TJ7AGtufLwGySv6pwQfJ/CIJpcPxYENVqDJAFnDrHaKV8mgA6kxQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] - '@semantic-release/github@11.0.3': - resolution: {integrity: sha512-T2fKUyFkHHkUNa5XNmcsEcDPuG23hwBKptfUVcFXDVG2cSjXXZYDOfVYwfouqbWo/8UefotLaoGfQeK+k3ep6A==} - engines: {node: '>=20.8.1'} - peerDependencies: - semantic-release: '>=24.1.0' + '@swc/core-darwin-x64@1.13.0': + resolution: {integrity: sha512-15/SyDjXRtFJ09fYHBXUXrj4tpiSpCkjgsF1z3/sSpHH1POWpQUQzxmFyomPQVZ/SsDqP18WGH09Vph4Qriuiw==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] - '@semantic-release/npm@12.0.2': - resolution: {integrity: sha512-+M9/Lb35IgnlUO6OSJ40Ie+hUsZLuph2fqXC/qrKn0fMvUU/jiCjpoL6zEm69vzcmaZJ8yNKtMBEKHWN49WBbQ==} - engines: {node: '>=20.8.1'} - peerDependencies: - semantic-release: '>=20.1.0' + '@swc/core-linux-arm-gnueabihf@1.13.0': + resolution: {integrity: sha512-AHauVHZQEJI/dCZQg6VYNNQ6HROz8dSOnCSheXzzBw1DGWo77BlcxRP0fF0jaAXM9WNqtCUOY1HiJ9ohkAE61Q==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] - '@semantic-release/release-notes-generator@14.0.3': - resolution: {integrity: sha512-XxAZRPWGwO5JwJtS83bRdoIhCiYIx8Vhr+u231pQAsdFIAbm19rSVJLdnBN+Avvk7CKvNQE/nJ4y7uqKH6WTiw==} - engines: {node: '>=20.8.1'} - peerDependencies: - semantic-release: '>=20.1.0' + '@swc/core-linux-arm64-gnu@1.13.0': + resolution: {integrity: sha512-qyZmBZF7asF6954/x7yn6R7Bzd45KRG05rK2atIF9J3MTa8az7vubP1Q3BWmmss1j8699DELpbuoJucGuhsNXw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] - '@shikijs/engine-oniguruma@3.8.0': - resolution: {integrity: sha512-Tx7kR0oFzqa+rY7t80LjN8ZVtHO3a4+33EUnBVx2qYP3fGxoI9H0bvnln5ySelz9SIUTsS0/Qn+9dg5zcUMsUw==} + '@swc/core-linux-arm64-musl@1.13.0': + resolution: {integrity: sha512-whskQCOUlLQT7MjnronpHmyHegBka5ig9JkQvecbqhWzRfdwN+c2xTJs3kQsWy2Vc2f1hcL3D8hGIwY5TwPxMQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] - '@shikijs/langs@3.8.0': - resolution: {integrity: sha512-mfGYuUgjQ5GgXinB5spjGlBVhG2crKRpKkfADlp8r9k/XvZhtNXxyOToSnCEnF0QNiZnJjlt5MmU9PmhRdwAbg==} + '@swc/core-linux-x64-gnu@1.13.0': + resolution: {integrity: sha512-51n4P4nv6rblXyH3zCEktvmR9uSAZ7+zbfeby0sxbj8LS/IKuVd7iCwD5dwMj4CxG9Fs+HgjN73dLQF/OerHhg==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] - '@shikijs/themes@3.8.0': - resolution: {integrity: sha512-yaZiLuyO23sXe16JFU76KyUMTZCJi4EMQKIrdQt7okoTzI4yAaJhVXT2Uy4k8yBIEFRiia5dtD7gC1t8m6y3oQ==} + '@swc/core-linux-x64-musl@1.13.0': + resolution: {integrity: sha512-VMqelgvnXs27eQyhDf1S2O2MxSdchIH7c1tkxODRtu9eotcAeniNNgqqLjZ5ML0MGeRk/WpbsAY/GWi7eSpiHw==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] - '@shikijs/types@3.8.0': - resolution: {integrity: sha512-I/b/aNg0rP+kznVDo7s3UK8jMcqEGTtoPDdQ+JlQ2bcJIyu/e2iRvl42GLIDMK03/W1YOHOuhlhQ7aM+XbKUeg==} + '@swc/core-win32-arm64-msvc@1.13.0': + resolution: {integrity: sha512-NLJmseWJngWeENgat+O/WB4ptNxtx2X4OfPnSG5a/A4sxcn2E4jq91OPvbeUQwDkH+ZQWKXmbXFzt7Nn661QYA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] - '@shikijs/vscode-textmate@10.0.2': - resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@swc/core-win32-ia32-msvc@1.13.0': + resolution: {integrity: sha512-UBfwrp0xW37KQGTA08mwrCLIm1ZKy6pXK8IVwou7BvhMgrItRNweTGyUrCnvDLUfyYFuJCmzcEaJ3NudtctD6g==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] - '@sinclair/typebox@0.27.8': - resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + '@swc/core-win32-x64-msvc@1.13.0': + resolution: {integrity: sha512-BAB1P7Z/y2EENsfsPytPnjIyBVRZN2WULY+s3ozW4QkGmYHde6XXG28n0ABTHhcIOmmR2VzM+uaW1x48laSimw==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] - '@sindresorhus/is@4.6.0': - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + '@swc/core@1.13.0': + resolution: {integrity: sha512-7Fh16ZH/Rj3Di720if+sw9BictD4N5kbTpsyDC+URXhvsZ7qRt1lH7PaeIQYyJJQHwFhoKpwwGxfGU9SHgPLdw==} engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '>=0.5.17' + peerDependenciesMeta: + '@swc/helpers': + optional: true - '@sindresorhus/is@7.0.2': - resolution: {integrity: sha512-d9xRovfKNz1SKieM0qJdO+PQonjnnIfSNWfHYnBSJ9hkjm0ZPw6HlxscDXYstp3z+7V2GOFHc+J0CYrYTjqCJw==} - engines: {node: '>=18'} + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - '@sindresorhus/merge-streams@2.3.0': - resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} - engines: {node: '>=18'} + '@swc/types@0.1.23': + resolution: {integrity: sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==} - '@sindresorhus/merge-streams@4.0.0': - resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} - engines: {node: '>=18'} + '@tailwindcss/node@4.1.11': + resolution: {integrity: sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==} - '@smithy/abort-controller@4.0.4': - resolution: {integrity: sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA==} - engines: {node: '>=18.0.0'} + '@tailwindcss/oxide-android-arm64@4.1.11': + resolution: {integrity: sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] - '@smithy/chunked-blob-reader-native@4.0.0': - resolution: {integrity: sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==} - engines: {node: '>=18.0.0'} + '@tailwindcss/oxide-darwin-arm64@4.1.11': + resolution: {integrity: sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] - '@smithy/chunked-blob-reader@5.0.0': - resolution: {integrity: sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==} - engines: {node: '>=18.0.0'} + '@tailwindcss/oxide-darwin-x64@4.1.11': + resolution: {integrity: sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] - '@smithy/config-resolver@4.1.4': - resolution: {integrity: sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w==} - engines: {node: '>=18.0.0'} + '@tailwindcss/oxide-freebsd-x64@4.1.11': + resolution: {integrity: sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] - '@smithy/core@3.7.0': - resolution: {integrity: sha512-7ov8hu/4j0uPZv8b27oeOFtIBtlFmM3ibrPv/Omx1uUdoXvcpJ00U+H/OWWC/keAguLlcqwtyL2/jTlSnApgNQ==} - engines: {node: '>=18.0.0'} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': + resolution: {integrity: sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] - '@smithy/credential-provider-imds@4.0.6': - resolution: {integrity: sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw==} - engines: {node: '>=18.0.0'} + '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': + resolution: {integrity: sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] - '@smithy/eventstream-codec@4.0.4': - resolution: {integrity: sha512-7XoWfZqWb/QoR/rAU4VSi0mWnO2vu9/ltS6JZ5ZSZv0eovLVfDfu0/AX4ub33RsJTOth3TiFWSHS5YdztvFnig==} - engines: {node: '>=18.0.0'} + '@tailwindcss/oxide-linux-arm64-musl@4.1.11': + resolution: {integrity: sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] - '@smithy/eventstream-serde-browser@4.0.4': - resolution: {integrity: sha512-3fb/9SYaYqbpy/z/H3yIi0bYKyAa89y6xPmIqwr2vQiUT2St+avRt8UKwsWt9fEdEasc5d/V+QjrviRaX1JRFA==} - engines: {node: '>=18.0.0'} + '@tailwindcss/oxide-linux-x64-gnu@4.1.11': + resolution: {integrity: sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] - '@smithy/eventstream-serde-config-resolver@4.1.2': - resolution: {integrity: sha512-JGtambizrWP50xHgbzZI04IWU7LdI0nh/wGbqH3sJesYToMi2j/DcoElqyOcqEIG/D4tNyxgRuaqBXWE3zOFhQ==} - engines: {node: '>=18.0.0'} + '@tailwindcss/oxide-linux-x64-musl@4.1.11': + resolution: {integrity: sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] - '@smithy/eventstream-serde-node@4.0.4': - resolution: {integrity: sha512-RD6UwNZ5zISpOWPuhVgRz60GkSIp0dy1fuZmj4RYmqLVRtejFqQ16WmfYDdoSoAjlp1LX+FnZo+/hkdmyyGZ1w==} - engines: {node: '>=18.0.0'} + '@tailwindcss/oxide-wasm32-wasi@4.1.11': + resolution: {integrity: sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': + resolution: {integrity: sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] - '@smithy/eventstream-serde-universal@4.0.4': - resolution: {integrity: sha512-UeJpOmLGhq1SLox79QWw/0n2PFX+oPRE1ZyRMxPIaFEfCqWaqpB7BU9C8kpPOGEhLF7AwEqfFbtwNxGy4ReENA==} - engines: {node: '>=18.0.0'} - - '@smithy/fetch-http-handler@5.1.0': - resolution: {integrity: sha512-mADw7MS0bYe2OGKkHYMaqarOXuDwRbO6ArD91XhHcl2ynjGCFF+hvqf0LyQcYxkA1zaWjefSkU7Ne9mqgApSgQ==} - engines: {node: '>=18.0.0'} - - '@smithy/hash-blob-browser@4.0.4': - resolution: {integrity: sha512-WszRiACJiQV3QG6XMV44i5YWlkrlsM5Yxgz4jvsksuu7LDXA6wAtypfPajtNTadzpJy3KyJPoWehYpmZGKUFIQ==} - engines: {node: '>=18.0.0'} - - '@smithy/hash-node@4.0.4': - resolution: {integrity: sha512-qnbTPUhCVnCgBp4z4BUJUhOEkVwxiEi1cyFM+Zj6o+aY8OFGxUQleKWq8ltgp3dujuhXojIvJWdoqpm6dVO3lQ==} - engines: {node: '>=18.0.0'} - - '@smithy/hash-stream-node@4.0.4': - resolution: {integrity: sha512-wHo0d8GXyVmpmMh/qOR0R7Y46/G1y6OR8U+bSTB4ppEzRxd1xVAQ9xOE9hOc0bSjhz0ujCPAbfNLkLrpa6cevg==} - engines: {node: '>=18.0.0'} - - '@smithy/invalid-dependency@4.0.4': - resolution: {integrity: sha512-bNYMi7WKTJHu0gn26wg8OscncTt1t2b8KcsZxvOv56XA6cyXtOAAAaNP7+m45xfppXfOatXF3Sb1MNsLUgVLTw==} - engines: {node: '>=18.0.0'} - - '@smithy/is-array-buffer@2.2.0': - resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} - engines: {node: '>=14.0.0'} - - '@smithy/is-array-buffer@4.0.0': - resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==} - engines: {node: '>=18.0.0'} - - '@smithy/md5-js@4.0.4': - resolution: {integrity: sha512-uGLBVqcOwrLvGh/v/jw423yWHq/ofUGK1W31M2TNspLQbUV1Va0F5kTxtirkoHawODAZcjXTSGi7JwbnPcDPJg==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-content-length@4.0.4': - resolution: {integrity: sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-endpoint@4.1.15': - resolution: {integrity: sha512-L2M0oz+r6Wv0KZ90MgClXmWkV7G72519Hd5/+K5i3gQMu4WNQykh7ERr58WT3q60dd9NqHSMc3/bAK0FsFg3Fw==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-retry@4.1.16': - resolution: {integrity: sha512-PpPhMpC6U1fLW0evKnC8gJtmobBYn0oi4RrIKGhN1a86t6XgVEK+Vb9C8dh5PPXb3YDr8lE6aYKh1hd3OikmWw==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-serde@4.0.8': - resolution: {integrity: sha512-iSSl7HJoJaGyMIoNn2B7czghOVwJ9nD7TMvLhMWeSB5vt0TnEYyRRqPJu/TqW76WScaNvYYB8nRoiBHR9S1Ddw==} - engines: {node: '>=18.0.0'} - - '@smithy/middleware-stack@4.0.4': - resolution: {integrity: sha512-kagK5ggDrBUCCzI93ft6DjteNSfY8Ulr83UtySog/h09lTIOAJ/xUSObutanlPT0nhoHAkpmW9V5K8oPyLh+QA==} - engines: {node: '>=18.0.0'} - - '@smithy/node-config-provider@4.1.3': - resolution: {integrity: sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw==} - engines: {node: '>=18.0.0'} - - '@smithy/node-http-handler@4.1.0': - resolution: {integrity: sha512-vqfSiHz2v8b3TTTrdXi03vNz1KLYYS3bhHCDv36FYDqxT7jvTll1mMnCrkD+gOvgwybuunh/2VmvOMqwBegxEg==} - engines: {node: '>=18.0.0'} - - '@smithy/property-provider@4.0.4': - resolution: {integrity: sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw==} - engines: {node: '>=18.0.0'} - - '@smithy/protocol-http@5.1.2': - resolution: {integrity: sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ==} - engines: {node: '>=18.0.0'} - - '@smithy/querystring-builder@4.0.4': - resolution: {integrity: sha512-SwREZcDnEYoh9tLNgMbpop+UTGq44Hl9tdj3rf+yeLcfH7+J8OXEBaMc2kDxtyRHu8BhSg9ADEx0gFHvpJgU8w==} - engines: {node: '>=18.0.0'} - - '@smithy/querystring-parser@4.0.4': - resolution: {integrity: sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w==} - engines: {node: '>=18.0.0'} - - '@smithy/service-error-classification@4.0.6': - resolution: {integrity: sha512-RRoTDL//7xi4tn5FrN2NzH17jbgmnKidUqd4KvquT0954/i6CXXkh1884jBiunq24g9cGtPBEXlU40W6EpNOOg==} - engines: {node: '>=18.0.0'} - - '@smithy/shared-ini-file-loader@4.0.4': - resolution: {integrity: sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw==} - engines: {node: '>=18.0.0'} - - '@smithy/signature-v4@5.1.2': - resolution: {integrity: sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ==} - engines: {node: '>=18.0.0'} - - '@smithy/smithy-client@4.4.7': - resolution: {integrity: sha512-x+MxBNOcG7rY9i5QsbdgvvRJngKKvUJrbU5R5bT66PTH3e6htSupJ4Q+kJ3E7t6q854jyl57acjpPi6qG1OY5g==} - engines: {node: '>=18.0.0'} - - '@smithy/types@4.3.1': - resolution: {integrity: sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA==} - engines: {node: '>=18.0.0'} - - '@smithy/url-parser@4.0.4': - resolution: {integrity: sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-base64@4.0.0': - resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-body-length-browser@4.0.0': - resolution: {integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-body-length-node@4.0.0': - resolution: {integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-buffer-from@2.2.0': - resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} - engines: {node: '>=14.0.0'} - - '@smithy/util-buffer-from@4.0.0': - resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==} - engines: {node: '>=18.0.0'} - - '@smithy/util-config-provider@4.0.0': - resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} - engines: {node: '>=18.0.0'} - - '@smithy/util-defaults-mode-browser@4.0.23': - resolution: {integrity: sha512-NqRi6VvEIwpJ+KSdqI85+HH46H7uVoNqVTs2QO7p1YKnS7k8VZnunJj8R5KdmmVnTojkaL1OMPyZC8uR5F7fSg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-defaults-mode-node@4.0.23': - resolution: {integrity: sha512-NE9NtEVigFa+HHJ5bBeQT7KF3KiltW880CLN9TnWWL55akeou3ziRAHO22QSUPgPZ/nqMfPXi/LGMQ6xQvXPNQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-endpoints@3.0.6': - resolution: {integrity: sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA==} - engines: {node: '>=18.0.0'} - - '@smithy/util-hex-encoding@4.0.0': - resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} - engines: {node: '>=18.0.0'} - - '@smithy/util-middleware@4.0.4': - resolution: {integrity: sha512-9MLKmkBmf4PRb0ONJikCbCwORACcil6gUWojwARCClT7RmLzF04hUR4WdRprIXal7XVyrddadYNfp2eF3nrvtQ==} - engines: {node: '>=18.0.0'} - - '@smithy/util-retry@4.0.6': - resolution: {integrity: sha512-+YekoF2CaSMv6zKrA6iI/N9yva3Gzn4L6n35Luydweu5MMPYpiGZlWqehPHDHyNbnyaYlz/WJyYAZnC+loBDZg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-stream@4.2.3': - resolution: {integrity: sha512-cQn412DWHHFNKrQfbHY8vSFI3nTROY1aIKji9N0tpp8gUABRilr7wdf8fqBbSlXresobM+tQFNk6I+0LXK/YZg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-uri-escape@4.0.0': - resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==} - engines: {node: '>=18.0.0'} - - '@smithy/util-utf8@2.3.0': - resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} - engines: {node: '>=14.0.0'} - - '@smithy/util-utf8@4.0.0': - resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} - engines: {node: '>=18.0.0'} - - '@smithy/util-waiter@4.0.6': - resolution: {integrity: sha512-slcr1wdRbX7NFphXZOxtxRNA7hXAAtJAXJDE/wdoMAos27SIquVCKiSqfB6/28YzQ8FCsB5NKkhdM5gMADbqxg==} - engines: {node: '>=18.0.0'} - - '@swc/core-darwin-arm64@1.11.24': - resolution: {integrity: sha512-dhtVj0PC1APOF4fl5qT2neGjRLgHAAYfiVP8poJelhzhB/318bO+QCFWAiimcDoyMgpCXOhTp757gnoJJrheWA==} - engines: {node: '>=10'} - cpu: [arm64] - os: [darwin] - - '@swc/core-darwin-x64@1.11.24': - resolution: {integrity: sha512-H/3cPs8uxcj2Fe3SoLlofN5JG6Ny5bl8DuZ6Yc2wr7gQFBmyBkbZEz+sPVgsID7IXuz7vTP95kMm1VL74SO5AQ==} - engines: {node: '>=10'} - cpu: [x64] - os: [darwin] - - '@swc/core-linux-arm-gnueabihf@1.11.24': - resolution: {integrity: sha512-PHJgWEpCsLo/NGj+A2lXZ2mgGjsr96ULNW3+T3Bj2KTc8XtMUkE8tmY2Da20ItZOvPNC/69KroU7edyo1Flfbw==} - engines: {node: '>=10'} - cpu: [arm] - os: [linux] - - '@swc/core-linux-arm64-gnu@1.11.24': - resolution: {integrity: sha512-C2FJb08+n5SD4CYWCTZx1uR88BN41ZieoHvI8A55hfVf2woT8+6ZiBzt74qW2g+ntZ535Jts5VwXAKdu41HpBg==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-arm64-musl@1.11.24': - resolution: {integrity: sha512-ypXLIdszRo0re7PNNaXN0+2lD454G8l9LPK/rbfRXnhLWDBPURxzKlLlU/YGd2zP98wPcVooMmegRSNOKfvErw==} - engines: {node: '>=10'} - cpu: [arm64] - os: [linux] - - '@swc/core-linux-x64-gnu@1.11.24': - resolution: {integrity: sha512-IM7d+STVZD48zxcgo69L0yYptfhaaE9cMZ+9OoMxirNafhKKXwoZuufol1+alEFKc+Wbwp+aUPe/DeWC/Lh3dg==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-linux-x64-musl@1.11.24': - resolution: {integrity: sha512-DZByJaMVzSfjQKKQn3cqSeqwy6lpMaQDQQ4HPlch9FWtDx/dLcpdIhxssqZXcR2rhaQVIaRQsCqwV6orSDGAGw==} - engines: {node: '>=10'} - cpu: [x64] - os: [linux] - - '@swc/core-win32-arm64-msvc@1.11.24': - resolution: {integrity: sha512-Q64Ytn23y9aVDKN5iryFi8mRgyHw3/kyjTjT4qFCa8AEb5sGUuSj//AUZ6c0J7hQKMHlg9do5Etvoe61V98/JQ==} - engines: {node: '>=10'} - cpu: [arm64] - os: [win32] - - '@swc/core-win32-ia32-msvc@1.11.24': - resolution: {integrity: sha512-9pKLIisE/Hh2vJhGIPvSoTK4uBSPxNVyXHmOrtdDot4E1FUUI74Vi8tFdlwNbaj8/vusVnb8xPXsxF1uB0VgiQ==} - engines: {node: '>=10'} - cpu: [ia32] - os: [win32] - - '@swc/core-win32-x64-msvc@1.11.24': - resolution: {integrity: sha512-sybnXtOsdB+XvzVFlBVGgRHLqp3yRpHK7CrmpuDKszhj/QhmsaZzY/GHSeALlMtLup13M0gqbcQvsTNlAHTg3w==} - engines: {node: '>=10'} + '@tailwindcss/oxide-win32-x64-msvc@4.1.11': + resolution: {integrity: sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==} + engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@swc/core@1.11.24': - resolution: {integrity: sha512-MaQEIpfcEMzx3VWWopbofKJvaraqmL6HbLlw2bFZ7qYqYw3rkhM0cQVEgyzbHtTWwCwPMFZSC2DUbhlZgrMfLg==} - engines: {node: '>=10'} - peerDependencies: - '@swc/helpers': '>=0.5.17' - peerDependenciesMeta: - '@swc/helpers': - optional: true - - '@swc/counter@0.1.3': - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - - '@swc/types@0.1.21': - resolution: {integrity: sha512-2YEtj5HJVbKivud9N4bpPBAyZhj4S2Ipe5LkUG94alTpr7in/GU/EARgPAd3BwU+YOmFVJC2+kjqhGRi3r0ZpQ==} - - '@szmarczak/http-timer@4.0.6': - resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} - engines: {node: '>=10'} - - '@thi.ng/api@7.2.0': - resolution: {integrity: sha512-4NcwHXxwPF/JgJG/jSFd9rjfQNguF0QrHvd6e+CEf4T0sFChqetW6ZmJ6/a2X+noDVntgulegA+Bx0HHzw+Tyw==} - - '@thi.ng/arrays@1.0.3': - resolution: {integrity: sha512-ZUB27bdpTwcvxYJTlt/eWKrj98nWXo0lAUPwRwubk4GlH8rTKKkc7qZr9/4LCKPsNjnZdQqbBtNvNf3HjYxCzw==} - - '@thi.ng/checks@2.9.11': - resolution: {integrity: sha512-fBvWod32w24JlJsrrOdl+tlx+UNehCORi4rHaJ7l7HH+SEhD/lYTCXOBjwu9D/ztIUjMP5Q+n8cAqI5iPhbvAQ==} - - '@thi.ng/compare@1.3.34': - resolution: {integrity: sha512-E+UWhmo8l5yeHDuriPUsfrnk/Mj5kSDNRX7lPfv2zNdAQ7N8UDzc0IXu46U6EpqtCReo+2n5N8qzfD3TjerFRw==} - - '@thi.ng/equiv@1.0.45': - resolution: {integrity: sha512-tdXaJfF0pFvT80Q7BOlhc7H7ja/RbVGzlGpE4LqjDWfXPPbLYwmq6EbQuHWeXuvT0qe+BsGnuO5UXAR5B8oGGQ==} - - '@thi.ng/errors@1.3.4': - resolution: {integrity: sha512-hTk71OPKnioN349sdj2DAoY+69eSerB3MN4Zwz6mosr1QFzIMkfkNOtBeC+Gm0yi0V0EY5LeBYFgqb3oXbtTbw==} - - '@thi.ng/hex@1.0.4': - resolution: {integrity: sha512-9ofIG4nXhEskGeOJthpi/9LXFIPrlZ/MmHpgLWa3wNqTVhODP/o++mu9jDKojHEpKvswkkFCE+mSVmMu8xo4mQ==} - - '@thi.ng/random@2.4.8': - resolution: {integrity: sha512-4JJB8zbaPxjlAp1kCqsBbs6eN4Ivd/5fs1e4GlvmNkyGSucHIDTWvw6NnQWqUx2oPaAEDB9CFCH7SOcGC/cwkw==} - - '@thi.ng/zipper@1.0.3': - resolution: {integrity: sha512-dWfuk5nzf5wGEmcF90AXNEuWr3NVwRF+cf/9ZSE6xImA7Vy5XpHNMwLHFszZaC+kqiDXr+EZ0lXWDF46a8lSPA==} - - '@tootallnate/once@2.0.0': - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + '@tailwindcss/oxide@4.1.11': + resolution: {integrity: sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==} engines: {node: '>= 10'} + '@tailwindcss/postcss@4.1.11': + resolution: {integrity: sha512-q/EAIIpF6WpLhKEuQSEVMZNMIY8KhWoAemZ9eylNAih9jxMGAYPPWBn3I9QL/2jZ+e7OEz/tZkX5HwbBR4HohA==} + '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} @@ -2495,38 +1476,32 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@tybys/wasm-util@0.9.0': - resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} - '@types/bunyan@1.8.11': - resolution: {integrity: sha512-758fRH7umIMk5qt5ELmRMff4mLDlN+xyYzC+dkPTdKwbSkJFvz6xwyScrytPU0QIBbRRwbiE8/BIg8bpajerNQ==} + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - '@types/cacheable-request@6.0.3': - resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + '@types/babel__traverse@7.20.7': + resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} - '@types/chrome@0.0.323': - resolution: {integrity: sha512-ipiDwx41lmGeLnbiT6ENOayvWXdkqKqNwqDQWEuz6dujaX7slSkk1nbSt5Q5c6xnQ708+kuCFrC00VLltSbWVA==} + '@types/chrome@0.1.1': + resolution: {integrity: sha512-MLtFW++/n+OPQIaf5hA6pmURd3Zn+OxuvASyf2mYh8B8pHDpbhHjwlVHMw3H/aJC9Z7Z3itO0AFaZeegrGk0yA==} '@types/conventional-commits-parser@5.0.1': resolution: {integrity: sha512-7uz5EHdzz2TqoMfV7ee61Egf5y6NkcO4FB/1iCCQnbeiI1F3xzv3vK5dBCXUCLQgGYS+mUeigK1iKQzvED+QnQ==} - '@types/debug@4.1.12': - resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - - '@types/emscripten@1.40.1': - resolution: {integrity: sha512-sr53lnYkQNhjHNN0oJDdUm5564biioI5DuOpycufDVK7D3y+GR3oUswe2rlwY1nPNyusHbrJ9WoTyIHl4/Bpwg==} - - '@types/eslint-plugin-jsx-a11y@6.10.0': - resolution: {integrity: sha512-TGKmk2gO6DrvTVADNOGQMqn3SzqcFcJILFnXNllQA34us9uClS3/AsL/cERPz6jS9ePI3bx+1q8/d2GZsxPVYw==} + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} '@types/eslint@9.6.1': resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - '@types/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} - - '@types/file-saver@2.0.7': - resolution: {integrity: sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} '@types/filesystem@0.0.36': resolution: {integrity: sha512-vPDXOZuannb9FZdxgHnqSwAG/jvdGM8Wq+6N4D/d80z+D4HWH+bItqsZaVRQykAn6WEVeEkLm2oQigyHtgb0RA==} @@ -2537,12 +1512,6 @@ packages: '@types/har-format@1.2.16': resolution: {integrity: sha512-fluxdy7ryD3MV6h8pTfTYpy/xQzCFC7m89nOH9y94cNqJ1mDIDPut7MnRHI3F6qRmh/cT2fUjG1MLdCNb4hE9A==} - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - - '@types/http-cache-semantics@4.0.4': - resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} - '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -2555,56 +1524,25 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/json5@0.0.29': - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - - '@types/keyv@3.1.4': - resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} - - '@types/mdast@4.0.4': - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - - '@types/minimist@1.2.5': - resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} - '@types/mocha@10.0.10': resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} - '@types/moo@0.5.5': - resolution: {integrity: sha512-eXQpwnkI4Ntw5uJg6i2PINdRFWLr55dqjuYQaLHNjvqTzF14QdNWbCbml9sza0byyXNA0hZlHtcdN+VNDcgVHA==} - - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - - '@types/mute-stream@0.0.4': - resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} - - '@types/node@20.17.50': - resolution: {integrity: sha512-Mxiq0ULv/zo1OzOhwPqOA13I81CV/W3nvd3ChtQZRT5Cwz3cr0FKo/wMSsbTqL3EXpaBAEQhva2B8ByRkOIh9A==} + '@types/node@20.19.8': + resolution: {integrity: sha512-HzbgCY53T6bfu4tT7Aq3TvViJyHjLjPNaAS3HOuMc9pw97KHsUtXNX4L+wu59g1WnjsZSko35MbEqnO58rihhw==} - '@types/node@22.15.21': - resolution: {integrity: sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==} + '@types/node@24.0.14': + resolution: {integrity: sha512-4zXMWD91vBLGRtHK3YbIoFMia+1nqEz72coM42C5ETjnNCa/heoj7NT1G67iAfOqMmcfhuCZ4uNpyz8EjlAejw==} '@types/normalize-package-data@2.4.4': resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - '@types/parse-path@7.1.0': - resolution: {integrity: sha512-EULJ8LApcVEPbrfND0cRQqutIOdiIgJ1Mgrhpy755r14xMohPTEpkV/k28SJvuOs9bHRFW8x+KeDAEPiGQPB9Q==} - deprecated: This is a stub types definition. parse-path provides its own type definitions, so you do not need this installed. - - '@types/react-dom@19.1.5': - resolution: {integrity: sha512-CMCjrWucUBZvohgZxkjd6S9h0nZxXjzus6yDfUb+xLxYM7VvjKNH1tQrE9GWLql1XoOP4/Ds3bwFqShHUYraGg==} + '@types/react-dom@19.1.6': + resolution: {integrity: sha512-4hOiT/dwO8Ko0gV1m/TJZYk3y0KBnY9vzDh7W+DH17b2HFSOGgdj33dhihPeuy3l0q23+4e+hoXHV6hCC4dCXw==} peerDependencies: '@types/react': ^19.0.0 - '@types/react@19.1.5': - resolution: {integrity: sha512-piErsCVVbpMMT2r7wbawdZsq4xMvIAhQuac2gedQHysu1TZYEigE6pnFfgZT+/jQnrRuF5r+SHzuehFjfRjr4g==} - - '@types/responselike@1.0.3': - resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} - - '@types/semver@7.7.0': - resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==} + '@types/react@19.1.8': + resolution: {integrity: sha512-AwAfQ2Wa5bCx9WP8nZL2uMZWod7J7/JSplxbTmBQ5ms6QpqNYm672H0Vu9ZVKVngQ+ii4R/byguVEUZQyeg44g==} '@types/sinonjs__fake-timers@8.1.5': resolution: {integrity: sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==} @@ -2612,21 +1550,9 @@ packages: '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - '@types/treeify@1.0.3': - resolution: {integrity: sha512-hx0o7zWEUU4R2Amn+pjCBQQt23Khy/Dk56gQU5xi5jtPL1h83ACJCeFaB2M/+WO1AntvWrSoVnnCAfI1AQH4Cg==} - - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - - '@types/uuid@9.0.8': - resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} - '@types/which@2.0.2': resolution: {integrity: sha512-113D3mDkZDjo+EeUEHCFy0qniNc1ZpecGiAU7WSo7YDoSzolZIQKpYFHrPpjkB2nuyahcKfrmLXeQlh7gqJYdw==} - '@types/wrap-ansi@3.0.0': - resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} - '@types/ws@8.18.1': resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} @@ -2639,203 +1565,89 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.32.1': - resolution: {integrity: sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/parser@8.32.1': - resolution: {integrity: sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/scope-manager@8.32.1': - resolution: {integrity: sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/type-utils@8.32.1': - resolution: {integrity: sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/types@8.32.1': - resolution: {integrity: sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/typescript-estree@8.32.1': - resolution: {integrity: sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/utils@8.32.1': - resolution: {integrity: sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@vitejs/plugin-react-swc@3.11.0': + resolution: {integrity: sha512-YTJCGFdNMHCMfjODYtxRNVAYmTWQ1Lb8PulP/2/f/oEEtglw8oKxKIZmmRkyXrVrHfsKOaVkAc3NT9/dMutO5w==} peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - - '@typescript-eslint/visitor-keys@8.32.1': - resolution: {integrity: sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@unrs/resolver-binding-darwin-arm64@1.7.2': - resolution: {integrity: sha512-vxtBno4xvowwNmO/ASL0Y45TpHqmNkAaDtz4Jqb+clmcVSSl8XCG/PNFFkGsXXXS6AMjP+ja/TtNCFFa1QwLRg==} - cpu: [arm64] - os: [darwin] - - '@unrs/resolver-binding-darwin-x64@1.7.2': - resolution: {integrity: sha512-qhVa8ozu92C23Hsmv0BF4+5Dyyd5STT1FolV4whNgbY6mj3kA0qsrGPe35zNR3wAN7eFict3s4Rc2dDTPBTuFQ==} - cpu: [x64] - os: [darwin] - - '@unrs/resolver-binding-freebsd-x64@1.7.2': - resolution: {integrity: sha512-zKKdm2uMXqLFX6Ac7K5ElnnG5VIXbDlFWzg4WJ8CGUedJryM5A3cTgHuGMw1+P5ziV8CRhnSEgOnurTI4vpHpg==} - cpu: [x64] - os: [freebsd] - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.2': - resolution: {integrity: sha512-8N1z1TbPnHH+iDS/42GJ0bMPLiGK+cUqOhNbMKtWJ4oFGzqSJk/zoXFzcQkgtI63qMcUI7wW1tq2usZQSb2jxw==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm-musleabihf@1.7.2': - resolution: {integrity: sha512-tjYzI9LcAXR9MYd9rO45m1s0B/6bJNuZ6jeOxo1pq1K6OBuRMMmfyvJYval3s9FPPGmrldYA3mi4gWDlWuTFGA==} - cpu: [arm] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-gnu@1.7.2': - resolution: {integrity: sha512-jon9M7DKRLGZ9VYSkFMflvNqu9hDtOCEnO2QAryFWgT6o6AXU8du56V7YqnaLKr6rAbZBWYsYpikF226v423QA==} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-arm64-musl@1.7.2': - resolution: {integrity: sha512-c8Cg4/h+kQ63pL43wBNaVMmOjXI/X62wQmru51qjfTvI7kmCy5uHTJvK/9LrF0G8Jdx8r34d019P1DVJmhXQpA==} - cpu: [arm64] - os: [linux] - - '@unrs/resolver-binding-linux-ppc64-gnu@1.7.2': - resolution: {integrity: sha512-A+lcwRFyrjeJmv3JJvhz5NbcCkLQL6Mk16kHTNm6/aGNc4FwPHPE4DR9DwuCvCnVHvF5IAd9U4VIs/VvVir5lg==} - cpu: [ppc64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-gnu@1.7.2': - resolution: {integrity: sha512-hQQ4TJQrSQW8JlPm7tRpXN8OCNP9ez7PajJNjRD1ZTHQAy685OYqPrKjfaMw/8LiHCt8AZ74rfUVHP9vn0N69Q==} - cpu: [riscv64] - os: [linux] - - '@unrs/resolver-binding-linux-riscv64-musl@1.7.2': - resolution: {integrity: sha512-NoAGbiqrxtY8kVooZ24i70CjLDlUFI7nDj3I9y54U94p+3kPxwd2L692YsdLa+cqQ0VoqMWoehDFp21PKRUoIQ==} - cpu: [riscv64] - os: [linux] - - '@unrs/resolver-binding-linux-s390x-gnu@1.7.2': - resolution: {integrity: sha512-KaZByo8xuQZbUhhreBTW+yUnOIHUsv04P8lKjQ5otiGoSJ17ISGYArc+4vKdLEpGaLbemGzr4ZeUbYQQsLWFjA==} - cpu: [s390x] - os: [linux] - - '@unrs/resolver-binding-linux-x64-gnu@1.7.2': - resolution: {integrity: sha512-dEidzJDubxxhUCBJ/SHSMJD/9q7JkyfBMT77Px1npl4xpg9t0POLvnWywSk66BgZS/b2Hy9Y1yFaoMTFJUe9yg==} - cpu: [x64] - os: [linux] - - '@unrs/resolver-binding-linux-x64-musl@1.7.2': - resolution: {integrity: sha512-RvP+Ux3wDjmnZDT4XWFfNBRVG0fMsc+yVzNFUqOflnDfZ9OYujv6nkh+GOr+watwrW4wdp6ASfG/e7bkDradsw==} - cpu: [x64] - os: [linux] - - '@unrs/resolver-binding-wasm32-wasi@1.7.2': - resolution: {integrity: sha512-y797JBmO9IsvXVRCKDXOxjyAE4+CcZpla2GSoBQ33TVb3ILXuFnMrbR/QQZoauBYeOFuu4w3ifWLw52sdHGz6g==} - engines: {node: '>=14.0.0'} - cpu: [wasm32] - - '@unrs/resolver-binding-win32-arm64-msvc@1.7.2': - resolution: {integrity: sha512-gtYTh4/VREVSLA+gHrfbWxaMO/00y+34htY7XpioBTy56YN2eBjkPrY1ML1Zys89X3RJDKVaogzwxlM1qU7egg==} - cpu: [arm64] - os: [win32] - - '@unrs/resolver-binding-win32-ia32-msvc@1.7.2': - resolution: {integrity: sha512-Ywv20XHvHTDRQs12jd3MY8X5C8KLjDbg/jyaal/QLKx3fAShhJyD4blEANInsjxW3P7isHx1Blt56iUDDJO3jg==} - cpu: [ia32] - os: [win32] - - '@unrs/resolver-binding-win32-x64-msvc@1.7.2': - resolution: {integrity: sha512-friS8NEQfHaDbkThxopGk+LuE5v3iY0StruifjQEt7SLbA46OnfgMO15sOTkbpJkol6RB+1l1TYPXh0sCddpvA==} - cpu: [x64] - os: [win32] + vite: ^4 || ^5 || ^6 || ^7 - '@vitejs/plugin-react-swc@3.9.0': - resolution: {integrity: sha512-jYFUSXhwMCYsh/aQTgSGLIN3Foz5wMbH9ahb0Zva//UzwZYbMiZd7oT3AU9jHT9DLswYDswsRwPU9jVF3yA48Q==} + '@vitejs/plugin-react@4.7.0': + resolution: {integrity: sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - vite: ^4 || ^5 || ^6 + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 '@vitest/pretty-format@2.1.9': resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==} + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + '@vitest/snapshot@2.1.9': resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==} - '@wdio/cli@9.14.0': - resolution: {integrity: sha512-bS7015C54gZMs0gZrCQPFes5CqoVGtwTzlSzJBy0HBx94E8AQw/6feH1FyN6asz4uyfifpUbdpq7Q/7CkaEnGA==} + '@vitest/snapshot@3.2.4': + resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + + '@wdio/cli@9.18.1': + resolution: {integrity: sha512-f/Akoj7bTjAG3fdZRXgQsRPO0SZFzl8U1z/U5b1MNBt/zCFhh/vUg8SbOGDWXMp1UdR3p3zQQdlrk9SxWT3NDg==} engines: {node: '>=18.20.0'} hasBin: true - '@wdio/config@9.14.0': - resolution: {integrity: sha512-mW6VAXfUgd2j+8YJfFWvg8Ba/7g1Brr6/+MFBpp5rTQsw/2bN3PBJsQbWpNl99OCgoS8vgc5Ykps5ZUEeffSVQ==} + '@wdio/config@9.18.0': + resolution: {integrity: sha512-fN+Z7SkKjb0u3UUMSxMN4d+CCZQKZhm/tx3eX7Rv+3T78LtpOjlesBYQ7Ax3tQ3tp8hgEo+CoOXU0jHEYubFrg==} engines: {node: '>=18.20.0'} - '@wdio/dot-reporter@9.14.0': - resolution: {integrity: sha512-BwSr0Atk93m2FAzXtVVCs6xWrUtmdIklTrnwnELQxGp/7xIF629ZqqJreUqJqlgqIN3GnItR1TrPbOzSw/WZ4A==} + '@wdio/dot-reporter@9.18.0': + resolution: {integrity: sha512-VsT8VGrszgHJdwCdxdtmS2ATqFoL6cXsveI9EgXON9xh9BE0Rbk9Ce7OGt1sRHI+CFxTQLSc5gW1kC3FlvAXfw==} engines: {node: '>=18.20.0'} - '@wdio/globals@9.14.0': - resolution: {integrity: sha512-ZndEbjcU8OqLU5TlbZPlCMmQF2TVk6xYX7E5JWAmWJugwzndqCx9WZR48vPgUz9bZL2K7ejUXqnzVkEiC+gXdA==} + '@wdio/globals@9.17.0': + resolution: {integrity: sha512-i38o7wlipLllNrk2hzdDfAmk6nrqm3lR2MtAgWgtHbwznZAKkB84KpkNFfmUXw5Kg3iP1zKlSjwZpKqenuLc+Q==} engines: {node: '>=18.20.0'} + peerDependencies: + expect-webdriverio: ^5.3.4 + webdriverio: ^9.0.0 - '@wdio/local-runner@9.14.0': - resolution: {integrity: sha512-bNUSMXYM2oAEF0ZmwK2CPuQnt1knTsq7Cm0AT+ynsQhS8EhzhXLIrtrqFUNxTPz694RC5dhCMYFxOa8HDi6YWA==} + '@wdio/local-runner@9.18.1': + resolution: {integrity: sha512-AdsbI9PXNqHmEpWnmbtaRLHIEIbRReFA0L1kefVxbUrNcCRNcP8OBwpHQjUzJvOv9g99U0JltdtGwsXxZKhn2g==} engines: {node: '>=18.20.0'} - '@wdio/logger@9.4.4': - resolution: {integrity: sha512-BXx8RXFUW2M4dcO6t5Le95Hi2ZkTQBRsvBQqLekT2rZ6Xmw8ZKZBPf0FptnoftFGg6dYmwnDidYv/0+4PiHjpQ==} + '@wdio/logger@9.18.0': + resolution: {integrity: sha512-HdzDrRs+ywAqbXGKqe1i/bLtCv47plz4TvsHFH3j729OooT5VH38ctFn5aLXgECmiAKDkmH/A6kOq2Zh5DIxww==} engines: {node: '>=18.20.0'} - '@wdio/mocha-framework@9.14.0': - resolution: {integrity: sha512-qxzOMuTNfgEiKPK0TlZWFHr4cT5EnRtzdkszAAF9PSIXQIhTeSCS6YuzPkliGQaz0DELn1npe23LsggUbmL1rQ==} + '@wdio/mocha-framework@9.18.0': + resolution: {integrity: sha512-foycDp9DFpW1z4+GJMPitn69V7CJ8FK86Z1C/6JHJlvGfNpz5Kpfn22NYX6+ph1mpW4bvK2BeWCNMm1EgOl4mw==} engines: {node: '>=18.20.0'} - '@wdio/protocols@9.14.0': - resolution: {integrity: sha512-inJR+G8iiFrk8/JPMfxpy6wA7rvMIZFV0T8vDN1Io7sGGj+EXX7ujpDxoCns53qxV4RytnSlgHRcCaASPFcecQ==} + '@wdio/protocols@9.16.2': + resolution: {integrity: sha512-h3k97/lzmyw5MowqceAuY3HX/wGJojXHkiPXA3WlhGPCaa2h4+GovV2nJtRvknCKsE7UHA1xB5SWeI8MzloBew==} - '@wdio/repl@9.4.4': - resolution: {integrity: sha512-kchPRhoG/pCn4KhHGiL/ocNhdpR8OkD2e6sANlSUZ4TGBVi86YSIEjc2yXUwLacHknC/EnQk/SFnqd4MsNjGGg==} + '@wdio/repl@9.16.2': + resolution: {integrity: sha512-FLTF0VL6+o5BSTCO7yLSXocm3kUnu31zYwzdsz4n9s5YWt83sCtzGZlZpt7TaTzb3jVUfxuHNQDTb8UMkCu0lQ==} engines: {node: '>=18.20.0'} - '@wdio/reporter@9.14.0': - resolution: {integrity: sha512-/l1CrQ4q30ysBHoZOH1EOg8LZ2+AmrDdQdNhec5mjHT6p0/c6K4QeRHY/Ayh0hU27zR9Lj0tCoWjpmPgAqWI8g==} + '@wdio/reporter@9.18.0': + resolution: {integrity: sha512-AaGfyOkypHjCO2Igo/36NloNYi2Mq+yHY80Z6OlM2MjTwUC/upieKzn4H7qPAeOtxCgbLgcsaDuUXqH36wsM2w==} engines: {node: '>=18.20.0'} - '@wdio/runner@9.14.0': - resolution: {integrity: sha512-4HhNLXcKKzphlQvxY2nvJLj1mE+yd87rIvhldEO3HleMDq0h9C1K+m45J0SxzQmT5i7VVBuhiuXzgZV300bh8g==} + '@wdio/runner@9.18.1': + resolution: {integrity: sha512-B0S8o873Nv/AUDyxb4dL6YpvbD7xm+GYWUhDiSAug2TE40AGd0c+UmaTHZbq9cXGTUdA4SaP3eQiG5yMWJxiRA==} engines: {node: '>=18.20.0'} + peerDependencies: + expect-webdriverio: ^5.3.4 + webdriverio: ^9.0.0 - '@wdio/spec-reporter@9.14.0': - resolution: {integrity: sha512-k9uFEn/SHQCmPMn5DlcUdCLlCwyWodaLECr7YLpkfdywuwrBLrB7R8YME7g63lSQzH3CAzLzPhgMiokQWLUu4w==} + '@wdio/spec-reporter@9.18.0': + resolution: {integrity: sha512-rLol+LTsJCh2WIpKHrRdIohe7LqYlJJfFVZWSAtcjR7fpkR22lNp4l8DW7i4sVZeKhVfllhnqMOI63b1qRgAjA==} engines: {node: '>=18.20.0'} - '@wdio/types@9.14.0': - resolution: {integrity: sha512-Zqc4sxaQLIXdI1EHItIuVIOn7LvPmDvl9JEANwiJ35ck82Xlj+X55Gd9NtELSwChzKgODD0OBzlLgXyxTr69KA==} + '@wdio/types@9.16.2': + resolution: {integrity: sha512-P86FvM/4XQGpJKwlC2RKF3I21TglPvPOozJGG9HoL0Jmt6jRF20ggO/nRTxU0XiWkRdqESUTmfA87bdCO4GRkQ==} engines: {node: '>=18.20.0'} - '@wdio/utils@9.14.0': - resolution: {integrity: sha512-oJapwraSflOe0CmeF3TBocdt983hq9mCutLCfie4QmE+TKRlCsZz4iidG1NRAZPGdKB32nfHtyQlW0Dfxwn6RA==} + '@wdio/utils@9.18.0': + resolution: {integrity: sha512-M+QH05FUw25aFXZfjb+V16ydKoURgV61zeZrMjQdW2aAiks3F5iiI9pgqYT5kr1kHZcMy8gawGqQQ+RVfKYscQ==} engines: {node: '>=18.20.0'} '@webassemblyjs/ast@1.14.1': @@ -2889,88 +1701,37 @@ packages: '@xtuc/long@4.2.2': resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - '@yarnpkg/core@4.4.2': - resolution: {integrity: sha512-Gf2p9WUygkcT8GobVjrQpFGE7A/GWXPXjDSIFTnZKTiq/W8giN3jqhWpIrpVa2XfPMguXzdEvb2brNYeW3IwdQ==} - engines: {node: '>=18.12.0'} - - '@yarnpkg/fslib@3.1.2': - resolution: {integrity: sha512-FpB2F1Lrm43F94klS9UN0ceOpe/PHZSpJB7bIkvReF/ba890bSdu1NokSKr998yaFee7yqeD9Wkid5ye7azF3A==} - engines: {node: '>=18.12.0'} - - '@yarnpkg/libzip@3.2.1': - resolution: {integrity: sha512-xPdiZxwCXGXxc1GDEyPjRQ5KqkgoOmieDNszLozbqghaeXIaokRbMKLUNx0Mr0LAnzII64kN3gl5qVyzfMxnIg==} - engines: {node: '>=18.12.0'} - peerDependencies: - '@yarnpkg/fslib': ^3.1.2 - - '@yarnpkg/parsers@3.0.3': - resolution: {integrity: sha512-mQZgUSgFurUtA07ceMjxrWkYz8QtDuYkvPlu0ZqncgjopQ0t6CNEo/OSealkmnagSUx8ZD5ewvezUwUuMqutQg==} - engines: {node: '>=18.12.0'} - - '@yarnpkg/shell@4.1.3': - resolution: {integrity: sha512-5igwsHbPtSAlLdmMdKqU3atXjwhtLFQXsYAG0sn1XcPb3yF8WxxtWxN6fycBoUvFyIHFz1G0KeRefnAy8n6gdw==} - engines: {node: '>=18.12.0'} - hasBin: true - - '@zip.js/zip.js@2.7.62': - resolution: {integrity: sha512-OaLvZ8j4gCkLn048ypkZu29KX30r8/OfFF2w4Jo5WXFr+J04J+lzJ5TKZBVgFXhlvSkqNFQdfnY1Q8TMTCyBVA==} + '@zip.js/zip.js@2.7.64': + resolution: {integrity: sha512-x6BDiDTKeZWbeHgHlVzV1sqReGuz4b1R4cVStUDua8OSq4bRreZeiJKPFFlvJs67FvCnetq33aYb/XH73EQhdA==} engines: {bun: '>=0.7.0', deno: '>=1.0.0', node: '>=16.5.0'} JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true - abbrev@3.0.1: - resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} - engines: {node: ^18.17.0 || >=20.5.0} - abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} - acorn-import-attributes@1.9.5: - resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} - peerDependencies: - acorn: ^8 - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + acorn-import-phases@1.0.4: + resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==} + engines: {node: '>=10.13.0'} peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn: ^8.14.0 acorn-walk@8.3.4: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} hasBin: true - adm-zip@0.5.16: - resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} - engines: {node: '>=12.0'} - - agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - - agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} - agentkeepalive@4.6.0: - resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} - engines: {node: '>= 8.0.0'} - - aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - - aggregate-error@5.0.0: - resolution: {integrity: sha512-gOsf2YwSlleG6IjRYG2A7k0HmBMEo6qVNk9Bp/EaLgAJT5ngH6PXbqa4ItvnEwCm/velL5jAnQgsHsWnjhGmvw==} - engines: {node: '>=18'} - ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -2979,19 +1740,11 @@ packages: ajv: optional: true - ajv-keywords@3.5.2: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - ajv-keywords@5.1.0: resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} peerDependencies: ajv: ^8.8.2 - ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@8.17.1: resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} @@ -3003,10 +1756,6 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} - ansi-escapes@7.0.0: - resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} - engines: {node: '>=18'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -3015,10 +1764,6 @@ packages: resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -3049,74 +1794,20 @@ packages: arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - argv-formatter@1.0.0: - resolution: {integrity: sha512-F2+Hkm9xFaRg+GkaNnbwXNDV5O6pnCFEmqyhvfC/Ic5LbgOWjJh3L+mN/s91rxVL3znE7DYVpW0GJFT+4YBgWw==} - aria-query@5.3.2: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} - array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} - array-ify@1.0.0: resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==} - array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} - array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} - - array.prototype.findlastindex@1.2.6: - resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} - - arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} - - arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - - asn1.js@4.10.1: - resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} - - assert@2.1.0: - resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} - - ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - ast-types@0.13.4: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} @@ -3125,22 +1816,9 @@ packages: resolution: {integrity: sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==} engines: {node: '>=0.12.0'} - async-function@1.0.0: - resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} - engines: {node: '>= 0.4'} - - async-mutex@0.5.0: - resolution: {integrity: sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==} - - async-retry@1.2.3: - resolution: {integrity: sha512-tfDb02Th6CE6pJUF2gjW5ZVjsgwlucVXOEQMvEX9JgSJMs9gAX+Nz3xRuJBKuUYjTSYORqvDBORdAQ3LU59g7Q==} - async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - auth-header@1.0.0: - resolution: {integrity: sha512-CPPazq09YVDUNNVWo4oSPTQmtwIzHusZhQmahCKvIsk0/xH6U3QsMAv3sM+7+Q0B1K2KJ/Q38OND317uXs4NHA==} - autoprefixer@10.4.21: resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} engines: {node: ^10 || ^12 || >=14} @@ -3148,42 +1826,17 @@ packages: peerDependencies: postcss: ^8.1.0 - available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} - - aws4@1.13.2: - resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} - - axe-core@4.10.3: - resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} - engines: {node: '>=4'} - - axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} - engines: {node: '>= 0.4'} - - azure-devops-node-api@15.1.0: - resolution: {integrity: sha512-zlZ387CISkSKK1vjBv53kzR5fnzA60SxYrejypZawefZWvrjC28zyM/iKSP5b+iYl+Z7OOlm+Rgl6YsMecK6fg==} - engines: {node: '>= 16.0.0'} - b4a@1.6.7: resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} - backslash@0.2.0: - resolution: {integrity: sha512-Avs+8FUZ1HF/VFP4YWwHQZSGzRPm37ukU1JQYQWijuHhtXdOuAzcZ8PcAzfIw898a8PyBzdn+RtnKA6MzW0X2A==} - - bail@2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - bare-events@2.5.4: - resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + bare-events@2.6.0: + resolution: {integrity: sha512-EKZ5BTXYExaNqi3I3f9RtEsaI/xBSGjE0XZCZilPzFAV/goswFHuPd9jEZlPIZ/iNZJwDSao9qRiScySz7MbQg==} - bare-fs@4.1.5: - resolution: {integrity: sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==} + bare-fs@4.1.6: + resolution: {integrity: sha512-25RsLF33BqooOEFNdMcEhMpJy8EoR88zSMrnOQOaM3USnOK2VmaJ1uaQEwPA6AQjrv1lXChScosN6CzbwbO9OQ==} engines: {bare: '>=1.16.0'} peerDependencies: bare-buffer: '*' @@ -3216,92 +1869,28 @@ packages: resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} engines: {node: '>=10.0.0'} - before-after-hook@2.2.3: - resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} - - before-after-hook@4.0.0: - resolution: {integrity: sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==} - - better-sqlite3@12.2.0: - resolution: {integrity: sha512-eGbYq2CT+tos1fBwLQ/tkBt9J5M3JEHjku4hbvQUePCckkvVf14xWj+1m7dGoK81M/fOjFT7yM9UMeKT/+vFLQ==} - engines: {node: 20.x || 22.x || 23.x || 24.x} - - bignumber.js@9.3.1: - resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} - binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - bindings@1.5.0: - resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - - bn.js@4.12.2: - resolution: {integrity: sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==} - - bn.js@5.2.2: - resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} - - bn@1.0.5: - resolution: {integrity: sha512-7TvGbqbZb6lDzsBtNz1VkdXXV0BVmZKPPViPmo2IpvwaryF7P+QKYKACyVkwo2mZPr2CpFiz7EtgPEcc3o/JFQ==} - boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - boolean@3.2.0: - resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==} - deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. - - bottleneck@2.19.5: - resolution: {integrity: sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==} - - bowser@2.11.0: - resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - brorand@1.1.0: - resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} - - browser-resolve@2.0.0: - resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==} - browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - browserify-aes@1.2.0: - resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} - - browserify-cipher@1.0.1: - resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} - - browserify-des@1.0.2: - resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} - - browserify-rsa@4.1.1: - resolution: {integrity: sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==} - engines: {node: '>= 0.10'} - - browserify-sign@4.2.3: - resolution: {integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==} - engines: {node: '>= 0.12'} - - browserify-zlib@0.2.0: - resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} - - browserslist@4.24.5: - resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==} + browserslist@4.25.1: + resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -3312,85 +1901,22 @@ packages: resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} engines: {node: '>=8.0.0'} - buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} - buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - buffer-xor@1.0.3: - resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} - - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} - builtin-status-codes@3.0.0: - resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} - - builtins@5.1.0: - resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==} - - bunyan@1.8.15: - resolution: {integrity: sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==} - engines: {'0': node >=0.10.0} - hasBin: true - - bzip-deflate@1.0.0: - resolution: {integrity: sha512-9RMnpiJqMYMJcLdr4pxwowZ8Zh3P+tVswE/bnX6tZ14UGKNcdV5WVK2P+lGp2As+RCjl+i3SFJ117HyCaaHNDA==} - - cacache@19.0.1: - resolution: {integrity: sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - cacheable-lookup@5.0.4: - resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} - engines: {node: '>=10.6.0'} - - cacheable-request@7.0.4: - resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} - engines: {node: '>=8'} - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - - camelcase-keys@6.2.2: - resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==} - engines: {node: '>=8'} - - camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001718: - resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==} - - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + caniuse-lite@1.0.30001727: + resolution: {integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -3400,24 +1926,14 @@ packages: resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - changelog-filename-regex@2.0.1: - resolution: {integrity: sha512-DZdyJpCprw8V3jp8V2x13nAA05Yy/IN+Prowj+0mrAHNENYkuMtNI4u5m449TTjPqShIslQSEuXee+Jtkn4m+g==} - - char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - - character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} - cheerio@1.0.0: - resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} + cheerio@1.1.0: + resolution: {integrity: sha512-+0hMx9eYhJvWbgpKV9hN7jg0JcwydpopZE4hgi+KvQtByZXPp04NiCWU0LzcAbP63abZckIHkTQaXVF52mX3xQ==} engines: {node: '>=18.17'} chokidar@3.6.0: @@ -3428,13 +1944,6 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - - chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - chownr@3.0.0: resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} engines: {node: '>=18'} @@ -3443,61 +1952,14 @@ packages: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - ci-info@4.3.0: resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==} engines: {node: '>=8'} - cipher-base@1.0.6: - resolution: {integrity: sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==} - engines: {node: '>= 0.10'} - - cjs-module-lexer@1.4.3: - resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} - - clean-git-ref@2.0.1: - resolution: {integrity: sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw==} - - clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - - clean-stack@5.2.0: - resolution: {integrity: sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==} - engines: {node: '>=14.16'} - - cli-cursor@5.0.0: - resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} - engines: {node: '>=18'} - - cli-highlight@2.1.11: - resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} - engines: {node: '>=8.0.0', npm: '>=5.0.0'} - hasBin: true - - cli-table3@0.6.5: - resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} - engines: {node: 10.* || >= 12.*} - - cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} - cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} engines: {node: '>= 12'} - clipanion@4.0.0-rc.4: - resolution: {integrity: sha512-CXkMQxU6s9GklO/1f714dkKBMu1lopS1WFF0B8o4AxPykR1hpozxSiUZ5ZUeBjfPgCWqbcNOtZVFhB8Lkfp1+Q==} - peerDependencies: - typanion: '*' - - cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -3505,9 +1967,6 @@ packages: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} - clone-response@1.0.3: - resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} - clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} @@ -3516,38 +1975,17 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - cluster-key-slot@1.1.2: - resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} - engines: {node: '>=0.10.0'} - - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - - colors@1.4.0: - resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} - engines: {node: '>=0.1.90'} - commander@11.1.0: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} - commander@13.1.0: - resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} - engines: {node: '>=18'} - commander@14.0.0: resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==} engines: {node: '>=20'} @@ -3563,10 +2001,6 @@ packages: resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} engines: {node: ^12.20.0 || >=14} - comment-parser@1.4.1: - resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} - engines: {node: '>= 12.0.0'} - compare-func@2.0.0: resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==} @@ -3577,60 +2011,21 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - config-chain@1.1.13: - resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} - - console-browserify@1.2.0: - resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} - - constants-browserify@1.0.0: - resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} - conventional-changelog-angular@7.0.0: resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} engines: {node: '>=16'} - conventional-changelog-angular@8.0.0: - resolution: {integrity: sha512-CLf+zr6St0wIxos4bmaKHRXWAcsCXrJU6F4VdNDrGRK3B8LDLKoX3zuMV5GhtbGkVR/LohZ6MT6im43vZLSjmA==} - engines: {node: '>=18'} - conventional-changelog-conventionalcommits@7.0.2: resolution: {integrity: sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==} engines: {node: '>=16'} - conventional-changelog-writer@8.2.0: - resolution: {integrity: sha512-Y2aW4596l9AEvFJRwFGJGiQjt2sBYTjPD18DdvxX9Vpz0Z7HQ+g1Z+6iYDAm1vR3QOJrDBkRHixHK/+FhkR6Pw==} - engines: {node: '>=18'} - hasBin: true - - conventional-commits-detector@1.0.3: - resolution: {integrity: sha512-VlBCTEg34Bbvyh7MPYtmgoYPsP69Z1BusmthbiUbzTiwfhLZWRDEWsJHqWyiekSC9vFCHGT/jKOzs8r21MUZ5g==} - engines: {node: '>=6.9.0'} - hasBin: true - - conventional-commits-filter@5.0.0: - resolution: {integrity: sha512-tQMagCOC59EVgNZcC5zl7XqO30Wki9i9J3acbUvkaosCT6JX3EeFwJD7Qqp4MCikRnzS18WXV3BLIQ66ytu6+Q==} - engines: {node: '>=18'} - conventional-commits-parser@5.0.0: resolution: {integrity: sha512-ZPMl0ZJbw74iS9LuX9YIAiW8pfM5p3yh2o/NbXHbkFuZzY5jvdi5jFycEOkmBW5H5I7nA+D6f3UcsCLP2vvSEA==} engines: {node: '>=16'} hasBin: true - conventional-commits-parser@6.2.0: - resolution: {integrity: sha512-uLnoLeIW4XaoFtH37qEcg/SXMJmKF4vi7V0H2rnPueg+VEtFGA/asSCNTcq4M/GQ6QmlzchAEtOoDTtKqWeHag==} - engines: {node: '>=18'} - hasBin: true - - convert-hrtime@5.0.0: - resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==} - engines: {node: '>=12'} - - core-js-pure@3.44.0: - resolution: {integrity: sha512-gvMQAGB4dfVUxpYD0k3Fq8J+n5bB6Ytl15lqlZrOIXFzxOhtPaObfkQGHtMRdyjIf7z2IeNULwi1jEwyS+ltKQ==} - - core-js@3.44.0: - resolution: {integrity: sha512-aFCtd4l6GvAXwVEh3XbbVqJGHDJt0OZRa+5ePGx3LLwi12WfexqQxcsohb2wgsa/92xtl19Hd66G/L+TaAxDMw==} + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -3661,46 +2056,20 @@ packages: resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} engines: {node: '>= 14'} - create-ecdh@4.0.4: - resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} - - create-hash@1.2.0: - resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} - - create-hmac@1.1.7: - resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} - create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - croner@9.1.0: - resolution: {integrity: sha512-p9nwwR4qyT5W996vBZhdvBCnMhicY5ytZkR4D1Xj0wuTDEiMnjwR57Q3RXYY/s0EpX6Ay3vgIcfaR+ewGHsi+g==} - engines: {node: '>=18.0'} - - cronstrue@2.61.0: - resolution: {integrity: sha512-ootN5bvXbIQI9rW94+QsXN5eROtXWwew6NkdGxIRpS/UFWRggL0G5Al7a9GTBFEsuvVhJ2K3CntIIVt7L2ILhA==} - deprecated: Non-backwards compatible Breaking changes - hasBin: true - - cross-env@7.0.3: - resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} - engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + create-wdio@9.18.0: + resolution: {integrity: sha512-udb7Q+0NOAXzb6a+jpHUifNKYZEkFCSxRwl2wW7d76vM/A7aYMcR8+bp9e0I6whV8cTNw5RwvXhBk9OBo+noBw==} + engines: {node: '>=12.0.0'} hasBin: true cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} - crypto-browserify@3.12.1: - resolution: {integrity: sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==} - engines: {node: '>= 0.10'} - - crypto-random-string@4.0.0: - resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} - engines: {node: '>=12'} - - css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} css-shorthand-properties@1.1.2: resolution: {integrity: sha512-C2AugXIpRGQTxaCW0N7n5jD/p5irUmCrwl03TrnMFBHDbdq44CFWR2zO7rK9xPN4Eo3pUxC4vQzQgbIpzrD1PQ==} @@ -3708,30 +2077,13 @@ packages: css-value@0.0.1: resolution: {integrity: sha512-FUV3xaJ63buRLgHrLQVlVgQnQdR4yqdLGaDu7g8CQcWjInDfM9plBTPI9FRfpahju1UBSaMckeb2/46ApS/V1Q==} - css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - - danger@13.0.4: - resolution: {integrity: sha512-IAdQ5nSJyIs4zKj6AN35ixt2B0Ce3WZUm3IFe/CMnL/Op7wV7IGg4D348U0EKNaNPP58QgXbdSk9pM+IXP1QXg==} - engines: {node: '>=18'} - hasBin: true - - dargs@7.0.0: - resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==} - engines: {node: '>=8'} - dargs@8.1.0: resolution: {integrity: sha512-wAV9QHOsNbwnWdNW2FYvE1P56wtgSbM+3SZcdGiWQILwVjACCXDCI3Ai8QlCjMDB8YK5zySiXZYBiwGmNY3lnw==} engines: {node: '>=12'} @@ -3744,26 +2096,6 @@ packages: resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} engines: {node: '>= 14'} - data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} - - data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} - - data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} - - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - debug@4.4.1: resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} @@ -3773,14 +2105,6 @@ packages: supports-color: optional: true - decamelize-keys@1.1.1: - resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} - engines: {node: '>=0.10.0'} - - decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} @@ -3789,61 +2113,17 @@ packages: resolution: {integrity: sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - decode-named-character-reference@1.2.0: - resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} - - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - - deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - deepmerge-ts@7.1.5: resolution: {integrity: sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==} engines: {node: '>=16.0.0'} - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - degenerator@5.0.1: resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} engines: {node: '>= 14'} - deprecation@2.3.1: - resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - des.js@1.1.0: - resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} - - detect-indent@7.0.1: - resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} - engines: {node: '>=12.20'} - detect-libc@1.0.3: resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} engines: {node: '>=0.10'} @@ -3853,19 +2133,6 @@ packages: resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} - detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - - devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - - didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - - diff-sequences@29.6.3: - resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -3874,35 +2141,17 @@ packages: resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} - diff@7.0.0: - resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} - engines: {node: '>=0.3.1'} - diff@8.0.2: resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} engines: {node: '>=0.3.1'} - diffie-hellman@5.0.3: - resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} - dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - - doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} - dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} - domain-browser@4.22.0: - resolution: {integrity: sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==} - engines: {node: '>=10'} - domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} @@ -3917,20 +2166,13 @@ packages: resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==} engines: {node: '>=8'} - dotenv@16.5.0: - resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} - dtrace-provider@0.8.8: - resolution: {integrity: sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==} - engines: {node: '>=0.10'} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - duplexer2@0.1.4: - resolution: {integrity: sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==} + dotenv@17.2.0: + resolution: {integrity: sha512-Q4sgBT60gzd0BB0lSyYD3xM4YxrXA9y4uBDof1JNYGzOXrQdQ6yX+7XIAqoFOGQFOTK1D3Hts5OllpxMDZFONQ==} + engines: {node: '>=12'} eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -3938,9 +2180,6 @@ packages: easy-table@1.2.0: resolution: {integrity: sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==} - ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} - eciesjs@0.4.15: resolution: {integrity: sha512-r6kEJXDKecVOCj2nLMuXK/FCPeurW33+3JRpfXVbjLja3XUYFfD9I/JBreH6sUyzcm3G/YQboBjMla6poKeSdA==} engines: {bun: '>=1', deno: '>=2', node: '>=16'} @@ -3949,32 +2188,18 @@ packages: resolution: {integrity: sha512-sB7vSrDnFa4ezWQk9nZ/n0FdpdUuC6R1EOrlU3DL+bovcNFK28rqu2emmAUjujYEJTWIgQGqgVVWUZXMnc8iWg==} engines: {node: '>=14.0.0'} - edgedriver@6.1.1: - resolution: {integrity: sha512-/dM/PoBf22Xg3yypMWkmRQrBKEnSyNaZ7wHGCT9+qqT14izwtFT+QvdR89rjNkMfXwW+bSFoqOfbcvM+2Cyc7w==} + edgedriver@6.1.2: + resolution: {integrity: sha512-UvFqd/IR81iPyWMcxXbUNi+xKWR7JjfoHjfuwjqsj9UHQKn80RpQmS0jf+U25IPi+gKVPcpOSKm0XkqgGMq4zQ==} engines: {node: '>=18.0.0'} hasBin: true - editorconfig@3.0.1: - resolution: {integrity: sha512-k5NZM2XNIJfH/omUv0SRYaiLae4VRwg1ILW6xLOjuP4AQGAGcvzNij5imJ+m1rbzDIH0ov6EbH53BW96amFXpQ==} - engines: {node: '>=20'} - hasBin: true - ejs@3.1.10: resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.155: - resolution: {integrity: sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==} - - elliptic@6.6.1: - resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} - - email-addresses@5.0.0: - resolution: {integrity: sha512-4OIPYlA6JXqtVn8zpHpGiI7vE6EQOAg16aGnDMIAlZVinnoZ8208tW1hAbjWydgN/4PLTT9q+O1K6AH/vALJGw==} - - emoji-regex@10.4.0: - resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + electron-to-chromium@1.5.187: + resolution: {integrity: sha512-cl5Jc9I0KGUoOoSbxvTywTa40uspGJt/BDBoDLoxJRSBpWh4FFXBsjNRHfQrONsV/OoEjDfHUmZQa2d6Ze4YgA==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -3982,95 +2207,36 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - emojibase-regex@16.0.0: - resolution: {integrity: sha512-ZMp31BkzBWNW+T73of6NURL6nXQa5GkfKneOkr3cEwBDVllbW/2nuva7NO0J3RjaQ07+SZQNgPTGZ4JlIhmM2Q==} - - emojibase@16.0.0: - resolution: {integrity: sha512-Nw2m7JLIO4Ou2X/yZPRNscHQXVbbr6SErjkJ7EooG7MbR3yDZszCv9KTizsXFc7yZl0n3WF+qUKIC/Lw6H9xaQ==} - engines: {node: '>=18.12.0'} - - emojilib@2.4.0: - resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} + encoding-sniffer@0.2.1: + resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} - encoding-sniffer@0.2.0: - resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - - enhanced-resolve@5.18.1: - resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + enhanced-resolve@5.18.2: + resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==} engines: {node: '>=10.13.0'} entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - entities@6.0.0: - resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} - env-ci@11.1.1: - resolution: {integrity: sha512-mT3ks8F0kwpo7SYNds6nWj0PaRh+qJxIeBVBXAKTN9hphAzZv7s0QAZQbqnB1fAv/r4pJUGE15BV9UrS31FP2w==} - engines: {node: ^18.17 || >=20.6.1} - env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} - environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} - - err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es-abstract@1.23.9: - resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} - engines: {node: '>= 0.4'} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-iterator-helpers@1.2.1: - resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} - engines: {node: '>= 0.4'} - es-module-lexer@1.7.0: resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.1.0: - resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} - engines: {node: '>= 0.4'} - - es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} - - es6-error@4.1.1: - resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} - - esbuild@0.25.4: - resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} + esbuild@0.25.6: + resolution: {integrity: sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==} engines: {node: '>=18'} hasBin: true @@ -4078,10 +2244,6 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} @@ -4090,155 +2252,24 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} - escodegen@2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} hasBin: true - eslint-config-prettier@10.1.5: - resolution: {integrity: sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-import-resolver-typescript@4.3.5: - resolution: {integrity: sha512-QGwhLrwn/WGOsdrWvjhm9n8BvKN/Wr41SQERMV7DQ2hm9+Ozas39CyQUxum///l2G2vefQVr7VbIaCFS5h9g5g==} - engines: {node: ^16.17.0 || >=18.6.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - eslint-plugin-import-x: '*' - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true - - eslint-module-utils@2.12.0: - resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - - eslint-plugin-import-x@4.12.2: - resolution: {integrity: sha512-0jVUgJQipbs0yUfLe7LwYD6p8rIGqCysWZdyJFgkPzDyJgiKpuCaXlywKUAWgJ6u1nLpfrdt21B60OUkupyBrQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - - eslint-plugin-import@2.31.0: - resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-jsx-a11y@6.10.2: - resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 - - eslint-plugin-prettier@5.4.0: - resolution: {integrity: sha512-BvQOvUhkVQM1i63iMETK9Hjud9QhqBnbtT1Zc642p9ynzBuCe5pybkOnvqZIBypXmMlsGcnU4HZ8sCTPfpAexA==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - '@types/eslint': '>=8.0.0' - eslint: '>=8.0.0' - eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' - prettier: '>=3.0.0' - peerDependenciesMeta: - '@types/eslint': - optional: true - eslint-config-prettier: - optional: true - - eslint-plugin-react-hooks@5.2.0: - resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - - eslint-plugin-react@7.37.5: - resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - - eslint-plugin-tailwindcss@3.18.0: - resolution: {integrity: sha512-PQDU4ZMzFH0eb2DrfHPpbgo87Zgg2EXSMOj1NSfzdZm+aJzpuwGerfowMIaVehSREEa0idbf/eoNYAOHSJoDAQ==} - engines: {node: '>=18.12.0'} - peerDependencies: - tailwindcss: ^3.4.0 - eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - eslint-scope@8.3.0: - resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - eslint@9.27.0: - resolution: {integrity: sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - hasBin: true - peerDependencies: - jiti: '*' - peerDependenciesMeta: - jiti: - optional: true - esm@3.2.25: resolution: {integrity: sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==} engines: {node: '>=6'} - espree@10.3.0: - resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} - esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -4262,49 +2293,33 @@ packages: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} - eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} - evp_bytestokey@1.0.3: - resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} - execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} - execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - - execa@9.5.3: - resolution: {integrity: sha512-QFNnTvU3UjgWFy8Ef9iDHvIdcgZ344ebkwYx4/KLbR+CKQA4xBaHzv+iRpp86QfMHP8faFQLh8iOc57215y4Rg==} + execa@9.6.0: + resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==} engines: {node: ^18.19.0 || >=20.5.0} - expand-template@2.0.3: - resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} - engines: {node: '>=6'} + exit-hook@4.0.0: + resolution: {integrity: sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==} + engines: {node: '>=18'} - expect-webdriverio@5.1.0: - resolution: {integrity: sha512-4u3q+Dqx/lXNgvCx1gKia4CfS28z1UxGGfVUkoMNbrsBlTBB2fYqXG+4+YtYoerxvp/XPwIb/+89IGEdyPbDXQ==} + expect-webdriverio@5.4.0: + resolution: {integrity: sha512-vI0/xsX20VwkzCBNGjIfhZ6D2fMJiykuYSacjghzTZbOh/LkZQTSSrkZk3fRJZXmzXdr6B/eDTkjm6QqGoe9TA==} engines: {node: '>=18 || >=20 || >=22'} peerDependencies: '@wdio/globals': ^9.0.0 '@wdio/logger': ^9.0.0 webdriverio: ^9.0.0 - expect@29.7.0: - resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - exponential-backoff@3.1.2: - resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + expect@30.0.4: + resolution: {integrity: sha512-dDLGjnP2cKbEppxVICxI/Uf4YemmGMPNy0QytCbfafbpYk9AFQsxb8Uyrxii0RPK7FWgLGlSem+07WirwS3cFQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} external-editor@3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} @@ -4315,18 +2330,12 @@ packages: engines: {node: '>= 10.17.0'} hasBin: true - fast-content-type-parse@3.0.0: - resolution: {integrity: sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==} - fast-deep-equal@2.0.1: resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-diff@1.3.0: - resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} - fast-fifo@1.3.2: resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} @@ -4334,24 +2343,11 @@ packages: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} - fast-json-patch@3.1.1: - resolution: {integrity: sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-uri@3.0.6: resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} - fast-xml-parser@4.4.1: - resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} - hasBin: true - - fast-xml-parser@4.5.3: - resolution: {integrity: sha512-RKihhV+SHsIUGXObeVy9AXiBbFwkVk7Syp8XgwN5U3JV416+Gwp/GO9i0JYKmikykgz/UHRrrV4ROuZEo/T0ig==} + fast-xml-parser@5.2.5: + resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==} hasBin: true fastq@1.19.1: @@ -4360,8 +2356,8 @@ packages: fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - fdir@6.4.4: - resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} + fdir@6.4.6: + resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -4372,27 +2368,10 @@ packages: resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} engines: {node: ^12.20 || >= 14.13} - fflate@0.8.2: - resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} - - figures@2.0.0: - resolution: {integrity: sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==} - engines: {node: '>=4'} - figures@6.1.0: resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} engines: {node: '>=18'} - file-entry-cache@8.0.0: - resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} - engines: {node: '>=16.0.0'} - - file-saver@2.0.5: - resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} - - file-uri-to-path@1.0.0: - resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} - filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} @@ -4400,22 +2379,6 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - find-packages@10.0.4: - resolution: {integrity: sha512-JmO9lEBUEYOiRw/bdbdgFWpGFgBZBGLcK/5GjQKo3ZN+zR6jmQOh9gWyZoqxlQmnldZ9WBWhna0QYyuq6BxvRg==} - engines: {node: '>=14.6'} - - find-up-simple@1.0.1: - resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} - engines: {node: '>=18'} - - find-up@2.1.0: - resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} - engines: {node: '>=4'} - - find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} - find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} @@ -4428,25 +2391,10 @@ packages: resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} engines: {node: '>=18'} - find-versions@6.0.0: - resolution: {integrity: sha512-2kCCtc+JvcZ86IGAz3Z2Y0A1baIz9fL31pH/0S1IqZr9Iwnjq8izfPtrCyQKO6TLMPELLsQMre7VDqeIKCsHkA==} - engines: {node: '>=18'} - - flat-cache@4.0.1: - resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} - engines: {node: '>=16'} - flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - flatted@3.3.3: - resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - - for-each@0.3.5: - resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} - engines: {node: '>= 0.4'} - foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} @@ -4455,30 +2403,9 @@ packages: resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} engines: {node: '>=12.20.0'} - forwarded-parse@2.1.2: - resolution: {integrity: sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==} - fraction.js@4.3.7: resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - from2@2.3.0: - resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==} - - fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - - fs-extra@11.3.0: - resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} - engines: {node: '>=14.14'} - - fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} - - fs-minipass@3.0.3: - resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} @@ -4487,69 +2414,23 @@ packages: engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function-timeout@1.0.2: - resolution: {integrity: sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==} - engines: {node: '>=18'} - - function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - gaxios@6.7.1: - resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} - engines: {node: '>=14'} - - gaxios@7.1.1: - resolution: {integrity: sha512-Odju3uBUJyVCkW64nLD4wKLhbh93bh6vIg/ZIXkWiLPBrdgtc65+tls/qml+un3pr6JqYVFDZbbmLDQT68rTOQ==} - engines: {node: '>=18'} - - gcp-metadata@6.1.1: - resolution: {integrity: sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==} - engines: {node: '>=14'} - - gcp-metadata@7.0.1: - resolution: {integrity: sha512-UcO3kefx6dCcZkgcTGgVOTFb7b1LlQ02hY1omMjjrrBzkajRMCFgYOjs7J71WqnuG1k2b+9ppGL7FsOfhZMQKQ==} - engines: {node: '>=18'} - geckodriver@5.0.0: resolution: {integrity: sha512-vn7TtQ3b9VMJtVXsyWtQQl1fyBVFhQy7UvJF96kPuuJ0or5THH496AD3eUyaDD11+EqCxH9t6V+EP9soZQk4YQ==} engines: {node: '>=18.0.0'} hasBin: true - generic-pool@3.9.0: - resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==} - engines: {node: '>= 4'} + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.3.0: - resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} - engines: {node: '>=18'} - - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - get-port@7.1.0: resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} engines: {node: '>=16'} - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - get-stdin@6.0.0: - resolution: {integrity: sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==} - engines: {node: '>=4'} - get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} @@ -4558,66 +2439,26 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-stream@7.0.1: - resolution: {integrity: sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==} - engines: {node: '>=16'} - - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - get-stream@9.0.1: resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} engines: {node: '>=18'} - get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} - get-tsconfig@4.10.1: resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} - get-uri@6.0.4: - resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} + get-uri@6.0.5: + resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} engines: {node: '>= 14'} - git-log-parser@1.2.1: - resolution: {integrity: sha512-PI+sPDvHXNPl5WNOErAK05s3j0lgwUzMN6o8cyQrDaKfT3qd7TmNJKeXX+SknI5I0QhG5fVPAEwSY4tRGDtYoQ==} - - git-raw-commits@2.0.11: - resolution: {integrity: sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==} - engines: {node: '>=10'} - hasBin: true - git-raw-commits@4.0.0: resolution: {integrity: sha512-ICsMM1Wk8xSGMowkOmPrzo2Fgmfo4bMHLNX6ytHjajRJUqvHOw/TFapQ+QG75c3X/tTDDhOSRPGC52dDbNM8FQ==} engines: {node: '>=16'} hasBin: true - git-secrets@0.0.11: - resolution: {integrity: sha512-In84SDEgz7BVLzPMEO6Go4IGZ0ZKPUIdcY09+Fl6Q45gaHbP8OdN+uQ88QbVL3k1qUsizb9Ijo/80YtBvaaqnA==} - hasBin: true - - git-up@8.1.1: - resolution: {integrity: sha512-FDenSF3fVqBYSaJoYy1KSc2wosx0gCvKP+c+PRBht7cAaiCeQlBtfBDX9vgnNOHmdePlSFITVcn4pFfcgNvx3g==} - - git-url-parse@16.1.0: - resolution: {integrity: sha512-cPLz4HuK86wClEW7iDdeAKcCVlWXmrLpb2L+G9goW0Z1dtpNS6BXXSOckUTlJT/LDQViE1QZKstNORzHsLnobw==} - - github-from-package@0.0.0: - resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} - - github-url-from-git@1.5.0: - resolution: {integrity: sha512-WWOec4aRI7YAykQ9+BHmzjyNlkfJFG8QLXnDTsLz/kZefq7qkzdfo4p6fkYYMIq1aj+gZcQs/1HQhQh3DPPxlQ==} - glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - glob-to-regexp@0.4.1: resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} @@ -4625,168 +2466,38 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true - glob@11.0.2: - resolution: {integrity: sha512-YT7U7Vye+t5fZ/QMkBFrTJ7ZQxInIUjwyAjVj84CYXqgBdv30MFUPGnBR6sQaVq6Is15wYJUsnzTuWaGRBhBAQ==} - engines: {node: 20 || >=22} - hasBin: true - glob@11.0.3: resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==} engines: {node: 20 || >=22} hasBin: true - glob@6.0.4: - resolution: {integrity: sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==} - deprecated: Glob versions prior to v9 are no longer supported - glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} deprecated: Glob versions prior to v9 are no longer supported - global-agent@3.0.0: - resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==} - engines: {node: '>=10.0'} - global-directory@4.0.1: resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} engines: {node: '>=18'} - globals@14.0.0: - resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} - engines: {node: '>=18'} - - globals@16.1.0: - resolution: {integrity: sha512-aibexHNbb/jiUSObBgpHLj+sIuUmJnYcgXBlrfsiDZ9rt4aF2TFRbyLgZ2iFQuVZ1K5Mx3FVkbKRSgKrbK3K2g==} - engines: {node: '>=18'} - - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - globby@14.1.0: - resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} - engines: {node: '>=18'} - - good-enough-parser@1.1.23: - resolution: {integrity: sha512-QUcQZutczESpdo2w9BMG6VpLFoq9ix7ER5HLM1mAdZdri2F3eISkCb8ep84W6YOo0grYWJdyT/8JkYqGjQfSSQ==} - engines: {node: '>=18.12.0', yarn: ^1.17.0} - - google-auth-library@10.1.0: - resolution: {integrity: sha512-GspVjZj1RbyRWpQ9FbAXMKjFGzZwDKnUHi66JJ+tcjcu5/xYAP1pdlWotCuIkMwjfVsxxDvsGZXGLzRt72D0sQ==} - engines: {node: '>=18'} - - google-logging-utils@0.0.2: - resolution: {integrity: sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==} - engines: {node: '>=14'} - - google-logging-utils@1.1.1: - resolution: {integrity: sha512-rcX58I7nqpu4mbKztFeOAObbomBbHU2oIb/d3tJfF3dizGSApqtSwYJigGCooHdnMyQBIw8BrWyK96w3YXgr6A==} - engines: {node: '>=14'} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - got@11.8.6: - resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} - engines: {node: '>=10.19.0'} - - graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graph-data-structure@4.5.0: - resolution: {integrity: sha512-OCeIzpK9JnV5js4gtDJgwebRbcOsZpoN9CNIwEooHkV/FNol+OykWPOugSTXBH/QICEW2N6U+6L2d9DcK4YBcw==} - grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - gtoken@8.0.0: - resolution: {integrity: sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==} - engines: {node: '>=18'} - - handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - hasBin: true - - hard-rejection@2.1.0: - resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} - engines: {node: '>=6'} - - has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - - has-flag@2.0.0: - resolution: {integrity: sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==} - engines: {node: '>=0.10.0'} - - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} - - hash-base@3.0.5: - resolution: {integrity: sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==} - engines: {node: '>= 0.10'} - - hash.js@1.1.7: - resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true - highlight.js@10.7.3: - resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} - - hmac-drbg@1.0.1: - resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} - - hook-std@3.0.0: - resolution: {integrity: sha512-jHRQzjSDzMtFy34AGj1DN+vq54WVuhSvKgrHf0OMiFQTwDD4L/qqofVEWjLOBMTn5+lCD3fPg32W9yOfnEJTTw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - - hosted-git-info@4.1.0: - resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} - engines: {node: '>=10'} - hosted-git-info@7.0.2: resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} engines: {node: ^16.14.0 || >=18.0.0} @@ -4795,38 +2506,16 @@ packages: resolution: {integrity: sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==} engines: {node: ^18.17.0 || >=20.5.0} - hpagent@1.2.0: - resolution: {integrity: sha512-A91dYTeIB6NoXG+PxTQpCCDDnfHsW9kc06Lvpu1TEe9gnd6ZFeiBoRO9JvzEv6xK7EX97/dUE8g/vBMTqTS3CA==} - engines: {node: '>=14'} - - htmlfy@0.6.7: - resolution: {integrity: sha512-r8hRd+oIM10lufovN+zr3VKPTYEIvIwqXGucidh2XQufmiw6sbUXFUFjWlfjo3AnefIDTyzykVzQ8IUVuT1peQ==} - - htmlparser2@9.1.0: - resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + htmlfy@0.8.1: + resolution: {integrity: sha512-xWROBw9+MEGwxpotll0h672KCaLrKKiCYzsyN8ZgL9cQbVumFnyvsk2JqiB9ELAV1GLj1GG/jxZUjV9OZZi/yQ==} - http-cache-semantics@4.2.0: - resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} - - http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} + htmlparser2@10.0.0: + resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} http-proxy-agent@7.0.2: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} - http2-wrapper@1.0.3: - resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} - engines: {node: '>=10.19.0'} - - https-browserify@1.0.0: - resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} - - https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - https-proxy-agent@7.0.6: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} @@ -4835,41 +2524,10 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - human-signals@8.0.1: resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} engines: {node: '>=18.18.0'} - humanize-ms@1.2.1: - resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} - - husky@9.1.7: - resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} - engines: {node: '>=18'} - hasBin: true - - hyperlinker@1.0.0: - resolution: {integrity: sha512-Ty8UblRWFEcfSuIaajM34LdPXIhbs1ajEX/BBPv24J+enSVaEVY63xQ6lTO9VRYS5LAoghIG0IDJ+p+IPzKUQQ==} - engines: {node: '>=4'} - - iced-error@0.0.13: - resolution: {integrity: sha512-yEEaG8QfyyRL0SsbNNDw3rVgTyqwHFMCuV6jDvD43f/2shmdaFXkqvFLGhDlsYNSolzYHwVLM/CrXt9GygYopA==} - - iced-lock@1.1.0: - resolution: {integrity: sha512-J9UMVitgTMYrkUil5EB9/Q4BPWiMpFH156yjDlmMoMRKs3s3PnXj/6G0UlzIOGnNi5JVNk/zVYLXVnuo+1QnqQ==} - - iced-lock@2.0.1: - resolution: {integrity: sha512-J6dnGMpAoHNyACUYJYhiJkLY7YFRTa7NMZ8ZygpYB3HNDOGWtzv55+kT2u1zItRi4Y1EXruG9d1VDsx8R5faTw==} - - iced-runtime-3@3.0.5: - resolution: {integrity: sha512-OHU64z4Njq4EdoGyRId5NgUQKy6R1sr1wufc1fVxwpqKsM8yWagqmKCRlt//zKKIPOfZw7kQ1iN4m+/2s8WSeg==} - - iced-runtime@1.0.4: - resolution: {integrity: sha512-rgiJXNF6ZgF2Clh/TKUlBDW3q51YPDJUXmxGQXx1b8tbZpVpTn+1RX9q1sjNkujXIIaVxZByQzPHHORg7KV51g==} - iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -4888,50 +2546,19 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.4: - resolution: {integrity: sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==} - engines: {node: '>= 4'} - - ignore@7.0.5: - resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} - engines: {node: '>= 4'} - immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - immutable@5.1.2: - resolution: {integrity: sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ==} + immutable@5.1.3: + resolution: {integrity: sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==} import-fresh@3.3.1: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} - import-from-esm@2.0.0: - resolution: {integrity: sha512-YVt14UZCgsX1vZQ3gKjkWVdBdHQ6eu3MPU1TBgL1H5orXe2+jWD006WCPPtOuwlQm10NuzOW5WawiF1Q9veW8g==} - engines: {node: '>=18.20'} - - import-in-the-middle@1.14.2: - resolution: {integrity: sha512-5tCuY9BV8ujfOpwtAGgsTx9CGUapcFMEEyByLv1B+v2+6DhAcw+Zr0nhQT7uwaZ7DiourxFEscghOR8e1aPLQw==} - import-meta-resolve@4.1.0: resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - - indent-string@5.0.0: - resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} - engines: {node: '>=12'} - - index-to-position@1.1.0: - resolution: {integrity: sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==} - engines: {node: '>=18'} - inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. @@ -4939,123 +2566,42 @@ packages: inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - ini@4.1.1: resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - ini@5.0.0: - resolution: {integrity: sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==} - engines: {node: ^18.17.0 || >=20.5.0} - - inquirer@11.1.0: - resolution: {integrity: sha512-CmLAZT65GG/v30c+D2Fk8+ceP6pxD6RL+hIUOWAltCmeyEqWYwqu9v76q03OvjyZ3AB0C1Ala2stn1z/rMqGEw==} + inquirer@12.7.0: + resolution: {integrity: sha512-KKFRc++IONSyE2UYw9CJ1V0IWx5yQKomwB+pp3cWomWs+v2+ZsG11G2OVfAjFS6WWCppKw+RfKmpqGfSzD5QBQ==} engines: {node: '>=18'} - - install-artifact-from-github@1.4.0: - resolution: {integrity: sha512-+y6WywKZREw5rq7U2jvr2nmZpT7cbWbQQ0N/qfcseYnzHFz2cZz1Et52oY+XttYuYeTkI8Y+R2JNWj68MpQFSg==} - hasBin: true - - internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} - - into-stream@7.0.0: - resolution: {integrity: sha512-2dYz766i9HprMBasCMvHMuazJ7u4WzhJwo5kb3iPSiW/iRYV6uPari3zHoqZlnuaR7V1bEiNMxikhp37rdBXbw==} - engines: {node: '>=12'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true ip-address@9.0.5: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} engines: {node: '>= 12'} - is-arguments@1.2.0: - resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} - engines: {node: '>= 0.4'} - - is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} - is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-async-function@2.1.1: - resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} - engines: {node: '>= 0.4'} - - is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} - is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-boolean-object@1.2.2: - resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} - engines: {node: '>= 0.4'} - - is-bun-module@2.0.0: - resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} - - is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - - is-fullwidth-code-point@5.0.0: - resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} - engines: {node: '>=18'} - - is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} - engines: {node: '>= 0.4'} - is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - - is-nan@1.3.2: - resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} - engines: {node: '>= 0.4'} - - is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} - is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -5064,10 +2610,6 @@ packages: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} - is-plain-obj@1.1.0: - resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} - engines: {node: '>=0.10.0'} - is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} @@ -5076,52 +2618,18 @@ packages: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} - - is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - - is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} - - is-ssh@1.4.1: - resolution: {integrity: sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==} - is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-stream@4.0.1: resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} engines: {node: '>=18'} - is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} - - is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} - is-text-path@2.0.0: resolution: {integrity: sha512-+oDTluR6WEjdXEJMnC2z6A4FRwFoYuvShVVEGsS7ewc0UTi2QtAKMDJuL4BDEVt+5T7MjFo12RP8ghOM75oKJw==} engines: {node: '>=8'} - is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} - - is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} @@ -5130,28 +2638,9 @@ packages: resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} - is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - - is-weakref@1.1.1: - resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} - engines: {node: '>= 0.4'} - - is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} - - is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -5159,25 +2648,9 @@ packages: resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} engines: {node: '>=16'} - isomorphic-timers-promises@1.0.1: - resolution: {integrity: sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==} - engines: {node: '>=10'} - - issue-parser@7.0.1: - resolution: {integrity: sha512-3YZcUUR2Wt1WsapF+S/WiA2WmlW0cWAoPccMqne7AxEBhCdFeTPjfv/Axb8V2gyCgY3nRw+ksZ3xSUX+R47iAg==} - engines: {node: ^18.17 || >=20.6.1} - - iterator.prototype@1.1.5: - resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} - engines: {node: '>= 0.4'} - jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jackspeak@4.1.0: - resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==} - engines: {node: 20 || >=22} - jackspeak@4.1.1: resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} engines: {node: 20 || >=22} @@ -5187,52 +2660,41 @@ packages: engines: {node: '>=10'} hasBin: true - java-properties@1.0.2: - resolution: {integrity: sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==} - engines: {node: '>= 0.6.0'} + jest-diff@30.0.4: + resolution: {integrity: sha512-TSjceIf6797jyd+R64NXqicttROD+Qf98fex7CowmlSn7f8+En0da1Dglwr1AXxDtVizoxXYZBlUQwNhoOXkNw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-diff@29.7.0: - resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-matcher-utils@30.0.4: + resolution: {integrity: sha512-ubCewJ54YzeAZ2JeHHGVoU+eDIpQFsfPQs0xURPWoNiO42LGJ+QGgfSf+hFIRplkZDkhH5MOvuxHKXRTUU3dUQ==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-get-type@29.6.3: - resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-message-util@30.0.2: + resolution: {integrity: sha512-vXywcxmr0SsKXF/bAD7t7nMamRvPuJkras00gqYeB1V0WllxZrbZ0paRr3XqpFU2sYYjD0qAaG2fRyn/CGZ0aw==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-matcher-utils@29.7.0: - resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-mock@30.0.2: + resolution: {integrity: sha512-PnZOHmqup/9cT/y+pXIVbbi8ID6U1XHRmbvR7MvUy4SLqhCbwpkmXhLbsWbGewHrV5x/1bF7YDjs+x24/QSvFA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-message-util@29.7.0: - resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-regex-util@30.0.1: + resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} - jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-util@30.0.2: + resolution: {integrity: sha512-8IyqfKS4MqprBuUpZNlFB5l+WFehc8bfCe1HSZFHzft2mOuND8Cvi9r1musli+u6F3TqanCZ/Ik4H4pXUolZIg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} jest-worker@27.5.1: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} - jiti@1.21.7: - resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} - hasBin: true - jiti@2.4.2: resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} hasBin: true - js-md4@0.3.2: - resolution: {integrity: sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==} - js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -5240,17 +2702,10 @@ packages: jsbn@1.1.0: resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - json-bigint@1.0.0: - resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-dup-key-validator@1.0.3: - resolution: {integrity: sha512-JvJcV01JSiO7LRz7DY1Fpzn4wX2rJ3dfNTiAfnlvLNdhhnm0Pgdvhi2SGpENrZn7eSg26Ps3TPhOcuD/a4STXQ==} - - json-parse-better-errors@1.0.2: - resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -5259,112 +2714,91 @@ packages: resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json-stringify-pretty-compact@4.0.0: - resolution: {integrity: sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==} - - json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true - jsonata@2.0.6: - resolution: {integrity: sha512-WhQB5tXQ32qjkx2GYHFw2XbL90u+LLzjofAYwi+86g6SyZeXHz9F1Q0amy3dWRYczshOC3Haok9J4pOCgHtwyQ==} - engines: {node: '>= 8'} - - jsonc-parser@3.3.1: - resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} - - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} - jsonpointer@5.0.1: - resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} - engines: {node: '>=0.10.0'} - - jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} - engines: {node: '>=12', npm: '>=6'} - - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - jszip@3.10.1: resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} - jwa@1.4.2: - resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} - - jwa@2.0.1: - resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} - - jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} - - jws@4.0.0: - resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} - keybase-ecurve@1.0.1: - resolution: {integrity: sha512-2GlVxDsNF+52LtYjgFsjoKuN7MQQgiVeR4HRdJxLuN8fm4mf4stGKPUjDJjky15c/98UsZseLjp7Ih5X0Sy1jQ==} + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} - keybase-nacl@1.1.4: - resolution: {integrity: sha512-7TFyWLq42CQs7JES9arR+Vnv/eMk5D6JT1Y8samrEA5ff3FOmaiRcXIVrwJQd3KJduxmSjgAjdkXlQK7Q437xQ==} + lightningcss-darwin-arm64@1.30.1: + resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + lightningcss-darwin-x64@1.30.1: + resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} + lightningcss-freebsd-x64@1.30.1: + resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] - klona@2.0.6: - resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} - engines: {node: '>= 8'} + lightningcss-linux-arm-gnueabihf@1.30.1: + resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] - language-subtag-registry@0.3.23: - resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + lightningcss-linux-arm64-gnu@1.30.1: + resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] - language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} + lightningcss-linux-arm64-musl@1.30.1: + resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] - lazystream@1.0.1: - resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} - engines: {node: '>= 0.6.3'} + lightningcss-linux-x64-gnu@1.30.1: + resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + lightningcss-linux-x64-musl@1.30.1: + resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] - lie@3.1.1: - resolution: {integrity: sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==} + lightningcss-win32-arm64-msvc@1.30.1: + resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] - lie@3.3.0: - resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + lightningcss-win32-x64-msvc@1.30.1: + resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} + lightningcss@1.30.1: + resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} + engines: {node: '>= 12.0.0'} lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -5373,22 +2807,6 @@ packages: resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - linkify-it@5.0.0: - resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - - lint-staged@16.0.0: - resolution: {integrity: sha512-sUCprePs6/rbx4vKC60Hez6X10HPkpDJaGcy3D1NdwR7g1RcNkWL8q9mJMreOqmHBTs+1sNFp+wOiX9fr+hoOQ==} - engines: {node: '>=20.18'} - hasBin: true - - listr2@8.3.3: - resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==} - engines: {node: '>=18.0.0'} - - load-json-file@4.0.0: - resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} - engines: {node: '>=4'} - loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} @@ -5397,20 +2815,9 @@ packages: resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} engines: {node: '>= 12.13.0'} - localforage@1.10.0: - resolution: {integrity: sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==} - locate-app@2.5.0: resolution: {integrity: sha512-xIqbzPMBYArJRmPGUZD9CzV9wOqmVtQnaAn3wrj3s6WYW0bQvPI7x+sPYUGmDTYMHefVK//zc6HEYZ1qnxIK+Q==} - locate-path@2.0.0: - resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} - engines: {node: '>=4'} - - locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} - locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} @@ -5419,73 +2826,31 @@ packages: resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - lodash-es@4.17.21: - resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} - lodash.camelcase@4.3.0: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - lodash.capitalize@4.2.1: - resolution: {integrity: sha512-kZzYOKspf8XVX5AvmQF94gQW0lejFVgb80G85bU4ZWzoJ6C03PQg3coYAUpSTpQWelrZELd3XWgHzw4Ck5kaIw==} - lodash.clonedeep@4.5.0: resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} - lodash.escaperegexp@4.1.2: - resolution: {integrity: sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==} - - lodash.find@4.6.0: - resolution: {integrity: sha512-yaRZoAV3Xq28F1iafWN1+a0rflOej93l1DQUejs3SZ41h2O9UJBoS9aueGjPDgAl4B6tPC0NuuchLKaDQQ3Isg==} - lodash.flattendeep@4.4.0: resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} - lodash.includes@4.3.0: - resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} - - lodash.isboolean@3.0.3: - resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} - lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. - lodash.isinteger@4.0.4: - resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} - - lodash.isnumber@3.0.3: - resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} - - lodash.isobject@3.0.2: - resolution: {integrity: sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==} - lodash.isplainobject@4.0.6: resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - lodash.isstring@4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - lodash.kebabcase@4.1.1: resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - lodash.keys@4.2.0: - resolution: {integrity: sha512-J79MkJcp7Df5mizHiVNpjoHXLi4HLjh9VLS/M7lQSGoQ+0oQ+lWEigREkqKyizPB1IawvQLLKY8mzEcm1tkyxQ==} - - lodash.mapvalues@4.6.0: - resolution: {integrity: sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==} - - lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} lodash.mergewith@4.6.2: resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} - lodash.once@4.1.1: - resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - lodash.pickby@4.6.0: resolution: {integrity: sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q==} @@ -5501,9 +2866,6 @@ packages: lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - lodash.uniqby@4.7.0: - resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==} - lodash.upperfirst@4.3.1: resolution: {integrity: sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==} @@ -5517,10 +2879,6 @@ packages: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} - log-update@6.1.0: - resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} - engines: {node: '>=18'} - loglevel-plugin-prefix@0.8.4: resolution: {integrity: sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==} @@ -5528,20 +2886,6 @@ packages: resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} engines: {node: '>= 0.6.0'} - long@5.3.2: - resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} - - longest-streak@3.1.0: - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - lowercase-keys@2.0.0: - resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} - engines: {node: '>=8'} - lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} @@ -5549,105 +2893,23 @@ packages: resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} engines: {node: 20 || >=22} - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} lru-cache@7.18.3: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - lunr@2.3.9: - resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} - - luxon@3.6.1: - resolution: {integrity: sha512-tJLxrKJhO2ukZ5z0gyjY1zPh3Rh88Ej9P7jNrZiHMUXHae1yvI2imgOZtL1TO8TW6biMMKfTtAOoEJANgtWBMQ==} - engines: {node: '>=12'} - magic-string@0.30.17: resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - make-fetch-happen@14.0.3: - resolution: {integrity: sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - map-obj@1.0.1: - resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==} - engines: {node: '>=0.10.0'} - - map-obj@4.3.0: - resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==} - engines: {node: '>=8'} - - markdown-it@14.1.0: - resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} - hasBin: true - - markdown-table@3.0.4: - resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - - marked-terminal@7.3.0: - resolution: {integrity: sha512-t4rBvPsHc57uE/2nJOLmMbZCQ4tgAccAED3ngXQqW6g+TxA488JzJ+FK3lQkzBQOI1mRV/r/Kq+1ZlJ4D0owQw==} - engines: {node: '>=16.0.0'} - peerDependencies: - marked: '>=1 <16' - - marked@15.0.12: - resolution: {integrity: sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==} - engines: {node: '>= 18'} - hasBin: true - - matcher@3.0.0: - resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==} - engines: {node: '>=10'} - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - md5.js@1.3.5: - resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} - - mdast-util-find-and-replace@3.0.2: - resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} - - mdast-util-from-markdown@2.0.2: - resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} - - mdast-util-phrasing@4.1.0: - resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} - - mdast-util-to-markdown@2.1.2: - resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} - - mdast-util-to-string@4.0.0: - resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - - mdurl@2.0.0: - resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} - - memfs-or-file-map-to-github-branch@1.3.0: - resolution: {integrity: sha512-AzgIEodmt51dgwB3TmihTf1Fh2SmszdZskC6trFHy4v71R5shLmdjJSYI7ocVfFa7C/TE6ncb0OZ9eBg2rmkBQ==} - meow@12.1.1: resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} engines: {node: '>=16.10'} - meow@13.2.0: - resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} - engines: {node: '>=18'} - - meow@7.1.1: - resolution: {integrity: sha512-GWHvA5QOcS412WCo8vwKDlTelGLsCGBVevQB5Kva961rmNfun0PCbv5+xta2kUMFJyR8/oWnn7ddeKdosbAPbA==} - engines: {node: '>=10'} - - meow@8.1.2: - resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} - engines: {node: '>=10'} - merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -5655,77 +2917,10 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - micromark-core-commonmark@2.0.3: - resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} - - micromark-factory-destination@2.0.1: - resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} - - micromark-factory-label@2.0.1: - resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} - - micromark-factory-space@2.0.1: - resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} - - micromark-factory-title@2.0.1: - resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} - - micromark-factory-whitespace@2.0.1: - resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} - - micromark-util-character@2.1.1: - resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} - - micromark-util-chunked@2.0.1: - resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} - - micromark-util-classify-character@2.0.1: - resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} - - micromark-util-combine-extensions@2.0.1: - resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} - - micromark-util-decode-numeric-character-reference@2.0.2: - resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} - - micromark-util-decode-string@2.0.1: - resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} - - micromark-util-encode@2.0.1: - resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} - - micromark-util-html-tag-name@2.0.1: - resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} - - micromark-util-normalize-identifier@2.0.1: - resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} - - micromark-util-resolve-all@2.0.1: - resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} - - micromark-util-sanitize-uri@2.0.1: - resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} - - micromark-util-subtokenize@2.1.0: - resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} - - micromark-util-symbol@2.0.1: - resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} - - micromark-util-types@2.0.2: - resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} - - micromark@4.0.2: - resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} - micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} - miller-rabin@4.0.1: - resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} - hasBin: true - mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -5734,45 +2929,10 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mime@4.0.7: - resolution: {integrity: sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ==} - engines: {node: '>=16'} - hasBin: true - mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - - mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} - engines: {node: '>=18'} - - mimic-response@1.0.1: - resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} - engines: {node: '>=4'} - - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - - minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - - minimalistic-crypto-utils@1.0.1: - resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - - minimatch@10.0.1: - resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} - engines: {node: 20 || >=22} - minimatch@10.0.3: resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} engines: {node: 20 || >=22} @@ -5788,64 +2948,19 @@ packages: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} - minimist-options@4.1.0: - resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} - engines: {node: '>= 6'} - minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass-collect@2.0.1: - resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - minipass-fetch@4.0.1: - resolution: {integrity: sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==} - engines: {node: ^18.17.0 || >=20.5.0} + minizlib@3.0.2: + resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} + engines: {node: '>= 18'} - minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} - - minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} - - minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} - - minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} - - minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - - minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - - minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - - minizlib@3.0.2: - resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} - engines: {node: '>= 18'} - - mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - - mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} @@ -5857,18 +2972,6 @@ packages: engines: {node: '>= 14.0.0'} hasBin: true - module-details-from-path@1.0.4: - resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} - - moment@2.30.1: - resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} - - moo@0.5.2: - resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} - - more-entropy@0.0.7: - resolution: {integrity: sha512-e0TxQtU1F6/ZA8WnEA2JLQwwDqBTtZFLJSW7rWgUsQou35wx1IOL0g2O7q7oGoMgIJto+jHMnNGHLfSiylHRrw==} - mrmime@1.0.1: resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} engines: {node: '>=10'} @@ -5876,18 +2979,10 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mute-stream@1.0.0: - resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - mute-stream@2.0.0: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} - mv@2.1.1: - resolution: {integrity: sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==} - engines: {node: '>=0.8.0'} - mylas@2.1.13: resolution: {integrity: sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==} engines: {node: '>=12.0.0'} @@ -5895,119 +2990,41 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nan@2.23.0: - resolution: {integrity: sha512-1UxuyYGdoQHcGg87Lkqm3FzefucTa0NAiOcuRsDmysep3c1LVCRK2krrUDafMWtjSG04htvAmvg96+SDknOmgQ==} - - nano-spawn@1.0.2: - resolution: {integrity: sha512-21t+ozMQDAL/UGgQVBbZ/xXvNO10++ZPuTmKRO8k9V3AClVRht49ahtDjfY8l1q6nSHOrE5ASfthzH3ol6R/hg==} - engines: {node: '>=20.17'} - nanoid@3.3.11: resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.1.5: - resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==} - engines: {node: ^18 || >=20} - hasBin: true - - napi-build-utils@2.0.0: - resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} - - napi-postinstall@0.2.4: - resolution: {integrity: sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - hasBin: true - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - ncp@2.0.0: - resolution: {integrity: sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==} - hasBin: true - - negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} - neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - neotraverse@0.6.18: - resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==} - engines: {node: '>= 10'} - - nerf-dart@1.0.0: - resolution: {integrity: sha512-EZSPZB70jiVsivaBLYDCyntd5eH8NTSMOn3rB+HxwdmKThGELLdYv8qVIMWvZEFy9w8ZZpW9h9OB32l1rGtj7g==} - netmask@2.0.2: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} - node-abi@3.75.0: - resolution: {integrity: sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==} - engines: {node: '>=10'} - node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - node-cleanup@2.1.2: - resolution: {integrity: sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==} - node-domexception@1.0.0: resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} engines: {node: '>=10.5.0'} deprecated: Use your platform's native DOMException instead - node-emoji@2.2.0: - resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} - engines: {node: '>=18'} - - node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - node-fetch@3.3.2: resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - node-gyp@11.2.0: - resolution: {integrity: sha512-T0S1zqskVUSxcsSTkAsLc7xCycrRYmtDHadDinzocrThjyQCn5kMlEBSj6H4qDbgsIOSLmmlRIeb0lZXj+UArA==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - - node-html-parser@7.0.1: - resolution: {integrity: sha512-KGtmPY2kS0thCWGK0VuPyOS+pBKhhe8gXztzA2ilAOhbUbxa9homF1bOyKvhGzMLXUoRds9IOmr/v5lr/lqNmA==} - node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - node-stdlib-browser@1.3.1: - resolution: {integrity: sha512-X75ZN8DCLftGM5iKwoYLA3rjnrAEs97MkzvSd4q2746Tgpg8b8XWiBGiBG4ZpgcAqBgtgPHTiAc8ZMCvZuikDw==} - engines: {node: '>=10'} - - nopt@8.1.0: - resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - - normalize-package-data@3.0.3: - resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==} - engines: {node: '>=10'} - normalize-package-data@6.0.2: resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} engines: {node: ^16.14.0 || >=18.0.0} + normalize-package-data@7.0.0: + resolution: {integrity: sha512-k6U0gKRIuNCTkwHGZqblCfLfBRh+w1vI6tBo+IeJwq2M8FUiOqhX7GH+GArQGScA7azd1WfyRCvxoXDO3hQDIA==} + engines: {node: ^18.17.0 || >=20.5.0} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -6016,100 +3033,14 @@ packages: resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} engines: {node: '>=0.10.0'} - normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - - normalize-url@8.0.2: - resolution: {integrity: sha512-Ee/R3SyN4BuynXcnTaekmaVdbDAEiNrHqjQIA37mHU8G9pf7aaAD4ZX3XjBLo6rsdcxA/gtkcNYZLt30ACgynw==} - engines: {node: '>=14.16'} - npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - npm-run-path@6.0.0: resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} engines: {node: '>=18'} - npm@10.9.3: - resolution: {integrity: sha512-6Eh1u5Q+kIVXeA8e7l2c/HpnFFcwrkt37xDMujD5be1gloWa9p6j3Fsv3mByXXmqJHy+2cElRMML8opNT7xIJQ==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - bundledDependencies: - - '@isaacs/string-locale-compare' - - '@npmcli/arborist' - - '@npmcli/config' - - '@npmcli/fs' - - '@npmcli/map-workspaces' - - '@npmcli/package-json' - - '@npmcli/promise-spawn' - - '@npmcli/redact' - - '@npmcli/run-script' - - '@sigstore/tuf' - - abbrev - - archy - - cacache - - chalk - - ci-info - - cli-columns - - fastest-levenshtein - - fs-minipass - - glob - - graceful-fs - - hosted-git-info - - ini - - init-package-json - - is-cidr - - json-parse-even-better-errors - - libnpmaccess - - libnpmdiff - - libnpmexec - - libnpmfund - - libnpmhook - - libnpmorg - - libnpmpack - - libnpmpublish - - libnpmsearch - - libnpmteam - - libnpmversion - - make-fetch-happen - - minimatch - - minipass - - minipass-pipeline - - ms - - node-gyp - - nopt - - normalize-package-data - - npm-audit-report - - npm-install-checks - - npm-package-arg - - npm-pick-manifest - - npm-profile - - npm-registry-fetch - - npm-user-validate - - p-map - - pacote - - parse-conflict-json - - proc-log - - qrcode-terminal - - read - - semver - - spdx-expression-parse - - ssri - - supports-color - - tar - - text-table - - tiny-relative-date - - treeverse - - validate-npm-package-name - - which - - write-file-atomic - nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} @@ -6117,46 +3048,14 @@ packages: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} - object-is@1.1.6: - resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - object-treeify@1.1.33: resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} engines: {node: '>= 10'} - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - object.entries@1.1.9: - resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} - - object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - engines: {node: '>= 0.4'} - once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} @@ -6164,67 +3063,14 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - - onetime@7.0.0: - resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} - engines: {node: '>=18'} - - openpgp@6.1.1: - resolution: {integrity: sha512-V/DXZ5AGCz3q4X8psUSc3q4SxnH/bfICaTSpNcla7wvBFhrxa9/ajm31rtMwZ1qj7Fu2oMpfX6ZcxKmTBlb6Yg==} - engines: {node: '>= 18.0.0'} - - optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} - - os-browserify@0.3.0: - resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} - os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} - override-require@1.1.1: - resolution: {integrity: sha512-eoJ9YWxFcXbrn2U8FKT6RV+/Kj7fiGAB1VvHzbYKt8xM5ZuKZgCGvnHzDxmreEjcBH28ejg5MiOH4iyY1mQnkg==} - - own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} - - p-all@5.0.0: - resolution: {integrity: sha512-pofqu/1FhCVa+78xNAptCGc9V45exFz2pvBRyIvgXkNM0Rh18Py7j8pQuSjA+zpabI46v9hRjNWmL9EAFcEbpw==} - engines: {node: '>=16'} - - p-cancelable@2.1.1: - resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} - engines: {node: '>=8'} - - p-each-series@3.0.0: - resolution: {integrity: sha512-lastgtAdoH9YaLyDa5i5z64q+kzOcQHsQ5SsZJD3q0VEyI8mq872S3geuNbRUQLVAE9siMfgKrpj7MloKFHruw==} - engines: {node: '>=12'} - - p-filter@2.1.0: - resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==} - engines: {node: '>=8'} - - p-filter@4.1.0: - resolution: {integrity: sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==} - engines: {node: '>=18'} - - p-is-promise@3.0.0: - resolution: {integrity: sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==} - engines: {node: '>=8'} - - p-limit@1.3.0: - resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} - engines: {node: '>=4'} - - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + oxlint@1.7.0: + resolution: {integrity: sha512-krJN1fIRhs3xK1FyVyPtYIV9tkT4WDoIwI7eiMEKBuCjxqjQt5ZemQm1htPvHqNDOaWFRFt4btcwFdU8bbwgvA==} + engines: {node: '>=8.*'} + hasBin: true p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} @@ -6234,14 +3080,6 @@ packages: resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-locate@2.0.0: - resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} - engines: {node: '>=4'} - - p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} - p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} @@ -6250,46 +3088,6 @@ packages: resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - p-map@2.1.0: - resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} - engines: {node: '>=6'} - - p-map@6.0.0: - resolution: {integrity: sha512-T8BatKGY+k5rU+Q/GTYgrEf2r4xRMevAN5mtXc2aPc4rS1j3s+vWTaO2Wag94neXuCAUAs8cxBL9EeB5EA6diw==} - engines: {node: '>=16'} - - p-map@7.0.3: - resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} - engines: {node: '>=18'} - - p-queue@8.1.0: - resolution: {integrity: sha512-mxLDbbGIBEXTJL0zEx8JIylaj3xQ7Z/7eEVjcF9fJX4DBiH9oqe+oahYnlKKxm0Ci9TlWTyhSHgygxMxjIB2jw==} - engines: {node: '>=18'} - - p-reduce@2.1.0: - resolution: {integrity: sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==} - engines: {node: '>=8'} - - p-reduce@3.0.0: - resolution: {integrity: sha512-xsrIUgI0Kn6iyDYm9StOpOeK29XM1aboGji26+QEortiFST1hGZaUQOLhtEbqHErPpGW/aSz6allwK2qcptp0Q==} - engines: {node: '>=12'} - - p-throttle@7.0.0: - resolution: {integrity: sha512-aio0v+S0QVkH1O+9x4dHtD4dgCExACcL+3EtNaGqC01GBudS9ijMuUsmN8OVScyV4OOp0jqdLShZFuSlbL/AsA==} - engines: {node: '>=18'} - - p-timeout@6.1.4: - resolution: {integrity: sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==} - engines: {node: '>=14.16'} - - p-try@1.0.0: - resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} - engines: {node: '>=4'} - - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - pac-proxy-agent@7.2.0: resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} engines: {node: '>= 14'} @@ -6308,22 +3106,6 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} - parse-asn1@5.1.7: - resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==} - engines: {node: '>= 0.10'} - - parse-diff@0.7.1: - resolution: {integrity: sha512-1j3l8IKcy4yRK2W4o9EYvJLSzpAVwz4DXqCewYyx2vEwk2gcf3DBPqc8Fj4XV3K33OYJ08A8fWwyu/ykD/HUSg==} - - parse-github-url@1.0.3: - resolution: {integrity: sha512-tfalY5/4SqGaV/GIGzWyHnFjlpTPTNpENR9Ea2lLldSJ8EWXMsvacWucqY3m3I4YPtas15IxTLQVQ5NSYXPrww==} - engines: {node: '>= 0.10'} - hasBin: true - - parse-json@4.0.0: - resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} - engines: {node: '>=4'} - parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -6332,49 +3114,19 @@ packages: resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} engines: {node: '>=16'} - parse-json@8.3.0: - resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} - engines: {node: '>=18'} - - parse-link-header@2.0.0: - resolution: {integrity: sha512-xjU87V0VyHZybn2RrCX5TIFGxTVZE6zqqZWMPlIKiSKuWh/X5WZdt+w1Ki1nXB+8L/KtL+nZ4iq+sfI6MrhhMw==} - parse-ms@4.0.0: resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} engines: {node: '>=18'} - parse-path@7.1.0: - resolution: {integrity: sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==} - - parse-url@9.2.0: - resolution: {integrity: sha512-bCgsFI+GeGWPAvAiUv63ZorMeif3/U0zaXABGJbOWt5OH2KCaPHF6S+0ok4aqM9RuIPGyZdx9tR9l13PsW4AYQ==} - engines: {node: '>=14.13.0'} - - parse5-htmlparser2-tree-adapter@6.0.1: - resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} - parse5-htmlparser2-tree-adapter@7.1.0: resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} parse5-parser-stream@7.1.2: resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} - parse5@5.1.1: - resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} - - parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - path-browserify@1.0.1: - resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} - - path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -6383,10 +3135,6 @@ packages: resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -6395,9 +3143,6 @@ packages: resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} engines: {node: '>=12'} - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.11.1: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} @@ -6410,23 +3155,15 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - path-type@6.0.0: - resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} - engines: {node: '>=18'} - pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - pbkdf2@3.1.2: - resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} - engines: {node: '>=0.12'} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - pgp-utils@0.0.35: - resolution: {integrity: sha512-gCT6EbSTgljgycVa5qGpfRITaLOLbIKsEVRTdsNRgmLMAJpuJNNdrTn/95r8IWo9rFLlccfmGMJXkG9nVDwmrA==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -6434,194 +3171,38 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} - pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true - - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - - pify@3.0.0: - resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} - engines: {node: '>=4'} - - pinpoint@1.1.0: - resolution: {integrity: sha512-+04FTD9x7Cls2rihLlo57QDCcHoLBGn5Dk51SwtFBWkUWLxZaBXyNVpCw1S+atvE7GmnFjeaRZ0WLq3UYuqAdg==} - pirates@4.0.7: resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} - pkg-conf@2.1.0: - resolution: {integrity: sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g==} - engines: {node: '>=4'} - - pkg-dir@5.0.0: - resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} - engines: {node: '>=10'} - plimit-lit@1.6.1: resolution: {integrity: sha512-B7+VDyb8Tl6oMJT9oSO2CW8XC/T4UcJGrwOVoNGwOQsQYhlpfajmrMj5xeejqaASq3V/EqThyOeATEOMuSEXiA==} engines: {node: '>=12'} - possible-typed-array-names@1.1.0: - resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} - engines: {node: '>= 0.4'} - - postcss-import@15.1.0: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - - postcss-js@4.0.1: - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - - postcss-load-config@4.0.2: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - - postcss-load-config@6.0.1: - resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} - engines: {node: '>= 18'} - peerDependencies: - jiti: '>=1.21.0' - postcss: '>=8.0.9' - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - jiti: - optional: true - postcss: - optional: true - tsx: - optional: true - yaml: - optional: true - - postcss-nested@6.2.0: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} - engines: {node: '>=4'} - postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} - prebuild-install@7.1.3: - resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} - engines: {node: '>=10'} - hasBin: true - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-linter-helpers@1.0.0: - resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} - engines: {node: '>=6.0.0'} - - prettier-plugin-tailwindcss@0.6.11: - resolution: {integrity: sha512-YxaYSIvZPAqhrrEpRtonnrXdghZg1irNg4qrjboCXrpybLWVs55cW2N3juhspVJiO0JBvYJT8SYsJpc8OQSnsA==} - engines: {node: '>=14.21.3'} - peerDependencies: - '@ianvs/prettier-plugin-sort-imports': '*' - '@prettier/plugin-pug': '*' - '@shopify/prettier-plugin-liquid': '*' - '@trivago/prettier-plugin-sort-imports': '*' - '@zackad/prettier-plugin-twig': '*' - prettier: ^3.0 - prettier-plugin-astro: '*' - prettier-plugin-css-order: '*' - prettier-plugin-import-sort: '*' - prettier-plugin-jsdoc: '*' - prettier-plugin-marko: '*' - prettier-plugin-multiline-arrays: '*' - prettier-plugin-organize-attributes: '*' - prettier-plugin-organize-imports: '*' - prettier-plugin-sort-imports: '*' - prettier-plugin-style-order: '*' - prettier-plugin-svelte: '*' - peerDependenciesMeta: - '@ianvs/prettier-plugin-sort-imports': - optional: true - '@prettier/plugin-pug': - optional: true - '@shopify/prettier-plugin-liquid': - optional: true - '@trivago/prettier-plugin-sort-imports': - optional: true - '@zackad/prettier-plugin-twig': - optional: true - prettier-plugin-astro: - optional: true - prettier-plugin-css-order: - optional: true - prettier-plugin-import-sort: - optional: true - prettier-plugin-jsdoc: - optional: true - prettier-plugin-marko: - optional: true - prettier-plugin-multiline-arrays: - optional: true - prettier-plugin-organize-attributes: - optional: true - prettier-plugin-organize-imports: - optional: true - prettier-plugin-sort-imports: - optional: true - prettier-plugin-style-order: - optional: true - prettier-plugin-svelte: - optional: true - prettier@3.6.2: resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} engines: {node: '>=14'} hasBin: true - pretty-format@29.7.0: - resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-format@30.0.2: + resolution: {integrity: sha512-yC5/EBSOrTtqhCKfLHqoUIAXVRZnukHPwWBJWR7h84Q3Be1DRQZLncwcfLoPA5RPQ65qfiCMqgYwdUuQ//eVpg==} + engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} pretty-ms@9.2.0: resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} engines: {node: '>=18'} - prettyjson@1.2.5: - resolution: {integrity: sha512-rksPWtoZb2ZpT5OVgtmy0KHVM+Dca3iVwWY9ifwhcexfjebtgjg3wmrUt9PvJ59XIYBcknQeYHD8IAnVlh9lAw==} - hasBin: true - - proc-log@5.0.0: - resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==} - engines: {node: ^18.17.0 || >=20.5.0} - process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -6629,31 +3210,10 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - progress@1.1.8: - resolution: {integrity: sha512-UdA8mJ4weIkUBO224tIarHzuHs4HuYiJvsuGT7j/SPQiUJVjYvNDBIPa0hAorduOfjGohB/qHWRa/lrrWX/mXw==} - engines: {node: '>=0.4.0'} - progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} - promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - - proto-list@1.2.4: - resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} - - protobufjs@7.5.3: - resolution: {integrity: sha512-sildjKwVqOI2kmFDiXQ6aEB0fjYTafpEvIBs8tOR8qI4spuL9OPROLVu2qZqi/xgCfsHIwVqlaF8JBjWFHnKbw==} - engines: {node: '>=12.0.0'} - - protocols@2.0.2: - resolution: {integrity: sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==} - proxy-agent@6.5.0: resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} engines: {node: '>= 14'} @@ -6661,37 +3221,11 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - public-encrypt@4.0.3: - resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + pump@3.0.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} - pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} - - punycode.js@2.3.1: - resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} - engines: {node: '>=6'} - - punycode@1.4.1: - resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - purepack@1.0.6: - resolution: {integrity: sha512-L/e3qq/3m/TrYtINo2aBB98oz6w8VHGyFy+arSKwPMZDUNNw2OaQxYnZO6UIZZw2OnRl2qkxGmuSOEfsuHXJdA==} - engines: {node: '>=0.10.0'} - - qs@6.14.0: - resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} - engines: {node: '>=0.6'} - - query-selector-shadow-dom@1.0.1: - resolution: {integrity: sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==} - - querystring-es3@0.2.1: - resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} - engines: {node: '>=0.4.x'} + query-selector-shadow-dom@1.0.1: + resolution: {integrity: sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw==} queue-lit@1.5.2: resolution: {integrity: sha512-tLc36IOPeMAubu8BkW8YDBV+WyIgKlYU7zUNs0J5Vk9skSZ4JfGlPOqplP0aHdfv7HL0B2Pg6nwiq60Qc6M2Hw==} @@ -6700,43 +3234,21 @@ packages: queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - quick-lru@4.0.1: - resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==} - engines: {node: '>=8'} - - quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - randomfill@1.0.4: - resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} - - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - - re2@1.22.1: - resolution: {integrity: sha512-E4J0EtgyNLdIr0wTg0dQPefuiqNY29KaLacytiUAYYRzxCG+zOkWoUygt1rI+TA1LrhN49/njrfSO1DHtVC5Vw==} - react-dom@19.1.0: resolution: {integrity: sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==} peerDependencies: react: ^19.1.0 - react-error-boundary@6.0.0: - resolution: {integrity: sha512-gdlJjD7NWr0IfkPlaREN2d9uUZUlksrfOx7SX62VRerwXbMY6ftGCIZua1VG1aXFNOimhISsTq+Owp725b9SiA==} - peerDependencies: - react: '>=16.13.1' - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-is@18.3.1: resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + react-refresh@0.17.0: + resolution: {integrity: sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==} + engines: {node: '>=0.10.0'} + react-spinners@0.17.0: resolution: {integrity: sha512-L/8HTylaBmIWwQzIjMq+0vyaRXuoAevzWoD35wKpNTxxtYXWZp+xtgkfD7Y4WItuX0YvdxMPU79+7VhhmbmuTQ==} peerDependencies: @@ -6747,44 +3259,17 @@ packages: resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} engines: {node: '>=0.10.0'} - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - - read-package-up@11.0.0: - resolution: {integrity: sha512-MbgfoNPANMdb4oRBNg5eqLbB2t2r+o5Ua1pNt8BqGp4I0FJZhuVSOj3PaBPni4azWuSzEdNn2evevzVmEk1ohQ==} - engines: {node: '>=18'} - read-pkg-up@10.1.0: resolution: {integrity: sha512-aNtBq4jR8NawpKJQldrQcSW9y/d+KWH4v24HWkHljOZ7H0av+YTGANBzRh9A5pw7v/bLVsLVPpOhJ7gHNVy8lA==} engines: {node: '>=16'} - read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - - read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - read-pkg@8.1.0: resolution: {integrity: sha512-PORM8AgzXeskHO/WEv312k9U03B8K9JSiWF/8N9sUuFjBa+9SF2u6K7VClzXwDXab51jCd8Nd36CNM+zR97ScQ==} engines: {node: '>=16'} - read-pkg@9.0.1: - resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} - engines: {node: '>=18'} - - read-yaml-file@2.1.0: - resolution: {integrity: sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ==} - engines: {node: '>=10.13'} - readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - readable-stream@4.7.0: resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -6800,53 +3285,10 @@ packages: resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} engines: {node: '>= 14.18.0'} - readline-sync@1.4.10: - resolution: {integrity: sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==} - engines: {node: '>= 0.8.0'} - recursive-readdir@2.2.3: resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} engines: {node: '>=6.0.0'} - redent@3.0.0: - resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} - engines: {node: '>=8'} - - redis@4.7.1: - resolution: {integrity: sha512-S1bJDnqLftzHXHP8JsT5II/CtHWQrASX5K96REjWjlmWKrviSOLWmM7QnRLstAWsu1VBBV1ffV6DzCvxNP0UJQ==} - - reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} - - regenerator-runtime@0.13.11: - resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} - - regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} - - registry-auth-token@5.1.0: - resolution: {integrity: sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==} - engines: {node: '>=14'} - - remark-github@12.0.0: - resolution: {integrity: sha512-ByefQKFN184LeiGRCabfl7zUJsdlMYWEhiLX1gpmQ11yFg6xSuOTW7LVCv0oc1x+YvUMJW23NU36sJX2RWGgvg==} - - remark-parse@11.0.0: - resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - - remark-stringify@11.0.0: - resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} - - remark@15.0.1: - resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} - - renovate@41.35.1: - resolution: {integrity: sha512-QxUgdUbHDwx+7h9N1gdtzBhn3yh770GILAszbBq+iNFZ3EXm0GtGvOKoaqxLcmZjS8KIy63U5tHKKpjbixPe5w==} - engines: {node: ^22.13.0, pnpm: ^10.0.0} - hasBin: true - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -6855,16 +3297,6 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} - require-in-the-middle@7.5.2: - resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==} - engines: {node: '>=8.6.0'} - - require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - - resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -6876,72 +3308,37 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true - - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - - responselike@2.0.1: - resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} - resq@1.11.0: resolution: {integrity: sha512-G10EBz+zAAy3zUd/CDoBbXRL6ia9kOo3xRHrMDsHljI0GDkhYlyjwoCx5+3eCC4swi1uCoZQhskuJkj7Gp57Bw==} - restore-cursor@5.1.0: - resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} - engines: {node: '>=18'} - - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} + ret@0.5.0: + resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==} + engines: {node: '>=10'} reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rgb2hex@0.2.5: resolution: {integrity: sha512-22MOP1Rh7sAo1BZpDG6R5RFYzR2lYEgwq7HEmyW2qcsOqR2lQKmn+O//xV3YG/0rrhMC6KVX2hU+ZXuaw9a5bw==} - rimraf@2.4.5: - resolution: {integrity: sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - rimraf@6.0.1: resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} engines: {node: 20 || >=22} hasBin: true - ripemd160@2.0.2: - resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} - - roarr@2.15.4: - resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==} - engines: {node: '>=8.0'} - - rollup@4.41.0: - resolution: {integrity: sha512-HqMFpUbWlf/tvcxBFNKnJyzc7Lk+XO3FGc3pbNBLqEbOz0gPLRgcrlS3UF4MfUrVlstOaP/q0kM6GVvi+LrLRg==} + rollup@4.45.1: + resolution: {integrity: sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - run-async@3.0.0: - resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + run-async@4.0.4: + resolution: {integrity: sha512-2cgeRHnV11lSXBEhq7sN7a5UVjTKm9JTb9x8ApIT//16D7QL96AgnNeWSGoB4gIHc0iYw/Ha0Z+waBaCYZVNhg==} engines: {node: '>=0.12.0'} run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - run-script-os@1.1.6: - resolution: {integrity: sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==} - hasBin: true - rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} @@ -6949,80 +3346,30 @@ packages: resolution: {integrity: sha512-J92IFbskyo7OYB3Dt4aTdyhag1GlInrfbPCmMteb7aBK7PwlnGz1HI0+oyNN97j7pV9DqUAVoVgkNRMrfY47mQ==} engines: {node: '>=18.0.0'} - safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} - safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-json-stringify@1.2.0: - resolution: {integrity: sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==} - - safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} - - safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} - - safe-stable-stringify@2.5.0: - resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} - engines: {node: '>=10'} + safe-regex2@5.0.0: + resolution: {integrity: sha512-YwJwe5a51WlK7KbOJREPdjNrpViQBI3p4T50lfwPuDhZnE3XGVTlGvi+aolc5+RvxDD6bnUmjVsU9n1eboLUYw==} safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass@1.89.0: - resolution: {integrity: sha512-ld+kQU8YTdGNjOLfRWBzewJpU5cwEv/h5yyqlSeJcj6Yh8U4TDA9UA5FPicqDz/xgRPWRSYIQNiFks21TbA9KQ==} + sass@1.89.2: + resolution: {integrity: sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==} engines: {node: '>=14.0.0'} hasBin: true - sax@1.4.1: - resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} - scheduler@0.26.0: resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} - schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} - schema-utils@4.3.2: resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==} engines: {node: '>= 10.13.0'} - semantic-release@24.2.7: - resolution: {integrity: sha512-g7RssbTAbir1k/S7uSwSVZFfFXwpomUB9Oas0+xi9KStSCmeDXcA7rNhiskjLqvUe/Evhx8fVCT16OSa34eM5g==} - engines: {node: '>=20.8.1'} - hasBin: true - - semver-compare@1.0.0: - resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==} - - semver-diff@4.0.0: - resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} - engines: {node: '>=12'} - - semver-regex@4.0.5: - resolution: {integrity: sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw==} - engines: {node: '>=12'} - - semver-stable@3.0.0: - resolution: {integrity: sha512-lolq9k0lqdnZ0C4+QJvrPBWiAHGhLaVSMTPJajn527ptOHAcZnEhj0n2r6ALnryNiRKPO9AIO9iBI3ZSheHCaw==} - engines: {node: '>=0.10.0'} - - semver-utils@1.1.4: - resolution: {integrity: sha512-EjnoLE5OGmDAVV/8YDoN5KiajNadjzIp9BAHOhYeQHt7j0UWxjmgsx4YD48wp4Ue1Qogq38F1GNUJNqF1kKKxA==} - - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -7032,39 +3379,16 @@ packages: engines: {node: '>=10'} hasBin: true - serialize-error@11.0.3: - resolution: {integrity: sha512-2G2y++21dhj2R7iHAdd0FIzjGwuKZld+7Pl/bTU6YIkrC2ZMbVUjm+luj6A6V34Rv9XfKJDKpTWu9W4Gse1D9g==} - engines: {node: '>=14.16'} - - serialize-error@7.0.1: - resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==} - engines: {node: '>=10'} + serialize-error@12.0.0: + resolution: {integrity: sha512-ZYkZLAvKTKQXWuh5XpBw7CdbSzagarX39WyZ2H07CDLC5/KfsRGlIXV8d4+tfqX1M7916mRqR1QfNHSij+c9Pw==} + engines: {node: '>=18'} serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} - - set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} - setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - sha.js@2.4.11: - resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} - hasBin: true - shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -7073,25 +3397,6 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shlex@2.1.2: - resolution: {integrity: sha512-Nz6gtibMVgYeMEhUjp2KuwAgqaJA1K155dU/HuDaEJUGgnmYfVtVZah+uerVWdH8UGnyahhDCgABbYTbs254+w==} - - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -7099,43 +3404,10 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} - signale@1.4.0: - resolution: {integrity: sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==} - engines: {node: '>=6'} - - simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - - simple-get@4.0.1: - resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} - - simple-git@3.28.0: - resolution: {integrity: sha512-Rs/vQRwsn1ILH1oBUy8NucJlXmnnLeLCfcvbSehkPzbv3wwoFWIdtfd6Ndo6ZPhlPsCZ60CPI4rxurnwAa+a2w==} - - skin-tone@2.0.0: - resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} - engines: {node: '>=8'} - slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - slash@5.1.0: - resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} - engines: {node: '>=14.16'} - - slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} - - slice-ansi@7.1.0: - resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} - engines: {node: '>=18'} - - slugify@1.6.6: - resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} - engines: {node: '>=8.0.0'} - smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} @@ -7144,14 +3416,10 @@ packages: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} - socks@2.8.4: - resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} + socks@2.8.6: + resolution: {integrity: sha512-pe4Y2yzru68lXCb38aAqRf5gvN8YdjP1lok5o0J7BOHljkyCGKVz7H3vpVIXKD27rj2giOJ7DwVyk/GWrPHDWA==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} - sort-keys@4.2.0: - resolution: {integrity: sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==} - engines: {node: '>=8'} - source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -7170,9 +3438,6 @@ packages: spacetrim@0.11.59: resolution: {integrity: sha512-lLYsktklSRKprreOm7NXReW8YiX2VBjbgmXYEziOoGf/qsJqAEACaDvoTtUOycwjpaSh+bT8eu0KrJn7UNxiCg==} - spawn-error-forwarder@1.0.0: - resolution: {integrity: sha512-gRjMgK5uFjbCvdibeGJuy3I5OYz6VLoVdsOJdA6wV0WlfQVLFueoqMxwwYD9RODdgb6oUIvlRlsyFSiQkMKu0g==} - spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -7185,52 +3450,23 @@ packages: spdx-license-ids@3.0.21: resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} - split2@1.0.0: - resolution: {integrity: sha512-NKywug4u4pX/AZBB1FCPzZ6/7O+Xhz1qMVbzTvvKvikjO99oPN87SkK08mEY9P63/5lWjK+wgOOgApnTg5r6qg==} - - split2@3.2.2: - resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==} - split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - sprintf-js@1.1.3: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - ssri@12.0.0: - resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - stable-hash@0.0.5: - resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} - stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} - stream-browserify@3.0.0: - resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} - stream-buffers@3.0.3: resolution: {integrity: sha512-pqMqwQCso0PBJt2PQmDO0cFj0lyqmiwOMiMSkVtRokl7e+ZTRYgDHKnuZNbqjiJXgsg4nuqtD/zxuo9KqTp0Yw==} engines: {node: '>= 0.10.0'} - stream-combiner2@1.1.1: - resolution: {integrity: sha512-3PnJbYgS56AeWgtKF5jtJRT6uFJe56Z0Hc5Ngg/6sI6rIt8iiMBTa9cvdyFfpMQjaVHr8dusbNeFGIIonxOvKw==} - - stream-http@3.2.0: - resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} - - streamx@2.22.0: - resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} - - string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} + streamx@2.22.1: + resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -7240,33 +3476,6 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} - string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} - engines: {node: '>=18'} - - string.prototype.includes@2.0.1: - resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} - engines: {node: '>= 0.4'} - - string.prototype.matchall@4.0.12: - resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} - engines: {node: '>= 0.4'} - - string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} - - string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} - string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -7281,61 +3490,26 @@ packages: resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} engines: {node: '>=12'} - strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - - strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - - strip-comments-strings@1.2.0: - resolution: {integrity: sha512-zwF4bmnyEjZwRhaak9jUWNxc0DoeKBJ7lwSN/LEc8dQXZcUFG6auaaTQJokQWXopLdM3iTx01nQT8E4aL29DAQ==} - strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - strip-final-newline@4.0.0: resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} engines: {node: '>=18'} - strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strip-json-comments@5.0.2: - resolution: {integrity: sha512-4X2FR3UwhNUE9G49aIsJW5hRRR3GXGTBTZRMfv568O60ojM8HcWjV/VxAxCDW3SUND33O6ZY66ZuRcdkj73q2g==} - engines: {node: '>=14.16'} - - strnum@1.1.2: - resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} + strnum@2.1.1: + resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==} sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} hasBin: true - super-regex@1.0.0: - resolution: {integrity: sha512-CY8u7DtbvucKuquCmOFEKhr9Besln7n9uN8eFbwcoGYWXOMW07u2o8njWaiXt11ylS3qoGF55pILjRmPlbodyg==} - engines: {node: '>=18'} - - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -7344,63 +3518,26 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} - supports-hyperlinks@1.0.1: - resolution: {integrity: sha512-HHi5kVSefKaJkGYXbDuKbUGRVxqnWGn3J2e39CYcNJEfWciGq2zYtOhXLTlvrOZW1QU7VX67w7fMmWafHX9Pfw==} - engines: {node: '>=4'} - - supports-hyperlinks@3.2.0: - resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} - engines: {node: '>=14.18'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - synckit@0.11.6: - resolution: {integrity: sha512-2pR2ubZSV64f/vqm9eLPz/KOvR9Dm+Co/5ChLgeHl0yEDRc6h5hXHoxEQH8Y5Ljycozd3p1k5TTSVdzYGkPvLw==} - engines: {node: ^14.18.0 || >=16.0.0} - - tailwind-merge@3.3.0: - resolution: {integrity: sha512-fyW/pEfcQSiigd5SNn0nApUOxx0zB/dm6UDU/rEwc2c3sX2smWUNbapHv+QRqLGVp9GWX3THIa7MUGPo+YkDzQ==} + tailwind-merge@3.3.1: + resolution: {integrity: sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g==} - tailwindcss@3.4.17: - resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} - engines: {node: '>=14.0.0'} - hasBin: true + tailwindcss@4.1.11: + resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==} tapable@2.2.2: resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} engines: {node: '>=6'} - tar-fs@2.1.3: - resolution: {integrity: sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==} - - tar-fs@3.0.8: - resolution: {integrity: sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==} - - tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} + tar-fs@3.1.0: + resolution: {integrity: sha512-5Mty5y/sOF1YWj1J6GiBodjlDc05CUR8PKXrsnFAiSG0xA+GHeWLovaZPYUDXkH/1iKRf2+M5+OrRgzC7O9b7w==} tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} - tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} - engines: {node: '>=10'} - tar@7.4.3: resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} engines: {node: '>=18'} - temp-dir@3.0.0: - resolution: {integrity: sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==} - engines: {node: '>=14.16'} - - tempy@3.1.0: - resolution: {integrity: sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==} - engines: {node: '>=14.16'} - terser-webpack-plugin@5.3.14: resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} engines: {node: '>= 10.13.0'} @@ -7417,8 +3554,8 @@ packages: uglify-js: optional: true - terser@5.39.2: - resolution: {integrity: sha512-yEPUmWve+VA78bI71BW70Dh0TuV4HHd+I5SHOAfS1+QBOmvmCiiffgjR8ryyEd3KIfvPGFqoADt8LdQ6XpXIvg==} + terser@5.43.1: + resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==} engines: {node: '>=10'} hasBin: true @@ -7436,40 +3573,24 @@ packages: thenify@3.3.1: resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - through2-concurrent@2.0.0: - resolution: {integrity: sha512-R5/jLkfMvdmDD+seLwN7vB+mhbqzWop5fAjx5IX8/yQq7VhBhzDmhXgaHAOnhnWkCpRMM7gToYHycB0CS/pd+A==} - - through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} - - through2@4.0.2: - resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} - through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - time-span@5.1.0: - resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==} - engines: {node: '>=12'} - - timers-browserify@2.0.12: - resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} - engines: {node: '>=0.6.0'} - tinyexec@1.0.1: resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} - tinyglobby@0.2.13: - resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} engines: {node: '>=12.0.0'} - tinylogic@2.0.0: - resolution: {integrity: sha512-dljTkiLLITtsjqBvTA1MRZQK/sGP4kI3UJKc3yA9fMzYbMF2RhcN04SeROVqJBIYYOoJMM8u0WDnhFwMSFQotw==} - tinyrainbow@1.2.0: resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} engines: {node: '>=14.0.0'} + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -7478,40 +3599,6 @@ packages: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - to-vfile@8.0.0: - resolution: {integrity: sha512-IcmH1xB5576MJc9qcfEC/m/nQCFt3fzMHz45sSlgJyTWjRbKW1HAkJpuf3DgE57YzIlZcwcBZA5ENQbBo4aLkg==} - - toml-eslint-parser@0.10.0: - resolution: {integrity: sha512-khrZo4buq4qVmsGzS5yQjKe/WsFvV8fGfOjDQN0q4iy9FjRfPWRgTFrU8u1R2iu/SfWLhY9WnCi4Jhdrcbtg+g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - - traverse@0.6.8: - resolution: {integrity: sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==} - engines: {node: '>= 0.4'} - - treeify@1.1.0: - resolution: {integrity: sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==} - engines: {node: '>=0.6'} - - trim-newlines@3.0.1: - resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==} - engines: {node: '>=8'} - - triplesec@4.0.3: - resolution: {integrity: sha512-fug70e1nJoCMxsXQJlETisAALohm84vl++IiTTHEqM7Lgqwz62jrlwqOC/gJEAJjO/ByN127sEcioB56HW3wIw==} - - trough@2.2.0: - resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - - ts-api-utils@2.1.0: - resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: '>=4.8.4' - ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} @@ -7541,102 +3628,52 @@ packages: engines: {node: '>=16.20.2'} hasBin: true - tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.19.4: - resolution: {integrity: sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==} + tsx@4.20.3: + resolution: {integrity: sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==} engines: {node: '>=18.0.0'} hasBin: true - tty-browserify@0.0.1: - resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} - - tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - - tunnel@0.0.6: - resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} - engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} - - turbo-darwin-64@2.5.3: - resolution: {integrity: sha512-YSItEVBUIvAGPUDpAB9etEmSqZI3T6BHrkBkeSErvICXn3dfqXUfeLx35LfptLDEbrzFUdwYFNmt8QXOwe9yaw==} + turbo-darwin-64@2.5.5: + resolution: {integrity: sha512-RYnTz49u4F5tDD2SUwwtlynABNBAfbyT2uU/brJcyh5k6lDLyNfYKdKmqd3K2ls4AaiALWrFKVSBsiVwhdFNzQ==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@2.5.3: - resolution: {integrity: sha512-5PefrwHd42UiZX7YA9m1LPW6x9YJBDErXmsegCkVp+GjmWrADfEOxpFrGQNonH3ZMj77WZB2PVE5Aw3gA+IOhg==} + turbo-darwin-arm64@2.5.5: + resolution: {integrity: sha512-Tk+ZeSNdBobZiMw9aFypQt0DlLsWSFWu1ymqsAdJLuPoAH05qCfYtRxE1pJuYHcJB5pqI+/HOxtJoQ40726Btw==} cpu: [arm64] os: [darwin] - turbo-linux-64@2.5.3: - resolution: {integrity: sha512-M9xigFgawn5ofTmRzvjjLj3Lqc05O8VHKuOlWNUlnHPUltFquyEeSkpQNkE/vpPdOR14AzxqHbhhxtfS4qvb1w==} + turbo-linux-64@2.5.5: + resolution: {integrity: sha512-2/XvMGykD7VgsvWesZZYIIVXMlgBcQy+ZAryjugoTcvJv8TZzSU/B1nShcA7IAjZ0q7OsZ45uP2cOb8EgKT30w==} cpu: [x64] os: [linux] - turbo-linux-arm64@2.5.3: - resolution: {integrity: sha512-auJRbYZ8SGJVqvzTikpg1bsRAsiI9Tk0/SDkA5Xgg0GdiHDH/BOzv1ZjDE2mjmlrO/obr19Dw+39OlMhwLffrw==} + turbo-linux-arm64@2.5.5: + resolution: {integrity: sha512-DW+8CjCjybu0d7TFm9dovTTVg1VRnlkZ1rceO4zqsaLrit3DgHnN4to4uwyuf9s2V/BwS3IYcRy+HG9BL596Iw==} cpu: [arm64] os: [linux] - turbo-windows-64@2.5.3: - resolution: {integrity: sha512-arLQYohuHtIEKkmQSCU9vtrKUg+/1TTstWB9VYRSsz+khvg81eX6LYHtXJfH/dK7Ho6ck+JaEh5G+QrE1jEmCQ==} + turbo-windows-64@2.5.5: + resolution: {integrity: sha512-q5p1BOy8ChtSZfULuF1BhFMYIx6bevXu4fJ+TE/hyNfyHJIfjl90Z6jWdqAlyaFLmn99X/uw+7d6T/Y/dr5JwQ==} cpu: [x64] os: [win32] - turbo-windows-arm64@2.5.3: - resolution: {integrity: sha512-3JPn66HAynJ0gtr6H+hjY4VHpu1RPKcEwGATvGUTmLmYSYBQieVlnGDRMMoYN066YfyPqnNGCfhYbXfH92Cm0g==} + turbo-windows-arm64@2.5.5: + resolution: {integrity: sha512-AXbF1KmpHUq3PKQwddMGoKMYhHsy5t1YBQO8HZ04HLMR0rWv9adYlQ8kaeQJTko1Ay1anOBFTqaxfVOOsu7+1Q==} cpu: [arm64] os: [win32] - turbo@2.5.3: - resolution: {integrity: sha512-iHuaNcq5GZZnr3XDZNuu2LSyCzAOPwDuo5Qt+q64DfsTP1i3T2bKfxJhni2ZQxsvAoxRbuUK5QetJki4qc5aYA==} + turbo@2.5.5: + resolution: {integrity: sha512-eZ7wI6KjtT1eBqCnh2JPXWNUAxtoxxfi6VdBdZFvil0ychCOTxbm7YLRBi1JSt7U3c+u3CLxpoPxLdvr/Npr3A==} hasBin: true - tweetnacl@0.13.3: - resolution: {integrity: sha512-iNWodk4oBsZ03Qfw/Yvv0KB90uYrJqvL4Je7Gy4C5t/GS3sCXPRmIT1lxmId4RzvUp0XG62bcxJ2CBu/3L5DSg==} - - tweetnacl@1.0.3: - resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} - - typanion@3.14.0: - resolution: {integrity: sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug==} - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-fest@0.13.1: - resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==} - engines: {node: '>=10'} - - type-fest@0.18.1: - resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - - type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - - type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - - type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - type-fest@3.13.1: resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} engines: {node: '>=14.16'} @@ -7649,79 +3686,24 @@ packages: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} - typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} - - typed-rest-client@2.1.0: - resolution: {integrity: sha512-Nel9aPbgSzRxfs1+4GoSB4wexCF+4Axlk7OSGVQCMa+4fWcyxIsN/YNmkp0xTT2iQzMD98h8yFLav/cNaULmRA==} - engines: {node: '>= 16.0.0'} - - typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - - typedoc@0.28.7: - resolution: {integrity: sha512-lpz0Oxl6aidFkmS90VQDQjk/Qf2iw0IUvFqirdONBdj7jPSN9mGXhy66BcGNDxx5ZMyKKiBVAREvPEzT6Uxipw==} - engines: {node: '>= 18', pnpm: '>= 10'} - hasBin: true - peerDependencies: - typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x - - typescript-eslint@8.32.1: - resolution: {integrity: sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' - typescript@5.8.3: resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} hasBin: true - uc.micro@2.1.0: - resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} - - uglify-js@3.19.3: - resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} - engines: {node: '>=0.8.0'} - hasBin: true - - uint64be@1.0.1: - resolution: {integrity: sha512-w+VZSp8hSZ/xWZfZNMppWNF6iqY+dcMYtG5CpwRDgxi94HIE6ematSdkzHGzVC4SDEaTsG65zrajN+oKoWG6ew==} - - unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} - - underscore@1.13.7: - resolution: {integrity: sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==} - - undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.8.0: + resolution: {integrity: sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==} + undici@6.21.3: resolution: {integrity: sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==} engines: {node: '>=18.17'} - unicode-emoji-modifier-base@1.0.0: - resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} - engines: {node: '>=4'} + undici@7.12.0: + resolution: {integrity: sha512-GrKEsc3ughskmGA9jevVlIOPMiiAHJ4OFUtaAH+NhfTUSiZ1wMPIQqQvAJUrJspFXJt3EBWgpAeoHEDVT1IBug==} + engines: {node: '>=20.18.1'} unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} @@ -7731,67 +3713,12 @@ packages: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} - unified@11.0.5: - resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} - - unique-filename@4.0.0: - resolution: {integrity: sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==} - engines: {node: ^18.17.0 || >=20.5.0} - - unique-slug@5.0.0: - resolution: {integrity: sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==} - engines: {node: ^18.17.0 || >=20.5.0} - - unique-string@3.0.0: - resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} - engines: {node: '>=12'} - - unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} - - unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - - unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} - - unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} - - universal-user-agent@6.0.1: - resolution: {integrity: sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==} - - universal-user-agent@7.0.3: - resolution: {integrity: sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==} - - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - - unrs-resolver@1.7.2: - resolution: {integrity: sha512-BBKpaylOW8KbHsu378Zky/dGh4ckT/4NW/0SHRABdqRLcQJ2dAOjDo9g97p04sWflm0kqPqpUatxReNV/dqI5A==} - - upath@2.0.1: - resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} - engines: {node: '>=4'} - update-browserslist-db@1.1.3: resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - url-join@5.0.0: - resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - url@0.11.4: - resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} - engines: {node: '>= 0.4'} - urlpattern-polyfill@10.1.0: resolution: {integrity: sha512-IGjKp/o0NL3Bso1PymYURCJxMPNAf/ILOpendP9f5B6e1rTJgdgiOvgfoT8VxCAdY+Wisb9uhGaJJf3yZ2V9nw==} @@ -7802,38 +3729,12 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} - - uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - validate-npm-package-name@5.0.0: - resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - validate-npm-package-name@6.0.1: - resolution: {integrity: sha512-OaI//3H0J7ZkR1OqlhGA8cA+Cbk/2xFOQpJOt5+s27/ta9eZwpeervh4Mxh4w0im/kdgktowaqVNR7QOrUd7Yg==} - engines: {node: ^18.17.0 || >=20.5.0} - - vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} - - vfile@6.0.3: - resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - - vite-plugin-node-polyfills@0.23.0: - resolution: {integrity: sha512-4n+Ys+2bKHQohPBKigFlndwWQ5fFKwaGY6muNDMTb0fSQLyBzS+jjUNRZG9sKF0S/Go4ApG6LFnUGopjkILg3w==} - peerDependencies: - vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 - vite@6.3.5: resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} @@ -7874,19 +3775,13 @@ packages: yaml: optional: true - vm-browserify@1.1.2: - resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} - - vuln-vects@1.1.0: - resolution: {integrity: sha512-LGDwn9nRz94YoeqOn2TZqQXzyonBc5FJppSgH34S/1U+3bgPONq/vvfiCbCQ4MeBll58xx+kDmhS73ac+EHBBw==} - wait-port@1.1.0: resolution: {integrity: sha512-3e04qkoN3LxTMLakdqeWth8nih8usyg+sf1Bgdf9wwUkp05iuK1eSY/QpLvscT/+F/gA89+LpUmmgBtesbqI2Q==} engines: {node: '>=10'} hasBin: true - watchpack@2.4.3: - resolution: {integrity: sha512-adBYQLivcg1jbdKEJeqScJJFvgm4qY9+3tXw+jdG6lkVeqRJEtiQmSWjmth8GKmDZuX7sYM4YFxQsf0AzMfGGw==} + watchpack@2.4.4: + resolution: {integrity: sha512-c5EGNOiyxxV5qmTtAB7rbiXxi1ooX1pQKMLX/MIabJjRA0SJBQOjKF+KSVfHkr9U1cADPon0mRiVe/riyaiDUA==} engines: {node: '>=10.13.0'} wcwidth@1.0.1: @@ -7896,12 +3791,12 @@ packages: resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} engines: {node: '>= 8'} - webdriver@9.14.0: - resolution: {integrity: sha512-0mVjxafQ5GNdK4l/FVmmmXGUfLHCSBE4Ml2LG23rxgmw53CThAos6h01UgIEINonxIzgKEmwfqJioo3/frbpbQ==} + webdriver@9.18.0: + resolution: {integrity: sha512-07lC4FLj45lHJo0FvLjUp5qkjzEGWJWKGsxLoe9rQ2Fg88iYsqgr9JfSj8qxHpazBaBd+77+ZtpmMZ2X2D1Zuw==} engines: {node: '>=18.20.0'} - webdriverio@9.14.0: - resolution: {integrity: sha512-GP0p6J+yjcCXF9uXW7HjB6IEh33OKmZcLTSg/W2rnVYSWgsUEYPujKSXe5I8q5a99QID7OOKNKVMfs5ANoZ2BA==} + webdriverio@9.18.1: + resolution: {integrity: sha512-b9aVtmi5+BUkae+SfJlajjKcVWqhMP+HdxpW2B3MlAtvYG2MRpwXkR34yvRIh5IYVMnR5tyUi5knDlJUGOPHPQ==} engines: {node: '>=18.20.0'} peerDependencies: puppeteer-core: '>=22.x || <=24.x' @@ -7912,15 +3807,12 @@ packages: webextension-polyfill@0.12.0: resolution: {integrity: sha512-97TBmpoWJEE+3nFBQ4VocyCdLKfw54rFaJ6EVQYLBCXqCIpLSZkwGgASpv4oPt9gdKCJ80RJlcmNzNn008Ag6Q==} - webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - - webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + webpack-sources@3.3.3: + resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} engines: {node: '>=10.13.0'} - webpack@5.94.0: - resolution: {integrity: sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==} + webpack@5.100.2: + resolution: {integrity: sha512-QaNKAvGCDRh3wW1dsDjeMdDXwZm2vqq3zn6Pvq4rHOEOGSaUMgOOjG2Y9ZbIGzpfkJk9ZYTHpDqgDfeBDcnLaw==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -7937,28 +3829,6 @@ packages: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} - whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - - which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} - - which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} - - which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} - - which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - - which-typed-array@1.1.19: - resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} - engines: {node: '>= 0.4'} - which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -7974,13 +3844,6 @@ packages: engines: {node: ^18.17.0 || >=20.5.0} hasBin: true - word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - - wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - workerpool@6.5.1: resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} @@ -7996,26 +3859,11 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} - wrap-ansi@9.0.0: - resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} - engines: {node: '>=18'} - wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - write-file-atomic@3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - - write-file-atomic@5.0.1: - resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - write-yaml-file@4.2.0: - resolution: {integrity: sha512-LwyucHy0uhWqbrOkh9cBluZBeNVxzHjDaE9mwepZG3n3ZlbM4v3ndrFw51zW/NXYFFqP+QWZ72ihtLWTh05e4Q==} - engines: {node: '>=10.13'} - - ws@8.18.2: - resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -8026,40 +3874,17 @@ packages: utf-8-validate: optional: true - xcase@2.0.1: - resolution: {integrity: sha512-UmFXIPU+9Eg3E9m/728Bii0lAIuoc+6nbrNUKaRPJOFp91ih44qqGlWtxMB6kXFrRD6po+86ksHM5XHCfk6iPw==} - - xmldoc@2.0.2: - resolution: {integrity: sha512-UiRwoSStEXS3R+YE8OqYv3jebza8cBBAI2y8g3B15XFkn3SbEOyyLnmPHjLBPZANrPJKEzxxB7A3XwcLikQVlQ==} - engines: {node: '>=12.0.0'} - - xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - - y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} yallist@5.0.0: resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} engines: {node: '>=18'} - yaml@2.8.0: - resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} - engines: {node: '>= 14.6'} - hasBin: true - - yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -8072,10 +3897,6 @@ packages: resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} engines: {node: '>=10'} - yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} @@ -8111,853 +3932,132 @@ packages: resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} engines: {node: '>= 14'} - zod@3.25.76: - resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==} - - zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} - snapshots: '@alloc/quick-lru@5.2.0': {} - '@arcanis/slice-ansi@1.1.1': - dependencies: - grapheme-splitter: 1.0.4 - - '@aws-crypto/crc32@5.2.0': - dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.840.0 - tslib: 2.8.1 - - '@aws-crypto/crc32c@5.2.0': - dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.840.0 - tslib: 2.8.1 - - '@aws-crypto/sha1-browser@5.2.0': + '@ampproject/remapping@2.3.0': dependencies: - '@aws-crypto/supports-web-crypto': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-locate-window': 3.804.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 - - '@aws-crypto/sha256-browser@5.2.0': - dependencies: - '@aws-crypto/sha256-js': 5.2.0 - '@aws-crypto/supports-web-crypto': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-locate-window': 3.804.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 - '@aws-crypto/sha256-js@5.2.0': + '@babel/code-frame@7.27.1': dependencies: - '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.840.0 - tslib: 2.8.1 + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 - '@aws-crypto/supports-web-crypto@5.2.0': - dependencies: - tslib: 2.8.1 + '@babel/compat-data@7.28.0': {} - '@aws-crypto/util@5.2.0': + '@babel/core@7.28.0': dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/util-utf8': 2.3.0 - tslib: 2.8.1 - - '@aws-sdk/client-codecommit@3.840.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.840.0 - '@aws-sdk/credential-provider-node': 3.840.0 - '@aws-sdk/middleware-host-header': 3.840.0 - '@aws-sdk/middleware-logger': 3.840.0 - '@aws-sdk/middleware-recursion-detection': 3.840.0 - '@aws-sdk/middleware-user-agent': 3.840.0 - '@aws-sdk/region-config-resolver': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-endpoints': 3.840.0 - '@aws-sdk/util-user-agent-browser': 3.840.0 - '@aws-sdk/util-user-agent-node': 3.840.0 - '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.7.0 - '@smithy/fetch-http-handler': 5.1.0 - '@smithy/hash-node': 4.0.4 - '@smithy/invalid-dependency': 4.0.4 - '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.1.15 - '@smithy/middleware-retry': 4.1.16 - '@smithy/middleware-serde': 4.0.8 - '@smithy/middleware-stack': 4.0.4 - '@smithy/node-config-provider': 4.1.3 - '@smithy/node-http-handler': 4.1.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/smithy-client': 4.4.7 - '@smithy/types': 4.3.1 - '@smithy/url-parser': 4.0.4 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.23 - '@smithy/util-defaults-mode-node': 4.0.23 - '@smithy/util-endpoints': 3.0.6 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-retry': 4.0.6 - '@smithy/util-utf8': 4.0.0 - '@types/uuid': 9.0.8 - tslib: 2.8.1 - uuid: 9.0.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-cognito-identity@3.840.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.840.0 - '@aws-sdk/credential-provider-node': 3.840.0 - '@aws-sdk/middleware-host-header': 3.840.0 - '@aws-sdk/middleware-logger': 3.840.0 - '@aws-sdk/middleware-recursion-detection': 3.840.0 - '@aws-sdk/middleware-user-agent': 3.840.0 - '@aws-sdk/region-config-resolver': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-endpoints': 3.840.0 - '@aws-sdk/util-user-agent-browser': 3.840.0 - '@aws-sdk/util-user-agent-node': 3.840.0 - '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.7.0 - '@smithy/fetch-http-handler': 5.1.0 - '@smithy/hash-node': 4.0.4 - '@smithy/invalid-dependency': 4.0.4 - '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.1.15 - '@smithy/middleware-retry': 4.1.16 - '@smithy/middleware-serde': 4.0.8 - '@smithy/middleware-stack': 4.0.4 - '@smithy/node-config-provider': 4.1.3 - '@smithy/node-http-handler': 4.1.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/smithy-client': 4.4.7 - '@smithy/types': 4.3.1 - '@smithy/url-parser': 4.0.4 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.23 - '@smithy/util-defaults-mode-node': 4.0.23 - '@smithy/util-endpoints': 3.0.6 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-retry': 4.0.6 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-ec2@3.840.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.840.0 - '@aws-sdk/credential-provider-node': 3.840.0 - '@aws-sdk/middleware-host-header': 3.840.0 - '@aws-sdk/middleware-logger': 3.840.0 - '@aws-sdk/middleware-recursion-detection': 3.840.0 - '@aws-sdk/middleware-sdk-ec2': 3.840.0 - '@aws-sdk/middleware-user-agent': 3.840.0 - '@aws-sdk/region-config-resolver': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-endpoints': 3.840.0 - '@aws-sdk/util-user-agent-browser': 3.840.0 - '@aws-sdk/util-user-agent-node': 3.840.0 - '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.7.0 - '@smithy/fetch-http-handler': 5.1.0 - '@smithy/hash-node': 4.0.4 - '@smithy/invalid-dependency': 4.0.4 - '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.1.15 - '@smithy/middleware-retry': 4.1.16 - '@smithy/middleware-serde': 4.0.8 - '@smithy/middleware-stack': 4.0.4 - '@smithy/node-config-provider': 4.1.3 - '@smithy/node-http-handler': 4.1.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/smithy-client': 4.4.7 - '@smithy/types': 4.3.1 - '@smithy/url-parser': 4.0.4 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.23 - '@smithy/util-defaults-mode-node': 4.0.23 - '@smithy/util-endpoints': 3.0.6 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-retry': 4.0.6 - '@smithy/util-utf8': 4.0.0 - '@smithy/util-waiter': 4.0.6 - '@types/uuid': 9.0.8 - tslib: 2.8.1 - uuid: 9.0.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-ecr@3.840.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.840.0 - '@aws-sdk/credential-provider-node': 3.840.0 - '@aws-sdk/middleware-host-header': 3.840.0 - '@aws-sdk/middleware-logger': 3.840.0 - '@aws-sdk/middleware-recursion-detection': 3.840.0 - '@aws-sdk/middleware-user-agent': 3.840.0 - '@aws-sdk/region-config-resolver': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-endpoints': 3.840.0 - '@aws-sdk/util-user-agent-browser': 3.840.0 - '@aws-sdk/util-user-agent-node': 3.840.0 - '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.7.0 - '@smithy/fetch-http-handler': 5.1.0 - '@smithy/hash-node': 4.0.4 - '@smithy/invalid-dependency': 4.0.4 - '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.1.15 - '@smithy/middleware-retry': 4.1.16 - '@smithy/middleware-serde': 4.0.8 - '@smithy/middleware-stack': 4.0.4 - '@smithy/node-config-provider': 4.1.3 - '@smithy/node-http-handler': 4.1.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/smithy-client': 4.4.7 - '@smithy/types': 4.3.1 - '@smithy/url-parser': 4.0.4 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.23 - '@smithy/util-defaults-mode-node': 4.0.23 - '@smithy/util-endpoints': 3.0.6 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-retry': 4.0.6 - '@smithy/util-utf8': 4.0.0 - '@smithy/util-waiter': 4.0.6 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-eks@3.840.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.840.0 - '@aws-sdk/credential-provider-node': 3.840.0 - '@aws-sdk/middleware-host-header': 3.840.0 - '@aws-sdk/middleware-logger': 3.840.0 - '@aws-sdk/middleware-recursion-detection': 3.840.0 - '@aws-sdk/middleware-user-agent': 3.840.0 - '@aws-sdk/region-config-resolver': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-endpoints': 3.840.0 - '@aws-sdk/util-user-agent-browser': 3.840.0 - '@aws-sdk/util-user-agent-node': 3.840.0 - '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.7.0 - '@smithy/fetch-http-handler': 5.1.0 - '@smithy/hash-node': 4.0.4 - '@smithy/invalid-dependency': 4.0.4 - '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.1.15 - '@smithy/middleware-retry': 4.1.16 - '@smithy/middleware-serde': 4.0.8 - '@smithy/middleware-stack': 4.0.4 - '@smithy/node-config-provider': 4.1.3 - '@smithy/node-http-handler': 4.1.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/smithy-client': 4.4.7 - '@smithy/types': 4.3.1 - '@smithy/url-parser': 4.0.4 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.23 - '@smithy/util-defaults-mode-node': 4.0.23 - '@smithy/util-endpoints': 3.0.6 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-retry': 4.0.6 - '@smithy/util-utf8': 4.0.0 - '@smithy/util-waiter': 4.0.6 - '@types/uuid': 9.0.8 - tslib: 2.8.1 - uuid: 9.0.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-rds@3.840.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.840.0 - '@aws-sdk/credential-provider-node': 3.840.0 - '@aws-sdk/middleware-host-header': 3.840.0 - '@aws-sdk/middleware-logger': 3.840.0 - '@aws-sdk/middleware-recursion-detection': 3.840.0 - '@aws-sdk/middleware-sdk-rds': 3.840.0 - '@aws-sdk/middleware-user-agent': 3.840.0 - '@aws-sdk/region-config-resolver': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-endpoints': 3.840.0 - '@aws-sdk/util-user-agent-browser': 3.840.0 - '@aws-sdk/util-user-agent-node': 3.840.0 - '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.7.0 - '@smithy/fetch-http-handler': 5.1.0 - '@smithy/hash-node': 4.0.4 - '@smithy/invalid-dependency': 4.0.4 - '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.1.15 - '@smithy/middleware-retry': 4.1.16 - '@smithy/middleware-serde': 4.0.8 - '@smithy/middleware-stack': 4.0.4 - '@smithy/node-config-provider': 4.1.3 - '@smithy/node-http-handler': 4.1.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/smithy-client': 4.4.7 - '@smithy/types': 4.3.1 - '@smithy/url-parser': 4.0.4 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.23 - '@smithy/util-defaults-mode-node': 4.0.23 - '@smithy/util-endpoints': 3.0.6 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-retry': 4.0.6 - '@smithy/util-utf8': 4.0.0 - '@smithy/util-waiter': 4.0.6 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-s3@3.840.0': - dependencies: - '@aws-crypto/sha1-browser': 5.2.0 - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.840.0 - '@aws-sdk/credential-provider-node': 3.840.0 - '@aws-sdk/middleware-bucket-endpoint': 3.840.0 - '@aws-sdk/middleware-expect-continue': 3.840.0 - '@aws-sdk/middleware-flexible-checksums': 3.840.0 - '@aws-sdk/middleware-host-header': 3.840.0 - '@aws-sdk/middleware-location-constraint': 3.840.0 - '@aws-sdk/middleware-logger': 3.840.0 - '@aws-sdk/middleware-recursion-detection': 3.840.0 - '@aws-sdk/middleware-sdk-s3': 3.840.0 - '@aws-sdk/middleware-ssec': 3.840.0 - '@aws-sdk/middleware-user-agent': 3.840.0 - '@aws-sdk/region-config-resolver': 3.840.0 - '@aws-sdk/signature-v4-multi-region': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-endpoints': 3.840.0 - '@aws-sdk/util-user-agent-browser': 3.840.0 - '@aws-sdk/util-user-agent-node': 3.840.0 - '@aws-sdk/xml-builder': 3.821.0 - '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.7.0 - '@smithy/eventstream-serde-browser': 4.0.4 - '@smithy/eventstream-serde-config-resolver': 4.1.2 - '@smithy/eventstream-serde-node': 4.0.4 - '@smithy/fetch-http-handler': 5.1.0 - '@smithy/hash-blob-browser': 4.0.4 - '@smithy/hash-node': 4.0.4 - '@smithy/hash-stream-node': 4.0.4 - '@smithy/invalid-dependency': 4.0.4 - '@smithy/md5-js': 4.0.4 - '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.1.15 - '@smithy/middleware-retry': 4.1.16 - '@smithy/middleware-serde': 4.0.8 - '@smithy/middleware-stack': 4.0.4 - '@smithy/node-config-provider': 4.1.3 - '@smithy/node-http-handler': 4.1.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/smithy-client': 4.4.7 - '@smithy/types': 4.3.1 - '@smithy/url-parser': 4.0.4 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.23 - '@smithy/util-defaults-mode-node': 4.0.23 - '@smithy/util-endpoints': 3.0.6 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-retry': 4.0.6 - '@smithy/util-stream': 4.2.3 - '@smithy/util-utf8': 4.0.0 - '@smithy/util-waiter': 4.0.6 - '@types/uuid': 9.0.8 - tslib: 2.8.1 - uuid: 9.0.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/client-sso@3.840.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.840.0 - '@aws-sdk/middleware-host-header': 3.840.0 - '@aws-sdk/middleware-logger': 3.840.0 - '@aws-sdk/middleware-recursion-detection': 3.840.0 - '@aws-sdk/middleware-user-agent': 3.840.0 - '@aws-sdk/region-config-resolver': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-endpoints': 3.840.0 - '@aws-sdk/util-user-agent-browser': 3.840.0 - '@aws-sdk/util-user-agent-node': 3.840.0 - '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.7.0 - '@smithy/fetch-http-handler': 5.1.0 - '@smithy/hash-node': 4.0.4 - '@smithy/invalid-dependency': 4.0.4 - '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.1.15 - '@smithy/middleware-retry': 4.1.16 - '@smithy/middleware-serde': 4.0.8 - '@smithy/middleware-stack': 4.0.4 - '@smithy/node-config-provider': 4.1.3 - '@smithy/node-http-handler': 4.1.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/smithy-client': 4.4.7 - '@smithy/types': 4.3.1 - '@smithy/url-parser': 4.0.4 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.23 - '@smithy/util-defaults-mode-node': 4.0.23 - '@smithy/util-endpoints': 3.0.6 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-retry': 4.0.6 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.0 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0) + '@babel/helpers': 7.27.6 + '@babel/parser': 7.28.0 + '@babel/template': 7.27.2 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.1 + convert-source-map: 2.0.0 + debug: 4.4.1(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 transitivePeerDependencies: - - aws-crt - - '@aws-sdk/core@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@aws-sdk/xml-builder': 3.821.0 - '@smithy/core': 3.7.0 - '@smithy/node-config-provider': 4.1.3 - '@smithy/property-provider': 4.0.4 - '@smithy/protocol-http': 5.1.2 - '@smithy/signature-v4': 5.1.2 - '@smithy/smithy-client': 4.4.7 - '@smithy/types': 4.3.1 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-utf8': 4.0.0 - fast-xml-parser: 4.4.1 - tslib: 2.8.1 + - supports-color - '@aws-sdk/credential-provider-cognito-identity@3.840.0': + '@babel/generator@7.28.0': dependencies: - '@aws-sdk/client-cognito-identity': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/property-provider': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt + '@babel/parser': 7.28.0 + '@babel/types': 7.28.1 + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 + jsesc: 3.1.0 - '@aws-sdk/credential-provider-env@3.840.0': + '@babel/helper-compilation-targets@7.27.2': dependencies: - '@aws-sdk/core': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/property-provider': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-http@3.840.0': - dependencies: - '@aws-sdk/core': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/fetch-http-handler': 5.1.0 - '@smithy/node-http-handler': 4.1.0 - '@smithy/property-provider': 4.0.4 - '@smithy/protocol-http': 5.1.2 - '@smithy/smithy-client': 4.4.7 - '@smithy/types': 4.3.1 - '@smithy/util-stream': 4.2.3 - tslib: 2.8.1 - - '@aws-sdk/credential-provider-ini@3.840.0': - dependencies: - '@aws-sdk/core': 3.840.0 - '@aws-sdk/credential-provider-env': 3.840.0 - '@aws-sdk/credential-provider-http': 3.840.0 - '@aws-sdk/credential-provider-process': 3.840.0 - '@aws-sdk/credential-provider-sso': 3.840.0 - '@aws-sdk/credential-provider-web-identity': 3.840.0 - '@aws-sdk/nested-clients': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/credential-provider-imds': 4.0.6 - '@smithy/property-provider': 4.0.4 - '@smithy/shared-ini-file-loader': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-provider-node@3.840.0': - dependencies: - '@aws-sdk/credential-provider-env': 3.840.0 - '@aws-sdk/credential-provider-http': 3.840.0 - '@aws-sdk/credential-provider-ini': 3.840.0 - '@aws-sdk/credential-provider-process': 3.840.0 - '@aws-sdk/credential-provider-sso': 3.840.0 - '@aws-sdk/credential-provider-web-identity': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/credential-provider-imds': 4.0.6 - '@smithy/property-provider': 4.0.4 - '@smithy/shared-ini-file-loader': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt + '@babel/compat-data': 7.28.0 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.25.1 + lru-cache: 5.1.1 + semver: 6.3.1 - '@aws-sdk/credential-provider-process@3.840.0': - dependencies: - '@aws-sdk/core': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/property-provider': 4.0.4 - '@smithy/shared-ini-file-loader': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 + '@babel/helper-globals@7.28.0': {} - '@aws-sdk/credential-provider-sso@3.840.0': + '@babel/helper-module-imports@7.27.1': dependencies: - '@aws-sdk/client-sso': 3.840.0 - '@aws-sdk/core': 3.840.0 - '@aws-sdk/token-providers': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/property-provider': 4.0.4 - '@smithy/shared-ini-file-loader': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 + '@babel/traverse': 7.28.0 + '@babel/types': 7.28.1 transitivePeerDependencies: - - aws-crt + - supports-color - '@aws-sdk/credential-provider-web-identity@3.840.0': + '@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)': dependencies: - '@aws-sdk/core': 3.840.0 - '@aws-sdk/nested-clients': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/property-provider': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt - - '@aws-sdk/credential-providers@3.840.0': - dependencies: - '@aws-sdk/client-cognito-identity': 3.840.0 - '@aws-sdk/core': 3.840.0 - '@aws-sdk/credential-provider-cognito-identity': 3.840.0 - '@aws-sdk/credential-provider-env': 3.840.0 - '@aws-sdk/credential-provider-http': 3.840.0 - '@aws-sdk/credential-provider-ini': 3.840.0 - '@aws-sdk/credential-provider-node': 3.840.0 - '@aws-sdk/credential-provider-process': 3.840.0 - '@aws-sdk/credential-provider-sso': 3.840.0 - '@aws-sdk/credential-provider-web-identity': 3.840.0 - '@aws-sdk/nested-clients': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.7.0 - '@smithy/credential-provider-imds': 4.0.6 - '@smithy/node-config-provider': 4.1.3 - '@smithy/property-provider': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 + '@babel/core': 7.28.0 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.28.0 transitivePeerDependencies: - - aws-crt - - '@aws-sdk/middleware-bucket-endpoint@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-arn-parser': 3.804.0 - '@smithy/node-config-provider': 4.1.3 - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - '@smithy/util-config-provider': 4.0.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-expect-continue@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@aws-sdk/middleware-flexible-checksums@3.840.0': - dependencies: - '@aws-crypto/crc32': 5.2.0 - '@aws-crypto/crc32c': 5.2.0 - '@aws-crypto/util': 5.2.0 - '@aws-sdk/core': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/is-array-buffer': 4.0.0 - '@smithy/node-config-provider': 4.1.3 - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-stream': 4.2.3 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@aws-sdk/middleware-host-header@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - tslib: 2.8.1 + - supports-color - '@aws-sdk/middleware-location-constraint@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/types': 4.3.1 - tslib: 2.8.1 + '@babel/helper-plugin-utils@7.27.1': {} - '@aws-sdk/middleware-logger@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/types': 4.3.1 - tslib: 2.8.1 + '@babel/helper-string-parser@7.27.1': {} - '@aws-sdk/middleware-recursion-detection@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - tslib: 2.8.1 + '@babel/helper-validator-identifier@7.27.1': {} - '@aws-sdk/middleware-sdk-ec2@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-format-url': 3.840.0 - '@smithy/middleware-endpoint': 4.1.15 - '@smithy/protocol-http': 5.1.2 - '@smithy/signature-v4': 5.1.2 - '@smithy/smithy-client': 4.4.7 - '@smithy/types': 4.3.1 - tslib: 2.8.1 + '@babel/helper-validator-option@7.27.1': {} - '@aws-sdk/middleware-sdk-rds@3.840.0': + '@babel/helpers@7.27.6': dependencies: - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-format-url': 3.840.0 - '@smithy/middleware-endpoint': 4.1.15 - '@smithy/protocol-http': 5.1.2 - '@smithy/signature-v4': 5.1.2 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@aws-sdk/middleware-sdk-s3@3.840.0': - dependencies: - '@aws-sdk/core': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-arn-parser': 3.804.0 - '@smithy/core': 3.7.0 - '@smithy/node-config-provider': 4.1.3 - '@smithy/protocol-http': 5.1.2 - '@smithy/signature-v4': 5.1.2 - '@smithy/smithy-client': 4.4.7 - '@smithy/types': 4.3.1 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-stream': 4.2.3 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 + '@babel/template': 7.27.2 + '@babel/types': 7.28.1 - '@aws-sdk/middleware-ssec@3.840.0': + '@babel/parser@7.28.0': dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/types': 4.3.1 - tslib: 2.8.1 + '@babel/types': 7.28.1 - '@aws-sdk/middleware-user-agent@3.840.0': + '@babel/plugin-transform-react-jsx-self@7.27.1(@babel/core@7.28.0)': dependencies: - '@aws-sdk/core': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-endpoints': 3.840.0 - '@smithy/core': 3.7.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@aws-sdk/nested-clients@3.840.0': - dependencies: - '@aws-crypto/sha256-browser': 5.2.0 - '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.840.0 - '@aws-sdk/middleware-host-header': 3.840.0 - '@aws-sdk/middleware-logger': 3.840.0 - '@aws-sdk/middleware-recursion-detection': 3.840.0 - '@aws-sdk/middleware-user-agent': 3.840.0 - '@aws-sdk/region-config-resolver': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@aws-sdk/util-endpoints': 3.840.0 - '@aws-sdk/util-user-agent-browser': 3.840.0 - '@aws-sdk/util-user-agent-node': 3.840.0 - '@smithy/config-resolver': 4.1.4 - '@smithy/core': 3.7.0 - '@smithy/fetch-http-handler': 5.1.0 - '@smithy/hash-node': 4.0.4 - '@smithy/invalid-dependency': 4.0.4 - '@smithy/middleware-content-length': 4.0.4 - '@smithy/middleware-endpoint': 4.1.15 - '@smithy/middleware-retry': 4.1.16 - '@smithy/middleware-serde': 4.0.8 - '@smithy/middleware-stack': 4.0.4 - '@smithy/node-config-provider': 4.1.3 - '@smithy/node-http-handler': 4.1.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/smithy-client': 4.4.7 - '@smithy/types': 4.3.1 - '@smithy/url-parser': 4.0.4 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.23 - '@smithy/util-defaults-mode-node': 4.0.23 - '@smithy/util-endpoints': 3.0.6 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-retry': 4.0.6 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - transitivePeerDependencies: - - aws-crt + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 - '@aws-sdk/region-config-resolver@3.840.0': + '@babel/plugin-transform-react-jsx-source@7.27.1(@babel/core@7.28.0)': dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/node-config-provider': 4.1.3 - '@smithy/types': 4.3.1 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.4 - tslib: 2.8.1 + '@babel/core': 7.28.0 + '@babel/helper-plugin-utils': 7.27.1 - '@aws-sdk/signature-v4-multi-region@3.840.0': + '@babel/template@7.27.2': dependencies: - '@aws-sdk/middleware-sdk-s3': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/signature-v4': 5.1.2 - '@smithy/types': 4.3.1 - tslib: 2.8.1 + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.0 + '@babel/types': 7.28.1 - '@aws-sdk/token-providers@3.840.0': + '@babel/traverse@7.28.0': dependencies: - '@aws-sdk/core': 3.840.0 - '@aws-sdk/nested-clients': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/property-provider': 4.0.4 - '@smithy/shared-ini-file-loader': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.0 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.0 + '@babel/template': 7.27.2 + '@babel/types': 7.28.1 + debug: 4.4.1(supports-color@8.1.1) transitivePeerDependencies: - - aws-crt - - '@aws-sdk/types@3.840.0': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@aws-sdk/util-arn-parser@3.804.0': - dependencies: - tslib: 2.8.1 - - '@aws-sdk/util-endpoints@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/types': 4.3.1 - '@smithy/util-endpoints': 3.0.6 - tslib: 2.8.1 - - '@aws-sdk/util-format-url@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/querystring-builder': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@aws-sdk/util-locate-window@3.804.0': - dependencies: - tslib: 2.8.1 - - '@aws-sdk/util-user-agent-browser@3.840.0': - dependencies: - '@aws-sdk/types': 3.840.0 - '@smithy/types': 4.3.1 - bowser: 2.11.0 - tslib: 2.8.1 - - '@aws-sdk/util-user-agent-node@3.840.0': - dependencies: - '@aws-sdk/middleware-user-agent': 3.840.0 - '@aws-sdk/types': 3.840.0 - '@smithy/node-config-provider': 4.1.3 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@aws-sdk/xml-builder@3.821.0': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 + - supports-color - '@babel/code-frame@7.27.1': + '@babel/types@7.28.1': dependencies: + '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/helper-validator-identifier@7.27.1': {} - - '@babel/runtime-corejs3@7.28.0': - dependencies: - core-js-pure: 3.44.0 - '@babel/runtime@7.27.1': {} - - '@baszalmstra/rattler@0.2.1': {} - - '@breejs/later@4.2.0': {} - - '@cdktf/hcl2json@0.21.0': - dependencies: - fs-extra: 11.3.0 - - '@colors/colors@1.5.0': - optional: true - - '@commitlint/cli@19.8.1(@types/node@22.15.21)(typescript@5.8.3)': + '@commitlint/cli@19.8.1(@types/node@24.0.14)(typescript@5.8.3)': dependencies: '@commitlint/format': 19.8.1 '@commitlint/lint': 19.8.1 - '@commitlint/load': 19.8.1(@types/node@22.15.21)(typescript@5.8.3) + '@commitlint/load': 19.8.1(@types/node@24.0.14)(typescript@5.8.3) '@commitlint/read': 19.8.1 '@commitlint/types': 19.8.1 tinyexec: 1.0.1 @@ -9004,7 +4104,7 @@ snapshots: '@commitlint/rules': 19.8.1 '@commitlint/types': 19.8.1 - '@commitlint/load@19.8.1(@types/node@22.15.21)(typescript@5.8.3)': + '@commitlint/load@19.8.1(@types/node@24.0.14)(typescript@5.8.3)': dependencies: '@commitlint/config-validator': 19.8.1 '@commitlint/execute-rule': 19.8.1 @@ -9012,7 +4112,7 @@ snapshots: '@commitlint/types': 19.8.1 chalk: 5.4.1 cosmiconfig: 9.0.0(typescript@5.8.3) - cosmiconfig-typescript-loader: 6.1.0(@types/node@22.15.21)(cosmiconfig@9.0.0(typescript@5.8.3))(typescript@5.8.3) + cosmiconfig-typescript-loader: 6.1.0(@types/node@24.0.14)(cosmiconfig@9.0.0(typescript@5.8.3))(typescript@5.8.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -9067,409 +4167,215 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@dotenvx/dotenvx@1.44.1': + '@dotenvx/dotenvx@1.48.0': dependencies: commander: 11.1.0 - dotenv: 16.5.0 + dotenv: 16.6.1 eciesjs: 0.4.15 execa: 5.1.1 - fdir: 6.4.4(picomatch@4.0.2) + fdir: 6.4.6(picomatch@4.0.3) ignore: 5.3.2 object-treeify: 1.1.33 - picomatch: 4.0.2 + picomatch: 4.0.3 which: 4.0.0 - '@ecies/ciphers@0.2.3(@noble/ciphers@1.3.0)': + '@ecies/ciphers@0.2.4(@noble/ciphers@1.3.0)': dependencies: '@noble/ciphers': 1.3.0 - '@emnapi/core@1.4.3': - dependencies: - '@emnapi/wasi-threads': 1.0.2 - tslib: 2.8.1 - optional: true - - '@emnapi/runtime@1.4.3': - dependencies: - tslib: 2.8.1 + '@esbuild/aix-ppc64@0.25.6': optional: true - '@emnapi/wasi-threads@1.0.2': - dependencies: - tslib: 2.8.1 + '@esbuild/android-arm64@0.25.6': optional: true - '@esbuild/aix-ppc64@0.25.4': + '@esbuild/android-arm@0.25.6': optional: true - '@esbuild/android-arm64@0.25.4': + '@esbuild/android-x64@0.25.6': optional: true - '@esbuild/android-arm@0.25.4': + '@esbuild/darwin-arm64@0.25.6': optional: true - '@esbuild/android-x64@0.25.4': + '@esbuild/darwin-x64@0.25.6': optional: true - '@esbuild/darwin-arm64@0.25.4': + '@esbuild/freebsd-arm64@0.25.6': optional: true - '@esbuild/darwin-x64@0.25.4': + '@esbuild/freebsd-x64@0.25.6': optional: true - '@esbuild/freebsd-arm64@0.25.4': + '@esbuild/linux-arm64@0.25.6': optional: true - '@esbuild/freebsd-x64@0.25.4': + '@esbuild/linux-arm@0.25.6': optional: true - '@esbuild/linux-arm64@0.25.4': + '@esbuild/linux-ia32@0.25.6': optional: true - '@esbuild/linux-arm@0.25.4': + '@esbuild/linux-loong64@0.25.6': optional: true - '@esbuild/linux-ia32@0.25.4': + '@esbuild/linux-mips64el@0.25.6': optional: true - '@esbuild/linux-loong64@0.25.4': + '@esbuild/linux-ppc64@0.25.6': optional: true - '@esbuild/linux-mips64el@0.25.4': + '@esbuild/linux-riscv64@0.25.6': optional: true - '@esbuild/linux-ppc64@0.25.4': + '@esbuild/linux-s390x@0.25.6': optional: true - '@esbuild/linux-riscv64@0.25.4': + '@esbuild/linux-x64@0.25.6': optional: true - '@esbuild/linux-s390x@0.25.4': + '@esbuild/netbsd-arm64@0.25.6': optional: true - '@esbuild/linux-x64@0.25.4': + '@esbuild/netbsd-x64@0.25.6': optional: true - '@esbuild/netbsd-arm64@0.25.4': + '@esbuild/openbsd-arm64@0.25.6': optional: true - '@esbuild/netbsd-x64@0.25.4': + '@esbuild/openbsd-x64@0.25.6': optional: true - '@esbuild/openbsd-arm64@0.25.4': + '@esbuild/openharmony-arm64@0.25.6': optional: true - '@esbuild/openbsd-x64@0.25.4': + '@esbuild/sunos-x64@0.25.6': optional: true - '@esbuild/sunos-x64@0.25.4': + '@esbuild/win32-arm64@0.25.6': optional: true - '@esbuild/win32-arm64@0.25.4': + '@esbuild/win32-ia32@0.25.6': optional: true - '@esbuild/win32-ia32@0.25.4': + '@esbuild/win32-x64@0.25.6': optional: true - '@esbuild/win32-x64@0.25.4': - optional: true + '@inquirer/checkbox@4.1.9(@types/node@24.0.14)': + dependencies: + '@inquirer/core': 10.1.14(@types/node@24.0.14) + '@inquirer/figures': 1.0.12 + '@inquirer/type': 3.0.7(@types/node@24.0.14) + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 24.0.14 - '@eslint-community/eslint-utils@4.7.0(eslint@9.27.0(jiti@2.4.2))': + '@inquirer/confirm@5.1.13(@types/node@24.0.14)': dependencies: - eslint: 9.27.0(jiti@2.4.2) - eslint-visitor-keys: 3.4.3 + '@inquirer/core': 10.1.14(@types/node@24.0.14) + '@inquirer/type': 3.0.7(@types/node@24.0.14) + optionalDependencies: + '@types/node': 24.0.14 - '@eslint-community/regexpp@4.12.1': {} + '@inquirer/core@10.1.14(@types/node@24.0.14)': + dependencies: + '@inquirer/figures': 1.0.12 + '@inquirer/type': 3.0.7(@types/node@24.0.14) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 24.0.14 - '@eslint/compat@1.2.9(eslint@9.27.0(jiti@2.4.2))': + '@inquirer/editor@4.2.14(@types/node@24.0.14)': + dependencies: + '@inquirer/core': 10.1.14(@types/node@24.0.14) + '@inquirer/type': 3.0.7(@types/node@24.0.14) + external-editor: 3.1.0 optionalDependencies: - eslint: 9.27.0(jiti@2.4.2) + '@types/node': 24.0.14 - '@eslint/config-array@0.20.0': + '@inquirer/expand@4.0.16(@types/node@24.0.14)': dependencies: - '@eslint/object-schema': 2.1.6 - debug: 4.4.1(supports-color@8.1.1) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + '@inquirer/core': 10.1.14(@types/node@24.0.14) + '@inquirer/type': 3.0.7(@types/node@24.0.14) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 24.0.14 - '@eslint/config-helpers@0.2.2': {} + '@inquirer/figures@1.0.12': {} - '@eslint/core@0.14.0': + '@inquirer/input@4.2.0(@types/node@24.0.14)': dependencies: - '@types/json-schema': 7.0.15 + '@inquirer/core': 10.1.14(@types/node@24.0.14) + '@inquirer/type': 3.0.7(@types/node@24.0.14) + optionalDependencies: + '@types/node': 24.0.14 - '@eslint/eslintrc@3.3.1': + '@inquirer/number@3.0.16(@types/node@24.0.14)': dependencies: - ajv: 6.12.6 - debug: 4.4.1(supports-color@8.1.1) - espree: 10.3.0 - globals: 14.0.0 - ignore: 5.3.2 - import-fresh: 3.3.1 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color + '@inquirer/core': 10.1.14(@types/node@24.0.14) + '@inquirer/type': 3.0.7(@types/node@24.0.14) + optionalDependencies: + '@types/node': 24.0.14 - '@eslint/js@9.27.0': {} - - '@eslint/object-schema@2.1.6': {} - - '@eslint/plugin-kit@0.3.1': - dependencies: - '@eslint/core': 0.14.0 - levn: 0.4.1 - - '@gerrit0/mini-shiki@3.8.0': - dependencies: - '@shikijs/engine-oniguruma': 3.8.0 - '@shikijs/langs': 3.8.0 - '@shikijs/themes': 3.8.0 - '@shikijs/types': 3.8.0 - '@shikijs/vscode-textmate': 10.0.2 - - '@gitbeaker/core@38.12.1': - dependencies: - '@gitbeaker/requester-utils': 38.12.1 - qs: 6.14.0 - xcase: 2.0.1 - - '@gitbeaker/requester-utils@38.12.1': - dependencies: - qs: 6.14.0 - xcase: 2.0.1 - - '@gitbeaker/rest@38.12.1': - dependencies: - '@gitbeaker/core': 38.12.1 - '@gitbeaker/requester-utils': 38.12.1 - - '@gwhitney/detect-indent@7.0.1': {} - - '@humanfs/core@0.19.1': {} - - '@humanfs/node@0.16.6': - dependencies: - '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/retry@0.3.1': {} - - '@humanwhocodes/retry@0.4.3': {} - - '@inquirer/checkbox@3.0.1': - dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/figures': 1.0.11 - '@inquirer/type': 2.0.0 - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.2 - - '@inquirer/checkbox@4.1.6(@types/node@22.15.21)': - dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.21) - '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.6(@types/node@22.15.21) - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.2 - optionalDependencies: - '@types/node': 22.15.21 - - '@inquirer/confirm@4.0.1': - dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/type': 2.0.0 - - '@inquirer/confirm@5.1.10(@types/node@22.15.21)': - dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.21) - '@inquirer/type': 3.0.6(@types/node@22.15.21) - optionalDependencies: - '@types/node': 22.15.21 - - '@inquirer/core@10.1.11(@types/node@22.15.21)': - dependencies: - '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.6(@types/node@22.15.21) - ansi-escapes: 4.3.2 - cli-width: 4.1.0 - mute-stream: 2.0.0 - signal-exit: 4.1.0 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.2 - optionalDependencies: - '@types/node': 22.15.21 - - '@inquirer/core@9.2.1': - dependencies: - '@inquirer/figures': 1.0.11 - '@inquirer/type': 2.0.0 - '@types/mute-stream': 0.0.4 - '@types/node': 22.15.21 - '@types/wrap-ansi': 3.0.0 - ansi-escapes: 4.3.2 - cli-width: 4.1.0 - mute-stream: 1.0.0 - signal-exit: 4.1.0 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.2 - - '@inquirer/editor@3.0.1': - dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/type': 2.0.0 - external-editor: 3.1.0 - - '@inquirer/editor@4.2.11(@types/node@22.15.21)': - dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.21) - '@inquirer/type': 3.0.6(@types/node@22.15.21) - external-editor: 3.1.0 - optionalDependencies: - '@types/node': 22.15.21 - - '@inquirer/expand@3.0.1': - dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/type': 2.0.0 - yoctocolors-cjs: 2.1.2 - - '@inquirer/expand@4.0.13(@types/node@22.15.21)': - dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.21) - '@inquirer/type': 3.0.6(@types/node@22.15.21) - yoctocolors-cjs: 2.1.2 - optionalDependencies: - '@types/node': 22.15.21 - - '@inquirer/figures@1.0.11': {} - - '@inquirer/input@3.0.1': - dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/type': 2.0.0 - - '@inquirer/input@4.1.10(@types/node@22.15.21)': - dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.21) - '@inquirer/type': 3.0.6(@types/node@22.15.21) - optionalDependencies: - '@types/node': 22.15.21 - - '@inquirer/number@2.0.1': - dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/type': 2.0.0 - - '@inquirer/number@3.0.13(@types/node@22.15.21)': + '@inquirer/password@4.0.16(@types/node@24.0.14)': dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.21) - '@inquirer/type': 3.0.6(@types/node@22.15.21) - optionalDependencies: - '@types/node': 22.15.21 - - '@inquirer/password@3.0.1': - dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/type': 2.0.0 - ansi-escapes: 4.3.2 - - '@inquirer/password@4.0.13(@types/node@22.15.21)': - dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.21) - '@inquirer/type': 3.0.6(@types/node@22.15.21) + '@inquirer/core': 10.1.14(@types/node@24.0.14) + '@inquirer/type': 3.0.7(@types/node@24.0.14) ansi-escapes: 4.3.2 optionalDependencies: - '@types/node': 22.15.21 - - '@inquirer/prompts@6.0.1': - dependencies: - '@inquirer/checkbox': 3.0.1 - '@inquirer/confirm': 4.0.1 - '@inquirer/editor': 3.0.1 - '@inquirer/expand': 3.0.1 - '@inquirer/input': 3.0.1 - '@inquirer/number': 2.0.1 - '@inquirer/password': 3.0.1 - '@inquirer/rawlist': 3.0.1 - '@inquirer/search': 2.0.1 - '@inquirer/select': 3.0.1 - - '@inquirer/prompts@7.5.1(@types/node@22.15.21)': - dependencies: - '@inquirer/checkbox': 4.1.6(@types/node@22.15.21) - '@inquirer/confirm': 5.1.10(@types/node@22.15.21) - '@inquirer/editor': 4.2.11(@types/node@22.15.21) - '@inquirer/expand': 4.0.13(@types/node@22.15.21) - '@inquirer/input': 4.1.10(@types/node@22.15.21) - '@inquirer/number': 3.0.13(@types/node@22.15.21) - '@inquirer/password': 4.0.13(@types/node@22.15.21) - '@inquirer/rawlist': 4.1.1(@types/node@22.15.21) - '@inquirer/search': 3.0.13(@types/node@22.15.21) - '@inquirer/select': 4.2.1(@types/node@22.15.21) + '@types/node': 24.0.14 + + '@inquirer/prompts@7.6.0(@types/node@24.0.14)': + dependencies: + '@inquirer/checkbox': 4.1.9(@types/node@24.0.14) + '@inquirer/confirm': 5.1.13(@types/node@24.0.14) + '@inquirer/editor': 4.2.14(@types/node@24.0.14) + '@inquirer/expand': 4.0.16(@types/node@24.0.14) + '@inquirer/input': 4.2.0(@types/node@24.0.14) + '@inquirer/number': 3.0.16(@types/node@24.0.14) + '@inquirer/password': 4.0.16(@types/node@24.0.14) + '@inquirer/rawlist': 4.1.4(@types/node@24.0.14) + '@inquirer/search': 3.0.16(@types/node@24.0.14) + '@inquirer/select': 4.2.4(@types/node@24.0.14) optionalDependencies: - '@types/node': 22.15.21 - - '@inquirer/rawlist@3.0.1': - dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/type': 2.0.0 - yoctocolors-cjs: 2.1.2 + '@types/node': 24.0.14 - '@inquirer/rawlist@4.1.1(@types/node@22.15.21)': + '@inquirer/rawlist@4.1.4(@types/node@24.0.14)': dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.21) - '@inquirer/type': 3.0.6(@types/node@22.15.21) + '@inquirer/core': 10.1.14(@types/node@24.0.14) + '@inquirer/type': 3.0.7(@types/node@24.0.14) yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.15.21 - - '@inquirer/search@2.0.1': - dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/figures': 1.0.11 - '@inquirer/type': 2.0.0 - yoctocolors-cjs: 2.1.2 + '@types/node': 24.0.14 - '@inquirer/search@3.0.13(@types/node@22.15.21)': + '@inquirer/search@3.0.16(@types/node@24.0.14)': dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.21) - '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.6(@types/node@22.15.21) + '@inquirer/core': 10.1.14(@types/node@24.0.14) + '@inquirer/figures': 1.0.12 + '@inquirer/type': 3.0.7(@types/node@24.0.14) yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.15.21 - - '@inquirer/select@3.0.1': - dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/figures': 1.0.11 - '@inquirer/type': 2.0.0 - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.2 + '@types/node': 24.0.14 - '@inquirer/select@4.2.1(@types/node@22.15.21)': + '@inquirer/select@4.2.4(@types/node@24.0.14)': dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.21) - '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.6(@types/node@22.15.21) + '@inquirer/core': 10.1.14(@types/node@24.0.14) + '@inquirer/figures': 1.0.12 + '@inquirer/type': 3.0.7(@types/node@24.0.14) ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.15.21 + '@types/node': 24.0.14 - '@inquirer/type@2.0.0': - dependencies: - mute-stream: 1.0.0 - - '@inquirer/type@3.0.6(@types/node@22.15.21)': + '@inquirer/type@3.0.7(@types/node@24.0.14)': optionalDependencies: - '@types/node': 22.15.21 + '@types/node': 24.0.14 '@isaacs/balanced-match@4.0.1': {} @@ -9490,76 +4396,68 @@ snapshots: dependencies: minipass: 7.1.2 - '@jest/expect-utils@29.7.0': + '@jest/diff-sequences@30.0.1': {} + + '@jest/expect-utils@30.0.4': + dependencies: + '@jest/get-type': 30.0.1 + + '@jest/get-type@30.0.1': {} + + '@jest/pattern@30.0.1': dependencies: - jest-get-type: 29.6.3 + '@types/node': 24.0.14 + jest-regex-util: 30.0.1 - '@jest/schemas@29.6.3': + '@jest/schemas@30.0.1': dependencies: - '@sinclair/typebox': 0.27.8 + '@sinclair/typebox': 0.34.38 - '@jest/types@29.6.3': + '@jest/types@30.0.1': dependencies: - '@jest/schemas': 29.6.3 + '@jest/pattern': 30.0.1 + '@jest/schemas': 30.0.1 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.15.21 + '@types/node': 24.0.14 '@types/yargs': 17.0.33 chalk: 4.1.2 - '@jridgewell/gen-mapping@0.3.8': + '@jridgewell/gen-mapping@0.3.12': dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/trace-mapping': 0.3.29 '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/source-map@0.3.6': + '@jridgewell/source-map@0.3.10': dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/trace-mapping': 0.3.29 - '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.4': {} - '@jridgewell/trace-mapping@0.3.25': + '@jridgewell/trace-mapping@0.3.29': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.4 '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@kwsites/file-exists@1.1.1': - dependencies: - debug: 4.4.1(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color + '@jridgewell/sourcemap-codec': 1.5.4 - '@kwsites/promise-deferred@1.1.1': {} - - '@laynezh/vite-plugin-lib-assets@1.1.0(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(sass@1.89.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0))': + '@laynezh/vite-plugin-lib-assets@1.2.0(vite@6.3.5(@types/node@24.0.14)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3))': dependencies: escape-string-regexp: 4.0.0 loader-utils: 3.3.1 mrmime: 1.0.1 semver: 7.7.2 - vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(sass@1.89.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0) - - '@napi-rs/wasm-runtime@0.2.10': - dependencies: - '@emnapi/core': 1.4.3 - '@emnapi/runtime': 1.4.3 - '@tybys/wasm-util': 0.9.0 - optional: true + vite: 6.3.5(@types/node@24.0.14)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3) '@noble/ciphers@1.3.0': {} - '@noble/curves@1.9.1': + '@noble/curves@1.9.4': dependencies: '@noble/hashes': 1.8.0 @@ -9577,278 +4475,29 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 - '@npmcli/agent@3.0.0': - dependencies: - agent-base: 7.1.3 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - lru-cache: 10.4.3 - socks-proxy-agent: 8.0.5 - transitivePeerDependencies: - - supports-color + '@oxlint/darwin-arm64@1.7.0': optional: true - '@npmcli/fs@4.0.0': - dependencies: - semver: 7.7.2 - - '@octokit/auth-token@4.0.0': {} - - '@octokit/auth-token@6.0.0': {} - - '@octokit/core@5.2.2': - dependencies: - '@octokit/auth-token': 4.0.0 - '@octokit/graphql': 7.1.1 - '@octokit/request': 8.4.1 - '@octokit/request-error': 5.1.1 - '@octokit/types': 13.10.0 - before-after-hook: 2.2.3 - universal-user-agent: 6.0.1 - - '@octokit/core@7.0.3': - dependencies: - '@octokit/auth-token': 6.0.0 - '@octokit/graphql': 9.0.1 - '@octokit/request': 10.0.3 - '@octokit/request-error': 7.0.0 - '@octokit/types': 14.1.0 - before-after-hook: 4.0.0 - universal-user-agent: 7.0.3 - - '@octokit/endpoint@11.0.0': - dependencies: - '@octokit/types': 14.1.0 - universal-user-agent: 7.0.3 - - '@octokit/endpoint@9.0.6': - dependencies: - '@octokit/types': 13.10.0 - universal-user-agent: 6.0.1 - - '@octokit/graphql@7.1.1': - dependencies: - '@octokit/request': 8.4.1 - '@octokit/types': 13.10.0 - universal-user-agent: 6.0.1 - - '@octokit/graphql@9.0.1': - dependencies: - '@octokit/request': 10.0.3 - '@octokit/types': 14.1.0 - universal-user-agent: 7.0.3 - - '@octokit/openapi-types@24.2.0': {} - - '@octokit/openapi-types@25.1.0': {} - - '@octokit/plugin-paginate-rest@11.4.4-cjs.2(@octokit/core@5.2.2)': - dependencies: - '@octokit/core': 5.2.2 - '@octokit/types': 13.10.0 - - '@octokit/plugin-paginate-rest@13.1.1(@octokit/core@7.0.3)': - dependencies: - '@octokit/core': 7.0.3 - '@octokit/types': 14.1.0 - - '@octokit/plugin-request-log@4.0.1(@octokit/core@5.2.2)': - dependencies: - '@octokit/core': 5.2.2 - - '@octokit/plugin-rest-endpoint-methods@13.3.2-cjs.1(@octokit/core@5.2.2)': - dependencies: - '@octokit/core': 5.2.2 - '@octokit/types': 13.10.0 - - '@octokit/plugin-retry@8.0.1(@octokit/core@7.0.3)': - dependencies: - '@octokit/core': 7.0.3 - '@octokit/request-error': 7.0.0 - '@octokit/types': 14.1.0 - bottleneck: 2.19.5 - - '@octokit/plugin-throttling@11.0.1(@octokit/core@7.0.3)': - dependencies: - '@octokit/core': 7.0.3 - '@octokit/types': 14.1.0 - bottleneck: 2.19.5 - - '@octokit/request-error@5.1.1': - dependencies: - '@octokit/types': 13.10.0 - deprecation: 2.3.1 - once: 1.4.0 - - '@octokit/request-error@7.0.0': - dependencies: - '@octokit/types': 14.1.0 - - '@octokit/request@10.0.3': - dependencies: - '@octokit/endpoint': 11.0.0 - '@octokit/request-error': 7.0.0 - '@octokit/types': 14.1.0 - fast-content-type-parse: 3.0.0 - universal-user-agent: 7.0.3 - - '@octokit/request@8.4.1': - dependencies: - '@octokit/endpoint': 9.0.6 - '@octokit/request-error': 5.1.1 - '@octokit/types': 13.10.0 - universal-user-agent: 6.0.1 - - '@octokit/rest@20.1.2': - dependencies: - '@octokit/core': 5.2.2 - '@octokit/plugin-paginate-rest': 11.4.4-cjs.2(@octokit/core@5.2.2) - '@octokit/plugin-request-log': 4.0.1(@octokit/core@5.2.2) - '@octokit/plugin-rest-endpoint-methods': 13.3.2-cjs.1(@octokit/core@5.2.2) - - '@octokit/types@13.10.0': - dependencies: - '@octokit/openapi-types': 24.2.0 - - '@octokit/types@14.1.0': - dependencies: - '@octokit/openapi-types': 25.1.0 - - '@one-ini/wasm@0.2.0': {} - - '@opentelemetry/api-logs@0.202.0': - dependencies: - '@opentelemetry/api': 1.9.0 - - '@opentelemetry/api@1.9.0': {} - - '@opentelemetry/context-async-hooks@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - - '@opentelemetry/core@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/semantic-conventions': 1.34.0 - - '@opentelemetry/exporter-trace-otlp-http@0.202.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-exporter-base': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) - - '@opentelemetry/instrumentation-bunyan@0.48.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.202.0 - '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) - '@types/bunyan': 1.8.11 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation-http@0.202.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 - forwarded-parse: 2.1.2 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/instrumentation@0.202.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.202.0 - import-in-the-middle: 1.14.2 - require-in-the-middle: 7.5.2 - transitivePeerDependencies: - - supports-color - - '@opentelemetry/otlp-exporter-base@0.202.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/otlp-transformer': 0.202.0(@opentelemetry/api@1.9.0) - - '@opentelemetry/otlp-transformer@0.202.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.202.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-logs': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-metrics': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) - protobufjs: 7.5.3 - - '@opentelemetry/resource-detector-aws@2.2.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 - - '@opentelemetry/resource-detector-azure@0.9.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 - - '@opentelemetry/resource-detector-gcp@0.36.0(@opentelemetry/api@1.9.0)(encoding@0.1.13)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 - gcp-metadata: 6.1.1(encoding@0.1.13) - transitivePeerDependencies: - - encoding - - supports-color - - '@opentelemetry/resource-detector-github@0.31.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@oxlint/darwin-x64@1.7.0': + optional: true - '@opentelemetry/resources@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@oxlint/linux-arm64-gnu@1.7.0': + optional: true - '@opentelemetry/sdk-logs@0.202.0(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/api-logs': 0.202.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@oxlint/linux-arm64-musl@1.7.0': + optional: true - '@opentelemetry/sdk-metrics@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) + '@oxlint/linux-x64-gnu@1.7.0': + optional: true - '@opentelemetry/sdk-trace-base@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 + '@oxlint/linux-x64-musl@1.7.0': + optional: true - '@opentelemetry/sdk-trace-node@2.0.1(@opentelemetry/api@1.9.0)': - dependencies: - '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) + '@oxlint/win32-arm64@1.7.0': + optional: true - '@opentelemetry/semantic-conventions@1.34.0': {} + '@oxlint/win32-x64@1.7.0': + optional: true '@parcel/watcher-android-arm64@2.5.1': optional: true @@ -9914,844 +4563,229 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@pkgr/core@0.2.4': {} - - '@pnpm/catalogs.protocol-parser@1001.0.0': {} - - '@pnpm/catalogs.resolver@1000.0.3': + '@promptbook/utils@0.69.5': dependencies: - '@pnpm/catalogs.protocol-parser': 1001.0.0 - '@pnpm/error': 1000.0.2 - - '@pnpm/catalogs.types@1000.0.0': {} - - '@pnpm/config.env-replace@1.1.0': {} - - '@pnpm/constants@1001.1.0': {} - - '@pnpm/constants@6.1.0': {} + spacetrim: 0.11.59 - '@pnpm/error@1000.0.2': + '@puppeteer/browsers@2.10.6': dependencies: - '@pnpm/constants': 1001.1.0 + debug: 4.4.1(supports-color@8.1.1) + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.5.0 + semver: 7.7.2 + tar-fs: 3.1.0 + yargs: 17.7.2 + transitivePeerDependencies: + - bare-buffer + - supports-color - '@pnpm/error@4.0.0': - dependencies: - '@pnpm/constants': 6.1.0 + '@rolldown/pluginutils@1.0.0-beta.27': {} - '@pnpm/graceful-fs@2.0.0': + '@rollup/plugin-sucrase@5.0.2(rollup@4.45.1)': dependencies: - graceful-fs: 4.2.11 + '@rollup/pluginutils': 5.2.0(rollup@4.45.1) + sucrase: 3.35.0 + optionalDependencies: + rollup: 4.45.1 - '@pnpm/network.ca-file@1.0.2': + '@rollup/pluginutils@5.2.0(rollup@4.45.1)': dependencies: - graceful-fs: 4.2.10 + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + optionalDependencies: + rollup: 4.45.1 - '@pnpm/npm-conf@2.3.1': - dependencies: - '@pnpm/config.env-replace': 1.1.0 - '@pnpm/network.ca-file': 1.0.2 - config-chain: 1.1.13 + '@rollup/rollup-android-arm-eabi@4.45.1': + optional: true - '@pnpm/parse-overrides@1001.0.0': - dependencies: - '@pnpm/catalogs.resolver': 1000.0.3 - '@pnpm/catalogs.types': 1000.0.0 - '@pnpm/error': 1000.0.2 - '@pnpm/parse-wanted-dependency': 1001.0.0 + '@rollup/rollup-android-arm64@4.45.1': + optional: true - '@pnpm/parse-wanted-dependency@1001.0.0': - dependencies: - validate-npm-package-name: 5.0.0 + '@rollup/rollup-darwin-arm64@4.45.1': + optional: true - '@pnpm/read-project-manifest@4.1.1': - dependencies: - '@gwhitney/detect-indent': 7.0.1 - '@pnpm/error': 4.0.0 - '@pnpm/graceful-fs': 2.0.0 - '@pnpm/text.comments-parser': 1.0.0 - '@pnpm/types': 8.9.0 - '@pnpm/write-project-manifest': 4.1.1 - fast-deep-equal: 3.1.3 - is-windows: 1.0.2 - json5: 2.2.3 - parse-json: 5.2.0 - read-yaml-file: 2.1.0 - sort-keys: 4.2.0 - strip-bom: 4.0.0 + '@rollup/rollup-darwin-x64@4.45.1': + optional: true - '@pnpm/text.comments-parser@1.0.0': - dependencies: - strip-comments-strings: 1.2.0 + '@rollup/rollup-freebsd-arm64@4.45.1': + optional: true - '@pnpm/types@8.9.0': {} + '@rollup/rollup-freebsd-x64@4.45.1': + optional: true - '@pnpm/util.lex-comparator@1.0.0': {} + '@rollup/rollup-linux-arm-gnueabihf@4.45.1': + optional: true - '@pnpm/write-project-manifest@4.1.1': - dependencies: - '@pnpm/text.comments-parser': 1.0.0 - '@pnpm/types': 8.9.0 - json5: 2.2.3 - write-file-atomic: 5.0.1 - write-yaml-file: 4.2.0 + '@rollup/rollup-linux-arm-musleabihf@4.45.1': + optional: true - '@promptbook/utils@0.69.5': - dependencies: - spacetrim: 0.11.59 + '@rollup/rollup-linux-arm64-gnu@4.45.1': + optional: true - '@protobufjs/aspromise@1.1.2': {} + '@rollup/rollup-linux-arm64-musl@4.45.1': + optional: true - '@protobufjs/base64@1.1.2': {} + '@rollup/rollup-linux-loongarch64-gnu@4.45.1': + optional: true - '@protobufjs/codegen@2.0.4': {} + '@rollup/rollup-linux-powerpc64le-gnu@4.45.1': + optional: true - '@protobufjs/eventemitter@1.1.0': {} + '@rollup/rollup-linux-riscv64-gnu@4.45.1': + optional: true - '@protobufjs/fetch@1.1.0': - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/inquire': 1.1.0 + '@rollup/rollup-linux-riscv64-musl@4.45.1': + optional: true - '@protobufjs/float@1.0.2': {} + '@rollup/rollup-linux-s390x-gnu@4.45.1': + optional: true - '@protobufjs/inquire@1.1.0': {} - - '@protobufjs/path@1.1.2': {} - - '@protobufjs/pool@1.1.0': {} - - '@protobufjs/utf8@1.1.0': {} - - '@puppeteer/browsers@2.10.5': - dependencies: - debug: 4.4.1(supports-color@8.1.1) - extract-zip: 2.0.1 - progress: 2.0.3 - proxy-agent: 6.5.0 - semver: 7.7.2 - tar-fs: 3.0.8 - yargs: 17.7.2 - transitivePeerDependencies: - - bare-buffer - - supports-color - - '@qnighy/marshal@0.1.3': - dependencies: - '@babel/runtime-corejs3': 7.28.0 - - '@redis/bloom@1.2.0(@redis/client@1.6.1)': - dependencies: - '@redis/client': 1.6.1 - - '@redis/client@1.6.1': - dependencies: - cluster-key-slot: 1.1.2 - generic-pool: 3.9.0 - yallist: 4.0.0 - - '@redis/graph@1.1.1(@redis/client@1.6.1)': - dependencies: - '@redis/client': 1.6.1 - - '@redis/json@1.0.7(@redis/client@1.6.1)': - dependencies: - '@redis/client': 1.6.1 - - '@redis/search@1.2.0(@redis/client@1.6.1)': - dependencies: - '@redis/client': 1.6.1 - - '@redis/time-series@1.1.0(@redis/client@1.6.1)': - dependencies: - '@redis/client': 1.6.1 - - '@renovatebot/detect-tools@1.1.0': - dependencies: - fs-extra: 11.3.0 - toml-eslint-parser: 0.10.0 - upath: 2.0.1 - zod: 3.25.76 - - '@renovatebot/kbpgp@4.0.1': - dependencies: - bn: 1.0.5 - bzip-deflate: 1.0.0 - iced-error: 0.0.13 - iced-lock: 2.0.1 - iced-runtime-3: 3.0.5 - keybase-ecurve: 1.0.1 - keybase-nacl: 1.1.4 - minimist: 1.2.8 - pgp-utils: 0.0.35 - purepack: 1.0.6 - triplesec: 4.0.3 - tweetnacl: 1.0.3 - - '@renovatebot/osv-offline-db@1.7.4': - dependencies: - '@seald-io/nedb': 4.1.2 - - '@renovatebot/osv-offline@1.6.6': - dependencies: - '@renovatebot/osv-offline-db': 1.7.4 - adm-zip: 0.5.16 - fs-extra: 11.3.0 - got: 11.8.6 - luxon: 3.6.1 - - '@renovatebot/pep440@4.1.0': {} - - '@renovatebot/ruby-semver@4.0.0': {} - - '@rollup/plugin-inject@5.0.5(rollup@4.41.0)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.41.0) - estree-walker: 2.0.2 - magic-string: 0.30.17 - optionalDependencies: - rollup: 4.41.0 - - '@rollup/plugin-sucrase@5.0.2(rollup@4.41.0)': - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.41.0) - sucrase: 3.35.0 - optionalDependencies: - rollup: 4.41.0 - - '@rollup/pluginutils@5.1.4(rollup@4.41.0)': - dependencies: - '@types/estree': 1.0.7 - estree-walker: 2.0.2 - picomatch: 4.0.2 - optionalDependencies: - rollup: 4.41.0 - - '@rollup/rollup-android-arm-eabi@4.41.0': - optional: true - - '@rollup/rollup-android-arm64@4.41.0': - optional: true - - '@rollup/rollup-darwin-arm64@4.41.0': - optional: true - - '@rollup/rollup-darwin-x64@4.41.0': + '@rollup/rollup-linux-x64-gnu@4.45.1': optional: true - '@rollup/rollup-freebsd-arm64@4.41.0': + '@rollup/rollup-linux-x64-musl@4.45.1': optional: true - '@rollup/rollup-freebsd-x64@4.41.0': + '@rollup/rollup-win32-arm64-msvc@4.45.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.41.0': + '@rollup/rollup-win32-ia32-msvc@4.45.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.41.0': + '@rollup/rollup-win32-x64-msvc@4.45.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.41.0': - optional: true + '@sec-ant/readable-stream@0.4.1': {} - '@rollup/rollup-linux-arm64-musl@4.41.0': - optional: true + '@sinclair/typebox@0.34.38': {} - '@rollup/rollup-linux-loongarch64-gnu@4.41.0': - optional: true + '@sindresorhus/merge-streams@4.0.0': {} - '@rollup/rollup-linux-powerpc64le-gnu@4.41.0': + '@swc/core-darwin-arm64@1.13.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.41.0': + '@swc/core-darwin-x64@1.13.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.41.0': + '@swc/core-linux-arm-gnueabihf@1.13.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.41.0': + '@swc/core-linux-arm64-gnu@1.13.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.41.0': + '@swc/core-linux-arm64-musl@1.13.0': optional: true - '@rollup/rollup-linux-x64-musl@4.41.0': + '@swc/core-linux-x64-gnu@1.13.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.41.0': + '@swc/core-linux-x64-musl@1.13.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.41.0': + '@swc/core-win32-arm64-msvc@1.13.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.41.0': + '@swc/core-win32-ia32-msvc@1.13.0': optional: true - '@rtsao/scc@1.1.0': + '@swc/core-win32-x64-msvc@1.13.0': optional: true - '@seald-io/binary-search-tree@1.0.3': {} - - '@seald-io/nedb@4.1.2': - dependencies: - '@seald-io/binary-search-tree': 1.0.3 - localforage: 1.10.0 - util: 0.12.5 - - '@sec-ant/readable-stream@0.4.1': {} - - '@semantic-release/changelog@6.0.3(semantic-release@24.2.7(typescript@5.8.3))': - dependencies: - '@semantic-release/error': 3.0.0 - aggregate-error: 3.1.0 - fs-extra: 11.3.0 - lodash: 4.17.21 - semantic-release: 24.2.7(typescript@5.8.3) - - '@semantic-release/commit-analyzer@13.0.1(semantic-release@24.2.7(typescript@5.8.3))': - dependencies: - conventional-changelog-angular: 8.0.0 - conventional-changelog-writer: 8.2.0 - conventional-commits-filter: 5.0.0 - conventional-commits-parser: 6.2.0 - debug: 4.4.1(supports-color@8.1.1) - import-from-esm: 2.0.0 - lodash-es: 4.17.21 - micromatch: 4.0.8 - semantic-release: 24.2.7(typescript@5.8.3) - transitivePeerDependencies: - - supports-color - - '@semantic-release/error@3.0.0': {} - - '@semantic-release/error@4.0.0': {} - - '@semantic-release/git@10.0.1(semantic-release@24.2.7(typescript@5.8.3))': - dependencies: - '@semantic-release/error': 3.0.0 - aggregate-error: 3.1.0 - debug: 4.4.1(supports-color@8.1.1) - dir-glob: 3.0.1 - execa: 5.1.1 - lodash: 4.17.21 - micromatch: 4.0.8 - p-reduce: 2.1.0 - semantic-release: 24.2.7(typescript@5.8.3) - transitivePeerDependencies: - - supports-color - - '@semantic-release/github@11.0.3(semantic-release@24.2.7(typescript@5.8.3))': - dependencies: - '@octokit/core': 7.0.3 - '@octokit/plugin-paginate-rest': 13.1.1(@octokit/core@7.0.3) - '@octokit/plugin-retry': 8.0.1(@octokit/core@7.0.3) - '@octokit/plugin-throttling': 11.0.1(@octokit/core@7.0.3) - '@semantic-release/error': 4.0.0 - aggregate-error: 5.0.0 - debug: 4.4.1(supports-color@8.1.1) - dir-glob: 3.0.1 - globby: 14.1.0 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 - issue-parser: 7.0.1 - lodash-es: 4.17.21 - mime: 4.0.7 - p-filter: 4.1.0 - semantic-release: 24.2.7(typescript@5.8.3) - url-join: 5.0.0 - transitivePeerDependencies: - - supports-color - - '@semantic-release/npm@12.0.2(semantic-release@24.2.7(typescript@5.8.3))': - dependencies: - '@semantic-release/error': 4.0.0 - aggregate-error: 5.0.0 - execa: 9.5.3 - fs-extra: 11.3.0 - lodash-es: 4.17.21 - nerf-dart: 1.0.0 - normalize-url: 8.0.2 - npm: 10.9.3 - rc: 1.2.8 - read-pkg: 9.0.1 - registry-auth-token: 5.1.0 - semantic-release: 24.2.7(typescript@5.8.3) - semver: 7.7.2 - tempy: 3.1.0 - - '@semantic-release/release-notes-generator@14.0.3(semantic-release@24.2.7(typescript@5.8.3))': - dependencies: - conventional-changelog-angular: 8.0.0 - conventional-changelog-writer: 8.2.0 - conventional-commits-filter: 5.0.0 - conventional-commits-parser: 6.2.0 - debug: 4.4.1(supports-color@8.1.1) - get-stream: 7.0.1 - import-from-esm: 2.0.0 - into-stream: 7.0.0 - lodash-es: 4.17.21 - read-package-up: 11.0.0 - semantic-release: 24.2.7(typescript@5.8.3) - transitivePeerDependencies: - - supports-color - - '@shikijs/engine-oniguruma@3.8.0': - dependencies: - '@shikijs/types': 3.8.0 - '@shikijs/vscode-textmate': 10.0.2 - - '@shikijs/langs@3.8.0': - dependencies: - '@shikijs/types': 3.8.0 - - '@shikijs/themes@3.8.0': - dependencies: - '@shikijs/types': 3.8.0 - - '@shikijs/types@3.8.0': - dependencies: - '@shikijs/vscode-textmate': 10.0.2 - '@types/hast': 3.0.4 - - '@shikijs/vscode-textmate@10.0.2': {} - - '@sinclair/typebox@0.27.8': {} - - '@sindresorhus/is@4.6.0': {} - - '@sindresorhus/is@7.0.2': {} - - '@sindresorhus/merge-streams@2.3.0': {} - - '@sindresorhus/merge-streams@4.0.0': {} - - '@smithy/abort-controller@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/chunked-blob-reader-native@4.0.0': - dependencies: - '@smithy/util-base64': 4.0.0 - tslib: 2.8.1 - - '@smithy/chunked-blob-reader@5.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/config-resolver@4.1.4': - dependencies: - '@smithy/node-config-provider': 4.1.3 - '@smithy/types': 4.3.1 - '@smithy/util-config-provider': 4.0.0 - '@smithy/util-middleware': 4.0.4 - tslib: 2.8.1 - - '@smithy/core@3.7.0': - dependencies: - '@smithy/middleware-serde': 4.0.8 - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - '@smithy/util-base64': 4.0.0 - '@smithy/util-body-length-browser': 4.0.0 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-stream': 4.2.3 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/credential-provider-imds@4.0.6': - dependencies: - '@smithy/node-config-provider': 4.1.3 - '@smithy/property-provider': 4.0.4 - '@smithy/types': 4.3.1 - '@smithy/url-parser': 4.0.4 - tslib: 2.8.1 - - '@smithy/eventstream-codec@4.0.4': - dependencies: - '@aws-crypto/crc32': 5.2.0 - '@smithy/types': 4.3.1 - '@smithy/util-hex-encoding': 4.0.0 - tslib: 2.8.1 - - '@smithy/eventstream-serde-browser@4.0.4': - dependencies: - '@smithy/eventstream-serde-universal': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/eventstream-serde-config-resolver@4.1.2': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/eventstream-serde-node@4.0.4': - dependencies: - '@smithy/eventstream-serde-universal': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/eventstream-serde-universal@4.0.4': - dependencies: - '@smithy/eventstream-codec': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/fetch-http-handler@5.1.0': - dependencies: - '@smithy/protocol-http': 5.1.2 - '@smithy/querystring-builder': 4.0.4 - '@smithy/types': 4.3.1 - '@smithy/util-base64': 4.0.0 - tslib: 2.8.1 - - '@smithy/hash-blob-browser@4.0.4': - dependencies: - '@smithy/chunked-blob-reader': 5.0.0 - '@smithy/chunked-blob-reader-native': 4.0.0 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/hash-node@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - '@smithy/util-buffer-from': 4.0.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/hash-stream-node@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/invalid-dependency@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/is-array-buffer@2.2.0': - dependencies: - tslib: 2.8.1 - - '@smithy/is-array-buffer@4.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/md5-js@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/middleware-content-length@4.0.4': - dependencies: - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/middleware-endpoint@4.1.15': - dependencies: - '@smithy/core': 3.7.0 - '@smithy/middleware-serde': 4.0.8 - '@smithy/node-config-provider': 4.1.3 - '@smithy/shared-ini-file-loader': 4.0.4 - '@smithy/types': 4.3.1 - '@smithy/url-parser': 4.0.4 - '@smithy/util-middleware': 4.0.4 - tslib: 2.8.1 - - '@smithy/middleware-retry@4.1.16': - dependencies: - '@smithy/node-config-provider': 4.1.3 - '@smithy/protocol-http': 5.1.2 - '@smithy/service-error-classification': 4.0.6 - '@smithy/smithy-client': 4.4.7 - '@smithy/types': 4.3.1 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-retry': 4.0.6 - tslib: 2.8.1 - uuid: 9.0.1 - - '@smithy/middleware-serde@4.0.8': - dependencies: - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/middleware-stack@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/node-config-provider@4.1.3': - dependencies: - '@smithy/property-provider': 4.0.4 - '@smithy/shared-ini-file-loader': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/node-http-handler@4.1.0': - dependencies: - '@smithy/abort-controller': 4.0.4 - '@smithy/protocol-http': 5.1.2 - '@smithy/querystring-builder': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/property-provider@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/protocol-http@5.1.2': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/querystring-builder@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - '@smithy/util-uri-escape': 4.0.0 - tslib: 2.8.1 - - '@smithy/querystring-parser@4.0.4': + '@swc/core@1.13.0': dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/service-error-classification@4.0.6': - dependencies: - '@smithy/types': 4.3.1 - - '@smithy/shared-ini-file-loader@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/signature-v4@5.1.2': - dependencies: - '@smithy/is-array-buffer': 4.0.0 - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - '@smithy/util-hex-encoding': 4.0.0 - '@smithy/util-middleware': 4.0.4 - '@smithy/util-uri-escape': 4.0.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/smithy-client@4.4.7': - dependencies: - '@smithy/core': 3.7.0 - '@smithy/middleware-endpoint': 4.1.15 - '@smithy/middleware-stack': 4.0.4 - '@smithy/protocol-http': 5.1.2 - '@smithy/types': 4.3.1 - '@smithy/util-stream': 4.2.3 - tslib: 2.8.1 - - '@smithy/types@4.3.1': - dependencies: - tslib: 2.8.1 - - '@smithy/url-parser@4.0.4': - dependencies: - '@smithy/querystring-parser': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/util-base64@4.0.0': - dependencies: - '@smithy/util-buffer-from': 4.0.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 - - '@smithy/util-body-length-browser@4.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/util-body-length-node@4.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/util-buffer-from@2.2.0': - dependencies: - '@smithy/is-array-buffer': 2.2.0 - tslib: 2.8.1 - - '@smithy/util-buffer-from@4.0.0': - dependencies: - '@smithy/is-array-buffer': 4.0.0 - tslib: 2.8.1 - - '@smithy/util-config-provider@4.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/util-defaults-mode-browser@4.0.23': - dependencies: - '@smithy/property-provider': 4.0.4 - '@smithy/smithy-client': 4.4.7 - '@smithy/types': 4.3.1 - bowser: 2.11.0 - tslib: 2.8.1 - - '@smithy/util-defaults-mode-node@4.0.23': - dependencies: - '@smithy/config-resolver': 4.1.4 - '@smithy/credential-provider-imds': 4.0.6 - '@smithy/node-config-provider': 4.1.3 - '@smithy/property-provider': 4.0.4 - '@smithy/smithy-client': 4.4.7 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/util-endpoints@3.0.6': - dependencies: - '@smithy/node-config-provider': 4.1.3 - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/util-hex-encoding@4.0.0': - dependencies: - tslib: 2.8.1 - - '@smithy/util-middleware@4.0.4': - dependencies: - '@smithy/types': 4.3.1 - tslib: 2.8.1 - - '@smithy/util-retry@4.0.6': - dependencies: - '@smithy/service-error-classification': 4.0.6 - '@smithy/types': 4.3.1 - tslib: 2.8.1 + '@swc/counter': 0.1.3 + '@swc/types': 0.1.23 + optionalDependencies: + '@swc/core-darwin-arm64': 1.13.0 + '@swc/core-darwin-x64': 1.13.0 + '@swc/core-linux-arm-gnueabihf': 1.13.0 + '@swc/core-linux-arm64-gnu': 1.13.0 + '@swc/core-linux-arm64-musl': 1.13.0 + '@swc/core-linux-x64-gnu': 1.13.0 + '@swc/core-linux-x64-musl': 1.13.0 + '@swc/core-win32-arm64-msvc': 1.13.0 + '@swc/core-win32-ia32-msvc': 1.13.0 + '@swc/core-win32-x64-msvc': 1.13.0 - '@smithy/util-stream@4.2.3': - dependencies: - '@smithy/fetch-http-handler': 5.1.0 - '@smithy/node-http-handler': 4.1.0 - '@smithy/types': 4.3.1 - '@smithy/util-base64': 4.0.0 - '@smithy/util-buffer-from': 4.0.0 - '@smithy/util-hex-encoding': 4.0.0 - '@smithy/util-utf8': 4.0.0 - tslib: 2.8.1 + '@swc/counter@0.1.3': {} - '@smithy/util-uri-escape@4.0.0': + '@swc/types@0.1.23': dependencies: - tslib: 2.8.1 + '@swc/counter': 0.1.3 - '@smithy/util-utf8@2.3.0': + '@tailwindcss/node@4.1.11': dependencies: - '@smithy/util-buffer-from': 2.2.0 - tslib: 2.8.1 + '@ampproject/remapping': 2.3.0 + enhanced-resolve: 5.18.2 + jiti: 2.4.2 + lightningcss: 1.30.1 + magic-string: 0.30.17 + source-map-js: 1.2.1 + tailwindcss: 4.1.11 - '@smithy/util-utf8@4.0.0': - dependencies: - '@smithy/util-buffer-from': 4.0.0 - tslib: 2.8.1 + '@tailwindcss/oxide-android-arm64@4.1.11': + optional: true - '@smithy/util-waiter@4.0.6': - dependencies: - '@smithy/abort-controller': 4.0.4 - '@smithy/types': 4.3.1 - tslib: 2.8.1 + '@tailwindcss/oxide-darwin-arm64@4.1.11': + optional: true - '@swc/core-darwin-arm64@1.11.24': + '@tailwindcss/oxide-darwin-x64@4.1.11': optional: true - '@swc/core-darwin-x64@1.11.24': + '@tailwindcss/oxide-freebsd-x64@4.1.11': optional: true - '@swc/core-linux-arm-gnueabihf@1.11.24': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11': optional: true - '@swc/core-linux-arm64-gnu@1.11.24': + '@tailwindcss/oxide-linux-arm64-gnu@4.1.11': optional: true - '@swc/core-linux-arm64-musl@1.11.24': + '@tailwindcss/oxide-linux-arm64-musl@4.1.11': optional: true - '@swc/core-linux-x64-gnu@1.11.24': + '@tailwindcss/oxide-linux-x64-gnu@4.1.11': optional: true - '@swc/core-linux-x64-musl@1.11.24': + '@tailwindcss/oxide-linux-x64-musl@4.1.11': optional: true - '@swc/core-win32-arm64-msvc@1.11.24': + '@tailwindcss/oxide-wasm32-wasi@4.1.11': optional: true - '@swc/core-win32-ia32-msvc@1.11.24': + '@tailwindcss/oxide-win32-arm64-msvc@4.1.11': optional: true - '@swc/core-win32-x64-msvc@1.11.24': + '@tailwindcss/oxide-win32-x64-msvc@4.1.11': optional: true - '@swc/core@1.11.24': + '@tailwindcss/oxide@4.1.11': dependencies: - '@swc/counter': 0.1.3 - '@swc/types': 0.1.21 + detect-libc: 2.0.4 + tar: 7.4.3 optionalDependencies: - '@swc/core-darwin-arm64': 1.11.24 - '@swc/core-darwin-x64': 1.11.24 - '@swc/core-linux-arm-gnueabihf': 1.11.24 - '@swc/core-linux-arm64-gnu': 1.11.24 - '@swc/core-linux-arm64-musl': 1.11.24 - '@swc/core-linux-x64-gnu': 1.11.24 - '@swc/core-linux-x64-musl': 1.11.24 - '@swc/core-win32-arm64-msvc': 1.11.24 - '@swc/core-win32-ia32-msvc': 1.11.24 - '@swc/core-win32-x64-msvc': 1.11.24 - - '@swc/counter@0.1.3': {} - - '@swc/types@0.1.21': + '@tailwindcss/oxide-android-arm64': 4.1.11 + '@tailwindcss/oxide-darwin-arm64': 4.1.11 + '@tailwindcss/oxide-darwin-x64': 4.1.11 + '@tailwindcss/oxide-freebsd-x64': 4.1.11 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.11 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.11 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.11 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.11 + '@tailwindcss/oxide-linux-x64-musl': 4.1.11 + '@tailwindcss/oxide-wasm32-wasi': 4.1.11 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.11 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.11 + + '@tailwindcss/postcss@4.1.11': dependencies: - '@swc/counter': 0.1.3 - - '@szmarczak/http-timer@4.0.6': - dependencies: - defer-to-connect: 2.0.1 - - '@thi.ng/api@7.2.0': {} - - '@thi.ng/arrays@1.0.3': - dependencies: - '@thi.ng/api': 7.2.0 - '@thi.ng/checks': 2.9.11 - '@thi.ng/compare': 1.3.34 - '@thi.ng/equiv': 1.0.45 - '@thi.ng/errors': 1.3.4 - '@thi.ng/random': 2.4.8 - - '@thi.ng/checks@2.9.11': - dependencies: - tslib: 2.8.1 - - '@thi.ng/compare@1.3.34': - dependencies: - '@thi.ng/api': 7.2.0 - - '@thi.ng/equiv@1.0.45': {} - - '@thi.ng/errors@1.3.4': {} - - '@thi.ng/hex@1.0.4': {} - - '@thi.ng/random@2.4.8': - dependencies: - '@thi.ng/api': 7.2.0 - '@thi.ng/checks': 2.9.11 - '@thi.ng/hex': 1.0.4 - - '@thi.ng/zipper@1.0.3': - dependencies: - '@thi.ng/api': 7.2.0 - '@thi.ng/arrays': 1.0.3 - '@thi.ng/checks': 2.9.11 - - '@tootallnate/once@2.0.0': {} + '@alloc/quick-lru': 5.2.0 + '@tailwindcss/node': 4.1.11 + '@tailwindcss/oxide': 4.1.11 + postcss: 8.5.6 + tailwindcss: 4.1.11 '@tootallnate/quickjs-emscripten@0.23.0': {} @@ -10763,49 +4797,47 @@ snapshots: '@tsconfig/node16@1.0.4': {} - '@tybys/wasm-util@0.9.0': + '@types/babel__core@7.20.5': dependencies: - tslib: 2.8.1 - optional: true + '@babel/parser': 7.28.0 + '@babel/types': 7.28.1 + '@types/babel__generator': 7.27.0 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.7 + + '@types/babel__generator@7.27.0': + dependencies: + '@babel/types': 7.28.1 - '@types/bunyan@1.8.11': + '@types/babel__template@7.4.4': dependencies: - '@types/node': 22.15.21 + '@babel/parser': 7.28.0 + '@babel/types': 7.28.1 - '@types/cacheable-request@6.0.3': + '@types/babel__traverse@7.20.7': dependencies: - '@types/http-cache-semantics': 4.0.4 - '@types/keyv': 3.1.4 - '@types/node': 22.15.21 - '@types/responselike': 1.0.3 + '@babel/types': 7.28.1 - '@types/chrome@0.0.323': + '@types/chrome@0.1.1': dependencies: '@types/filesystem': 0.0.36 '@types/har-format': 1.2.16 '@types/conventional-commits-parser@5.0.1': dependencies: - '@types/node': 22.15.21 + '@types/node': 24.0.14 - '@types/debug@4.1.12': - dependencies: - '@types/ms': 2.1.0 - - '@types/emscripten@1.40.1': {} - - '@types/eslint-plugin-jsx-a11y@6.10.0': + '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 9.6.1 + '@types/estree': 1.0.8 '@types/eslint@9.6.1': dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 - '@types/estree@1.0.7': {} - - '@types/file-saver@2.0.7': {} + '@types/estree@1.0.8': {} '@types/filesystem@0.0.36': dependencies: @@ -10815,12 +4847,6 @@ snapshots: '@types/har-format@1.2.16': {} - '@types/hast@3.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/http-cache-semantics@4.0.4': {} - '@types/istanbul-lib-coverage@2.0.6': {} '@types/istanbul-lib-report@3.0.3': @@ -10833,271 +4859,123 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/json5@0.0.29': - optional: true - - '@types/keyv@3.1.4': - dependencies: - '@types/node': 22.15.21 - - '@types/mdast@4.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/minimist@1.2.5': {} - '@types/mocha@10.0.10': {} - '@types/moo@0.5.5': {} - - '@types/ms@2.1.0': {} - - '@types/mute-stream@0.0.4': + '@types/node@20.19.8': dependencies: - '@types/node': 22.15.21 + undici-types: 6.21.0 - '@types/node@20.17.50': + '@types/node@24.0.14': dependencies: - undici-types: 6.19.8 - - '@types/node@22.15.21': - dependencies: - undici-types: 6.21.0 + undici-types: 7.8.0 '@types/normalize-package-data@2.4.4': {} - '@types/parse-path@7.1.0': - dependencies: - parse-path: 7.1.0 - - '@types/react-dom@19.1.5(@types/react@19.1.5)': + '@types/react-dom@19.1.6(@types/react@19.1.8)': dependencies: - '@types/react': 19.1.5 + '@types/react': 19.1.8 - '@types/react@19.1.5': + '@types/react@19.1.8': dependencies: csstype: 3.1.3 - '@types/responselike@1.0.3': - dependencies: - '@types/node': 22.15.21 - - '@types/semver@7.7.0': {} - '@types/sinonjs__fake-timers@8.1.5': {} - '@types/stack-utils@2.0.3': {} - - '@types/treeify@1.0.3': {} - - '@types/unist@3.0.3': {} - - '@types/uuid@9.0.8': {} - - '@types/which@2.0.2': {} - - '@types/wrap-ansi@3.0.0': {} - - '@types/ws@8.18.1': - dependencies: - '@types/node': 22.15.21 - - '@types/yargs-parser@21.0.3': {} - - '@types/yargs@17.0.33': - dependencies: - '@types/yargs-parser': 21.0.3 - - '@types/yauzl@2.10.3': - dependencies: - '@types/node': 22.15.21 - optional: true - - '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.32.1 - eslint: 9.27.0(jiti@2.4.2) - graphemer: 1.4.0 - ignore: 7.0.4 - natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.32.1 - debug: 4.4.1(supports-color@8.1.1) - eslint: 9.27.0(jiti@2.4.2) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@8.32.1': - dependencies: - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/visitor-keys': 8.32.1 - - '@typescript-eslint/type-utils@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - debug: 4.4.1(supports-color@8.1.1) - eslint: 9.27.0(jiti@2.4.2) - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@8.32.1': {} - - '@typescript-eslint/typescript-estree@8.32.1(typescript@5.8.3)': - dependencies: - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/visitor-keys': 8.32.1 - debug: 4.4.1(supports-color@8.1.1) - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - eslint: 9.27.0(jiti@2.4.2) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.32.1': - dependencies: - '@typescript-eslint/types': 8.32.1 - eslint-visitor-keys: 4.2.0 - - '@unrs/resolver-binding-darwin-arm64@1.7.2': - optional: true - - '@unrs/resolver-binding-darwin-x64@1.7.2': - optional: true - - '@unrs/resolver-binding-freebsd-x64@1.7.2': - optional: true - - '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.2': - optional: true - - '@unrs/resolver-binding-linux-arm-musleabihf@1.7.2': - optional: true - - '@unrs/resolver-binding-linux-arm64-gnu@1.7.2': - optional: true - - '@unrs/resolver-binding-linux-arm64-musl@1.7.2': - optional: true - - '@unrs/resolver-binding-linux-ppc64-gnu@1.7.2': - optional: true - - '@unrs/resolver-binding-linux-riscv64-gnu@1.7.2': - optional: true - - '@unrs/resolver-binding-linux-riscv64-musl@1.7.2': - optional: true - - '@unrs/resolver-binding-linux-s390x-gnu@1.7.2': - optional: true - - '@unrs/resolver-binding-linux-x64-gnu@1.7.2': - optional: true + '@types/stack-utils@2.0.3': {} - '@unrs/resolver-binding-linux-x64-musl@1.7.2': - optional: true + '@types/which@2.0.2': {} - '@unrs/resolver-binding-wasm32-wasi@1.7.2': + '@types/ws@8.18.1': dependencies: - '@napi-rs/wasm-runtime': 0.2.10 - optional: true + '@types/node': 24.0.14 - '@unrs/resolver-binding-win32-arm64-msvc@1.7.2': - optional: true + '@types/yargs-parser@21.0.3': {} - '@unrs/resolver-binding-win32-ia32-msvc@1.7.2': - optional: true + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 - '@unrs/resolver-binding-win32-x64-msvc@1.7.2': + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 24.0.14 optional: true - '@vitejs/plugin-react-swc@3.9.0(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(sass@1.89.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0))': + '@vitejs/plugin-react-swc@3.11.0(vite@6.3.5(@types/node@24.0.14)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3))': dependencies: - '@swc/core': 1.11.24 - vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(sass@1.89.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0) + '@rolldown/pluginutils': 1.0.0-beta.27 + '@swc/core': 1.13.0 + vite: 6.3.5(@types/node@24.0.14)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3) transitivePeerDependencies: - '@swc/helpers' + '@vitejs/plugin-react@4.7.0(vite@6.3.5(@types/node@24.0.14)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3))': + dependencies: + '@babel/core': 7.28.0 + '@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.28.0) + '@babel/plugin-transform-react-jsx-source': 7.27.1(@babel/core@7.28.0) + '@rolldown/pluginutils': 1.0.0-beta.27 + '@types/babel__core': 7.20.5 + react-refresh: 0.17.0 + vite: 6.3.5(@types/node@24.0.14)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3) + transitivePeerDependencies: + - supports-color + '@vitest/pretty-format@2.1.9': dependencies: tinyrainbow: 1.2.0 + '@vitest/pretty-format@3.2.4': + dependencies: + tinyrainbow: 2.0.0 + '@vitest/snapshot@2.1.9': dependencies: '@vitest/pretty-format': 2.1.9 magic-string: 0.30.17 pathe: 1.1.2 - '@wdio/cli@9.14.0': + '@vitest/snapshot@3.2.4': + dependencies: + '@vitest/pretty-format': 3.2.4 + magic-string: 0.30.17 + pathe: 2.0.3 + + '@wdio/cli@9.18.1(@types/node@24.0.14)(expect-webdriverio@5.4.0)': dependencies: - '@types/node': 20.17.50 '@vitest/snapshot': 2.1.9 - '@wdio/config': 9.14.0 - '@wdio/globals': 9.14.0(@wdio/logger@9.4.4) - '@wdio/logger': 9.4.4 - '@wdio/protocols': 9.14.0 - '@wdio/types': 9.14.0 - '@wdio/utils': 9.14.0 + '@wdio/config': 9.18.0 + '@wdio/globals': 9.17.0(expect-webdriverio@5.4.0)(webdriverio@9.18.1) + '@wdio/logger': 9.18.0 + '@wdio/protocols': 9.16.2 + '@wdio/types': 9.16.2 + '@wdio/utils': 9.18.0 async-exit-hook: 2.0.1 chalk: 5.4.1 chokidar: 4.0.3 - dotenv: 16.5.0 - ejs: 3.1.10 - execa: 9.5.3 + create-wdio: 9.18.0(@types/node@24.0.14) + dotenv: 17.2.0 import-meta-resolve: 4.1.0 - inquirer: 11.1.0 lodash.flattendeep: 4.4.0 lodash.pickby: 4.6.0 lodash.union: 4.6.0 read-pkg-up: 10.1.0 - recursive-readdir: 2.2.3 - tsx: 4.19.4 - webdriverio: 9.14.0 + tsx: 4.20.3 + webdriverio: 9.18.1 yargs: 17.7.2 transitivePeerDependencies: + - '@types/node' - bare-buffer - bufferutil + - expect-webdriverio - puppeteer-core - supports-color - utf-8-validate - '@wdio/config@9.14.0': + '@wdio/config@9.18.0': dependencies: - '@wdio/logger': 9.4.4 - '@wdio/types': 9.14.0 - '@wdio/utils': 9.14.0 + '@wdio/logger': 9.18.0 + '@wdio/types': 9.16.2 + '@wdio/utils': 9.18.0 deepmerge-ts: 7.1.5 glob: 10.4.5 import-meta-resolve: 4.1.0 @@ -11105,118 +4983,114 @@ snapshots: - bare-buffer - supports-color - '@wdio/dot-reporter@9.14.0': + '@wdio/dot-reporter@9.18.0': dependencies: - '@wdio/reporter': 9.14.0 - '@wdio/types': 9.14.0 + '@wdio/reporter': 9.18.0 + '@wdio/types': 9.16.2 chalk: 5.4.1 - '@wdio/globals@9.14.0(@wdio/logger@9.4.4)': - optionalDependencies: - expect-webdriverio: 5.1.0(@wdio/globals@9.14.0(@wdio/logger@9.4.4))(@wdio/logger@9.4.4)(webdriverio@9.14.0) - webdriverio: 9.14.0 - transitivePeerDependencies: - - '@wdio/logger' - - bare-buffer - - bufferutil - - puppeteer-core - - supports-color - - utf-8-validate + '@wdio/globals@9.17.0(expect-webdriverio@5.4.0)(webdriverio@9.18.1)': + dependencies: + expect-webdriverio: 5.4.0(@wdio/globals@9.17.0)(@wdio/logger@9.18.0)(webdriverio@9.18.1) + webdriverio: 9.18.1 - '@wdio/local-runner@9.14.0': + '@wdio/local-runner@9.18.1(@wdio/globals@9.17.0)(webdriverio@9.18.1)': dependencies: - '@types/node': 20.17.50 - '@wdio/logger': 9.4.4 - '@wdio/repl': 9.4.4 - '@wdio/runner': 9.14.0 - '@wdio/types': 9.14.0 - async-exit-hook: 2.0.1 + '@types/node': 20.19.8 + '@wdio/logger': 9.18.0 + '@wdio/repl': 9.16.2 + '@wdio/runner': 9.18.1(expect-webdriverio@5.4.0)(webdriverio@9.18.1) + '@wdio/types': 9.16.2 + exit-hook: 4.0.0 + expect-webdriverio: 5.4.0(@wdio/globals@9.17.0)(@wdio/logger@9.18.0)(webdriverio@9.18.1) split2: 4.2.0 stream-buffers: 3.0.3 transitivePeerDependencies: + - '@wdio/globals' - bare-buffer - bufferutil - - puppeteer-core - supports-color - utf-8-validate + - webdriverio - '@wdio/logger@9.4.4': + '@wdio/logger@9.18.0': dependencies: chalk: 5.4.1 loglevel: 1.9.2 loglevel-plugin-prefix: 0.8.4 + safe-regex2: 5.0.0 strip-ansi: 7.1.0 - '@wdio/mocha-framework@9.14.0': + '@wdio/mocha-framework@9.18.0': dependencies: '@types/mocha': 10.0.10 - '@types/node': 20.17.50 - '@wdio/logger': 9.4.4 - '@wdio/types': 9.14.0 - '@wdio/utils': 9.14.0 + '@types/node': 20.19.8 + '@wdio/logger': 9.18.0 + '@wdio/types': 9.16.2 + '@wdio/utils': 9.18.0 mocha: 10.8.2 transitivePeerDependencies: - bare-buffer - supports-color - '@wdio/protocols@9.14.0': {} + '@wdio/protocols@9.16.2': {} - '@wdio/repl@9.4.4': + '@wdio/repl@9.16.2': dependencies: - '@types/node': 20.17.50 + '@types/node': 20.19.8 - '@wdio/reporter@9.14.0': + '@wdio/reporter@9.18.0': dependencies: - '@types/node': 20.17.50 - '@wdio/logger': 9.4.4 - '@wdio/types': 9.14.0 - diff: 7.0.0 + '@types/node': 20.19.8 + '@wdio/logger': 9.18.0 + '@wdio/types': 9.16.2 + diff: 8.0.2 object-inspect: 1.13.4 - '@wdio/runner@9.14.0': + '@wdio/runner@9.18.1(expect-webdriverio@5.4.0)(webdriverio@9.18.1)': dependencies: - '@types/node': 20.17.50 - '@wdio/config': 9.14.0 - '@wdio/dot-reporter': 9.14.0 - '@wdio/globals': 9.14.0(@wdio/logger@9.4.4) - '@wdio/logger': 9.4.4 - '@wdio/types': 9.14.0 - '@wdio/utils': 9.14.0 + '@types/node': 20.19.8 + '@wdio/config': 9.18.0 + '@wdio/dot-reporter': 9.18.0 + '@wdio/globals': 9.17.0(expect-webdriverio@5.4.0)(webdriverio@9.18.1) + '@wdio/logger': 9.18.0 + '@wdio/types': 9.16.2 + '@wdio/utils': 9.18.0 deepmerge-ts: 7.1.5 - expect-webdriverio: 5.1.0(@wdio/globals@9.14.0(@wdio/logger@9.4.4))(@wdio/logger@9.4.4)(webdriverio@9.14.0) - webdriver: 9.14.0 - webdriverio: 9.14.0 + expect-webdriverio: 5.4.0(@wdio/globals@9.17.0)(@wdio/logger@9.18.0)(webdriverio@9.18.1) + webdriver: 9.18.0 + webdriverio: 9.18.1 transitivePeerDependencies: - bare-buffer - bufferutil - - puppeteer-core - supports-color - utf-8-validate - '@wdio/spec-reporter@9.14.0': + '@wdio/spec-reporter@9.18.0': dependencies: - '@wdio/reporter': 9.14.0 - '@wdio/types': 9.14.0 + '@wdio/reporter': 9.18.0 + '@wdio/types': 9.16.2 chalk: 5.4.1 easy-table: 1.2.0 pretty-ms: 9.2.0 - '@wdio/types@9.14.0': + '@wdio/types@9.16.2': dependencies: - '@types/node': 20.17.50 + '@types/node': 20.19.8 - '@wdio/utils@9.14.0': + '@wdio/utils@9.18.0': dependencies: - '@puppeteer/browsers': 2.10.5 - '@wdio/logger': 9.4.4 - '@wdio/types': 9.14.0 + '@puppeteer/browsers': 2.10.6 + '@wdio/logger': 9.18.0 + '@wdio/types': 9.16.2 decamelize: 6.0.0 deepmerge-ts: 7.1.5 - edgedriver: 6.1.1 + edgedriver: 6.1.2 geckodriver: 5.0.0 get-port: 7.1.0 import-meta-resolve: 4.1.0 locate-app: 2.5.0 + mitt: 3.0.1 safaridriver: 1.0.0 split2: 4.2.0 wait-port: 1.1.0 @@ -11304,137 +5178,38 @@ snapshots: '@xtuc/long@4.2.2': {} - '@yarnpkg/core@4.4.2(typanion@3.14.0)': - dependencies: - '@arcanis/slice-ansi': 1.1.1 - '@types/semver': 7.7.0 - '@types/treeify': 1.0.3 - '@yarnpkg/fslib': 3.1.2 - '@yarnpkg/libzip': 3.2.1(@yarnpkg/fslib@3.1.2) - '@yarnpkg/parsers': 3.0.3 - '@yarnpkg/shell': 4.1.3(typanion@3.14.0) - camelcase: 5.3.1 - chalk: 4.1.2 - ci-info: 4.3.0 - clipanion: 4.0.0-rc.4(typanion@3.14.0) - cross-spawn: 7.0.6 - diff: 5.2.0 - dotenv: 16.5.0 - fast-glob: 3.3.3 - got: 11.8.6 - hpagent: 1.2.0 - lodash: 4.17.21 - micromatch: 4.0.8 - p-limit: 2.3.0 - semver: 7.7.2 - strip-ansi: 6.0.1 - tar: 6.2.1 - tinylogic: 2.0.0 - treeify: 1.1.0 - tslib: 2.8.1 - transitivePeerDependencies: - - typanion - - '@yarnpkg/fslib@3.1.2': - dependencies: - tslib: 2.8.1 - - '@yarnpkg/libzip@3.2.1(@yarnpkg/fslib@3.1.2)': - dependencies: - '@types/emscripten': 1.40.1 - '@yarnpkg/fslib': 3.1.2 - tslib: 2.8.1 - - '@yarnpkg/parsers@3.0.3': - dependencies: - js-yaml: 3.14.1 - tslib: 2.8.1 - - '@yarnpkg/shell@4.1.3(typanion@3.14.0)': - dependencies: - '@yarnpkg/fslib': 3.1.2 - '@yarnpkg/parsers': 3.0.3 - chalk: 4.1.2 - clipanion: 4.0.0-rc.4(typanion@3.14.0) - cross-spawn: 7.0.6 - fast-glob: 3.3.3 - micromatch: 4.0.8 - tslib: 2.8.1 - transitivePeerDependencies: - - typanion - - '@zip.js/zip.js@2.7.62': {} + '@zip.js/zip.js@2.7.64': {} JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 through: 2.3.8 - abbrev@3.0.1: - optional: true - abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 - acorn-import-attributes@1.9.5(acorn@8.14.1): - dependencies: - acorn: 8.14.1 - - acorn-jsx@5.3.2(acorn@8.14.1): + acorn-import-phases@1.0.4(acorn@8.15.0): dependencies: - acorn: 8.14.1 + acorn: 8.15.0 acorn-walk@8.3.4: dependencies: - acorn: 8.14.1 - - acorn@8.14.1: {} - - adm-zip@0.5.16: {} - - agent-base@6.0.2: - dependencies: - debug: 4.4.1(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - - agent-base@7.1.3: {} - - agentkeepalive@4.6.0: - dependencies: - humanize-ms: 1.2.1 + acorn: 8.15.0 - aggregate-error@3.1.0: - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 + acorn@8.15.0: {} - aggregate-error@5.0.0: - dependencies: - clean-stack: 5.2.0 - indent-string: 5.0.0 + agent-base@7.1.4: {} ajv-formats@2.1.1(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 - ajv-keywords@3.5.2(ajv@6.12.6): - dependencies: - ajv: 6.12.6 - ajv-keywords@5.1.0(ajv@8.17.1): dependencies: ajv: 8.17.1 fast-deep-equal: 3.1.3 - ajv@6.12.6: - dependencies: - fast-deep-equal: 3.1.3 - fast-json-stable-stringify: 2.1.0 - json-schema-traverse: 0.4.1 - uri-js: 4.4.1 - ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 @@ -11448,18 +5223,10 @@ snapshots: dependencies: type-fest: 0.21.3 - ansi-escapes@7.0.0: - dependencies: - environment: 1.1.0 - ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -11497,167 +5264,44 @@ snapshots: arg@4.1.3: {} - arg@5.0.2: {} - - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 - argparse@2.0.1: {} - argv-formatter@1.0.0: {} - aria-query@5.3.2: {} - array-buffer-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - is-array-buffer: 3.0.5 - array-ify@1.0.0: {} - array-includes@3.1.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - is-string: 1.1.1 - array-union@2.1.0: {} - array.prototype.findlast@1.2.5: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.1.0 - - array.prototype.findlastindex@1.2.6: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-shim-unscopables: 1.1.0 - optional: true - - array.prototype.flat@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-shim-unscopables: 1.1.0 - - array.prototype.flatmap@1.3.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-shim-unscopables: 1.1.0 - - array.prototype.tosorted@1.1.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-shim-unscopables: 1.1.0 - - arraybuffer.prototype.slice@1.0.4: - dependencies: - array-buffer-byte-length: 1.0.2 - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - is-array-buffer: 3.0.5 - - arrify@1.0.1: {} - - asn1.js@4.10.1: - dependencies: - bn.js: 4.12.2 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - - assert@2.1.0: - dependencies: - call-bind: 1.0.8 - is-nan: 1.3.2 - object-is: 1.1.6 - object.assign: 4.1.7 - util: 0.12.5 - - ast-types-flow@0.0.8: {} - ast-types@0.13.4: dependencies: tslib: 2.8.1 async-exit-hook@2.0.1: {} - async-function@1.0.0: {} - - async-mutex@0.5.0: - dependencies: - tslib: 2.8.1 - - async-retry@1.2.3: - dependencies: - retry: 0.12.0 - async@3.2.6: {} - auth-header@1.0.0: {} - - autoprefixer@10.4.21(postcss@8.5.3): + autoprefixer@10.4.21(postcss@8.5.6): dependencies: - browserslist: 4.24.5 - caniuse-lite: 1.0.30001718 + browserslist: 4.25.1 + caniuse-lite: 1.0.30001727 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.5.3 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - available-typed-arrays@1.0.7: - dependencies: - possible-typed-array-names: 1.1.0 - - aws4@1.13.2: {} - - axe-core@4.10.3: {} - - axobject-query@4.1.0: {} - - azure-devops-node-api@15.1.0: - dependencies: - tunnel: 0.0.6 - typed-rest-client: 2.1.0 - b4a@1.6.7: {} - backslash@0.2.0: {} - - bail@2.0.2: {} - balanced-match@1.0.2: {} - bare-events@2.5.4: + bare-events@2.6.0: optional: true - bare-fs@4.1.5: + bare-fs@4.1.6: dependencies: - bare-events: 2.5.4 + bare-events: 2.6.0 bare-path: 3.0.0 - bare-stream: 2.6.5(bare-events@2.5.4) + bare-stream: 2.6.5(bare-events@2.6.0) optional: true bare-os@3.6.1: @@ -11668,63 +5312,27 @@ snapshots: bare-os: 3.6.1 optional: true - bare-stream@2.6.5(bare-events@2.5.4): + bare-stream@2.6.5(bare-events@2.6.0): dependencies: - streamx: 2.22.0 + streamx: 2.22.1 optionalDependencies: - bare-events: 2.5.4 + bare-events: 2.6.0 optional: true base64-js@1.5.1: {} basic-ftp@5.0.5: {} - before-after-hook@2.2.3: {} - - before-after-hook@4.0.0: {} - - better-sqlite3@12.2.0: - dependencies: - bindings: 1.5.0 - prebuild-install: 7.1.3 - optional: true - - bignumber.js@9.3.1: {} - binary-extensions@2.3.0: {} - bindings@1.5.0: - dependencies: - file-uri-to-path: 1.0.0 - optional: true - - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - optional: true - - bn.js@4.12.2: {} - - bn.js@5.2.2: {} - - bn@1.0.5: {} - boolbase@1.0.0: {} - boolean@3.2.0: {} - - bottleneck@2.19.5: {} - - bowser@2.11.0: {} - - brace-expansion@1.1.11: + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.1: + brace-expansion@2.0.2: dependencies: balanced-match: 1.0.2 @@ -11732,166 +5340,31 @@ snapshots: dependencies: fill-range: 7.1.1 - brorand@1.1.0: {} - - browser-resolve@2.0.0: - dependencies: - resolve: 1.22.10 - browser-stdout@1.3.1: {} - browserify-aes@1.2.0: - dependencies: - buffer-xor: 1.0.3 - cipher-base: 1.0.6 - create-hash: 1.2.0 - evp_bytestokey: 1.0.3 - inherits: 2.0.4 - safe-buffer: 5.2.1 - - browserify-cipher@1.0.1: - dependencies: - browserify-aes: 1.2.0 - browserify-des: 1.0.2 - evp_bytestokey: 1.0.3 - - browserify-des@1.0.2: - dependencies: - cipher-base: 1.0.6 - des.js: 1.1.0 - inherits: 2.0.4 - safe-buffer: 5.2.1 - - browserify-rsa@4.1.1: - dependencies: - bn.js: 5.2.2 - randombytes: 2.1.0 - safe-buffer: 5.2.1 - - browserify-sign@4.2.3: - dependencies: - bn.js: 5.2.2 - browserify-rsa: 4.1.1 - create-hash: 1.2.0 - create-hmac: 1.1.7 - elliptic: 6.6.1 - hash-base: 3.0.5 - inherits: 2.0.4 - parse-asn1: 5.1.7 - readable-stream: 2.3.8 - safe-buffer: 5.2.1 - - browserify-zlib@0.2.0: - dependencies: - pako: 1.0.11 - - browserslist@4.24.5: + browserslist@4.25.1: dependencies: - caniuse-lite: 1.0.30001718 - electron-to-chromium: 1.5.155 + caniuse-lite: 1.0.30001727 + electron-to-chromium: 1.5.187 node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.24.5) + update-browserslist-db: 1.1.3(browserslist@4.25.1) buffer-crc32@0.2.13: {} buffer-crc32@1.0.0: {} - buffer-equal-constant-time@1.0.1: {} - buffer-from@1.1.2: {} - buffer-xor@1.0.3: {} - - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - buffer@6.0.3: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - builtin-status-codes@3.0.0: {} - - builtins@5.1.0: - dependencies: - semver: 7.7.2 - - bunyan@1.8.15: - optionalDependencies: - dtrace-provider: 0.8.8 - moment: 2.30.1 - mv: 2.1.1 - safe-json-stringify: 1.2.0 - - bzip-deflate@1.0.0: {} - - cacache@19.0.1: - dependencies: - '@npmcli/fs': 4.0.0 - fs-minipass: 3.0.3 - glob: 10.4.5 - lru-cache: 10.4.3 - minipass: 7.1.2 - minipass-collect: 2.0.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - p-map: 7.0.3 - ssri: 12.0.0 - tar: 7.4.3 - unique-filename: 4.0.0 - - cacheable-lookup@5.0.4: {} - - cacheable-request@7.0.4: - dependencies: - clone-response: 1.0.3 - get-stream: 5.2.0 - http-cache-semantics: 4.2.0 - keyv: 4.5.4 - lowercase-keys: 2.0.0 - normalize-url: 6.1.0 - responselike: 2.0.1 - - call-bind-apply-helpers@1.0.2: - dependencies: - es-errors: 1.3.0 - function-bind: 1.1.2 - - call-bind@1.0.8: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 - set-function-length: 1.2.2 - - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - callsites@3.1.0: {} - camelcase-css@2.0.1: {} - - camelcase-keys@6.2.2: - dependencies: - camelcase: 5.3.1 - map-obj: 4.3.0 - quick-lru: 4.0.1 - - camelcase@5.3.1: {} - camelcase@6.3.0: {} - caniuse-lite@1.0.30001718: {} - - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 + caniuse-lite@1.0.30001727: {} chalk@4.1.2: dependencies: @@ -11900,35 +5373,29 @@ snapshots: chalk@5.4.1: {} - changelog-filename-regex@2.0.1: {} - - char-regex@1.0.2: {} - - character-entities@2.0.2: {} - chardet@0.7.0: {} cheerio-select@2.1.0: dependencies: boolbase: 1.0.0 - css-select: 5.1.0 - css-what: 6.1.0 + css-select: 5.2.2 + css-what: 6.2.2 domelementtype: 2.3.0 domhandler: 5.0.3 domutils: 3.2.2 - cheerio@1.0.0: + cheerio@1.1.0: dependencies: cheerio-select: 2.1.0 dom-serializer: 2.0.0 domhandler: 5.0.3 domutils: 3.2.2 - encoding-sniffer: 0.2.0 - htmlparser2: 9.1.0 + encoding-sniffer: 0.2.1 + htmlparser2: 10.0.0 parse5: 7.3.0 parse5-htmlparser2-tree-adapter: 7.1.0 parse5-parser-stream: 7.1.2 - undici: 6.21.3 + undici: 7.12.0 whatwg-mimetype: 4.0.0 chokidar@3.6.0: @@ -11947,69 +5414,13 @@ snapshots: dependencies: readdirp: 4.1.2 - chownr@1.1.4: - optional: true - - chownr@2.0.0: {} - chownr@3.0.0: {} chrome-trace-event@1.0.4: {} - ci-info@3.9.0: {} - - ci-info@4.3.0: {} - - cipher-base@1.0.6: - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - - cjs-module-lexer@1.4.3: {} - - clean-git-ref@2.0.1: {} - - clean-stack@2.2.0: {} - - clean-stack@5.2.0: - dependencies: - escape-string-regexp: 5.0.0 - - cli-cursor@5.0.0: - dependencies: - restore-cursor: 5.1.0 - - cli-highlight@2.1.11: - dependencies: - chalk: 4.1.2 - highlight.js: 10.7.3 - mz: 2.7.0 - parse5: 5.1.1 - parse5-htmlparser2-tree-adapter: 6.0.1 - yargs: 16.2.0 - - cli-table3@0.6.5: - dependencies: - string-width: 4.2.3 - optionalDependencies: - '@colors/colors': 1.5.0 - - cli-truncate@4.0.0: - dependencies: - slice-ansi: 5.0.0 - string-width: 7.2.0 - - cli-width@4.1.0: {} - - clipanion@4.0.0-rc.4(typanion@3.14.0): - dependencies: - typanion: 3.14.0 - - cliui@6.0.0: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 + ci-info@4.3.0: {} + + cli-width@4.1.0: {} cliui@7.0.4: dependencies: @@ -12023,37 +5434,19 @@ snapshots: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - clone-response@1.0.3: - dependencies: - mimic-response: 1.0.1 - clone@1.0.4: optional: true clsx@2.1.1: {} - cluster-key-slot@1.1.2: {} - - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-name@1.1.3: {} - color-name@1.1.4: {} - colorette@2.0.20: {} - - colors@1.4.0: {} - commander@11.1.0: {} - commander@13.1.0: {} - commander@14.0.0: {} commander@2.20.3: {} @@ -12062,8 +5455,6 @@ snapshots: commander@9.5.0: {} - comment-parser@1.4.1: {} - compare-func@2.0.0: dependencies: array-ify: 1.0.0 @@ -12079,43 +5470,14 @@ snapshots: concat-map@0.0.1: {} - config-chain@1.1.13: - dependencies: - ini: 1.3.8 - proto-list: 1.2.4 - - console-browserify@1.2.0: {} - - constants-browserify@1.0.0: {} - conventional-changelog-angular@7.0.0: dependencies: compare-func: 2.0.0 - conventional-changelog-angular@8.0.0: - dependencies: - compare-func: 2.0.0 - conventional-changelog-conventionalcommits@7.0.2: dependencies: compare-func: 2.0.0 - conventional-changelog-writer@8.2.0: - dependencies: - conventional-commits-filter: 5.0.0 - handlebars: 4.7.8 - meow: 13.2.0 - semver: 7.7.2 - - conventional-commits-detector@1.0.3: - dependencies: - arrify: 1.0.1 - git-raw-commits: 2.0.11 - meow: 7.1.1 - through2-concurrent: 2.0.0 - - conventional-commits-filter@5.0.0: {} - conventional-commits-parser@5.0.0: dependencies: JSONStream: 1.3.5 @@ -12123,21 +5485,13 @@ snapshots: meow: 12.1.1 split2: 4.2.0 - conventional-commits-parser@6.2.0: - dependencies: - meow: 13.2.0 - - convert-hrtime@5.0.0: {} - - core-js-pure@3.44.0: {} - - core-js@3.44.0: {} + convert-source-map@2.0.0: {} core-util-is@1.0.3: {} - cosmiconfig-typescript-loader@6.1.0(@types/node@22.15.21)(cosmiconfig@9.0.0(typescript@5.8.3))(typescript@5.8.3): + cosmiconfig-typescript-loader@6.1.0(@types/node@24.0.14)(cosmiconfig@9.0.0(typescript@5.8.3))(typescript@5.8.3): dependencies: - '@types/node': 22.15.21 + '@types/node': 24.0.14 cosmiconfig: 9.0.0(typescript@5.8.3) jiti: 2.4.2 typescript: 5.8.3 @@ -12158,37 +5512,25 @@ snapshots: crc-32: 1.2.2 readable-stream: 4.7.0 - create-ecdh@4.0.4: - dependencies: - bn.js: 4.12.2 - elliptic: 6.6.1 - - create-hash@1.2.0: - dependencies: - cipher-base: 1.0.6 - inherits: 2.0.4 - md5.js: 1.3.5 - ripemd160: 2.0.2 - sha.js: 2.4.11 - - create-hmac@1.1.7: - dependencies: - cipher-base: 1.0.6 - create-hash: 1.2.0 - inherits: 2.0.4 - ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 - create-require@1.1.1: {} - croner@9.1.0: {} - - cronstrue@2.61.0: {} - - cross-env@7.0.3: + create-wdio@9.18.0(@types/node@24.0.14): dependencies: + chalk: 5.4.1 + commander: 14.0.0 cross-spawn: 7.0.6 + ejs: 3.1.10 + execa: 9.6.0 + import-meta-resolve: 4.1.0 + inquirer: 12.7.0(@types/node@24.0.14) + normalize-package-data: 7.0.0 + read-pkg-up: 10.1.0 + recursive-readdir: 2.2.3 + semver: 7.7.2 + type-fest: 4.41.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' cross-spawn@7.0.6: dependencies: @@ -12196,29 +5538,10 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 - crypto-browserify@3.12.1: - dependencies: - browserify-cipher: 1.0.1 - browserify-sign: 4.2.3 - create-ecdh: 4.0.4 - create-hash: 1.2.0 - create-hmac: 1.1.7 - diffie-hellman: 5.0.3 - hash-base: 3.0.5 - inherits: 2.0.4 - pbkdf2: 3.1.2 - public-encrypt: 4.0.3 - randombytes: 2.1.0 - randomfill: 1.0.4 - - crypto-random-string@4.0.0: - dependencies: - type-fest: 1.4.0 - - css-select@5.1.0: + css-select@5.2.2: dependencies: boolbase: 1.0.0 - css-what: 6.1.0 + css-what: 6.2.2 domhandler: 5.0.3 domutils: 3.2.2 nth-check: 2.1.1 @@ -12227,204 +5550,60 @@ snapshots: css-value@0.0.1: {} - css-what@6.1.0: {} - - cssesc@3.0.0: {} + css-what@6.2.2: {} csstype@3.1.3: {} - damerau-levenshtein@1.0.8: {} - - danger@13.0.4(encoding@0.1.13): - dependencies: - '@gitbeaker/rest': 38.12.1 - '@octokit/rest': 20.1.2 - async-retry: 1.2.3 - chalk: 2.4.2 - commander: 2.20.3 - core-js: 3.44.0 - debug: 4.4.1(supports-color@8.1.1) - fast-json-patch: 3.1.1 - get-stdin: 6.0.0 - http-proxy-agent: 5.0.0 - https-proxy-agent: 5.0.1 - hyperlinker: 1.0.0 - ini: 5.0.0 - json5: 2.2.3 - jsonpointer: 5.0.1 - jsonwebtoken: 9.0.2 - lodash.find: 4.6.0 - lodash.includes: 4.3.0 - lodash.isobject: 3.0.2 - lodash.keys: 4.2.0 - lodash.mapvalues: 4.6.0 - lodash.memoize: 4.1.2 - memfs-or-file-map-to-github-branch: 1.3.0 - micromatch: 4.0.8 - node-cleanup: 2.1.2 - node-fetch: 2.7.0(encoding@0.1.13) - override-require: 1.1.1 - p-limit: 2.3.0 - parse-diff: 0.7.1 - parse-github-url: 1.0.3 - parse-link-header: 2.0.0 - pinpoint: 1.1.0 - prettyjson: 1.2.5 - readline-sync: 1.4.10 - regenerator-runtime: 0.13.11 - require-from-string: 2.0.2 - supports-hyperlinks: 1.0.1 - transitivePeerDependencies: - - encoding - - supports-color - - dargs@7.0.0: {} - dargs@8.1.0: {} data-uri-to-buffer@4.0.1: {} data-uri-to-buffer@6.0.2: {} - data-view-buffer@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-length@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - data-view-byte-offset@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-data-view: 1.0.2 - - debug@3.2.7: - dependencies: - ms: 2.1.3 - debug@4.4.1(supports-color@8.1.1): dependencies: ms: 2.1.3 optionalDependencies: supports-color: 8.1.1 - decamelize-keys@1.1.1: - dependencies: - decamelize: 1.2.0 - map-obj: 1.0.1 - - decamelize@1.2.0: {} - decamelize@4.0.0: {} decamelize@6.0.0: {} - decode-named-character-reference@1.2.0: - dependencies: - character-entities: 2.0.2 - - decompress-response@6.0.0: - dependencies: - mimic-response: 3.1.0 - - deep-extend@0.6.0: {} - - deep-is@0.1.4: {} - deepmerge-ts@7.1.5: {} - deepmerge@4.3.1: {} - defaults@1.0.4: dependencies: clone: 1.0.4 optional: true - defer-to-connect@2.0.1: {} - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - degenerator@5.0.1: dependencies: ast-types: 0.13.4 escodegen: 2.1.0 esprima: 4.0.1 - deprecation@2.3.1: {} - - dequal@2.0.3: {} - - des.js@1.1.0: - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - - detect-indent@7.0.1: {} - detect-libc@1.0.3: optional: true - detect-libc@2.0.4: - optional: true - - detect-node@2.1.0: {} - - devlop@1.1.0: - dependencies: - dequal: 2.0.3 - - didyoumean@1.2.2: {} - - diff-sequences@29.6.3: {} + detect-libc@2.0.4: {} diff@4.0.2: {} diff@5.2.0: {} - diff@7.0.0: {} - diff@8.0.2: {} - diffie-hellman@5.0.3: - dependencies: - bn.js: 4.12.2 - miller-rabin: 4.0.1 - randombytes: 2.1.0 - dir-glob@3.0.1: dependencies: path-type: 4.0.0 - dlv@1.1.3: {} - - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 entities: 4.5.0 - domain-browser@4.22.0: {} - domelementtype@2.3.0: {} domhandler@5.0.3: @@ -12441,22 +5620,9 @@ snapshots: dependencies: is-obj: 2.0.0 - dotenv@16.5.0: {} - - dtrace-provider@0.8.8: - dependencies: - nan: 2.23.0 - optional: true - - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 + dotenv@16.6.1: {} - duplexer2@0.1.4: - dependencies: - readable-stream: 2.3.8 + dotenv@17.2.0: {} eastasianwidth@0.2.0: {} @@ -12466,15 +5632,11 @@ snapshots: optionalDependencies: wcwidth: 1.0.1 - ecdsa-sig-formatter@1.0.11: - dependencies: - safe-buffer: 5.2.1 - eciesjs@0.4.15: dependencies: - '@ecies/ciphers': 0.2.3(@noble/ciphers@1.3.0) + '@ecies/ciphers': 0.2.4(@noble/ciphers@1.3.0) '@noble/ciphers': 1.3.0 - '@noble/curves': 1.9.1 + '@noble/curves': 1.9.4 '@noble/hashes': 1.8.0 edge-paths@3.0.5: @@ -12482,13 +5644,13 @@ snapshots: '@types/which': 2.0.2 which: 2.0.2 - edgedriver@6.1.1: + edgedriver@6.1.2: dependencies: - '@wdio/logger': 9.4.4 - '@zip.js/zip.js': 2.7.62 + '@wdio/logger': 9.18.0 + '@zip.js/zip.js': 2.7.64 decamelize: 6.0.0 edge-paths: 3.0.5 - fast-xml-parser: 4.5.3 + fast-xml-parser: 5.2.5 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 node-fetch: 3.3.2 @@ -12496,222 +5658,77 @@ snapshots: transitivePeerDependencies: - supports-color - editorconfig@3.0.1: - dependencies: - '@one-ini/wasm': 0.2.0 - commander: 14.0.0 - minimatch: 10.0.1 - semver: 7.7.2 - ejs@3.1.10: dependencies: jake: 10.9.2 - electron-to-chromium@1.5.155: {} - - elliptic@6.6.1: - dependencies: - bn.js: 4.12.2 - brorand: 1.1.0 - hash.js: 1.1.7 - hmac-drbg: 1.0.1 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - - email-addresses@5.0.0: {} - - emoji-regex@10.4.0: {} + electron-to-chromium@1.5.187: {} emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} - emojibase-regex@16.0.0: {} - - emojibase@16.0.0: {} - - emojilib@2.4.0: {} - - encoding-sniffer@0.2.0: + encoding-sniffer@0.2.1: dependencies: iconv-lite: 0.6.3 whatwg-encoding: 3.1.1 - encoding@0.1.13: - dependencies: - iconv-lite: 0.6.3 - optional: true - - end-of-stream@1.4.4: + end-of-stream@1.4.5: dependencies: once: 1.4.0 - enhanced-resolve@5.18.1: + enhanced-resolve@5.18.2: dependencies: graceful-fs: 4.2.11 tapable: 2.2.2 entities@4.5.0: {} - entities@6.0.0: {} - - env-ci@11.1.1: - dependencies: - execa: 8.0.1 - java-properties: 1.0.2 + entities@6.0.1: {} env-paths@2.2.1: {} - environment@1.1.0: {} - - err-code@2.0.3: - optional: true - error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - es-abstract@1.23.9: - dependencies: - array-buffer-byte-length: 1.0.2 - arraybuffer.prototype.slice: 1.0.4 - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - data-view-buffer: 1.0.2 - data-view-byte-length: 1.0.2 - data-view-byte-offset: 1.0.1 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - es-set-tostringtag: 2.1.0 - es-to-primitive: 1.3.0 - function.prototype.name: 1.1.8 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - get-symbol-description: 1.1.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - internal-slot: 1.1.0 - is-array-buffer: 3.0.5 - is-callable: 1.2.7 - is-data-view: 1.0.2 - is-regex: 1.2.1 - is-shared-array-buffer: 1.0.4 - is-string: 1.1.1 - is-typed-array: 1.1.15 - is-weakref: 1.1.1 - math-intrinsics: 1.1.0 - object-inspect: 1.13.4 - object-keys: 1.1.1 - object.assign: 4.1.7 - own-keys: 1.0.1 - regexp.prototype.flags: 1.5.4 - safe-array-concat: 1.1.3 - safe-push-apply: 1.0.0 - safe-regex-test: 1.1.0 - set-proto: 1.0.0 - string.prototype.trim: 1.2.10 - string.prototype.trimend: 1.0.9 - string.prototype.trimstart: 1.0.8 - typed-array-buffer: 1.0.3 - typed-array-byte-length: 1.0.3 - typed-array-byte-offset: 1.0.4 - typed-array-length: 1.0.7 - unbox-primitive: 1.1.0 - which-typed-array: 1.1.19 - - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} - - es-iterator-helpers@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-set-tostringtag: 2.1.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - globalthis: 1.0.4 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - has-proto: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - iterator.prototype: 1.1.5 - safe-array-concat: 1.1.3 - es-module-lexer@1.7.0: {} - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - - es-set-tostringtag@2.1.0: - dependencies: - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - es-shim-unscopables@1.1.0: - dependencies: - hasown: 2.0.2 - - es-to-primitive@1.3.0: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.1.0 - is-symbol: 1.1.1 - - es6-error@4.1.1: {} - - esbuild@0.25.4: + esbuild@0.25.6: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.4 - '@esbuild/android-arm': 0.25.4 - '@esbuild/android-arm64': 0.25.4 - '@esbuild/android-x64': 0.25.4 - '@esbuild/darwin-arm64': 0.25.4 - '@esbuild/darwin-x64': 0.25.4 - '@esbuild/freebsd-arm64': 0.25.4 - '@esbuild/freebsd-x64': 0.25.4 - '@esbuild/linux-arm': 0.25.4 - '@esbuild/linux-arm64': 0.25.4 - '@esbuild/linux-ia32': 0.25.4 - '@esbuild/linux-loong64': 0.25.4 - '@esbuild/linux-mips64el': 0.25.4 - '@esbuild/linux-ppc64': 0.25.4 - '@esbuild/linux-riscv64': 0.25.4 - '@esbuild/linux-s390x': 0.25.4 - '@esbuild/linux-x64': 0.25.4 - '@esbuild/netbsd-arm64': 0.25.4 - '@esbuild/netbsd-x64': 0.25.4 - '@esbuild/openbsd-arm64': 0.25.4 - '@esbuild/openbsd-x64': 0.25.4 - '@esbuild/sunos-x64': 0.25.4 - '@esbuild/win32-arm64': 0.25.4 - '@esbuild/win32-ia32': 0.25.4 - '@esbuild/win32-x64': 0.25.4 + '@esbuild/aix-ppc64': 0.25.6 + '@esbuild/android-arm': 0.25.6 + '@esbuild/android-arm64': 0.25.6 + '@esbuild/android-x64': 0.25.6 + '@esbuild/darwin-arm64': 0.25.6 + '@esbuild/darwin-x64': 0.25.6 + '@esbuild/freebsd-arm64': 0.25.6 + '@esbuild/freebsd-x64': 0.25.6 + '@esbuild/linux-arm': 0.25.6 + '@esbuild/linux-arm64': 0.25.6 + '@esbuild/linux-ia32': 0.25.6 + '@esbuild/linux-loong64': 0.25.6 + '@esbuild/linux-mips64el': 0.25.6 + '@esbuild/linux-ppc64': 0.25.6 + '@esbuild/linux-riscv64': 0.25.6 + '@esbuild/linux-s390x': 0.25.6 + '@esbuild/linux-x64': 0.25.6 + '@esbuild/netbsd-arm64': 0.25.6 + '@esbuild/netbsd-x64': 0.25.6 + '@esbuild/openbsd-arm64': 0.25.6 + '@esbuild/openbsd-x64': 0.25.6 + '@esbuild/openharmony-arm64': 0.25.6 + '@esbuild/sunos-x64': 0.25.6 + '@esbuild/win32-arm64': 0.25.6 + '@esbuild/win32-ia32': 0.25.6 + '@esbuild/win32-x64': 0.25.6 escalade@3.2.0: {} - escape-string-regexp@1.0.5: {} - escape-string-regexp@2.0.0: {} escape-string-regexp@4.0.0: {} - escape-string-regexp@5.0.0: {} - escodegen@2.1.0: dependencies: esprima: 4.0.1 @@ -12720,224 +5737,15 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@10.1.5(eslint@9.27.0(jiti@2.4.2)): - dependencies: - eslint: 9.27.0(jiti@2.4.2) - - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.16.1 - resolve: 1.22.10 - transitivePeerDependencies: - - supports-color - - eslint-import-resolver-typescript@4.3.5(eslint-plugin-import-x@4.12.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.27.0(jiti@2.4.2)): - dependencies: - debug: 4.4.1(supports-color@8.1.1) - eslint: 9.27.0(jiti@2.4.2) - get-tsconfig: 4.10.1 - is-bun-module: 2.0.0 - stable-hash: 0.0.5 - tinyglobby: 0.2.13 - unrs-resolver: 1.7.2 - optionalDependencies: - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@4.3.5)(eslint@9.27.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.12.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - transitivePeerDependencies: - - supports-color - - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.3.5)(eslint@9.27.0(jiti@2.4.2)): - dependencies: - debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.27.0(jiti@2.4.2) - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 4.3.5(eslint-plugin-import-x@4.12.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint-plugin-import@2.31.0)(eslint@9.27.0(jiti@2.4.2)) - transitivePeerDependencies: - - supports-color - optional: true - - eslint-plugin-import-x@4.12.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3): - dependencies: - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - comment-parser: 1.4.1 - debug: 4.4.1(supports-color@8.1.1) - eslint: 9.27.0(jiti@2.4.2) - eslint-import-resolver-node: 0.3.9 - get-tsconfig: 4.10.1 - is-glob: 4.0.3 - minimatch: 10.0.1 - semver: 7.7.2 - stable-hash: 0.0.5 - tslib: 2.8.1 - unrs-resolver: 1.7.2 - transitivePeerDependencies: - - supports-color - - typescript - - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-typescript@4.3.5)(eslint@9.27.0(jiti@2.4.2)): - dependencies: - '@rtsao/scc': 1.1.0 - array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.6 - array.prototype.flat: 1.3.3 - array.prototype.flatmap: 1.3.3 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 9.27.0(jiti@2.4.2) - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.3.5)(eslint@9.27.0(jiti@2.4.2)) - hasown: 2.0.2 - is-core-module: 2.16.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - object.groupby: 1.0.3 - object.values: 1.2.1 - semver: 6.3.1 - string.prototype.trimend: 1.0.9 - tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - optional: true - - eslint-plugin-jsx-a11y@6.10.2(eslint@9.27.0(jiti@2.4.2)): - dependencies: - aria-query: 5.3.2 - array-includes: 3.1.8 - array.prototype.flatmap: 1.3.3 - ast-types-flow: 0.0.8 - axe-core: 4.10.3 - axobject-query: 4.1.0 - damerau-levenshtein: 1.0.8 - emoji-regex: 9.2.2 - eslint: 9.27.0(jiti@2.4.2) - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - language-tags: 1.0.9 - minimatch: 3.1.2 - object.fromentries: 2.0.8 - safe-regex-test: 1.1.0 - string.prototype.includes: 2.0.1 - - eslint-plugin-prettier@5.4.0(@types/eslint@9.6.1)(eslint-config-prettier@10.1.5(eslint@9.27.0(jiti@2.4.2)))(eslint@9.27.0(jiti@2.4.2))(prettier@3.6.2): - dependencies: - eslint: 9.27.0(jiti@2.4.2) - prettier: 3.6.2 - prettier-linter-helpers: 1.0.0 - synckit: 0.11.6 - optionalDependencies: - '@types/eslint': 9.6.1 - eslint-config-prettier: 10.1.5(eslint@9.27.0(jiti@2.4.2)) - - eslint-plugin-react-hooks@5.2.0(eslint@9.27.0(jiti@2.4.2)): - dependencies: - eslint: 9.27.0(jiti@2.4.2) - - eslint-plugin-react@7.37.5(eslint@9.27.0(jiti@2.4.2)): - dependencies: - array-includes: 3.1.8 - array.prototype.findlast: 1.2.5 - array.prototype.flatmap: 1.3.3 - array.prototype.tosorted: 1.1.4 - doctrine: 2.1.0 - es-iterator-helpers: 1.2.1 - eslint: 9.27.0(jiti@2.4.2) - estraverse: 5.3.0 - hasown: 2.0.2 - jsx-ast-utils: 3.3.5 - minimatch: 3.1.2 - object.entries: 1.1.9 - object.fromentries: 2.0.8 - object.values: 1.2.1 - prop-types: 15.8.1 - resolve: 2.0.0-next.5 - semver: 6.3.1 - string.prototype.matchall: 4.0.12 - string.prototype.repeat: 1.0.0 - - eslint-plugin-tailwindcss@3.18.0(tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.11.24)(@types/node@22.15.21)(typescript@5.8.3))): - dependencies: - fast-glob: 3.3.3 - postcss: 8.5.3 - tailwindcss: 3.4.17(ts-node@10.9.2(@swc/core@1.11.24)(@types/node@22.15.21)(typescript@5.8.3)) - eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - eslint-scope@8.3.0: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint-visitor-keys@4.2.0: {} - - eslint@9.27.0(jiti@2.4.2): - dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2)) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.20.0 - '@eslint/config-helpers': 0.2.2 - '@eslint/core': 0.14.0 - '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.27.0 - '@eslint/plugin-kit': 0.3.1 - '@humanfs/node': 0.16.6 - '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.3 - '@types/estree': 1.0.7 - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.6 - debug: 4.4.1(supports-color@8.1.1) - escape-string-regexp: 4.0.0 - eslint-scope: 8.3.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 - esquery: 1.6.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 8.0.0 - find-up: 5.0.0 - glob-parent: 6.0.2 - ignore: 5.3.2 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - json-stable-stringify-without-jsonify: 1.0.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.4 - optionalDependencies: - jiti: 2.4.2 - transitivePeerDependencies: - - supports-color - esm@3.2.25: {} - espree@10.3.0: - dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) - eslint-visitor-keys: 4.2.0 - esprima@4.0.1: {} - esquery@1.6.0: - dependencies: - estraverse: 5.3.0 - esrecurse@4.3.0: dependencies: estraverse: 5.3.0 @@ -12952,15 +5760,8 @@ snapshots: event-target-shim@5.0.1: {} - eventemitter3@5.0.1: {} - events@3.3.0: {} - evp_bytestokey@1.0.3: - dependencies: - md5.js: 1.3.5 - safe-buffer: 5.2.1 - execa@5.1.1: dependencies: cross-spawn: 7.0.6 @@ -12971,21 +5772,9 @@ snapshots: npm-run-path: 4.0.1 onetime: 5.1.2 signal-exit: 3.0.7 - strip-final-newline: 2.0.0 - - execa@8.0.1: - dependencies: - cross-spawn: 7.0.6 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 + strip-final-newline: 2.0.0 - execa@9.5.3: + execa@9.6.0: dependencies: '@sindresorhus/merge-streams': 4.0.0 cross-spawn: 7.0.6 @@ -13000,31 +5789,26 @@ snapshots: strip-final-newline: 4.0.0 yoctocolors: 2.1.1 - expand-template@2.0.3: - optional: true + exit-hook@4.0.0: {} - expect-webdriverio@5.1.0(@wdio/globals@9.14.0(@wdio/logger@9.4.4))(@wdio/logger@9.4.4)(webdriverio@9.14.0): + expect-webdriverio@5.4.0(@wdio/globals@9.17.0)(@wdio/logger@9.18.0)(webdriverio@9.18.1): dependencies: - '@vitest/snapshot': 2.1.9 - '@wdio/globals': 9.14.0(@wdio/logger@9.4.4) - '@wdio/logger': 9.4.4 - expect: 29.7.0 - jest-matcher-utils: 29.7.0 + '@vitest/snapshot': 3.2.4 + '@wdio/globals': 9.17.0(expect-webdriverio@5.4.0)(webdriverio@9.18.1) + '@wdio/logger': 9.18.0 + expect: 30.0.4 + jest-matcher-utils: 30.0.4 lodash.isequal: 4.5.0 - webdriverio: 9.14.0 + webdriverio: 9.18.1 - expect@29.7.0: + expect@30.0.4: dependencies: - '@jest/expect-utils': 29.7.0 - jest-get-type: 29.6.3 - jest-matcher-utils: 29.7.0 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - - exponential-backoff@3.1.2: - optional: true - - extend@3.0.2: {} + '@jest/expect-utils': 30.0.4 + '@jest/get-type': 30.0.1 + jest-matcher-utils: 30.0.4 + jest-message-util: 30.0.2 + jest-mock: 30.0.2 + jest-util: 30.0.2 external-editor@3.1.0: dependencies: @@ -13042,14 +5826,10 @@ snapshots: transitivePeerDependencies: - supports-color - fast-content-type-parse@3.0.0: {} - fast-deep-equal@2.0.1: {} fast-deep-equal@3.1.3: {} - fast-diff@1.3.0: {} - fast-fifo@1.3.2: {} fast-glob@3.3.3: @@ -13060,21 +5840,11 @@ snapshots: merge2: 1.4.1 micromatch: 4.0.8 - fast-json-patch@3.1.1: {} - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - fast-uri@3.0.6: {} - fast-xml-parser@4.4.1: - dependencies: - strnum: 1.1.2 - - fast-xml-parser@4.5.3: + fast-xml-parser@5.2.5: dependencies: - strnum: 1.1.2 + strnum: 2.1.1 fastq@1.19.1: dependencies: @@ -13084,34 +5854,19 @@ snapshots: dependencies: pend: 1.2.0 - fdir@6.4.4(picomatch@4.0.2): + fdir@6.4.6(picomatch@4.0.3): optionalDependencies: - picomatch: 4.0.2 + picomatch: 4.0.3 fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 - fflate@0.8.2: {} - - figures@2.0.0: - dependencies: - escape-string-regexp: 1.0.5 - figures@6.1.0: dependencies: is-unicode-supported: 2.1.0 - file-entry-cache@8.0.0: - dependencies: - flat-cache: 4.0.1 - - file-saver@2.0.5: {} - - file-uri-to-path@1.0.0: - optional: true - filelist@1.0.4: dependencies: minimatch: 5.1.6 @@ -13120,25 +5875,6 @@ snapshots: dependencies: to-regex-range: 5.0.1 - find-packages@10.0.4: - dependencies: - '@pnpm/read-project-manifest': 4.1.1 - '@pnpm/types': 8.9.0 - '@pnpm/util.lex-comparator': 1.0.0 - fast-glob: 3.3.3 - p-filter: 2.1.0 - - find-up-simple@1.0.1: {} - - find-up@2.1.0: - dependencies: - locate-path: 2.0.0 - - find-up@4.1.0: - dependencies: - locate-path: 5.0.0 - path-exists: 4.0.0 - find-up@5.0.0: dependencies: locate-path: 6.0.0 @@ -13155,24 +5891,8 @@ snapshots: path-exists: 5.0.0 unicorn-magic: 0.1.0 - find-versions@6.0.0: - dependencies: - semver-regex: 4.0.5 - super-regex: 1.0.0 - - flat-cache@4.0.1: - dependencies: - flatted: 3.3.3 - keyv: 4.5.4 - flat@5.0.2: {} - flatted@3.3.3: {} - - for-each@0.3.5: - dependencies: - is-callable: 1.2.7 - foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 @@ -13182,156 +5902,49 @@ snapshots: dependencies: fetch-blob: 3.2.0 - forwarded-parse@2.1.2: {} - fraction.js@4.3.7: {} - from2@2.3.0: - dependencies: - inherits: 2.0.4 - readable-stream: 2.3.8 - - fs-constants@1.0.0: - optional: true - - fs-extra@11.3.0: - dependencies: - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - - fs-minipass@2.1.0: - dependencies: - minipass: 3.3.6 - - fs-minipass@3.0.3: - dependencies: - minipass: 7.1.2 - fs.realpath@1.0.0: {} fsevents@2.3.3: optional: true - function-bind@1.1.2: {} - - function-timeout@1.0.2: {} - - function.prototype.name@1.1.8: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - functions-have-names: 1.2.3 - hasown: 2.0.2 - is-callable: 1.2.7 - - functions-have-names@1.2.3: {} - - gaxios@6.7.1(encoding@0.1.13): - dependencies: - extend: 3.0.2 - https-proxy-agent: 7.0.6 - is-stream: 2.0.1 - node-fetch: 2.7.0(encoding@0.1.13) - uuid: 9.0.1 - transitivePeerDependencies: - - encoding - - supports-color - - gaxios@7.1.1: - dependencies: - extend: 3.0.2 - https-proxy-agent: 7.0.6 - node-fetch: 3.3.2 - transitivePeerDependencies: - - supports-color - - gcp-metadata@6.1.1(encoding@0.1.13): - dependencies: - gaxios: 6.7.1(encoding@0.1.13) - google-logging-utils: 0.0.2 - json-bigint: 1.0.0 - transitivePeerDependencies: - - encoding - - supports-color - - gcp-metadata@7.0.1: - dependencies: - gaxios: 7.1.1 - google-logging-utils: 1.1.1 - json-bigint: 1.0.0 - transitivePeerDependencies: - - supports-color - geckodriver@5.0.0: dependencies: - '@wdio/logger': 9.4.4 - '@zip.js/zip.js': 2.7.62 + '@wdio/logger': 9.18.0 + '@zip.js/zip.js': 2.7.64 decamelize: 6.0.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 node-fetch: 3.3.2 - tar-fs: 3.0.8 + tar-fs: 3.1.0 which: 5.0.0 transitivePeerDependencies: - bare-buffer - supports-color - generic-pool@3.9.0: {} + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} - get-east-asian-width@1.3.0: {} - - get-intrinsic@1.3.0: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 - hasown: 2.0.2 - math-intrinsics: 1.1.0 - get-port@7.1.0: {} - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 - - get-stdin@6.0.0: {} - get-stream@5.2.0: dependencies: - pump: 3.0.2 + pump: 3.0.3 get-stream@6.0.1: {} - get-stream@7.0.1: {} - - get-stream@8.0.1: {} - get-stream@9.0.1: dependencies: '@sec-ant/readable-stream': 0.4.1 is-stream: 4.0.1 - get-symbol-description@1.1.0: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - get-tsconfig@4.10.1: dependencies: resolve-pkg-maps: 1.0.0 - get-uri@6.0.4: + get-uri@6.0.5: dependencies: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 @@ -13339,55 +5952,16 @@ snapshots: transitivePeerDependencies: - supports-color - git-log-parser@1.2.1: - dependencies: - argv-formatter: 1.0.0 - spawn-error-forwarder: 1.0.0 - split2: 1.0.0 - stream-combiner2: 1.1.1 - through2: 2.0.5 - traverse: 0.6.8 - - git-raw-commits@2.0.11: - dependencies: - dargs: 7.0.0 - lodash: 4.17.21 - meow: 8.1.2 - split2: 3.2.2 - through2: 4.0.2 - git-raw-commits@4.0.0: dependencies: dargs: 8.1.0 meow: 12.1.1 split2: 4.2.0 - git-secrets@0.0.11: - dependencies: - yargs: 15.4.1 - - git-up@8.1.1: - dependencies: - is-ssh: 1.4.1 - parse-url: 9.2.0 - - git-url-parse@16.1.0: - dependencies: - git-up: 8.1.1 - - github-from-package@0.0.0: - optional: true - - github-url-from-git@1.5.0: {} - glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - glob-to-regexp@0.4.1: {} glob@10.4.5: @@ -13399,15 +5973,6 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - glob@11.0.2: - dependencies: - foreground-child: 3.3.1 - jackspeak: 4.1.0 - minimatch: 10.0.1 - minipass: 7.1.2 - package-json-from-dist: 1.0.1 - path-scurry: 2.0.0 - glob@11.0.3: dependencies: foreground-child: 3.3.1 @@ -13417,15 +5982,6 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 2.0.0 - glob@6.0.4: - dependencies: - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - optional: true - glob@8.1.0: dependencies: fs.realpath: 1.0.0 @@ -13434,28 +5990,10 @@ snapshots: minimatch: 5.1.6 once: 1.4.0 - global-agent@3.0.0: - dependencies: - boolean: 3.2.0 - es6-error: 4.1.1 - matcher: 3.0.0 - roarr: 2.15.4 - semver: 7.7.2 - serialize-error: 7.0.1 - global-directory@4.0.1: dependencies: ini: 4.1.1 - globals@14.0.0: {} - - globals@16.1.0: {} - - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - globby@11.1.0: dependencies: array-union: 2.1.0 @@ -13465,136 +6003,14 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 - globby@14.1.0: - dependencies: - '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.3 - ignore: 7.0.4 - path-type: 6.0.0 - slash: 5.1.0 - unicorn-magic: 0.3.0 - - good-enough-parser@1.1.23: - dependencies: - '@thi.ng/zipper': 1.0.3 - '@types/moo': 0.5.5 - klona: 2.0.6 - moo: 0.5.2 - - google-auth-library@10.1.0: - dependencies: - base64-js: 1.5.1 - ecdsa-sig-formatter: 1.0.11 - gaxios: 7.1.1 - gcp-metadata: 7.0.1 - google-logging-utils: 1.1.1 - gtoken: 8.0.0 - jws: 4.0.0 - transitivePeerDependencies: - - supports-color - - google-logging-utils@0.0.2: {} - - google-logging-utils@1.1.1: {} - - gopd@1.2.0: {} - - got@11.8.6: - dependencies: - '@sindresorhus/is': 4.6.0 - '@szmarczak/http-timer': 4.0.6 - '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.3 - cacheable-lookup: 5.0.4 - cacheable-request: 7.0.4 - decompress-response: 6.0.0 - http2-wrapper: 1.0.3 - lowercase-keys: 2.0.0 - p-cancelable: 2.1.1 - responselike: 2.0.1 - - graceful-fs@4.2.10: {} - graceful-fs@4.2.11: {} - graph-data-structure@4.5.0: {} - grapheme-splitter@1.0.4: {} - graphemer@1.4.0: {} - - gtoken@8.0.0: - dependencies: - gaxios: 7.1.1 - jws: 4.0.0 - transitivePeerDependencies: - - supports-color - - handlebars@4.7.8: - dependencies: - minimist: 1.2.8 - neo-async: 2.6.2 - source-map: 0.6.1 - wordwrap: 1.0.0 - optionalDependencies: - uglify-js: 3.19.3 - - hard-rejection@2.1.0: {} - - has-bigints@1.1.0: {} - - has-flag@2.0.0: {} - - has-flag@3.0.0: {} - has-flag@4.0.0: {} - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - - has-proto@1.2.0: - dependencies: - dunder-proto: 1.0.1 - - has-symbols@1.1.0: {} - - has-tostringtag@1.0.2: - dependencies: - has-symbols: 1.1.0 - - hash-base@3.0.5: - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - - hash.js@1.1.7: - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - - hasown@2.0.2: - dependencies: - function-bind: 1.1.2 - he@1.2.0: {} - highlight.js@10.7.3: {} - - hmac-drbg@1.0.1: - dependencies: - hash.js: 1.1.7 - minimalistic-assert: 1.0.1 - minimalistic-crypto-utils: 1.0.1 - - hook-std@3.0.0: {} - - hosted-git-info@2.8.9: {} - - hosted-git-info@4.1.0: - dependencies: - lru-cache: 6.0.0 - hosted-git-info@7.0.2: dependencies: lru-cache: 10.4.3 @@ -13603,83 +6019,33 @@ snapshots: dependencies: lru-cache: 10.4.3 - hpagent@1.2.0: {} + htmlfy@0.8.1: {} - htmlfy@0.6.7: {} - - htmlparser2@9.1.0: + htmlparser2@10.0.0: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 domutils: 3.2.2 - entities: 4.5.0 - - http-cache-semantics@4.2.0: {} - - http-proxy-agent@5.0.0: - dependencies: - '@tootallnate/once': 2.0.0 - agent-base: 6.0.2 - debug: 4.4.1(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color + entities: 6.0.1 http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.3 - debug: 4.4.1(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - - http2-wrapper@1.0.3: - dependencies: - quick-lru: 5.1.1 - resolve-alpn: 1.2.1 - - https-browserify@1.0.0: {} - - https-proxy-agent@5.0.1: - dependencies: - agent-base: 6.0.2 + agent-base: 7.1.4 debug: 4.4.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color https-proxy-agent@7.0.6: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color human-signals@2.1.0: {} - human-signals@5.0.0: {} - human-signals@8.0.1: {} - humanize-ms@1.2.1: - dependencies: - ms: 2.1.3 - - husky@9.1.7: {} - - hyperlinker@1.0.0: {} - - iced-error@0.0.13: {} - - iced-lock@1.1.0: - dependencies: - iced-runtime: 1.0.4 - - iced-lock@2.0.1: - dependencies: - iced-runtime: 1.0.4 - - iced-runtime-3@3.0.5: {} - - iced-runtime@1.0.4: {} - iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -13694,43 +6060,17 @@ snapshots: ignore@5.3.2: {} - ignore@7.0.4: {} - - ignore@7.0.5: {} - immediate@3.0.6: {} - immutable@5.1.2: {} + immutable@5.1.3: {} import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - import-from-esm@2.0.0: - dependencies: - debug: 4.4.1(supports-color@8.1.1) - import-meta-resolve: 4.1.0 - transitivePeerDependencies: - - supports-color - - import-in-the-middle@1.14.2: - dependencies: - acorn: 8.14.1 - acorn-import-attributes: 1.9.5(acorn@8.14.1) - cjs-module-lexer: 1.4.3 - module-details-from-path: 1.0.4 - import-meta-resolve@4.1.0: {} - imurmurhash@0.1.4: {} - - indent-string@4.0.0: {} - - indent-string@5.0.0: {} - - index-to-position@1.1.0: {} - inflight@1.0.6: dependencies: once: 1.4.0 @@ -13738,242 +6078,71 @@ snapshots: inherits@2.0.4: {} - ini@1.3.8: {} - ini@4.1.1: {} - ini@5.0.0: {} - - inquirer@11.1.0: + inquirer@12.7.0(@types/node@24.0.14): dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/prompts': 6.0.1 - '@inquirer/type': 2.0.0 - '@types/mute-stream': 0.0.4 + '@inquirer/core': 10.1.14(@types/node@24.0.14) + '@inquirer/prompts': 7.6.0(@types/node@24.0.14) + '@inquirer/type': 3.0.7(@types/node@24.0.14) ansi-escapes: 4.3.2 - mute-stream: 1.0.0 - run-async: 3.0.0 + mute-stream: 2.0.0 + run-async: 4.0.4 rxjs: 7.8.2 - - install-artifact-from-github@1.4.0: - optional: true - - internal-slot@1.1.0: - dependencies: - es-errors: 1.3.0 - hasown: 2.0.2 - side-channel: 1.1.0 - - into-stream@7.0.0: - dependencies: - from2: 2.3.0 - p-is-promise: 3.0.0 + optionalDependencies: + '@types/node': 24.0.14 ip-address@9.0.5: dependencies: jsbn: 1.1.0 sprintf-js: 1.1.3 - is-arguments@1.2.0: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-array-buffer@3.0.5: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-arrayish@0.2.1: {} - - is-async-function@2.1.1: - dependencies: - async-function: 1.0.0 - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - - is-bigint@1.1.0: - dependencies: - has-bigints: 1.1.0 - - is-binary-path@2.1.0: - dependencies: - binary-extensions: 2.3.0 - - is-boolean-object@1.2.2: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-bun-module@2.0.0: - dependencies: - semver: 7.7.2 - - is-callable@1.2.7: {} - - is-core-module@2.16.1: - dependencies: - hasown: 2.0.2 - - is-data-view@1.0.2: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - is-typed-array: 1.1.15 + is-arrayish@0.2.1: {} - is-date-object@1.1.0: + is-binary-path@2.1.0: dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 + binary-extensions: 2.3.0 is-extglob@2.1.1: {} - is-finalizationregistry@1.1.1: - dependencies: - call-bound: 1.0.4 - is-fullwidth-code-point@3.0.0: {} - is-fullwidth-code-point@4.0.0: {} - - is-fullwidth-code-point@5.0.0: - dependencies: - get-east-asian-width: 1.3.0 - - is-generator-function@1.1.0: - dependencies: - call-bound: 1.0.4 - get-proto: 1.0.1 - has-tostringtag: 1.0.2 - safe-regex-test: 1.1.0 - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - is-map@2.0.3: {} - - is-nan@1.3.2: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - - is-number-object@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - is-number@7.0.0: {} is-obj@2.0.0: {} - is-plain-obj@1.1.0: {} - is-plain-obj@2.1.0: {} is-plain-obj@4.1.0: {} - is-regex@1.2.1: - dependencies: - call-bound: 1.0.4 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - hasown: 2.0.2 - - is-set@2.0.3: {} - - is-shared-array-buffer@1.0.4: - dependencies: - call-bound: 1.0.4 - - is-ssh@1.4.1: - dependencies: - protocols: 2.0.2 - is-stream@2.0.1: {} - is-stream@3.0.0: {} - is-stream@4.0.1: {} - is-string@1.1.1: - dependencies: - call-bound: 1.0.4 - has-tostringtag: 1.0.2 - - is-symbol@1.1.1: - dependencies: - call-bound: 1.0.4 - has-symbols: 1.1.0 - safe-regex-test: 1.1.0 - is-text-path@2.0.0: dependencies: text-extensions: 2.4.0 - is-typed-array@1.1.15: - dependencies: - which-typed-array: 1.1.19 - - is-typedarray@1.0.0: {} - is-unicode-supported@0.1.0: {} is-unicode-supported@2.1.0: {} - is-weakmap@2.0.2: {} - - is-weakref@1.1.1: - dependencies: - call-bound: 1.0.4 - - is-weakset@2.0.4: - dependencies: - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - - is-windows@1.0.2: {} - isarray@1.0.0: {} - isarray@2.0.5: {} - isexe@2.0.0: {} isexe@3.1.1: {} - isomorphic-timers-promises@1.0.1: {} - - issue-parser@7.0.1: - dependencies: - lodash.capitalize: 4.2.1 - lodash.escaperegexp: 4.1.2 - lodash.isplainobject: 4.0.6 - lodash.isstring: 4.0.1 - lodash.uniqby: 4.7.0 - - iterator.prototype@1.1.5: - dependencies: - define-data-property: 1.1.4 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - has-symbols: 1.1.0 - set-function-name: 2.0.2 - jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jackspeak@4.1.0: - dependencies: - '@isaacs/cliui': 8.0.2 - jackspeak@4.1.1: dependencies: '@isaacs/cliui': 8.0.2 @@ -13985,137 +6154,77 @@ snapshots: filelist: 1.0.4 minimatch: 3.1.2 - java-properties@1.0.2: {} - - jest-diff@29.7.0: + jest-diff@30.0.4: dependencies: + '@jest/diff-sequences': 30.0.1 + '@jest/get-type': 30.0.1 chalk: 4.1.2 - diff-sequences: 29.6.3 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 + pretty-format: 30.0.2 - jest-get-type@29.6.3: {} - - jest-matcher-utils@29.7.0: + jest-matcher-utils@30.0.4: dependencies: + '@jest/get-type': 30.0.1 chalk: 4.1.2 - jest-diff: 29.7.0 - jest-get-type: 29.6.3 - pretty-format: 29.7.0 + jest-diff: 30.0.4 + pretty-format: 30.0.2 - jest-message-util@29.7.0: + jest-message-util@30.0.2: dependencies: '@babel/code-frame': 7.27.1 - '@jest/types': 29.6.3 + '@jest/types': 30.0.1 '@types/stack-utils': 2.0.3 chalk: 4.1.2 graceful-fs: 4.2.11 micromatch: 4.0.8 - pretty-format: 29.7.0 + pretty-format: 30.0.2 slash: 3.0.0 stack-utils: 2.0.6 - jest-util@29.7.0: + jest-mock@30.0.2: + dependencies: + '@jest/types': 30.0.1 + '@types/node': 24.0.14 + jest-util: 30.0.2 + + jest-regex-util@30.0.1: {} + + jest-util@30.0.2: dependencies: - '@jest/types': 29.6.3 - '@types/node': 22.15.21 + '@jest/types': 30.0.1 + '@types/node': 24.0.14 chalk: 4.1.2 - ci-info: 3.9.0 + ci-info: 4.3.0 graceful-fs: 4.2.11 - picomatch: 2.3.1 + picomatch: 4.0.3 jest-worker@27.5.1: dependencies: - '@types/node': 22.15.21 + '@types/node': 24.0.14 merge-stream: 2.0.0 supports-color: 8.1.1 - jiti@1.21.7: {} - jiti@2.4.2: {} - js-md4@0.3.2: {} - js-tokens@4.0.0: {} - js-yaml@3.14.1: - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - js-yaml@4.1.0: dependencies: argparse: 2.0.1 jsbn@1.1.0: {} - json-bigint@1.0.0: - dependencies: - bignumber.js: 9.3.1 - - json-buffer@3.0.1: {} - - json-dup-key-validator@1.0.3: - dependencies: - backslash: 0.2.0 - - json-parse-better-errors@1.0.2: {} + jsesc@3.1.0: {} json-parse-even-better-errors@2.3.1: {} json-parse-even-better-errors@3.0.2: {} - json-schema-traverse@0.4.1: {} - json-schema-traverse@1.0.0: {} - json-stable-stringify-without-jsonify@1.0.1: {} - - json-stringify-pretty-compact@4.0.0: {} - - json-stringify-safe@5.0.1: {} - - json5@1.0.2: - dependencies: - minimist: 1.2.8 - optional: true - json5@2.2.3: {} - jsonata@2.0.6: {} - - jsonc-parser@3.3.1: {} - - jsonfile@6.1.0: - dependencies: - universalify: 2.0.1 - optionalDependencies: - graceful-fs: 4.2.11 - jsonparse@1.3.1: {} - jsonpointer@5.0.1: {} - - jsonwebtoken@9.0.2: - dependencies: - jws: 3.2.2 - lodash.includes: 4.3.0 - lodash.isboolean: 3.0.3 - lodash.isinteger: 4.0.4 - lodash.isnumber: 3.0.3 - lodash.isplainobject: 4.0.6 - lodash.isstring: 4.0.1 - lodash.once: 4.1.1 - ms: 2.1.3 - semver: 7.7.2 - - jsx-ast-utils@3.3.5: - dependencies: - array-includes: 3.1.8 - array.prototype.flat: 1.3.3 - object.assign: 4.1.7 - object.values: 1.2.1 - jszip@3.10.1: dependencies: lie: 3.3.0 @@ -14123,133 +6232,73 @@ snapshots: readable-stream: 2.3.8 setimmediate: 1.0.5 - jwa@1.4.2: - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - - jwa@2.0.1: - dependencies: - buffer-equal-constant-time: 1.0.1 - ecdsa-sig-formatter: 1.0.11 - safe-buffer: 5.2.1 - - jws@3.2.2: + lazystream@1.0.1: dependencies: - jwa: 1.4.2 - safe-buffer: 5.2.1 + readable-stream: 2.3.8 - jws@4.0.0: + lie@3.3.0: dependencies: - jwa: 2.0.1 - safe-buffer: 5.2.1 + immediate: 3.0.6 - keybase-ecurve@1.0.1: - dependencies: - bn: 1.0.5 + lightningcss-darwin-arm64@1.30.1: + optional: true - keybase-nacl@1.1.4: - dependencies: - iced-runtime: 1.0.4 - tweetnacl: 0.13.3 - uint64be: 1.0.1 + lightningcss-darwin-x64@1.30.1: + optional: true - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 + lightningcss-freebsd-x64@1.30.1: + optional: true - kind-of@6.0.3: {} + lightningcss-linux-arm-gnueabihf@1.30.1: + optional: true - klona@2.0.6: {} + lightningcss-linux-arm64-gnu@1.30.1: + optional: true - language-subtag-registry@0.3.23: {} + lightningcss-linux-arm64-musl@1.30.1: + optional: true - language-tags@1.0.9: - dependencies: - language-subtag-registry: 0.3.23 + lightningcss-linux-x64-gnu@1.30.1: + optional: true - lazystream@1.0.1: - dependencies: - readable-stream: 2.3.8 + lightningcss-linux-x64-musl@1.30.1: + optional: true - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 + lightningcss-win32-arm64-msvc@1.30.1: + optional: true - lie@3.1.1: - dependencies: - immediate: 3.0.6 + lightningcss-win32-x64-msvc@1.30.1: + optional: true - lie@3.3.0: + lightningcss@1.30.1: dependencies: - immediate: 3.0.6 - - lilconfig@3.1.3: {} + detect-libc: 2.0.4 + optionalDependencies: + lightningcss-darwin-arm64: 1.30.1 + lightningcss-darwin-x64: 1.30.1 + lightningcss-freebsd-x64: 1.30.1 + lightningcss-linux-arm-gnueabihf: 1.30.1 + lightningcss-linux-arm64-gnu: 1.30.1 + lightningcss-linux-arm64-musl: 1.30.1 + lightningcss-linux-x64-gnu: 1.30.1 + lightningcss-linux-x64-musl: 1.30.1 + lightningcss-win32-arm64-msvc: 1.30.1 + lightningcss-win32-x64-msvc: 1.30.1 lines-and-columns@1.2.4: {} lines-and-columns@2.0.4: {} - linkify-it@5.0.0: - dependencies: - uc.micro: 2.1.0 - - lint-staged@16.0.0: - dependencies: - chalk: 5.4.1 - commander: 13.1.0 - debug: 4.4.1(supports-color@8.1.1) - lilconfig: 3.1.3 - listr2: 8.3.3 - micromatch: 4.0.8 - nano-spawn: 1.0.2 - pidtree: 0.6.0 - string-argv: 0.3.2 - yaml: 2.8.0 - transitivePeerDependencies: - - supports-color - - listr2@8.3.3: - dependencies: - cli-truncate: 4.0.0 - colorette: 2.0.20 - eventemitter3: 5.0.1 - log-update: 6.1.0 - rfdc: 1.4.1 - wrap-ansi: 9.0.0 - - load-json-file@4.0.0: - dependencies: - graceful-fs: 4.2.11 - parse-json: 4.0.0 - pify: 3.0.0 - strip-bom: 3.0.0 - loader-runner@4.3.0: {} loader-utils@3.3.1: {} - localforage@1.10.0: - dependencies: - lie: 3.1.1 - locate-app@2.5.0: dependencies: '@promptbook/utils': 0.69.5 type-fest: 4.26.0 userhome: 1.0.1 - locate-path@2.0.0: - dependencies: - p-locate: 2.0.0 - path-exists: 3.0.0 - - locate-path@5.0.0: - dependencies: - p-locate: 4.1.0 - locate-path@6.0.0: dependencies: p-locate: 5.0.0 @@ -14258,506 +6307,107 @@ snapshots: dependencies: p-locate: 6.0.0 - lodash-es@4.17.21: {} - lodash.camelcase@4.3.0: {} - lodash.capitalize@4.2.1: {} - lodash.clonedeep@4.5.0: {} - lodash.escaperegexp@4.1.2: {} - - lodash.find@4.6.0: {} - lodash.flattendeep@4.4.0: {} - lodash.includes@4.3.0: {} - - lodash.isboolean@3.0.3: {} - lodash.isequal@4.5.0: {} - lodash.isinteger@4.0.4: {} - - lodash.isnumber@3.0.3: {} - - lodash.isobject@3.0.2: {} - lodash.isplainobject@4.0.6: {} - lodash.isstring@4.0.1: {} - lodash.kebabcase@4.1.1: {} - lodash.keys@4.2.0: {} - - lodash.mapvalues@4.6.0: {} - - lodash.memoize@4.1.2: {} - lodash.merge@4.6.2: {} lodash.mergewith@4.6.2: {} - lodash.once@4.1.1: {} - lodash.pickby@4.6.0: {} - lodash.snakecase@4.1.1: {} - - lodash.startcase@4.4.0: {} - - lodash.union@4.6.0: {} - - lodash.uniq@4.5.0: {} - - lodash.uniqby@4.7.0: {} - - lodash.upperfirst@4.3.1: {} - - lodash.zip@4.2.0: {} - - lodash@4.17.21: {} - - log-symbols@4.1.0: - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - - log-update@6.1.0: - dependencies: - ansi-escapes: 7.0.0 - cli-cursor: 5.0.0 - slice-ansi: 7.1.0 - strip-ansi: 7.1.0 - wrap-ansi: 9.0.0 - - loglevel-plugin-prefix@0.8.4: {} - - loglevel@1.9.2: {} - - long@5.3.2: {} - - longest-streak@3.1.0: {} - - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - lowercase-keys@2.0.0: {} - - lru-cache@10.4.3: {} - - lru-cache@11.1.0: {} - - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - lru-cache@7.18.3: {} - - lunr@2.3.9: {} - - luxon@3.6.1: {} - - magic-string@0.30.17: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - - make-error@1.3.6: {} - - make-fetch-happen@14.0.3: - dependencies: - '@npmcli/agent': 3.0.0 - cacache: 19.0.1 - http-cache-semantics: 4.2.0 - minipass: 7.1.2 - minipass-fetch: 4.0.1 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - negotiator: 1.0.0 - proc-log: 5.0.0 - promise-retry: 2.0.1 - ssri: 12.0.0 - transitivePeerDependencies: - - supports-color - optional: true - - map-obj@1.0.1: {} - - map-obj@4.3.0: {} - - markdown-it@14.1.0: - dependencies: - argparse: 2.0.1 - entities: 4.5.0 - linkify-it: 5.0.0 - mdurl: 2.0.0 - punycode.js: 2.3.1 - uc.micro: 2.1.0 - - markdown-table@3.0.4: {} - - marked-terminal@7.3.0(marked@15.0.12): - dependencies: - ansi-escapes: 7.0.0 - ansi-regex: 6.1.0 - chalk: 5.4.1 - cli-highlight: 2.1.11 - cli-table3: 0.6.5 - marked: 15.0.12 - node-emoji: 2.2.0 - supports-hyperlinks: 3.2.0 - - marked@15.0.12: {} - - matcher@3.0.0: - dependencies: - escape-string-regexp: 4.0.0 - - math-intrinsics@1.1.0: {} - - md5.js@1.3.5: - dependencies: - hash-base: 3.0.5 - inherits: 2.0.4 - safe-buffer: 5.2.1 - - mdast-util-find-and-replace@3.0.2: - dependencies: - '@types/mdast': 4.0.4 - escape-string-regexp: 5.0.0 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 - - mdast-util-from-markdown@2.0.2: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - decode-named-character-reference: 1.2.0 - devlop: 1.1.0 - mdast-util-to-string: 4.0.0 - micromark: 4.0.2 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-decode-string: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - unist-util-stringify-position: 4.0.0 - transitivePeerDependencies: - - supports-color - - mdast-util-phrasing@4.1.0: - dependencies: - '@types/mdast': 4.0.4 - unist-util-is: 6.0.0 - - mdast-util-to-markdown@2.1.2: - dependencies: - '@types/mdast': 4.0.4 - '@types/unist': 3.0.3 - longest-streak: 3.1.0 - mdast-util-phrasing: 4.1.0 - mdast-util-to-string: 4.0.0 - micromark-util-classify-character: 2.0.1 - micromark-util-decode-string: 2.0.1 - unist-util-visit: 5.0.0 - zwitch: 2.0.4 - - mdast-util-to-string@4.0.0: - dependencies: - '@types/mdast': 4.0.4 - - mdurl@2.0.0: {} - - memfs-or-file-map-to-github-branch@1.3.0: - dependencies: - '@octokit/rest': 20.1.2 - - meow@12.1.1: {} - - meow@13.2.0: {} - - meow@7.1.1: - dependencies: - '@types/minimist': 1.2.5 - camelcase-keys: 6.2.2 - decamelize-keys: 1.1.1 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 2.5.0 - read-pkg-up: 7.0.1 - redent: 3.0.0 - trim-newlines: 3.0.1 - type-fest: 0.13.1 - yargs-parser: 18.1.3 - - meow@8.1.2: - dependencies: - '@types/minimist': 1.2.5 - camelcase-keys: 6.2.2 - decamelize-keys: 1.1.1 - hard-rejection: 2.1.0 - minimist-options: 4.1.0 - normalize-package-data: 3.0.3 - read-pkg-up: 7.0.1 - redent: 3.0.0 - trim-newlines: 3.0.1 - type-fest: 0.18.1 - yargs-parser: 20.2.9 - - merge-stream@2.0.0: {} - - merge2@1.4.1: {} - - micromark-core-commonmark@2.0.3: - dependencies: - decode-named-character-reference: 1.2.0 - devlop: 1.1.0 - micromark-factory-destination: 2.0.1 - micromark-factory-label: 2.0.1 - micromark-factory-space: 2.0.1 - micromark-factory-title: 2.0.1 - micromark-factory-whitespace: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-classify-character: 2.0.1 - micromark-util-html-tag-name: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-subtokenize: 2.1.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-destination@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-factory-label@2.0.1: - dependencies: - devlop: 1.1.0 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + lodash.snakecase@4.1.1: {} - micromark-factory-space@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-types: 2.0.2 + lodash.startcase@4.4.0: {} - micromark-factory-title@2.0.1: - dependencies: - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + lodash.union@4.6.0: {} - micromark-factory-whitespace@2.0.1: - dependencies: - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + lodash.uniq@4.5.0: {} - micromark-util-character@2.1.1: - dependencies: - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + lodash.upperfirst@4.3.1: {} - micromark-util-chunked@2.0.1: - dependencies: - micromark-util-symbol: 2.0.1 + lodash.zip@4.2.0: {} - micromark-util-classify-character@2.0.1: - dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + lodash@4.17.21: {} - micromark-util-combine-extensions@2.0.1: + log-symbols@4.1.0: dependencies: - micromark-util-chunked: 2.0.1 - micromark-util-types: 2.0.2 + chalk: 4.1.2 + is-unicode-supported: 0.1.0 - micromark-util-decode-numeric-character-reference@2.0.2: - dependencies: - micromark-util-symbol: 2.0.1 + loglevel-plugin-prefix@0.8.4: {} - micromark-util-decode-string@2.0.1: - dependencies: - decode-named-character-reference: 1.2.0 - micromark-util-character: 2.1.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-symbol: 2.0.1 + loglevel@1.9.2: {} - micromark-util-encode@2.0.1: {} + lru-cache@10.4.3: {} - micromark-util-html-tag-name@2.0.1: {} + lru-cache@11.1.0: {} - micromark-util-normalize-identifier@2.0.1: + lru-cache@5.1.1: dependencies: - micromark-util-symbol: 2.0.1 + yallist: 3.1.1 - micromark-util-resolve-all@2.0.1: - dependencies: - micromark-util-types: 2.0.2 + lru-cache@7.18.3: {} - micromark-util-sanitize-uri@2.0.1: + magic-string@0.30.17: dependencies: - micromark-util-character: 2.1.1 - micromark-util-encode: 2.0.1 - micromark-util-symbol: 2.0.1 + '@jridgewell/sourcemap-codec': 1.5.4 - micromark-util-subtokenize@2.1.0: - dependencies: - devlop: 1.1.0 - micromark-util-chunked: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + make-error@1.3.6: {} - micromark-util-symbol@2.0.1: {} + meow@12.1.1: {} - micromark-util-types@2.0.2: {} + merge-stream@2.0.0: {} - micromark@4.0.2: - dependencies: - '@types/debug': 4.1.12 - debug: 4.4.1(supports-color@8.1.1) - decode-named-character-reference: 1.2.0 - devlop: 1.1.0 - micromark-core-commonmark: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-combine-extensions: 2.0.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-encode: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-subtokenize: 2.1.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - transitivePeerDependencies: - - supports-color + merge2@1.4.1: {} micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 - miller-rabin@4.0.1: - dependencies: - bn.js: 4.12.2 - brorand: 1.1.0 - mime-db@1.52.0: {} mime-types@2.1.35: dependencies: mime-db: 1.52.0 - mime@4.0.7: {} - mimic-fn@2.1.0: {} - mimic-fn@4.0.0: {} - - mimic-function@5.0.1: {} - - mimic-response@1.0.1: {} - - mimic-response@3.1.0: {} - - min-indent@1.0.1: {} - - minimalistic-assert@1.0.1: {} - - minimalistic-crypto-utils@1.0.1: {} - - minimatch@10.0.1: - dependencies: - brace-expansion: 2.0.1 - minimatch@10.0.3: dependencies: '@isaacs/brace-expansion': 5.0.0 minimatch@3.1.2: dependencies: - brace-expansion: 1.1.11 + brace-expansion: 1.1.12 minimatch@5.1.6: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 2.0.2 minimatch@9.0.5: dependencies: - brace-expansion: 2.0.1 - - minimist-options@4.1.0: - dependencies: - arrify: 1.0.1 - is-plain-obj: 1.1.0 - kind-of: 6.0.3 + brace-expansion: 2.0.2 minimist@1.2.8: {} - minipass-collect@2.0.1: - dependencies: - minipass: 7.1.2 - - minipass-fetch@4.0.1: - dependencies: - minipass: 7.1.2 - minipass-sized: 1.0.3 - minizlib: 3.0.2 - optionalDependencies: - encoding: 0.1.13 - optional: true - - minipass-flush@1.0.5: - dependencies: - minipass: 3.3.6 - - minipass-pipeline@1.2.4: - dependencies: - minipass: 3.3.6 - - minipass-sized@1.0.3: - dependencies: - minipass: 3.3.6 - optional: true - - minipass@3.3.6: - dependencies: - yallist: 4.0.0 - - minipass@5.0.0: {} - minipass@7.1.2: {} - minizlib@2.1.2: - dependencies: - minipass: 3.3.6 - yallist: 4.0.0 - minizlib@3.0.2: dependencies: minipass: 7.1.2 - mkdirp-classic@0.5.3: - optional: true - - mkdirp@0.5.6: - dependencies: - minimist: 1.2.8 - optional: true - - mkdirp@1.0.4: {} + mitt@3.0.1: {} mkdirp@3.0.1: {} @@ -14784,32 +6434,12 @@ snapshots: yargs-parser: 20.2.9 yargs-unparser: 2.0.0 - module-details-from-path@1.0.4: {} - - moment@2.30.1: - optional: true - - moo@0.5.2: {} - - more-entropy@0.0.7: - dependencies: - iced-runtime: 1.0.4 - mrmime@1.0.1: {} ms@2.1.3: {} - mute-stream@1.0.0: {} - mute-stream@2.0.0: {} - mv@2.1.1: - dependencies: - mkdirp: 0.5.6 - ncp: 2.0.0 - rimraf: 2.4.5 - optional: true - mylas@2.1.13: {} mz@2.7.0: @@ -14818,142 +6448,34 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nan@2.23.0: - optional: true - - nano-spawn@1.0.2: {} - nanoid@3.3.11: {} - nanoid@5.1.5: {} - - napi-build-utils@2.0.0: - optional: true - - napi-postinstall@0.2.4: {} - - natural-compare@1.4.0: {} - - ncp@2.0.0: - optional: true - - negotiator@1.0.0: - optional: true - neo-async@2.6.2: {} - neotraverse@0.6.18: {} - - nerf-dart@1.0.0: {} - netmask@2.0.2: {} - node-abi@3.75.0: - dependencies: - semver: 7.7.2 - optional: true - node-addon-api@7.1.1: optional: true - node-cleanup@2.1.2: {} - node-domexception@1.0.0: {} - node-emoji@2.2.0: - dependencies: - '@sindresorhus/is': 4.6.0 - char-regex: 1.0.2 - emojilib: 2.4.0 - skin-tone: 2.0.0 - - node-fetch@2.7.0(encoding@0.1.13): - dependencies: - whatwg-url: 5.0.0 - optionalDependencies: - encoding: 0.1.13 - node-fetch@3.3.2: dependencies: data-uri-to-buffer: 4.0.1 fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - node-gyp@11.2.0: - dependencies: - env-paths: 2.2.1 - exponential-backoff: 3.1.2 - graceful-fs: 4.2.11 - make-fetch-happen: 14.0.3 - nopt: 8.1.0 - proc-log: 5.0.0 - semver: 7.7.2 - tar: 7.4.3 - tinyglobby: 0.2.13 - which: 5.0.0 - transitivePeerDependencies: - - supports-color - optional: true - - node-html-parser@7.0.1: - dependencies: - css-select: 5.1.0 - he: 1.2.0 - node-releases@2.0.19: {} - node-stdlib-browser@1.3.1: - dependencies: - assert: 2.1.0 - browser-resolve: 2.0.0 - browserify-zlib: 0.2.0 - buffer: 5.7.1 - console-browserify: 1.2.0 - constants-browserify: 1.0.0 - create-require: 1.1.1 - crypto-browserify: 3.12.1 - domain-browser: 4.22.0 - events: 3.3.0 - https-browserify: 1.0.0 - isomorphic-timers-promises: 1.0.1 - os-browserify: 0.3.0 - path-browserify: 1.0.1 - pkg-dir: 5.0.0 - process: 0.11.10 - punycode: 1.4.1 - querystring-es3: 0.2.1 - readable-stream: 3.6.2 - stream-browserify: 3.0.0 - stream-http: 3.2.0 - string_decoder: 1.3.0 - timers-browserify: 2.0.12 - tty-browserify: 0.0.1 - url: 0.11.4 - util: 0.12.5 - vm-browserify: 1.1.2 - - nopt@8.1.0: - dependencies: - abbrev: 3.0.1 - optional: true - - normalize-package-data@2.5.0: - dependencies: - hosted-git-info: 2.8.9 - resolve: 1.22.10 - semver: 5.7.2 - validate-npm-package-license: 3.0.4 - - normalize-package-data@3.0.3: + normalize-package-data@6.0.2: dependencies: - hosted-git-info: 4.1.0 - is-core-module: 2.16.1 + hosted-git-info: 7.0.2 semver: 7.7.2 validate-npm-package-license: 3.0.4 - normalize-package-data@6.0.2: + normalize-package-data@7.0.0: dependencies: - hosted-git-info: 7.0.2 + hosted-git-info: 8.1.0 semver: 7.7.2 validate-npm-package-license: 3.0.4 @@ -14961,81 +6483,25 @@ snapshots: normalize-range@0.1.2: {} - normalize-url@6.1.0: {} - - normalize-url@8.0.2: {} - npm-run-path@4.0.1: dependencies: path-key: 3.1.1 - npm-run-path@5.3.0: - dependencies: - path-key: 4.0.0 - npm-run-path@6.0.0: dependencies: path-key: 4.0.0 unicorn-magic: 0.3.0 - npm@10.9.3: {} - nth-check@2.1.1: dependencies: boolbase: 1.0.0 object-assign@4.1.1: {} - object-hash@3.0.0: {} - object-inspect@1.13.4: {} - object-is@1.1.6: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - - object-keys@1.1.1: {} - object-treeify@1.1.33: {} - object.assign@4.1.7: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - has-symbols: 1.1.0 - object-keys: 1.1.1 - - object.entries@1.1.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - object.fromentries@2.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 - - object.groupby@1.0.3: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - optional: true - - object.values@1.2.1: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - once@1.4.0: dependencies: wrappy: 1.0.2 @@ -15044,63 +6510,18 @@ snapshots: dependencies: mimic-fn: 2.1.0 - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 - - onetime@7.0.0: - dependencies: - mimic-function: 5.0.1 - - openpgp@6.1.1: - optional: true - - optionator@0.9.4: - dependencies: - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - word-wrap: 1.2.5 - - os-browserify@0.3.0: {} - os-tmpdir@1.0.2: {} - override-require@1.1.1: {} - - own-keys@1.0.1: - dependencies: - get-intrinsic: 1.3.0 - object-keys: 1.1.1 - safe-push-apply: 1.0.0 - - p-all@5.0.0: - dependencies: - p-map: 6.0.0 - - p-cancelable@2.1.1: {} - - p-each-series@3.0.0: {} - - p-filter@2.1.0: - dependencies: - p-map: 2.1.0 - - p-filter@4.1.0: - dependencies: - p-map: 7.0.3 - - p-is-promise@3.0.0: {} - - p-limit@1.3.0: - dependencies: - p-try: 1.0.0 - - p-limit@2.3.0: - dependencies: - p-try: 2.2.0 + oxlint@1.7.0: + optionalDependencies: + '@oxlint/darwin-arm64': 1.7.0 + '@oxlint/darwin-x64': 1.7.0 + '@oxlint/linux-arm64-gnu': 1.7.0 + '@oxlint/linux-arm64-musl': 1.7.0 + '@oxlint/linux-x64-gnu': 1.7.0 + '@oxlint/linux-x64-musl': 1.7.0 + '@oxlint/win32-arm64': 1.7.0 + '@oxlint/win32-x64': 1.7.0 p-limit@3.1.0: dependencies: @@ -15110,14 +6531,6 @@ snapshots: dependencies: yocto-queue: 1.2.1 - p-locate@2.0.0: - dependencies: - p-limit: 1.3.0 - - p-locate@4.1.0: - dependencies: - p-limit: 2.3.0 - p-locate@5.0.0: dependencies: p-limit: 3.1.0 @@ -15126,35 +6539,12 @@ snapshots: dependencies: p-limit: 4.0.0 - p-map@2.1.0: {} - - p-map@6.0.0: {} - - p-map@7.0.3: {} - - p-queue@8.1.0: - dependencies: - eventemitter3: 5.0.1 - p-timeout: 6.1.4 - - p-reduce@2.1.0: {} - - p-reduce@3.0.0: {} - - p-throttle@7.0.0: {} - - p-timeout@6.1.4: {} - - p-try@1.0.0: {} - - p-try@2.2.0: {} - pac-proxy-agent@7.2.0: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.1(supports-color@8.1.1) - get-uri: 6.0.4 + get-uri: 6.0.5 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 pac-resolver: 7.0.1 @@ -15175,24 +6565,6 @@ snapshots: dependencies: callsites: 3.1.0 - parse-asn1@5.1.7: - dependencies: - asn1.js: 4.10.1 - browserify-aes: 1.2.0 - evp_bytestokey: 1.0.3 - hash-base: 3.0.5 - pbkdf2: 3.1.2 - safe-buffer: 5.2.1 - - parse-diff@0.7.1: {} - - parse-github-url@1.0.3: {} - - parse-json@4.0.0: - dependencies: - error-ex: 1.3.2 - json-parse-better-errors: 1.0.2 - parse-json@5.2.0: dependencies: '@babel/code-frame': 7.27.1 @@ -15208,31 +6580,8 @@ snapshots: lines-and-columns: 2.0.4 type-fest: 3.13.1 - parse-json@8.3.0: - dependencies: - '@babel/code-frame': 7.27.1 - index-to-position: 1.1.0 - type-fest: 4.41.0 - - parse-link-header@2.0.0: - dependencies: - xtend: 4.0.2 - parse-ms@4.0.0: {} - parse-path@7.1.0: - dependencies: - protocols: 2.0.2 - - parse-url@9.2.0: - dependencies: - '@types/parse-path': 7.1.0 - parse-path: 7.1.0 - - parse5-htmlparser2-tree-adapter@6.0.1: - dependencies: - parse5: 6.0.1 - parse5-htmlparser2-tree-adapter@7.1.0: dependencies: domhandler: 5.0.3 @@ -15242,31 +6591,18 @@ snapshots: dependencies: parse5: 7.3.0 - parse5@5.1.1: {} - - parse5@6.0.1: {} - parse5@7.3.0: dependencies: - entities: 6.0.0 - - path-browserify@1.0.1: {} - - path-exists@3.0.0: {} + entities: 6.0.1 path-exists@4.0.0: {} path-exists@5.0.0: {} - path-is-absolute@1.0.1: - optional: true - path-key@3.1.1: {} path-key@4.0.0: {} - path-parse@1.0.7: {} - path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 @@ -15279,134 +6615,37 @@ snapshots: path-type@4.0.0: {} - path-type@6.0.0: {} - - pathe@1.1.2: {} - - pbkdf2@3.1.2: - dependencies: - create-hash: 1.2.0 - create-hmac: 1.1.7 - ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 - - pend@1.2.0: {} - - pgp-utils@0.0.35: - dependencies: - iced-error: 0.0.13 - iced-runtime: 1.0.4 - - picocolors@1.1.1: {} - - picomatch@2.3.1: {} - - picomatch@4.0.2: {} - - pidtree@0.6.0: {} - - pify@2.3.0: {} - - pify@3.0.0: {} - - pinpoint@1.1.0: {} - - pirates@4.0.7: {} - - pkg-conf@2.1.0: - dependencies: - find-up: 2.1.0 - load-json-file: 4.0.0 - - pkg-dir@5.0.0: - dependencies: - find-up: 5.0.0 - - plimit-lit@1.6.1: - dependencies: - queue-lit: 1.5.2 + pathe@1.1.2: {} - possible-typed-array-names@1.1.0: {} + pathe@2.0.3: {} - postcss-import@15.1.0(postcss@8.5.3): - dependencies: - postcss: 8.5.3 - postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.10 + pend@1.2.0: {} - postcss-js@4.0.1(postcss@8.5.3): - dependencies: - camelcase-css: 2.0.1 - postcss: 8.5.3 + picocolors@1.1.1: {} - postcss-load-config@4.0.2(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.11.24)(@types/node@22.15.21)(typescript@5.8.3)): - dependencies: - lilconfig: 3.1.3 - yaml: 2.8.0 - optionalDependencies: - postcss: 8.5.3 - ts-node: 10.9.2(@swc/core@1.11.24)(@types/node@22.15.21)(typescript@5.8.3) + picomatch@2.3.1: {} - postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.5.3)(tsx@4.19.4)(yaml@2.8.0): - dependencies: - lilconfig: 3.1.3 - optionalDependencies: - jiti: 2.4.2 - postcss: 8.5.3 - tsx: 4.19.4 - yaml: 2.8.0 + picomatch@4.0.3: {} - postcss-nested@6.2.0(postcss@8.5.3): - dependencies: - postcss: 8.5.3 - postcss-selector-parser: 6.1.2 + pirates@4.0.7: {} - postcss-selector-parser@6.1.2: + plimit-lit@1.6.1: dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 + queue-lit: 1.5.2 postcss-value-parser@4.2.0: {} - postcss@8.5.3: + postcss@8.5.6: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 - prebuild-install@7.1.3: - dependencies: - detect-libc: 2.0.4 - expand-template: 2.0.3 - github-from-package: 0.0.0 - minimist: 1.2.8 - mkdirp-classic: 0.5.3 - napi-build-utils: 2.0.0 - node-abi: 3.75.0 - pump: 3.0.2 - rc: 1.2.8 - simple-get: 4.0.1 - tar-fs: 2.1.3 - tunnel-agent: 0.6.0 - optional: true - - prelude-ls@1.2.1: {} - - prettier-linter-helpers@1.0.0: - dependencies: - fast-diff: 1.3.0 - - prettier-plugin-tailwindcss@0.6.11(prettier@3.6.2): - dependencies: - prettier: 3.6.2 - prettier@3.6.2: {} - pretty-format@29.7.0: + pretty-format@30.0.2: dependencies: - '@jest/schemas': 29.6.3 + '@jest/schemas': 30.0.1 ansi-styles: 5.2.0 react-is: 18.3.1 @@ -15414,56 +6653,15 @@ snapshots: dependencies: parse-ms: 4.0.0 - prettyjson@1.2.5: - dependencies: - colors: 1.4.0 - minimist: 1.2.8 - - proc-log@5.0.0: - optional: true - process-nextick-args@2.0.1: {} process@0.11.10: {} - progress@1.1.8: {} - progress@2.0.3: {} - promise-retry@2.0.1: - dependencies: - err-code: 2.0.3 - retry: 0.12.0 - optional: true - - prop-types@15.8.1: - dependencies: - loose-envify: 1.4.0 - object-assign: 4.1.1 - react-is: 16.13.1 - - proto-list@1.2.4: {} - - protobufjs@7.5.3: - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.4 - '@protobufjs/eventemitter': 1.1.0 - '@protobufjs/fetch': 1.1.0 - '@protobufjs/float': 1.0.2 - '@protobufjs/inquire': 1.1.0 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.0 - '@types/node': 22.15.21 - long: 5.3.2 - - protocols@2.0.2: {} - proxy-agent@6.5.0: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.1(supports-color@8.1.1) http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -15476,83 +6674,30 @@ snapshots: proxy-from-env@1.1.0: {} - public-encrypt@4.0.3: - dependencies: - bn.js: 4.12.2 - browserify-rsa: 4.1.1 - create-hash: 1.2.0 - parse-asn1: 5.1.7 - randombytes: 2.1.0 - safe-buffer: 5.2.1 - - pump@3.0.2: + pump@3.0.3: dependencies: - end-of-stream: 1.4.4 + end-of-stream: 1.4.5 once: 1.4.0 - punycode.js@2.3.1: {} - - punycode@1.4.1: {} - - punycode@2.3.1: {} - - purepack@1.0.6: {} - - qs@6.14.0: - dependencies: - side-channel: 1.1.0 - query-selector-shadow-dom@1.0.1: {} - querystring-es3@0.2.1: {} - queue-lit@1.5.2: {} queue-microtask@1.2.3: {} - quick-lru@4.0.1: {} - - quick-lru@5.1.1: {} - randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 - randomfill@1.0.4: - dependencies: - randombytes: 2.1.0 - safe-buffer: 5.2.1 - - rc@1.2.8: - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - - re2@1.22.1: - dependencies: - install-artifact-from-github: 1.4.0 - nan: 2.23.0 - node-gyp: 11.2.0 - transitivePeerDependencies: - - supports-color - optional: true - react-dom@19.1.0(react@19.1.0): dependencies: react: 19.1.0 scheduler: 0.26.0 - react-error-boundary@6.0.0(react@19.1.0): - dependencies: - '@babel/runtime': 7.27.1 - react: 19.1.0 - - react-is@16.13.1: {} - react-is@18.3.1: {} + react-refresh@0.17.0: {} + react-spinners@0.17.0(react-dom@19.1.0(react@19.1.0))(react@19.1.0): dependencies: react: 19.1.0 @@ -15560,35 +6705,12 @@ snapshots: react@19.1.0: {} - read-cache@1.0.0: - dependencies: - pify: 2.3.0 - - read-package-up@11.0.0: - dependencies: - find-up-simple: 1.0.1 - read-pkg: 9.0.1 - type-fest: 4.41.0 - read-pkg-up@10.1.0: dependencies: find-up: 6.3.0 read-pkg: 8.1.0 type-fest: 4.41.0 - read-pkg-up@7.0.1: - dependencies: - find-up: 4.1.0 - read-pkg: 5.2.0 - type-fest: 0.8.1 - - read-pkg@5.2.0: - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 2.5.0 - parse-json: 5.2.0 - type-fest: 0.6.0 - read-pkg@8.1.0: dependencies: '@types/normalize-package-data': 2.4.4 @@ -15596,19 +6718,6 @@ snapshots: parse-json: 7.1.1 type-fest: 4.41.0 - read-pkg@9.0.1: - dependencies: - '@types/normalize-package-data': 2.4.4 - normalize-package-data: 6.0.2 - parse-json: 8.3.0 - type-fest: 4.41.0 - unicorn-magic: 0.1.0 - - read-yaml-file@2.1.0: - dependencies: - js-yaml: 4.1.0 - strip-bom: 4.0.0 - readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -15619,12 +6728,6 @@ snapshots: string_decoder: 1.1.1 util-deprecate: 1.0.2 - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - readable-stream@4.7.0: dependencies: abort-controller: 3.0.0 @@ -15643,381 +6746,96 @@ snapshots: readdirp@4.1.2: {} - readline-sync@1.4.10: {} - recursive-readdir@2.2.3: dependencies: minimatch: 3.1.2 - redent@3.0.0: - dependencies: - indent-string: 4.0.0 - strip-indent: 3.0.0 - - redis@4.7.1: - dependencies: - '@redis/bloom': 1.2.0(@redis/client@1.6.1) - '@redis/client': 1.6.1 - '@redis/graph': 1.1.1(@redis/client@1.6.1) - '@redis/json': 1.0.7(@redis/client@1.6.1) - '@redis/search': 1.2.0(@redis/client@1.6.1) - '@redis/time-series': 1.1.0(@redis/client@1.6.1) - - reflect.getprototypeof@1.0.10: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - get-proto: 1.0.1 - which-builtin-type: 1.2.1 - - regenerator-runtime@0.13.11: {} - - regexp.prototype.flags@1.5.4: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-errors: 1.3.0 - get-proto: 1.0.1 - gopd: 1.2.0 - set-function-name: 2.0.2 - - registry-auth-token@5.1.0: - dependencies: - '@pnpm/npm-conf': 2.3.1 - - remark-github@12.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-find-and-replace: 3.0.2 - mdast-util-to-string: 4.0.0 - to-vfile: 8.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.3 - - remark-parse@11.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.2 - micromark-util-types: 2.0.2 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - remark-stringify@11.0.0: - dependencies: - '@types/mdast': 4.0.4 - mdast-util-to-markdown: 2.1.2 - unified: 11.0.5 - - remark@15.0.1: - dependencies: - '@types/mdast': 4.0.4 - remark-parse: 11.0.0 - remark-stringify: 11.0.0 - unified: 11.0.5 - transitivePeerDependencies: - - supports-color - - renovate@41.35.1(encoding@0.1.13)(typanion@3.14.0): - dependencies: - '@aws-sdk/client-codecommit': 3.840.0 - '@aws-sdk/client-ec2': 3.840.0 - '@aws-sdk/client-ecr': 3.840.0 - '@aws-sdk/client-eks': 3.840.0 - '@aws-sdk/client-rds': 3.840.0 - '@aws-sdk/client-s3': 3.840.0 - '@aws-sdk/credential-providers': 3.840.0 - '@baszalmstra/rattler': 0.2.1 - '@breejs/later': 4.2.0 - '@cdktf/hcl2json': 0.21.0 - '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/exporter-trace-otlp-http': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-bunyan': 0.48.0(@opentelemetry/api@1.9.0) - '@opentelemetry/instrumentation-http': 0.202.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resource-detector-aws': 2.2.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resource-detector-azure': 0.9.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resource-detector-gcp': 0.36.0(@opentelemetry/api@1.9.0)(encoding@0.1.13) - '@opentelemetry/resource-detector-github': 0.31.0(@opentelemetry/api@1.9.0) - '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-base': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/sdk-trace-node': 2.0.1(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.34.0 - '@pnpm/parse-overrides': 1001.0.0 - '@qnighy/marshal': 0.1.3 - '@renovatebot/detect-tools': 1.1.0 - '@renovatebot/kbpgp': 4.0.1 - '@renovatebot/osv-offline': 1.6.6 - '@renovatebot/pep440': 4.1.0 - '@renovatebot/ruby-semver': 4.0.0 - '@sindresorhus/is': 7.0.2 - '@yarnpkg/core': 4.4.2(typanion@3.14.0) - '@yarnpkg/parsers': 3.0.3 - agentkeepalive: 4.6.0 - async-mutex: 0.5.0 - auth-header: 1.0.0 - aws4: 1.13.2 - azure-devops-node-api: 15.1.0 - bunyan: 1.8.15 - cacache: 19.0.1 - chalk: 5.4.1 - changelog-filename-regex: 2.0.1 - clean-git-ref: 2.0.1 - commander: 14.0.0 - conventional-commits-detector: 1.0.3 - croner: 9.1.0 - cronstrue: 2.61.0 - deepmerge: 4.3.1 - dequal: 2.0.3 - detect-indent: 7.0.1 - diff: 8.0.2 - editorconfig: 3.0.1 - email-addresses: 5.0.0 - emoji-regex: 10.4.0 - emojibase: 16.0.0 - emojibase-regex: 16.0.0 - extract-zip: 2.0.1 - find-packages: 10.0.4 - find-up: 7.0.0 - fs-extra: 11.3.0 - git-url-parse: 16.1.0 - github-url-from-git: 1.5.0 - glob: 11.0.3 - global-agent: 3.0.0 - good-enough-parser: 1.1.23 - google-auth-library: 10.1.0 - got: 11.8.6 - graph-data-structure: 4.5.0 - handlebars: 4.7.8 - ignore: 7.0.5 - ini: 5.0.0 - json-dup-key-validator: 1.0.3 - json-stringify-pretty-compact: 4.0.0 - json5: 2.2.3 - jsonata: 2.0.6 - jsonc-parser: 3.3.1 - klona: 2.0.6 - luxon: 3.6.1 - markdown-it: 14.1.0 - markdown-table: 3.0.4 - minimatch: 10.0.3 - moo: 0.5.2 - ms: 2.1.3 - nanoid: 5.1.5 - neotraverse: 0.6.18 - node-html-parser: 7.0.1 - p-all: 5.0.0 - p-map: 7.0.3 - p-queue: 8.1.0 - p-throttle: 7.0.0 - parse-link-header: 2.0.0 - prettier: 3.6.2 - protobufjs: 7.5.3 - punycode: 2.3.1 - redis: 4.7.1 - remark: 15.0.1 - remark-github: 12.0.0 - safe-stable-stringify: 2.5.0 - sax: 1.4.1 - semver: 7.7.2 - semver-stable: 3.0.0 - semver-utils: 1.1.4 - shlex: 2.1.2 - simple-git: 3.28.0 - slugify: 1.6.6 - source-map-support: 0.5.21 - strip-json-comments: 5.0.2 - toml-eslint-parser: 0.10.0 - tslib: 2.8.1 - upath: 2.0.1 - url-join: 5.0.0 - validate-npm-package-name: 6.0.1 - vuln-vects: 1.1.0 - xmldoc: 2.0.2 - yaml: 2.8.0 - zod: 3.25.76 - optionalDependencies: - better-sqlite3: 12.2.0 - openpgp: 6.1.1 - re2: 1.22.1 - transitivePeerDependencies: - - aws-crt - - encoding - - supports-color - - typanion - require-directory@2.1.1: {} require-from-string@2.0.2: {} - require-in-the-middle@7.5.2: - dependencies: - debug: 4.4.1(supports-color@8.1.1) - module-details-from-path: 1.0.4 - resolve: 1.22.10 - transitivePeerDependencies: - - supports-color - - require-main-filename@2.0.0: {} - - resolve-alpn@1.2.1: {} - resolve-from@4.0.0: {} resolve-from@5.0.0: {} resolve-pkg-maps@1.0.0: {} - resolve@1.22.10: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - resolve@2.0.0-next.5: - dependencies: - is-core-module: 2.16.1 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - - responselike@2.0.1: - dependencies: - lowercase-keys: 2.0.0 - resq@1.11.0: dependencies: fast-deep-equal: 2.0.1 - restore-cursor@5.1.0: - dependencies: - onetime: 7.0.0 - signal-exit: 4.1.0 - - retry@0.12.0: {} + ret@0.5.0: {} reusify@1.1.0: {} - rfdc@1.4.1: {} - rgb2hex@0.2.5: {} - rimraf@2.4.5: - dependencies: - glob: 6.0.4 - optional: true - rimraf@6.0.1: dependencies: - glob: 11.0.2 + glob: 11.0.3 package-json-from-dist: 1.0.1 - ripemd160@2.0.2: - dependencies: - hash-base: 3.0.5 - inherits: 2.0.4 - - roarr@2.15.4: + rollup@4.45.1: dependencies: - boolean: 3.2.0 - detect-node: 2.1.0 - globalthis: 1.0.4 - json-stringify-safe: 5.0.1 - semver-compare: 1.0.0 - sprintf-js: 1.1.3 - - rollup@4.41.0: - dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.41.0 - '@rollup/rollup-android-arm64': 4.41.0 - '@rollup/rollup-darwin-arm64': 4.41.0 - '@rollup/rollup-darwin-x64': 4.41.0 - '@rollup/rollup-freebsd-arm64': 4.41.0 - '@rollup/rollup-freebsd-x64': 4.41.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.41.0 - '@rollup/rollup-linux-arm-musleabihf': 4.41.0 - '@rollup/rollup-linux-arm64-gnu': 4.41.0 - '@rollup/rollup-linux-arm64-musl': 4.41.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.41.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.41.0 - '@rollup/rollup-linux-riscv64-gnu': 4.41.0 - '@rollup/rollup-linux-riscv64-musl': 4.41.0 - '@rollup/rollup-linux-s390x-gnu': 4.41.0 - '@rollup/rollup-linux-x64-gnu': 4.41.0 - '@rollup/rollup-linux-x64-musl': 4.41.0 - '@rollup/rollup-win32-arm64-msvc': 4.41.0 - '@rollup/rollup-win32-ia32-msvc': 4.41.0 - '@rollup/rollup-win32-x64-msvc': 4.41.0 + '@rollup/rollup-android-arm-eabi': 4.45.1 + '@rollup/rollup-android-arm64': 4.45.1 + '@rollup/rollup-darwin-arm64': 4.45.1 + '@rollup/rollup-darwin-x64': 4.45.1 + '@rollup/rollup-freebsd-arm64': 4.45.1 + '@rollup/rollup-freebsd-x64': 4.45.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.45.1 + '@rollup/rollup-linux-arm-musleabihf': 4.45.1 + '@rollup/rollup-linux-arm64-gnu': 4.45.1 + '@rollup/rollup-linux-arm64-musl': 4.45.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.45.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.45.1 + '@rollup/rollup-linux-riscv64-gnu': 4.45.1 + '@rollup/rollup-linux-riscv64-musl': 4.45.1 + '@rollup/rollup-linux-s390x-gnu': 4.45.1 + '@rollup/rollup-linux-x64-gnu': 4.45.1 + '@rollup/rollup-linux-x64-musl': 4.45.1 + '@rollup/rollup-win32-arm64-msvc': 4.45.1 + '@rollup/rollup-win32-ia32-msvc': 4.45.1 + '@rollup/rollup-win32-x64-msvc': 4.45.1 fsevents: 2.3.3 - run-async@3.0.0: {} + run-async@4.0.4: + dependencies: + oxlint: 1.7.0 + prettier: 3.6.2 run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - run-script-os@1.1.6: {} - rxjs@7.8.2: dependencies: tslib: 2.8.1 safaridriver@1.0.0: {} - safe-array-concat@1.1.3: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - get-intrinsic: 1.3.0 - has-symbols: 1.1.0 - isarray: 2.0.5 - safe-buffer@5.1.2: {} safe-buffer@5.2.1: {} - safe-json-stringify@1.2.0: - optional: true - - safe-push-apply@1.0.0: - dependencies: - es-errors: 1.3.0 - isarray: 2.0.5 - - safe-regex-test@1.1.0: + safe-regex2@5.0.0: dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-regex: 1.2.1 - - safe-stable-stringify@2.5.0: {} + ret: 0.5.0 safer-buffer@2.1.2: {} - sass@1.89.0: + sass@1.89.2: dependencies: chokidar: 4.0.3 - immutable: 5.1.2 + immutable: 5.1.3 source-map-js: 1.2.1 optionalDependencies: '@parcel/watcher': 2.5.1 - sax@1.4.1: {} - scheduler@0.26.0: {} - schema-utils@3.3.0: - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - schema-utils@4.3.2: dependencies: '@types/json-schema': 7.0.15 @@ -16025,207 +6843,47 @@ snapshots: ajv-formats: 2.1.1(ajv@8.17.1) ajv-keywords: 5.1.0(ajv@8.17.1) - semantic-release@24.2.7(typescript@5.8.3): - dependencies: - '@semantic-release/commit-analyzer': 13.0.1(semantic-release@24.2.7(typescript@5.8.3)) - '@semantic-release/error': 4.0.0 - '@semantic-release/github': 11.0.3(semantic-release@24.2.7(typescript@5.8.3)) - '@semantic-release/npm': 12.0.2(semantic-release@24.2.7(typescript@5.8.3)) - '@semantic-release/release-notes-generator': 14.0.3(semantic-release@24.2.7(typescript@5.8.3)) - aggregate-error: 5.0.0 - cosmiconfig: 9.0.0(typescript@5.8.3) - debug: 4.4.1(supports-color@8.1.1) - env-ci: 11.1.1 - execa: 9.5.3 - figures: 6.1.0 - find-versions: 6.0.0 - get-stream: 6.0.1 - git-log-parser: 1.2.1 - hook-std: 3.0.0 - hosted-git-info: 8.1.0 - import-from-esm: 2.0.0 - lodash-es: 4.17.21 - marked: 15.0.12 - marked-terminal: 7.3.0(marked@15.0.12) - micromatch: 4.0.8 - p-each-series: 3.0.0 - p-reduce: 3.0.0 - read-package-up: 11.0.0 - resolve-from: 5.0.0 - semver: 7.7.2 - semver-diff: 4.0.0 - signale: 1.4.0 - yargs: 17.7.2 - transitivePeerDependencies: - - supports-color - - typescript - - semver-compare@1.0.0: {} - - semver-diff@4.0.0: - dependencies: - semver: 7.7.2 - - semver-regex@4.0.5: {} - - semver-stable@3.0.0: - dependencies: - semver: 6.3.1 - - semver-utils@1.1.4: {} - - semver@5.7.2: {} - semver@6.3.1: {} semver@7.7.2: {} - serialize-error@11.0.3: - dependencies: - type-fest: 2.19.0 - - serialize-error@7.0.1: + serialize-error@12.0.0: dependencies: - type-fest: 0.13.1 + type-fest: 4.41.0 serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 - set-blocking@2.0.0: {} - - set-function-length@1.2.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-property-descriptors: 1.0.2 - - set-function-name@2.0.2: - dependencies: - define-data-property: 1.1.4 - es-errors: 1.3.0 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - - set-proto@1.0.0: - dependencies: - dunder-proto: 1.0.1 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - setimmediate@1.0.5: {} - sha.js@2.4.11: - dependencies: - inherits: 2.0.4 - safe-buffer: 5.2.1 - shebang-command@2.0.0: dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - shlex@2.1.2: {} - - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 - - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 - - signal-exit@3.0.7: {} - - signal-exit@4.1.0: {} - - signale@1.4.0: - dependencies: - chalk: 2.4.2 - figures: 2.0.0 - pkg-conf: 2.1.0 - - simple-concat@1.0.1: - optional: true - - simple-get@4.0.1: - dependencies: - decompress-response: 6.0.0 - once: 1.4.0 - simple-concat: 1.0.1 - optional: true - - simple-git@3.28.0: - dependencies: - '@kwsites/file-exists': 1.1.1 - '@kwsites/promise-deferred': 1.1.1 - debug: 4.4.1(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - - skin-tone@2.0.0: - dependencies: - unicode-emoji-modifier-base: 1.0.0 - - slash@3.0.0: {} + shebang-regex: 3.0.0 - slash@5.1.0: {} + shebang-regex@3.0.0: {} - slice-ansi@5.0.0: - dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 4.0.0 + signal-exit@3.0.7: {} - slice-ansi@7.1.0: - dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 5.0.0 + signal-exit@4.1.0: {} - slugify@1.6.6: {} + slash@3.0.0: {} smart-buffer@4.2.0: {} socks-proxy-agent@8.0.5: dependencies: - agent-base: 7.1.3 + agent-base: 7.1.4 debug: 4.4.1(supports-color@8.1.1) - socks: 2.8.4 + socks: 2.8.6 transitivePeerDependencies: - supports-color - socks@2.8.4: + socks@2.8.6: dependencies: ip-address: 9.0.5 smart-buffer: 4.2.0 - sort-keys@4.2.0: - dependencies: - is-plain-obj: 2.1.0 - source-map-js@1.2.1: {} source-map-support@0.5.21: @@ -16239,8 +6897,6 @@ snapshots: spacetrim@0.11.59: {} - spawn-error-forwarder@1.0.0: {} - spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 @@ -16255,57 +6911,22 @@ snapshots: spdx-license-ids@3.0.21: {} - split2@1.0.0: - dependencies: - through2: 2.0.5 - - split2@3.2.2: - dependencies: - readable-stream: 3.6.2 - split2@4.2.0: {} - sprintf-js@1.0.3: {} - sprintf-js@1.1.3: {} - ssri@12.0.0: - dependencies: - minipass: 7.1.2 - - stable-hash@0.0.5: {} - stack-utils@2.0.6: dependencies: escape-string-regexp: 2.0.0 - stream-browserify@3.0.0: - dependencies: - inherits: 2.0.4 - readable-stream: 3.6.2 - stream-buffers@3.0.3: {} - stream-combiner2@1.1.1: - dependencies: - duplexer2: 0.1.4 - readable-stream: 2.3.8 - - stream-http@3.2.0: - dependencies: - builtin-status-codes: 3.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 - xtend: 4.0.2 - - streamx@2.22.0: + streamx@2.22.1: dependencies: fast-fifo: 1.3.2 text-decoder: 1.2.3 optionalDependencies: - bare-events: 2.5.4 - - string-argv@0.3.2: {} + bare-events: 2.6.0 string-width@4.2.3: dependencies: @@ -16319,62 +6940,6 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string-width@7.2.0: - dependencies: - emoji-regex: 10.4.0 - get-east-asian-width: 1.3.0 - strip-ansi: 7.1.0 - - string.prototype.includes@2.0.1: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-abstract: 1.23.9 - - string.prototype.matchall@4.0.12: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-errors: 1.3.0 - es-object-atoms: 1.1.1 - get-intrinsic: 1.3.0 - gopd: 1.2.0 - has-symbols: 1.1.0 - internal-slot: 1.1.0 - regexp.prototype.flags: 1.5.4 - set-function-name: 2.0.2 - side-channel: 1.1.0 - - string.prototype.repeat@1.0.0: - dependencies: - define-properties: 1.2.1 - es-abstract: 1.23.9 - - string.prototype.trim@1.2.10: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-data-property: 1.1.4 - define-properties: 1.2.1 - es-abstract: 1.23.9 - es-object-atoms: 1.1.1 - has-property-descriptors: 1.0.2 - - string.prototype.trimend@1.0.9: - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - - string.prototype.trimstart@1.0.8: - dependencies: - call-bind: 1.0.8 - define-properties: 1.2.1 - es-object-atoms: 1.1.1 - string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 @@ -16391,33 +6956,17 @@ snapshots: dependencies: ansi-regex: 6.1.0 - strip-bom@3.0.0: {} - - strip-bom@4.0.0: {} - - strip-comments-strings@1.2.0: {} - strip-final-newline@2.0.0: {} - strip-final-newline@3.0.0: {} - strip-final-newline@4.0.0: {} - strip-indent@3.0.0: - dependencies: - min-indent: 1.0.1 - - strip-json-comments@2.0.1: {} - strip-json-comments@3.1.1: {} - strip-json-comments@5.0.2: {} - - strnum@1.1.2: {} + strnum@2.1.1: {} sucrase@3.35.0: dependencies: - '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/gen-mapping': 0.3.12 commander: 4.1.1 glob: 10.4.5 lines-and-columns: 1.2.4 @@ -16425,15 +6974,6 @@ snapshots: pirates: 4.0.7 ts-interface-checker: 0.1.13 - super-regex@1.0.0: - dependencies: - function-timeout: 1.0.2 - time-span: 5.1.0 - - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -16442,94 +6982,27 @@ snapshots: dependencies: has-flag: 4.0.0 - supports-hyperlinks@1.0.1: - dependencies: - has-flag: 2.0.0 - supports-color: 5.5.0 - - supports-hyperlinks@3.2.0: - dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 - - supports-preserve-symlinks-flag@1.0.0: {} - - synckit@0.11.6: - dependencies: - '@pkgr/core': 0.2.4 - - tailwind-merge@3.3.0: {} + tailwind-merge@3.3.1: {} - tailwindcss@3.4.17(ts-node@10.9.2(@swc/core@1.11.24)(@types/node@22.15.21)(typescript@5.8.3)): - dependencies: - '@alloc/quick-lru': 5.2.0 - arg: 5.0.2 - chokidar: 3.6.0 - didyoumean: 1.2.2 - dlv: 1.1.3 - fast-glob: 3.3.3 - glob-parent: 6.0.2 - is-glob: 4.0.3 - jiti: 1.21.7 - lilconfig: 3.1.3 - micromatch: 4.0.8 - normalize-path: 3.0.0 - object-hash: 3.0.0 - picocolors: 1.1.1 - postcss: 8.5.3 - postcss-import: 15.1.0(postcss@8.5.3) - postcss-js: 4.0.1(postcss@8.5.3) - postcss-load-config: 4.0.2(postcss@8.5.3)(ts-node@10.9.2(@swc/core@1.11.24)(@types/node@22.15.21)(typescript@5.8.3)) - postcss-nested: 6.2.0(postcss@8.5.3) - postcss-selector-parser: 6.1.2 - resolve: 1.22.10 - sucrase: 3.35.0 - transitivePeerDependencies: - - ts-node + tailwindcss@4.1.11: {} tapable@2.2.2: {} - tar-fs@2.1.3: - dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.2 - tar-stream: 2.2.0 - optional: true - - tar-fs@3.0.8: + tar-fs@3.1.0: dependencies: - pump: 3.0.2 + pump: 3.0.3 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 4.1.5 + bare-fs: 4.1.6 bare-path: 3.0.0 transitivePeerDependencies: - bare-buffer - tar-stream@2.2.0: - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.4 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 - optional: true - tar-stream@3.1.7: dependencies: b4a: 1.6.7 fast-fifo: 1.3.2 - streamx: 2.22.0 - - tar@6.2.1: - dependencies: - chownr: 2.0.0 - fs-minipass: 2.1.0 - minipass: 5.0.0 - minizlib: 2.1.2 - mkdirp: 1.0.4 - yallist: 4.0.0 + streamx: 2.22.1 tar@7.4.3: dependencies: @@ -16540,30 +7013,19 @@ snapshots: mkdirp: 3.0.1 yallist: 5.0.0 - temp-dir@3.0.0: {} - - tempy@3.1.0: + terser-webpack-plugin@5.3.14(webpack@5.100.2): dependencies: - is-stream: 3.0.0 - temp-dir: 3.0.0 - type-fest: 2.19.0 - unique-string: 3.0.0 - - terser-webpack-plugin@5.3.14(@swc/core@1.11.24)(webpack@5.94.0(@swc/core@1.11.24)): - dependencies: - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/trace-mapping': 0.3.29 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 - terser: 5.39.2 - webpack: 5.94.0(@swc/core@1.11.24) - optionalDependencies: - '@swc/core': 1.11.24 + terser: 5.43.1 + webpack: 5.100.2 - terser@5.39.2: + terser@5.43.1: dependencies: - '@jridgewell/source-map': 0.3.6 - acorn: 8.14.1 + '@jridgewell/source-map': 0.3.10 + acorn: 8.15.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -16581,40 +7043,19 @@ snapshots: dependencies: any-promise: 1.3.0 - through2-concurrent@2.0.0: - dependencies: - through2: 2.0.5 - - through2@2.0.5: - dependencies: - readable-stream: 2.3.8 - xtend: 4.0.2 - - through2@4.0.2: - dependencies: - readable-stream: 3.6.2 - through@2.3.8: {} - time-span@5.1.0: - dependencies: - convert-hrtime: 5.0.0 - - timers-browserify@2.0.12: - dependencies: - setimmediate: 1.0.5 - tinyexec@1.0.1: {} - tinyglobby@0.2.13: + tinyglobby@0.2.14: dependencies: - fdir: 6.4.4(picomatch@4.0.2) - picomatch: 4.0.2 - - tinylogic@2.0.0: {} + fdir: 6.4.6(picomatch@4.0.3) + picomatch: 4.0.3 tinyrainbow@1.2.0: {} + tinyrainbow@2.0.0: {} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -16623,58 +7064,27 @@ snapshots: dependencies: is-number: 7.0.0 - to-vfile@8.0.0: - dependencies: - vfile: 6.0.3 - - toml-eslint-parser@0.10.0: - dependencies: - eslint-visitor-keys: 3.4.3 - - tr46@0.0.3: {} - - traverse@0.6.8: {} - - treeify@1.1.0: {} - - trim-newlines@3.0.1: {} - - triplesec@4.0.3: - dependencies: - iced-error: 0.0.13 - iced-lock: 1.1.0 - iced-runtime: 1.0.4 - more-entropy: 0.0.7 - progress: 1.1.8 - uglify-js: 3.19.3 - - trough@2.2.0: {} - - ts-api-utils@2.1.0(typescript@5.8.3): - dependencies: - typescript: 5.8.3 - ts-interface-checker@0.1.13: {} - ts-loader@9.5.2(typescript@5.8.3)(webpack@5.94.0(@swc/core@1.11.24)): + ts-loader@9.5.2(typescript@5.8.3)(webpack@5.100.2): dependencies: chalk: 4.1.2 - enhanced-resolve: 5.18.1 + enhanced-resolve: 5.18.2 micromatch: 4.0.8 semver: 7.7.2 source-map: 0.7.4 typescript: 5.8.3 - webpack: 5.94.0(@swc/core@1.11.24) + webpack: 5.100.2 - ts-node@10.9.2(@swc/core@1.11.24)(@types/node@22.15.21)(typescript@5.8.3): + ts-node@10.9.2(@swc/core@1.13.0)(@types/node@24.0.14)(typescript@5.8.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 22.15.21 - acorn: 8.14.1 + '@types/node': 24.0.14 + acorn: 8.15.0 acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 @@ -16684,7 +7094,7 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.11.24 + '@swc/core': 1.13.0 tsc-alias@1.8.16: dependencies: @@ -16696,286 +7106,76 @@ snapshots: normalize-path: 3.0.0 plimit-lit: 1.6.1 - tsconfig-paths@3.15.0: - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - optional: true - tslib@2.8.1: {} - tsx@4.19.4: + tsx@4.20.3: dependencies: - esbuild: 0.25.4 + esbuild: 0.25.6 get-tsconfig: 4.10.1 optionalDependencies: fsevents: 2.3.3 - tty-browserify@0.0.1: {} - - tunnel-agent@0.6.0: - dependencies: - safe-buffer: 5.2.1 - optional: true - - tunnel@0.0.6: {} - - turbo-darwin-64@2.5.3: + turbo-darwin-64@2.5.5: optional: true - turbo-darwin-arm64@2.5.3: + turbo-darwin-arm64@2.5.5: optional: true - turbo-linux-64@2.5.3: + turbo-linux-64@2.5.5: optional: true - turbo-linux-arm64@2.5.3: + turbo-linux-arm64@2.5.5: optional: true - turbo-windows-64@2.5.3: + turbo-windows-64@2.5.5: optional: true - turbo-windows-arm64@2.5.3: + turbo-windows-arm64@2.5.5: optional: true - turbo@2.5.3: + turbo@2.5.5: optionalDependencies: - turbo-darwin-64: 2.5.3 - turbo-darwin-arm64: 2.5.3 - turbo-linux-64: 2.5.3 - turbo-linux-arm64: 2.5.3 - turbo-windows-64: 2.5.3 - turbo-windows-arm64: 2.5.3 - - tweetnacl@0.13.3: {} - - tweetnacl@1.0.3: {} - - typanion@3.14.0: {} - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-fest@0.13.1: {} - - type-fest@0.18.1: {} + turbo-darwin-64: 2.5.5 + turbo-darwin-arm64: 2.5.5 + turbo-linux-64: 2.5.5 + turbo-linux-arm64: 2.5.5 + turbo-windows-64: 2.5.5 + turbo-windows-arm64: 2.5.5 type-fest@0.21.3: {} - type-fest@0.6.0: {} - - type-fest@0.8.1: {} - - type-fest@1.4.0: {} - - type-fest@2.19.0: {} - type-fest@3.13.1: {} type-fest@4.26.0: {} type-fest@4.41.0: {} - typed-array-buffer@1.0.3: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - is-typed-array: 1.1.15 - - typed-array-byte-length@1.0.3: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - - typed-array-byte-offset@1.0.4: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - has-proto: 1.2.0 - is-typed-array: 1.1.15 - reflect.getprototypeof: 1.0.10 - - typed-array-length@1.0.7: - dependencies: - call-bind: 1.0.8 - for-each: 0.3.5 - gopd: 1.2.0 - is-typed-array: 1.1.15 - possible-typed-array-names: 1.1.0 - reflect.getprototypeof: 1.0.10 - - typed-rest-client@2.1.0: - dependencies: - des.js: 1.1.0 - js-md4: 0.3.2 - qs: 6.14.0 - tunnel: 0.0.6 - underscore: 1.13.7 - - typedarray-to-buffer@3.1.5: - dependencies: - is-typedarray: 1.0.0 - - typedoc@0.28.7(typescript@5.8.3): - dependencies: - '@gerrit0/mini-shiki': 3.8.0 - lunr: 2.3.9 - markdown-it: 14.1.0 - minimatch: 9.0.5 - typescript: 5.8.3 - yaml: 2.8.0 - - typescript-eslint@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3): - dependencies: - '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.27.0(jiti@2.4.2) - typescript: 5.8.3 - transitivePeerDependencies: - - supports-color - typescript@5.8.3: {} - uc.micro@2.1.0: {} - - uglify-js@3.19.3: {} - - uint64be@1.0.1: {} - - unbox-primitive@1.1.0: - dependencies: - call-bound: 1.0.4 - has-bigints: 1.1.0 - has-symbols: 1.1.0 - which-boxed-primitive: 1.1.1 - - underscore@1.13.7: {} - - undici-types@6.19.8: {} - undici-types@6.21.0: {} + undici-types@7.8.0: {} + undici@6.21.3: {} - unicode-emoji-modifier-base@1.0.0: {} + undici@7.12.0: {} unicorn-magic@0.1.0: {} unicorn-magic@0.3.0: {} - unified@11.0.5: - dependencies: - '@types/unist': 3.0.3 - bail: 2.0.2 - devlop: 1.1.0 - extend: 3.0.2 - is-plain-obj: 4.1.0 - trough: 2.2.0 - vfile: 6.0.3 - - unique-filename@4.0.0: - dependencies: - unique-slug: 5.0.0 - - unique-slug@5.0.0: - dependencies: - imurmurhash: 0.1.4 - - unique-string@3.0.0: + update-browserslist-db@1.1.3(browserslist@4.25.1): dependencies: - crypto-random-string: 4.0.0 - - unist-util-is@6.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-stringify-position@4.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-parents@6.0.1: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - - unist-util-visit@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 - - universal-user-agent@6.0.1: {} - - universal-user-agent@7.0.3: {} - - universalify@2.0.1: {} - - unrs-resolver@1.7.2: - dependencies: - napi-postinstall: 0.2.4 - optionalDependencies: - '@unrs/resolver-binding-darwin-arm64': 1.7.2 - '@unrs/resolver-binding-darwin-x64': 1.7.2 - '@unrs/resolver-binding-freebsd-x64': 1.7.2 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.7.2 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.7.2 - '@unrs/resolver-binding-linux-arm64-gnu': 1.7.2 - '@unrs/resolver-binding-linux-arm64-musl': 1.7.2 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.7.2 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.7.2 - '@unrs/resolver-binding-linux-riscv64-musl': 1.7.2 - '@unrs/resolver-binding-linux-s390x-gnu': 1.7.2 - '@unrs/resolver-binding-linux-x64-gnu': 1.7.2 - '@unrs/resolver-binding-linux-x64-musl': 1.7.2 - '@unrs/resolver-binding-wasm32-wasi': 1.7.2 - '@unrs/resolver-binding-win32-arm64-msvc': 1.7.2 - '@unrs/resolver-binding-win32-ia32-msvc': 1.7.2 - '@unrs/resolver-binding-win32-x64-msvc': 1.7.2 - - upath@2.0.1: {} - - update-browserslist-db@1.1.3(browserslist@4.24.5): - dependencies: - browserslist: 4.24.5 + browserslist: 4.25.1 escalade: 3.2.0 picocolors: 1.1.1 - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - url-join@5.0.0: {} - - url@0.11.4: - dependencies: - punycode: 1.4.1 - qs: 6.14.0 - urlpattern-polyfill@10.1.0: {} userhome@1.0.1: {} util-deprecate@1.0.2: {} - util@0.12.5: - dependencies: - inherits: 2.0.4 - is-arguments: 1.2.0 - is-generator-function: 1.1.0 - is-typed-array: 1.1.15 - which-typed-array: 1.1.19 - - uuid@9.0.1: {} - v8-compile-cache-lib@3.0.1: {} validate-npm-package-license@3.0.4: @@ -16983,50 +7183,22 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - validate-npm-package-name@5.0.0: - dependencies: - builtins: 5.1.0 - - validate-npm-package-name@6.0.1: {} - - vfile-message@4.0.2: - dependencies: - '@types/unist': 3.0.3 - unist-util-stringify-position: 4.0.0 - - vfile@6.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile-message: 4.0.2 - - vite-plugin-node-polyfills@0.23.0(rollup@4.41.0)(vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(sass@1.89.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0)): - dependencies: - '@rollup/plugin-inject': 5.0.5(rollup@4.41.0) - node-stdlib-browser: 1.3.1 - vite: 6.3.5(@types/node@22.15.21)(jiti@2.4.2)(sass@1.89.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0) - transitivePeerDependencies: - - rollup - - vite@6.3.5(@types/node@22.15.21)(jiti@2.4.2)(sass@1.89.0)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.0): + vite@6.3.5(@types/node@24.0.14)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(terser@5.43.1)(tsx@4.20.3): dependencies: - esbuild: 0.25.4 - fdir: 6.4.4(picomatch@4.0.2) - picomatch: 4.0.2 - postcss: 8.5.3 - rollup: 4.41.0 - tinyglobby: 0.2.13 + esbuild: 0.25.6 + fdir: 6.4.6(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.45.1 + tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.15.21 + '@types/node': 24.0.14 fsevents: 2.3.3 jiti: 2.4.2 - sass: 1.89.0 - terser: 5.39.2 - tsx: 4.19.4 - yaml: 2.8.0 - - vm-browserify@1.1.2: {} - - vuln-vects@1.1.0: {} + lightningcss: 1.30.1 + sass: 1.89.2 + terser: 5.43.1 + tsx: 4.20.3 wait-port@1.1.0: dependencies: @@ -17036,7 +7208,7 @@ snapshots: transitivePeerDependencies: - supports-color - watchpack@2.4.3: + watchpack@2.4.4: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 @@ -17048,41 +7220,42 @@ snapshots: web-streams-polyfill@3.3.3: {} - webdriver@9.14.0: + webdriver@9.18.0: dependencies: - '@types/node': 20.17.50 + '@types/node': 20.19.8 '@types/ws': 8.18.1 - '@wdio/config': 9.14.0 - '@wdio/logger': 9.4.4 - '@wdio/protocols': 9.14.0 - '@wdio/types': 9.14.0 - '@wdio/utils': 9.14.0 + '@wdio/config': 9.18.0 + '@wdio/logger': 9.18.0 + '@wdio/protocols': 9.16.2 + '@wdio/types': 9.16.2 + '@wdio/utils': 9.18.0 deepmerge-ts: 7.1.5 + https-proxy-agent: 7.0.6 undici: 6.21.3 - ws: 8.18.2 + ws: 8.18.3 transitivePeerDependencies: - bare-buffer - bufferutil - supports-color - utf-8-validate - webdriverio@9.14.0: + webdriverio@9.18.1: dependencies: - '@types/node': 20.17.50 + '@types/node': 20.19.8 '@types/sinonjs__fake-timers': 8.1.5 - '@wdio/config': 9.14.0 - '@wdio/logger': 9.4.4 - '@wdio/protocols': 9.14.0 - '@wdio/repl': 9.4.4 - '@wdio/types': 9.14.0 - '@wdio/utils': 9.14.0 + '@wdio/config': 9.18.0 + '@wdio/logger': 9.18.0 + '@wdio/protocols': 9.16.2 + '@wdio/repl': 9.16.2 + '@wdio/types': 9.16.2 + '@wdio/utils': 9.18.0 archiver: 7.0.1 aria-query: 5.3.2 - cheerio: 1.0.0 + cheerio: 1.1.0 css-shorthand-properties: 1.1.2 css-value: 0.0.1 grapheme-splitter: 1.0.4 - htmlfy: 0.6.7 + htmlfy: 0.8.1 is-plain-obj: 4.1.0 jszip: 3.10.1 lodash.clonedeep: 4.5.0 @@ -17090,9 +7263,9 @@ snapshots: query-selector-shadow-dom: 1.0.1 resq: 1.11.0 rgb2hex: 0.2.5 - serialize-error: 11.0.3 + serialize-error: 12.0.0 urlpattern-polyfill: 10.1.0 - webdriver: 9.14.0 + webdriver: 9.18.0 transitivePeerDependencies: - bare-buffer - bufferutil @@ -17101,21 +7274,21 @@ snapshots: webextension-polyfill@0.12.0: {} - webidl-conversions@3.0.1: {} + webpack-sources@3.3.3: {} - webpack-sources@3.2.3: {} - - webpack@5.94.0(@swc/core@1.11.24): + webpack@5.100.2: dependencies: - '@types/estree': 1.0.7 + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.14.1 - acorn-import-attributes: 1.9.5(acorn@8.14.1) - browserslist: 4.24.5 + acorn: 8.15.0 + acorn-import-phases: 1.0.4(acorn@8.15.0) + browserslist: 4.25.1 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.18.1 + enhanced-resolve: 5.18.2 es-module-lexer: 1.7.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -17125,11 +7298,11 @@ snapshots: loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 3.3.0 + schema-utils: 4.3.2 tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(@swc/core@1.11.24)(webpack@5.94.0(@swc/core@1.11.24)) - watchpack: 2.4.3 - webpack-sources: 3.2.3 + terser-webpack-plugin: 5.3.14(webpack@5.100.2) + watchpack: 2.4.4 + webpack-sources: 3.3.3 transitivePeerDependencies: - '@swc/core' - esbuild @@ -17141,54 +7314,6 @@ snapshots: whatwg-mimetype@4.0.0: {} - whatwg-url@5.0.0: - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - - which-boxed-primitive@1.1.1: - dependencies: - is-bigint: 1.1.0 - is-boolean-object: 1.2.2 - is-number-object: 1.1.1 - is-string: 1.1.1 - is-symbol: 1.1.1 - - which-builtin-type@1.2.1: - dependencies: - call-bound: 1.0.4 - function.prototype.name: 1.1.8 - has-tostringtag: 1.0.2 - is-async-function: 2.1.1 - is-date-object: 1.1.0 - is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.0 - is-regex: 1.2.1 - is-weakref: 1.1.1 - isarray: 2.0.5 - which-boxed-primitive: 1.1.1 - which-collection: 1.0.2 - which-typed-array: 1.1.19 - - which-collection@1.0.2: - dependencies: - is-map: 2.0.3 - is-set: 2.0.3 - is-weakmap: 2.0.2 - is-weakset: 2.0.4 - - which-module@2.0.1: {} - - which-typed-array@1.1.19: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.8 - call-bound: 1.0.4 - for-each: 0.3.5 - get-proto: 1.0.1 - gopd: 1.2.0 - has-tostringtag: 1.0.2 - which@2.0.2: dependencies: isexe: 2.0.0 @@ -17201,10 +7326,6 @@ snapshots: dependencies: isexe: 3.1.1 - word-wrap@1.2.5: {} - - wordwrap@1.0.0: {} - workerpool@6.5.1: {} wrap-ansi@6.2.0: @@ -17225,56 +7346,16 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 - wrap-ansi@9.0.0: - dependencies: - ansi-styles: 6.2.1 - string-width: 7.2.0 - strip-ansi: 7.1.0 - wrappy@1.0.2: {} - write-file-atomic@3.0.3: - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.7 - typedarray-to-buffer: 3.1.5 - - write-file-atomic@5.0.1: - dependencies: - imurmurhash: 0.1.4 - signal-exit: 4.1.0 - - write-yaml-file@4.2.0: - dependencies: - js-yaml: 4.1.0 - write-file-atomic: 3.0.3 - - ws@8.18.2: {} - - xcase@2.0.1: {} - - xmldoc@2.0.2: - dependencies: - sax: 1.4.1 - - xtend@4.0.2: {} - - y18n@4.0.3: {} + ws@8.18.3: {} y18n@5.0.8: {} - yallist@4.0.0: {} + yallist@3.1.1: {} yallist@5.0.0: {} - yaml@2.8.0: {} - - yargs-parser@18.1.3: - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - yargs-parser@20.2.9: {} yargs-parser@21.1.1: {} @@ -17286,20 +7367,6 @@ snapshots: flat: 5.0.2 is-plain-obj: 2.1.0 - yargs@15.4.1: - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.1 - y18n: 4.0.3 - yargs-parser: 18.1.3 - yargs@16.2.0: dependencies: cliui: 7.0.4 @@ -17340,7 +7407,3 @@ snapshots: archiver-utils: 5.0.2 compress-commons: 6.0.2 readable-stream: 4.7.0 - - zod@3.25.76: {} - - zwitch@2.0.4: {} diff --git a/public/pyodide/package.json b/public/pyodide/package.json index 1fc4db17..9aa3084a 100644 --- a/public/pyodide/package.json +++ b/public/pyodide/package.json @@ -1,6 +1,6 @@ { "name": "pyodide", - "version": "0.27.176", + "version": "0.27.367", "description": "The Pyodide JavaScript package", "keywords": [ "python", @@ -132,6 +132,6 @@ }, "types": "./pyodide.d.ts", "engines": { - "node": ">=18.0.0" + "node": ">=20.0.0" } } diff --git a/src/matches/all/index.tsx b/src/matches/all/index.tsx new file mode 100644 index 00000000..071d0f95 --- /dev/null +++ b/src/matches/all/index.tsx @@ -0,0 +1 @@ +import initAppWithShadow from '@extension/shared/lib/utils/init-app-with-shadow'; \ No newline at end of file diff --git a/src/matches/example/index.tsx b/src/matches/example/index.tsx new file mode 100644 index 00000000..071d0f95 --- /dev/null +++ b/src/matches/example/index.tsx @@ -0,0 +1 @@ +import initAppWithShadow from '@extension/shared/lib/utils/init-app-with-shadow'; \ No newline at end of file diff --git a/tests/e2e/package.json b/tests/e2e/package.json index 0118e765..878f1448 100644 --- a/tests/e2e/package.json +++ b/tests/e2e/package.json @@ -1,6 +1,6 @@ { "name": "@extension/e2e", - "version": "0.5.169", + "version": "0.5.360", "description": "E2e tests configuration boilerplate", "private": true, "sideEffects": false, diff --git a/tests/e2e/specs/debug-side-panel.test.ts b/tests/e2e/specs/debug-side-panel.test.ts new file mode 100644 index 00000000..36c6c08c --- /dev/null +++ b/tests/e2e/specs/debug-side-panel.test.ts @@ -0,0 +1,139 @@ +import fs from 'fs'; + +describe('Debug Side Panel - ToggleButton Issue', () => { + it('should debug ToggleButton ReferenceError', async () => { + console.log('🔍 Начинаем отладку ToggleButton в side-panel...'); + + // 1. Открываем side-panel напрямую + const extensionPath = await browser.getExtensionPath(); + const sidePanelUrl = `${extensionPath}/side-panel/index.html`; + + console.log('📂 Extension path:', extensionPath); + console.log('🌐 Side panel URL:', sidePanelUrl); + + await browser.url(sidePanelUrl); + + // 2. Ждём загрузки страницы + await browser.waitUntil(async () => (await browser.getTitle()) === 'Side Panel', { + timeout: 10000, + timeoutMsg: 'Side Panel не загрузился в течение 10 секунд', + }); + + console.log('✅ Side Panel загружен, заголовок:', await browser.getTitle()); + + // 3. Подписываемся на логи консоли (только поддерживаемые события) + await browser.sessionSubscribe({ events: ['log.entryAdded'] }); + + const consoleLogs: string[] = []; + const errorLogs: string[] = []; + + browser.on('log.entryAdded', logEntry => { + consoleLogs.push(`[${logEntry.level}] ${logEntry.text}`); + if (logEntry.level === 'error') { + errorLogs.push(logEntry.text); + } + console.log(`[Browser Log] ${logEntry.level}: ${logEntry.text}`); + }); + + // 4. Ждём немного для сбора логов + await browser.pause(3000); + + // 5. Проверяем наличие ToggleButton в DOM + const toggleButtonExists = await browser.execute(() => { + // Проверяем, есть ли элемент с классом или атрибутом, указывающим на ToggleButton + const buttons = document.querySelectorAll('button'); + console.log('🔍 Найдено кнопок:', buttons.length); + + for (let i = 0; i < buttons.length; i++) { + const btn = buttons[i]; + console.log(`Кнопка ${i}:`, { + className: btn.className, + textContent: btn.textContent?.trim(), + innerHTML: btn.innerHTML.substring(0, 100) + }); + } + + // Ищем кнопку переключения темы по содержимому SVG + const themeToggleButton = Array.from(buttons).find(btn => + btn.innerHTML.includes('M21 12.79A9') || // moon icon + btn.innerHTML.includes('M12 1v2M12 21v2') // sun icon + ); + + return { + totalButtons: buttons.length, + themeToggleButton: !!themeToggleButton, + themeToggleButtonHTML: themeToggleButton?.innerHTML || null + }; + }); + + console.log('🔍 Результат проверки DOM:', toggleButtonExists); + + // 6. Проверяем, загрузился ли React + const reactLoaded = await browser.execute(() => { + return { + reactLoaded: typeof window.React !== 'undefined', + reactDOMLoaded: typeof window.ReactDOM !== 'undefined', + appContainer: !!document.getElementById('app-container'), + appContainerChildren: document.getElementById('app-container')?.children.length || 0 + }; + }); + + console.log('🔍 Состояние React:', reactLoaded); + + // 7. Делаем скриншот + await browser.saveScreenshot('debug-side-panel.png'); + + // 8. Сохраняем DOM + const domDump = await browser.execute(() => document.documentElement.outerHTML); + fs.writeFileSync('debug-side-panel-dom.html', domDump); + + // 9. Сохраняем логи + fs.writeFileSync('debug-side-panel-logs.txt', consoleLogs.join('\n')); + fs.writeFileSync('debug-side-panel-errors.txt', errorLogs.join('\n')); + + // 10. Анализируем ошибки + const toggleButtonErrors = errorLogs.filter(log => + log.includes('ToggleButton') || + log.includes('ReferenceError') || + log.includes('is not defined') + ); + + console.log('🚨 Ошибки, связанные с ToggleButton:', toggleButtonErrors); + + // 11. Проверяем, есть ли ошибки загрузки модулей + const moduleErrors = errorLogs.filter(log => + log.includes('Failed to load module') || + log.includes('import') || + log.includes('export') + ); + + console.log('📦 Ошибки загрузки модулей:', moduleErrors); + + // 12. Выводим итоговый отчёт + const report = { + sidePanelLoaded: await browser.getTitle() === 'Side Panel', + toggleButtonErrors: toggleButtonErrors.length, + moduleErrors: moduleErrors.length, + totalErrors: errorLogs.length, + totalLogs: consoleLogs.length, + domAnalysis: toggleButtonExists, + reactAnalysis: reactLoaded + }; + + console.log('📊 Итоговый отчёт:', JSON.stringify(report, null, 2)); + + // 13. Если есть ошибки ToggleButton, выводим подробности + if (toggleButtonErrors.length > 0) { + console.log('❌ ПРОБЛЕМА ОБНАРУЖЕНА: ToggleButton не загружен'); + console.log('🔧 Возможные причины:'); + console.log(' 1. Компонент не экспортирован из @extension/ui'); + console.log(' 2. Проблема с импортом в SidePanel.tsx'); + console.log(' 3. Ошибка сборки Vite'); + console.log(' 4. Проблема с путями к модулям'); + + throw new Error(`ToggleButton не загружен. См. логи в debug-side-panel-errors.txt`); + } + + console.log('✅ Отладка завершена успешно'); + }); +}); \ No newline at end of file diff --git a/tests/e2e/specs/page-devtools-panel.test.ts b/tests/e2e/specs/page-devtools-panel.test.ts deleted file mode 100644 index 5284f7f5..00000000 --- a/tests/e2e/specs/page-devtools-panel.test.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { canSwitchTheme } from '../helpers/theme.js'; - -describe('Webextension DevTools Panel', () => { - it('should make DevTools panel available', async () => { - const extensionPath = await browser.getExtensionPath(); - const devtoolsPanelUrl = `${extensionPath}/devtools-panel/index.html`; - - await browser.url(devtoolsPanelUrl); - await expect(browser).toHaveTitle('Devtools Panel'); - await canSwitchTheme(); - }); -}); diff --git a/tests/e2e/specs/page-side-panel.test.ts b/tests/e2e/specs/page-side-panel.test.ts index 079ea608..07b1431e 100644 --- a/tests/e2e/specs/page-side-panel.test.ts +++ b/tests/e2e/specs/page-side-panel.test.ts @@ -28,6 +28,10 @@ describe('Webextension Side Panel', () => { }); await expect(browser).toHaveTitle('Side Panel'); + // 2.1. Кликаем по карточке плагина Ozon analyser + const ozonCard = await $('[data-testid="plugin-card-ozon-analyzer"]').getElement(); + await ozonCard.click(); + // 3. Переключаемся на вкладку "Чат" (замените селектор на ваш) const chatTab = await $('[data-testid="chat-tab"]').getElement(); await chatTab.click(); diff --git a/tsconfig.json b/tsconfig.json index fa17707f..83805a14 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,12 +1,26 @@ { - "$schema": "https://json.schemastore.org/tsconfig", - "display": "ESLint", - "extends": "./packages/tsconfig/base.json", "compilerOptions": { - "noImplicitAny": false, - "noEmit": false, "target": "ESNext", - "typeRoots": ["./types", "./node_modules/@types"] + "useDefineForClassFields": true, + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "allowJs": false, + "skipLibCheck": true, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "baseUrl": ".", + "paths": { + "@extension/shared/*": ["packages/shared/dist/*"], + "@extension/shared": ["packages/shared/dist/index.mjs"] + } }, - "include": ["eslint.config.ts", "types"] + "include": ["src"], + "exclude": ["node_modules"] }