From fb84d54c543623b876662cf70000eb6c50a972a8 Mon Sep 17 00:00:00 2001 From: openhands Date: Sun, 8 Mar 2026 15:44:13 +0000 Subject: [PATCH 01/10] Create ACE Framework documentation - Remove all existing code from the repository - Add README.md as entry point with link to design/source.md - Add design/source.md with comprehensive ACE Framework documentation - Six-layer cognitive architecture (Aspirational, Global Strategy, Agent Model, Executive Function, Cognitive Control, Task Prosecution) - Bidirectional communication buses (Northbound and Southbound) - System Integrity overlay - Key design principles based on ACE Framework paper (arXiv:2310.06775) Co-authored-by: openhands --- .github/hooks/pre-commit | 13 - .github/workflows/dynamic-readme.yaml | 62 - .github/workflows/run_tests.yaml | 40 - .gitignore | 170 - LICENSE | 21 - README.md | 43 +- ace | 76 - app/component.py | 93 - app/components/__init__.py | 8 - app/components/actions/__init__.py | 0 app/components/actions/start.py | 6 - app/components/controller/__init__.py | 0 app/components/controller/api/__init__.py | 21 - .../controller/api/routes/__init__.py | 2 - .../controller/api/routes/model_provider.py | 43 - app/components/controller/api/routes/root.py | 79 - .../controller/api/services/__init__.py | 4 - .../controller/api/services/model_provider.py | 20 - .../controller/api/services/root.py | 36 - app/components/controller/start.py | 11 - app/components/layer/__init__.py | 0 app/components/layer/start.py | 6 - app/components/memory/__init__.py | 0 app/components/memory/start.py | 6 - app/components/model_provider/__init__.py | 0 app/components/model_provider/start.py | 6 - app/components/queue/__init__.py | 0 app/components/queue/start.py | 6 - app/components/telemetry/__init__.py | 0 app/components/telemetry/start.py | 6 - app/components/ui/.editorconfig | 17 - app/components/ui/.gitignore | 42 - app/components/ui/__init__.py | 0 app/components/ui/angular.json | 108 - app/components/ui/package-lock.json | 12561 ---------------- app/components/ui/package.json | 48 - app/components/ui/public/favicon.ico | Bin 15086 -> 0 bytes app/components/ui/src/app/app.component.html | 34 - app/components/ui/src/app/app.component.scss | 35 - app/components/ui/src/app/app.component.ts | 108 - app/components/ui/src/app/app.config.ts | 34 - app/components/ui/src/app/app.routes.ts | 14 - app/components/ui/src/app/constants.ts | 9 - app/components/ui/src/app/environment.ts | 5 - .../ui/src/app/models/app.models.ts | 7 - .../src/app/models/model-provider.models.ts | 13 - .../ui/src/app/models/settings.models.ts | 52 - .../ui/src/app/pages/chat/chat.component.html | 3 - .../ui/src/app/pages/chat/chat.component.scss | 0 .../ui/src/app/pages/chat/chat.component.ts | 9 - .../pages/dashboard/dashboard.component.html | 3 - .../pages/dashboard/dashboard.component.scss | 0 .../pages/dashboard/dashboard.component.ts | 9 - .../ui/src/app/pages/home/home.component.html | 3 - .../ui/src/app/pages/home/home.component.scss | 0 .../ui/src/app/pages/home/home.component.ts | 9 - .../model_garden/model-garden.component.html | 3 - .../model_garden/model-garden.component.scss | 0 .../model_garden/model-garden.component.ts | 9 - .../pages/settings/settings.component.html | 90 - .../pages/settings/settings.component.scss | 5 - .../app/pages/settings/settings.component.ts | 191 - .../ui/src/app/services/app.service.ts | 25 - .../app/services/model-provider.service.ts | 29 - .../ui/src/app/services/settings.service.ts | 39 - app/components/ui/src/app/state/app.state.ts | 21 - .../ui/src/app/state/loadable.state.ts | 35 - .../ui/src/app/state/model-provider.state.ts | 22 - .../ui/src/app/state/settings.state.ts | 42 - .../ui/src/app/store/app/app.actions.ts | 11 - .../ui/src/app/store/app/app.effects.ts | 24 - .../ui/src/app/store/app/app.reducers.ts | 11 - .../ui/src/app/store/app/app.selectors.ts | 5 - .../model-provider/model-provider.actions.ts | 14 - .../model-provider/model-provider.effects.ts | 32 - .../model-provider/model-provider.reducers.ts | 52 - .../model-provider.selectors.ts | 6 - .../app/store/settings/settings.actions.ts | 17 - .../app/store/settings/settings.effects.ts | 53 - .../app/store/settings/settings.reducers.ts | 11 - .../app/store/settings/settings.selectors.ts | 4 - app/components/ui/src/app/theme.ts | 19 - app/components/ui/src/index.html | 15 - app/components/ui/src/main.ts | 9 - app/components/ui/src/styles.scss | 30 - app/components/ui/src/theme.scss | 128 - app/components/ui/start.py | 15 - app/components/ui/tsconfig.app.json | 15 - app/components/ui/tsconfig.json | 27 - app/components/ui/tsconfig.spec.json | 15 - app/constants/__init__.py | 15 - app/constants/api_routes.py | 9 - app/constants/base_enum.py | 39 - app/constants/components.py | 20 - app/constants/container_folders.py | 17 - app/constants/defaults.py | 17 - app/constants/dict_keys.py | 22 - app/constants/environment_variables.py | 8 - app/constants/files.py | 116 - app/constants/folders.py | 35 - app/constants/layer_types.py | 13 - app/constants/logger.py | 20 - app/constants/model_providers.py | 13 - app/constants/model_types.py | 49 - app/constants/names.py | 11 - app/constants/network.py | 20 - app/constants/shell_commands.py | 25 - app/containers/Containerfile | 15 - app/containers/template_deployment.yaml | 252 - app/logger.py | 168 - app/models/__init__.py | 33 - app/models/api_schemas/__init__.py | 0 app/models/api_schemas/controller.py | 23 - app/models/api_schemas/defaults.py | 11 - app/models/config/__init__.py | 1 - app/models/config/controller.py | 16 - app/models/config/defaults.py | 102 - app/models/config/layers.py | 12 - app/models/config/model_providers/__init__.py | 2 - .../model_providers/individual_providers.py | 9 - .../config/model_providers/model_providers.py | 56 - .../model_providers/model_types/__init__.py | 8 - .../model_providers/model_types/audio.py | 7 - .../model_providers/model_types/image.py | 7 - .../config/model_providers/model_types/llm.py | 23 - .../model_providers/model_types/multimodal.py | 7 - .../config/model_providers/model_types/rag.py | 7 - .../model_providers/model_types/robotics.py | 7 - .../model_providers/model_types/three_d.py | 7 - .../model_providers/model_types/video.py | 7 - app/models/config/ui.py | 8 - app/models/data/__init__.py | 0 app/models/data/initial.py | 200 - app/models/data/model_providers.py | 23 - app/models/data/required.py | 22 - app/requirements | 3 - app/shell.py | 67 - app/startup.py | 132 - app/version | 9 - design/source.md | 231 + documentation/personal.md | 17 - tests/__init__.py | 0 tests/requirements | 3 - tests/unit/__init__.py | 11 - tests/unit/components/__init__.py | 0 tests/unit/components/controller/__init__.py | 0 .../components/controller/api/__init__.py | 0 .../components/controller/api/test_service.py | 102 - tests/unit/conftest.py | 32 - tests/unit/constants/__init__.py | 0 tests/unit/constants/test_base_enum.py | 52 - tests/unit/constants/test_files.py | 56 - tests/unit/constants/test_folder.py | 27 - tests/unit/test_component.py | 59 - tests/unit/test_logger.py | 185 - tests/unit/test_shell.py | 38 - tests/unit/testing_constants.py | 8 - 157 files changed, 257 insertions(+), 17182 deletions(-) delete mode 100644 .github/hooks/pre-commit delete mode 100644 .github/workflows/dynamic-readme.yaml delete mode 100644 .github/workflows/run_tests.yaml delete mode 100644 .gitignore delete mode 100644 LICENSE delete mode 100755 ace delete mode 100755 app/component.py delete mode 100644 app/components/__init__.py delete mode 100644 app/components/actions/__init__.py delete mode 100644 app/components/actions/start.py delete mode 100644 app/components/controller/__init__.py delete mode 100644 app/components/controller/api/__init__.py delete mode 100644 app/components/controller/api/routes/__init__.py delete mode 100644 app/components/controller/api/routes/model_provider.py delete mode 100644 app/components/controller/api/routes/root.py delete mode 100644 app/components/controller/api/services/__init__.py delete mode 100644 app/components/controller/api/services/model_provider.py delete mode 100644 app/components/controller/api/services/root.py delete mode 100644 app/components/controller/start.py delete mode 100644 app/components/layer/__init__.py delete mode 100644 app/components/layer/start.py delete mode 100644 app/components/memory/__init__.py delete mode 100644 app/components/memory/start.py delete mode 100644 app/components/model_provider/__init__.py delete mode 100644 app/components/model_provider/start.py delete mode 100644 app/components/queue/__init__.py delete mode 100644 app/components/queue/start.py delete mode 100644 app/components/telemetry/__init__.py delete mode 100644 app/components/telemetry/start.py delete mode 100644 app/components/ui/.editorconfig delete mode 100644 app/components/ui/.gitignore delete mode 100644 app/components/ui/__init__.py delete mode 100644 app/components/ui/angular.json delete mode 100644 app/components/ui/package-lock.json delete mode 100644 app/components/ui/package.json delete mode 100644 app/components/ui/public/favicon.ico delete mode 100644 app/components/ui/src/app/app.component.html delete mode 100644 app/components/ui/src/app/app.component.scss delete mode 100644 app/components/ui/src/app/app.component.ts delete mode 100644 app/components/ui/src/app/app.config.ts delete mode 100644 app/components/ui/src/app/app.routes.ts delete mode 100644 app/components/ui/src/app/constants.ts delete mode 100644 app/components/ui/src/app/environment.ts delete mode 100644 app/components/ui/src/app/models/app.models.ts delete mode 100644 app/components/ui/src/app/models/model-provider.models.ts delete mode 100644 app/components/ui/src/app/models/settings.models.ts delete mode 100644 app/components/ui/src/app/pages/chat/chat.component.html delete mode 100644 app/components/ui/src/app/pages/chat/chat.component.scss delete mode 100644 app/components/ui/src/app/pages/chat/chat.component.ts delete mode 100644 app/components/ui/src/app/pages/dashboard/dashboard.component.html delete mode 100644 app/components/ui/src/app/pages/dashboard/dashboard.component.scss delete mode 100644 app/components/ui/src/app/pages/dashboard/dashboard.component.ts delete mode 100644 app/components/ui/src/app/pages/home/home.component.html delete mode 100644 app/components/ui/src/app/pages/home/home.component.scss delete mode 100644 app/components/ui/src/app/pages/home/home.component.ts delete mode 100644 app/components/ui/src/app/pages/model_garden/model-garden.component.html delete mode 100644 app/components/ui/src/app/pages/model_garden/model-garden.component.scss delete mode 100644 app/components/ui/src/app/pages/model_garden/model-garden.component.ts delete mode 100644 app/components/ui/src/app/pages/settings/settings.component.html delete mode 100644 app/components/ui/src/app/pages/settings/settings.component.scss delete mode 100644 app/components/ui/src/app/pages/settings/settings.component.ts delete mode 100644 app/components/ui/src/app/services/app.service.ts delete mode 100644 app/components/ui/src/app/services/model-provider.service.ts delete mode 100644 app/components/ui/src/app/services/settings.service.ts delete mode 100644 app/components/ui/src/app/state/app.state.ts delete mode 100644 app/components/ui/src/app/state/loadable.state.ts delete mode 100644 app/components/ui/src/app/state/model-provider.state.ts delete mode 100644 app/components/ui/src/app/state/settings.state.ts delete mode 100644 app/components/ui/src/app/store/app/app.actions.ts delete mode 100644 app/components/ui/src/app/store/app/app.effects.ts delete mode 100644 app/components/ui/src/app/store/app/app.reducers.ts delete mode 100644 app/components/ui/src/app/store/app/app.selectors.ts delete mode 100644 app/components/ui/src/app/store/model-provider/model-provider.actions.ts delete mode 100644 app/components/ui/src/app/store/model-provider/model-provider.effects.ts delete mode 100644 app/components/ui/src/app/store/model-provider/model-provider.reducers.ts delete mode 100644 app/components/ui/src/app/store/model-provider/model-provider.selectors.ts delete mode 100644 app/components/ui/src/app/store/settings/settings.actions.ts delete mode 100644 app/components/ui/src/app/store/settings/settings.effects.ts delete mode 100644 app/components/ui/src/app/store/settings/settings.reducers.ts delete mode 100644 app/components/ui/src/app/store/settings/settings.selectors.ts delete mode 100644 app/components/ui/src/app/theme.ts delete mode 100644 app/components/ui/src/index.html delete mode 100644 app/components/ui/src/main.ts delete mode 100644 app/components/ui/src/styles.scss delete mode 100644 app/components/ui/src/theme.scss delete mode 100644 app/components/ui/start.py delete mode 100644 app/components/ui/tsconfig.app.json delete mode 100644 app/components/ui/tsconfig.json delete mode 100644 app/components/ui/tsconfig.spec.json delete mode 100644 app/constants/__init__.py delete mode 100644 app/constants/api_routes.py delete mode 100644 app/constants/base_enum.py delete mode 100644 app/constants/components.py delete mode 100644 app/constants/container_folders.py delete mode 100644 app/constants/defaults.py delete mode 100644 app/constants/dict_keys.py delete mode 100644 app/constants/environment_variables.py delete mode 100644 app/constants/files.py delete mode 100644 app/constants/folders.py delete mode 100644 app/constants/layer_types.py delete mode 100644 app/constants/logger.py delete mode 100644 app/constants/model_providers.py delete mode 100644 app/constants/model_types.py delete mode 100644 app/constants/names.py delete mode 100644 app/constants/network.py delete mode 100644 app/constants/shell_commands.py delete mode 100644 app/containers/Containerfile delete mode 100644 app/containers/template_deployment.yaml delete mode 100644 app/logger.py delete mode 100644 app/models/__init__.py delete mode 100644 app/models/api_schemas/__init__.py delete mode 100644 app/models/api_schemas/controller.py delete mode 100644 app/models/api_schemas/defaults.py delete mode 100644 app/models/config/__init__.py delete mode 100644 app/models/config/controller.py delete mode 100644 app/models/config/defaults.py delete mode 100644 app/models/config/layers.py delete mode 100644 app/models/config/model_providers/__init__.py delete mode 100644 app/models/config/model_providers/individual_providers.py delete mode 100644 app/models/config/model_providers/model_providers.py delete mode 100644 app/models/config/model_providers/model_types/__init__.py delete mode 100644 app/models/config/model_providers/model_types/audio.py delete mode 100644 app/models/config/model_providers/model_types/image.py delete mode 100644 app/models/config/model_providers/model_types/llm.py delete mode 100644 app/models/config/model_providers/model_types/multimodal.py delete mode 100644 app/models/config/model_providers/model_types/rag.py delete mode 100644 app/models/config/model_providers/model_types/robotics.py delete mode 100644 app/models/config/model_providers/model_types/three_d.py delete mode 100644 app/models/config/model_providers/model_types/video.py delete mode 100644 app/models/config/ui.py delete mode 100644 app/models/data/__init__.py delete mode 100644 app/models/data/initial.py delete mode 100644 app/models/data/model_providers.py delete mode 100644 app/models/data/required.py delete mode 100644 app/requirements delete mode 100644 app/shell.py delete mode 100755 app/startup.py delete mode 100644 app/version create mode 100644 design/source.md delete mode 100644 documentation/personal.md delete mode 100644 tests/__init__.py delete mode 100644 tests/requirements delete mode 100644 tests/unit/__init__.py delete mode 100644 tests/unit/components/__init__.py delete mode 100644 tests/unit/components/controller/__init__.py delete mode 100644 tests/unit/components/controller/api/__init__.py delete mode 100644 tests/unit/components/controller/api/test_service.py delete mode 100644 tests/unit/conftest.py delete mode 100644 tests/unit/constants/__init__.py delete mode 100644 tests/unit/constants/test_base_enum.py delete mode 100644 tests/unit/constants/test_files.py delete mode 100644 tests/unit/constants/test_folder.py delete mode 100644 tests/unit/test_component.py delete mode 100644 tests/unit/test_logger.py delete mode 100644 tests/unit/test_shell.py delete mode 100644 tests/unit/testing_constants.py diff --git a/.github/hooks/pre-commit b/.github/hooks/pre-commit deleted file mode 100644 index 9af2a430..00000000 --- a/.github/hooks/pre-commit +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -VERSION_FILE="app/version" - -CURRENT_DATE=$(date +"%Y-%m-%d %H:%M:%S") - -if jq --arg date "$CURRENT_DATE" '.last_update = $date' "$VERSION_FILE" > temp.json; then - mv temp.json "$VERSION_FILE" - git add "$VERSION_FILE" -else - echo "Error: Failed to update version file" - exit 1 -fi diff --git a/.github/workflows/dynamic-readme.yaml b/.github/workflows/dynamic-readme.yaml deleted file mode 100644 index c7b992bd..00000000 --- a/.github/workflows/dynamic-readme.yaml +++ /dev/null @@ -1,62 +0,0 @@ -name: Dynamic README - -on: - push: - paths: - - 'app/version' - branches-ignore: - - main - -permissions: - contents: write - -jobs: - update-readme: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - token: ${{ secrets.GITHUB_TOKEN }} - - - name: Read version from JSON - id: version - run: | - if [ ! -f "app/version" ]; then - echo "Error: app/version file not found" - exit 1 - fi - - if ! VERSION=$(jq -r .version app/version); then - echo "Error: Failed to parse version from app/version" - exit 1 - fi - - if [ -z "$VERSION" ] || [ "$VERSION" = "null" ]; then - echo "Error: Version key not found in app/version" - exit 1 - fi - - echo "VERSION=$VERSION" >> $GITHUB_ENV - echo "Found version: $VERSION" - - - name: Update README - run: | - if [ ! -f "README.md" ]; then - echo "# Project" > README.md - echo "Creating new README.md file" - fi - - # Replace or add version badge - sed -i '/!\[Version\]/c\![Version](https://img.shields.io/badge/version-'"$VERSION"'-blue)' README.md - # If badge doesn't exist, add it at the top - if ! grep -q "!\[Version\]" README.md; then - sed -i '1i![Version](https://img.shields.io/badge/version-'"$VERSION"'-blue)\n' README.md - fi - - - name: Commit changes - run: | - git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" - git config --local user.name "github-actions[bot]" - git add README.md - git commit -m "[DOCS] Updated version badge to $VERSION" || exit 0 - git push origin HEAD:${{ github.ref }} \ No newline at end of file diff --git a/.github/workflows/run_tests.yaml b/.github/workflows/run_tests.yaml deleted file mode 100644 index aaaeed00..00000000 --- a/.github/workflows/run_tests.yaml +++ /dev/null @@ -1,40 +0,0 @@ -name: Run Tests -on: - pull_request: - branches: - - main # Run on PRs targeting main - -jobs: - test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Set up Python 3.13 - uses: actions/setup-python@v5 - with: - python-version: '3.13' - - - name: Run tests - id: run_tests - run: | - set -e # Exit immediately if a command exits with a non-zero status - ./ace --test - continue-on-error: false - - - name: Upload test results - if: always() # Run even if tests fail - uses: actions/upload-artifact@v4 - with: - name: pytest-results - path: | - .pytest_cache/ - tests/**/test-*.xml - tests/**/test-*.html - - # Force the workflow to fail if tests failed - - name: Fail workflow if tests failed - if: failure() - run: | - echo "Tests failed - failing workflow" - exit 1 diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 1a4f604b..00000000 --- a/.gitignore +++ /dev/null @@ -1,170 +0,0 @@ -# Local -.logs/ -.original/ -.storage/ -.user_deployment.yaml -.history - -# Mac -.DS_Store - -# Byte-compiled / optimized / DLL files -__pycache__/ -*.py[cod] -*$py.class - -# C extensions -*.so - -# Distribution / packaging -.Python -build/ -develop-eggs/ -dist/ -downloads/ -eggs/ -.eggs/ -lib/ -lib64/ -parts/ -sdist/ -var/ -wheels/ -share/python-wheels/ -*.egg-info/ -.installed.cfg -*.egg -MANIFEST - -# PyInstaller -# Usually these files are written by a python script from a template -# before PyInstaller builds the exe, so as to inject date/other infos into it. -*.manifest -*.spec - -# Installer logs -pip-log.txt -pip-delete-this-directory.txt - -# Unit test / coverage reports -htmlcov/ -.tox/ -.nox/ -.coverage -.coverage.* -.cache -nosetests.xml -coverage.xml -*.cover -*.py,cover -.hypothesis/ -.pytest_cache/ -cover/ - -# Translations -*.mo -*.pot - -# Django stuff: -*.log -local_settings.py -db.sqlite3 -db.sqlite3-journal - -# Flask stuff: -instance/ -.webassets-cache - -# Scrapy stuff: -.scrapy - -# Sphinx documentation -docs/_build/ - -# PyBuilder -.pybuilder/ -target/ - -# Jupyter Notebook -.ipynb_checkpoints - -# IPython -profile_default/ -ipython_config.py - -# pyenv -# For a library or package, you might want to ignore these files since the code is -# intended to run in multiple environments; otherwise, check them in: -# .python-version - -# pipenv -# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. -# However, in case of collaboration, if having platform-specific dependencies or dependencies -# having no cross-platform support, pipenv may install dependencies that don't work, or not -# install all needed dependencies. -#Pipfile.lock - -# poetry -# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. -# This is especially recommended for binary packages to ensure reproducibility, and is more -# commonly ignored for libraries. -# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control -#poetry.lock - -# pdm -# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. -#pdm.lock -# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it -# in version control. -# https://pdm.fming.dev/#use-with-ide -.pdm.toml - -# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm -__pypackages__/ - -# Celery stuff -celerybeat-schedule -celerybeat.pid - -# SageMath parsed files -*.sage.py - -# Environments -.env -.venv -env/ -venv/ -ENV/ -env.bak/ -venv.bak/ - -# Spyder project settings -.spyderproject -.spyproject - -# Rope project settings -.ropeproject - -# mkdocs documentation -/site - -# mypy -.mypy_cache/ -.dmypy.json -dmypy.json - -# Pyre type checker -.pyre/ - -# pytype static type analyzer -.pytype/ - -# Cython debug symbols -cython_debug/ - -# PyCharm -# JetBrains specific template is maintained in a separate JetBrains.gitignore that can -# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore -# and can be added to the global gitignore or merged into this file. For a more nuclear -# option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ diff --git a/LICENSE b/LICENSE deleted file mode 100644 index c8ce1a22..00000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2025 Jay Falls - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md index d467078f..0d3da9e9 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,34 @@ -![Version](https://img.shields.io/badge/version-0.0.0-blue) +# ACE Framework Documentation -

🧠 ACE Prototype 🧠

+This repository contains documentation about the Autonomous Cognitive Entity (ACE) Framework. +## Overview -# Dependencies +The ACE Framework is a conceptual cognitive architecture for building ethical autonomous agents. It was developed by David Shapiro et al. at Clemson University and presented in their paper "Conceptual Framework for Autonomous Cognitive Entities" (arXiv:2310.06775). -- Before running install - - [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) - - [JQ](https://jqlang.org/download/) - - [Podman](https://podman.io/docs/installation) - - [Ollama](https://ollama.com/download) +The framework is inspired by the OSI model and uses six hierarchical layers to conceptualize artificial cognitive architectures, ranging from moral reasoning to task execution. -# Usage +## Documentation -```shell -./ace -``` +For comprehensive documentation about the ACE Framework, please see: -## Arguments +**[design/source.md](design/source.md)** -- `-s` Stop the ACE -- `-r` Restart the ACE -- `--dev` Run the ACE in development mode -- `--test` Run the ACE tests +This document includes: +- Overview of the ACE Framework +- Detailed explanation of all six layers: + - Aspirational Layer (L1) + - Global Strategy (L2) + - Agent Model (L3) + - Executive Function (L4) + - Cognitive Control (L5) + - Task Prosecution (L6) +- Bidirectional communication buses (Northbound and Southbound) +- System Integrity overlay +- Key design principles +- Implementation considerations + +## References + +- **Paper**: [arXiv:2310.06775](https://arxiv.org/abs/2310.06775) - "Conceptual Framework for Autonomous Cognitive Entities" +- **GitHub**: [daveshap/ACE_Framework](https://github.com/daveshap/ACE_Framework) (archived, read-only) diff --git a/ace b/ace deleted file mode 100755 index d7896cfb..00000000 --- a/ace +++ /dev/null @@ -1,76 +0,0 @@ -#!/bin/bash - -# VARIABLES -ACE_LOGGER_VERBOSE_ENV="." - - -# SETUP -setup() { - echo "Setting up environment..." - git_hooks_folder=".github/hooks" - mv -r "$git_hooks_folder" ".git/hooks" -} - - -# STARTUP -run_tests() { - echo "Installing/Updating test dependencies..." - pip install --upgrade -r app/requirements - pip install --upgrade -r tests/requirements - - python -m pytest tests/unit/ -v - pytest_exit_code=$? - exit $pytest_exit_code -} - -run_ace() { - cd app || exit - - echo "Installing/Updating requirements..." - pip install --upgrade -r requirements - - ACE_LOGGER_FILE_NAME="startup" ACE_LOGGER_VERBOSE="$ACE_LOGGER_VERBOSE_ENV" ./startup.py "${@}" - deactivate - exit $? -} - -# MAIN -main() { - # Store original arguments - original_args=("$@") - - setup - - # Initialize variables - run_tests=false - - # Process arguments for environment variables - while [[ $# -gt 0 ]]; do - case "$1" in - --dev) - ACE_LOGGER_VERBOSE_ENV="" - ;; - --test) - run_tests=true - ;; - esac - shift - done - - if [ ! -d ".venv" ]; then - echo "Python virtual environment doesn't exist, creating one..." - python3.13 -m venv .venv - fi - source .venv/bin/activate - - if [ "$run_tests" = true ]; then - run_tests - fi - - # Use original arguments when running ace - run_ace "${original_args[@]}" -} - -trap 'exit $?' ERR - -main "$@" \ No newline at end of file diff --git a/app/component.py b/app/component.py deleted file mode 100755 index 56503dbc..00000000 --- a/app/component.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env python3.13 - -# DEPENDENCIES -## Built-in -import argparse -from typing import Callable -## Local -from constants import Components, DictKeys -from logger import logger -from components import start_actions, start_controller, start_layer, start_memory, start_model_provider, start_queue, start_telemetry, start_ui - - -# CONSTANTS -_COMPONENT_MAP: dict[str, Callable[[str], None]] = { - Components.CONTROLLER: start_controller, - Components.UI: start_ui, - Components.QUEUE: start_queue, - Components.TELEMETRY: start_telemetry, - Components.ACTIONS: start_actions, - Components.MEMORY: start_memory, - Components.MODEL_PROVIDER: start_model_provider, - Components.ASPIRATIONAL: start_layer, - Components.GLOBAL_STRATEGY: start_layer, - Components.AGENT_MODEL: start_layer, - Components.EXECUTIVE_FUNCTION: start_layer, - Components.COGNITIVE_CONTROL: start_layer, - Components.TASK_PROSECUTION: start_layer -} - -# ARGUMENTS -def _get_arguments() -> dict[str, bool]: - parser = argparse.ArgumentParser() - parser.add_argument("--dev", action="store_true", help="Enable dev mode") - parser.add_argument("--prod", action="store_true") - parser.add_argument(f"--{Components.CONTROLLER}", action="store_true") - parser.add_argument(f"--{Components.UI}", action="store_true") - parser.add_argument(f"--{Components.QUEUE}", action="store_true") - parser.add_argument(f"--{Components.TELEMETRY}", action="store_true") - parser.add_argument(f"--{Components.ACTIONS}", action="store_true") - parser.add_argument(f"--{Components.MEMORY}", action="store_true") - parser.add_argument(f"--{Components.MODEL_PROVIDER}", action="store_true") - parser.add_argument(f"--{Components.ASPIRATIONAL}", action="store_true") - parser.add_argument(f"--{Components.GLOBAL_STRATEGY}", action="store_true") - parser.add_argument(f"--{Components.AGENT_MODEL}", action="store_true") - parser.add_argument(f"--{Components.EXECUTIVE_FUNCTION}", action="store_true") - parser.add_argument(f"--{Components.COGNITIVE_CONTROL}", action="store_true") - parser.add_argument(f"--{Components.TASK_PROSECUTION}", action="store_true") - return vars(parser.parse_args()) - - -# STARTUP -def run_component() -> None: - """Startup the selected component""" - arguments: dict[str, bool] = _get_arguments() - - dev: bool = arguments.get(DictKeys.DEV, False) - prod: bool = arguments.get(DictKeys.PROD, False) - if not (dev or prod): - logger.critical("You must select a environment, either --dev or --prod!") - raise SystemExit - - if dev and prod: - dev = False - - selected_compenent: str | None = None - for argument, is_flagged in arguments.items(): - if argument == DictKeys.DEV or argument == DictKeys.PROD: - continue - if not is_flagged: - continue - if selected_compenent: - logger.critical("You can only start one component at a time!") - raise SystemExit - selected_compenent = argument - - if not selected_compenent: - logger.critical("You must select a component to start!") - raise SystemExit - - if selected_compenent not in _COMPONENT_MAP: - logger.critical(f"{selected_compenent} is not a valid component!") - raise SystemExit - - component_title: str = selected_compenent.replace("_", " ").title() - _COMPONENT_MAP[selected_compenent](component_type=component_title, dev=dev) - from time import sleep - while True: - logger.info(f"{component_title} is running...") - sleep(60) - - -if __name__ == "__main__": - run_component() diff --git a/app/components/__init__.py b/app/components/__init__.py deleted file mode 100644 index 645abace..00000000 --- a/app/components/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -from .actions.start import start_actions -from .controller.start import start_controller -from .layer.start import start_layer -from .memory.start import start_memory -from .model_provider.start import start_model_provider -from .queue.start import start_queue -from .telemetry.start import start_telemetry -from .ui.start import start_ui \ No newline at end of file diff --git a/app/components/actions/__init__.py b/app/components/actions/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/actions/start.py b/app/components/actions/start.py deleted file mode 100644 index baf37ab4..00000000 --- a/app/components/actions/start.py +++ /dev/null @@ -1,6 +0,0 @@ -# DEPENDENCIES -## Local -from logger import logger - -def start_actions(component_type: str, dev: bool) -> None: - logger.startup(f"Starting {component_type}...") diff --git a/app/components/controller/__init__.py b/app/components/controller/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/controller/api/__init__.py b/app/components/controller/api/__init__.py deleted file mode 100644 index 0a4c11ab..00000000 --- a/app/components/controller/api/__init__.py +++ /dev/null @@ -1,21 +0,0 @@ -# DEPENDENCIES -## Third-Party -from fastapi import FastAPI -from fastapi.middleware.cors import CORSMiddleware -## Local -from .routes import root, model_provider - - -controller_api = FastAPI() - -controller_api.include_router(root) -controller_api.include_router(model_provider) - -controller_api.add_middleware( - CORSMiddleware, - allow_origins=["http://localhost:4200", "http://127.0.0.1:4200"], - allow_credentials=True, - allow_methods=["*"], - allow_headers=["*"], - expose_headers=["*"] -) diff --git a/app/components/controller/api/routes/__init__.py b/app/components/controller/api/routes/__init__.py deleted file mode 100644 index 930bd094..00000000 --- a/app/components/controller/api/routes/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .model_provider import model_provider -from .root import root diff --git a/app/components/controller/api/routes/model_provider.py b/app/components/controller/api/routes/model_provider.py deleted file mode 100644 index 9d89b08b..00000000 --- a/app/components/controller/api/routes/model_provider.py +++ /dev/null @@ -1,43 +0,0 @@ -# DEPENDENCIES -## Third-Party -from fastapi import APIRouter, HTTPException -from http import HTTPStatus -from pydantic import ValidationError -## Local -from constants import APIRoutes, Defaults, Names -from logger import logger -from models.api_schemas.controller import GetLLMModelsResponse -from ..services import model_provider_service - - -model_provider = APIRouter() - -@model_provider.get( - f"{APIRoutes.MODEL_PROVIDER}llm/model-types", - response_model=tuple[str, ...], - description=f"Get the {Names.ACE} available LLM model types" -) -async def get_llm_model_types_route() -> tuple[str, ...]: - try: - return model_provider_service.get_llm_model_types() - except ValidationError as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="LLM model types data error!") - except Exception as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=Defaults.INTERNAL_SERVER_ERROR_MESSAGE) - -@model_provider.get( - f"{APIRoutes.MODEL_PROVIDER}llm/models", - response_model=list[GetLLMModelsResponse], - description=f"Get the {Names.ACE} available LLM models" -) -async def get_llm_models_route() -> list[GetLLMModelsResponse]: - try: - return model_provider_service.get_llm_models() - except ValidationError as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="LLM model types data error!") - except Exception as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=Defaults.INTERNAL_SERVER_ERROR_MESSAGE) diff --git a/app/components/controller/api/routes/root.py b/app/components/controller/api/routes/root.py deleted file mode 100644 index c1e3e330..00000000 --- a/app/components/controller/api/routes/root.py +++ /dev/null @@ -1,79 +0,0 @@ -# DEPENDENCIES -## Third-Party -from fastapi import APIRouter, HTTPException -from http import HTTPStatus -from pydantic import ValidationError -## Local -from constants import APIRoutes, Defaults, Names -from logger import logger -from models.api_schemas.controller import ( - GetVersionDetailsResponse, - GetSettingsResponse, EditSettingsRequest -) -from models.api_schemas.defaults import DefaultAPIResponse -from ..services import root_service - - -root = APIRouter() - -@root.get( - f"{APIRoutes.ROOT}version", - response_model=GetVersionDetailsResponse, - description=f"Get the {Names.ACE}'s version data" -) -async def get_version_route() -> dict: - try: - return root_service.get_version() - except ValidationError as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Version data error!") - except Exception as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=Defaults.INTERNAL_SERVER_ERROR_MESSAGE) - -@root.get( - f"{APIRoutes.ROOT}settings", - response_model=GetSettingsResponse, - description=f"Get the {Names.ACE} controller settings data" -) -async def get_settings_route() -> dict: - try: - return root_service.get_settings_data() - except ValidationError as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Settings data error!") - except Exception as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=Defaults.INTERNAL_SERVER_ERROR_MESSAGE) - -@root.post( - f"{APIRoutes.ROOT}settings", - response_model=DefaultAPIResponse, - description=f"Edit the {Names.ACE} controller settings data" -) -async def set_settings_route(updated_settings: EditSettingsRequest) -> dict: - try: - root_service.edit_settings_data(updated_settings=updated_settings.model_dump()) - return DefaultAPIResponse(message="Settings data updated successfully!") - except ValidationError as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Settings data error!") - except Exception as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=Defaults.INTERNAL_SERVER_ERROR_MESSAGE) - -@root.delete( - f"{APIRoutes.ROOT}settings", - response_model=DefaultAPIResponse, - description=f"Delete the {Names.ACE} controller settings data" -) -async def delete_settings_route() -> dict: - try: - root_service.delete_settings_data() - return DefaultAPIResponse(message="Settings data deleted successfully!") - except ValidationError as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail="Settings data error!") - except Exception as error: - logger.error(error) - raise HTTPException(status_code=HTTPStatus.INTERNAL_SERVER_ERROR, detail=Defaults.INTERNAL_SERVER_ERROR_MESSAGE) \ No newline at end of file diff --git a/app/components/controller/api/services/__init__.py b/app/components/controller/api/services/__init__.py deleted file mode 100644 index 5f4be591..00000000 --- a/app/components/controller/api/services/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from . import ( - model_provider as model_provider_service, - root as root_service -) \ No newline at end of file diff --git a/app/components/controller/api/services/model_provider.py b/app/components/controller/api/services/model_provider.py deleted file mode 100644 index 124a0395..00000000 --- a/app/components/controller/api/services/model_provider.py +++ /dev/null @@ -1,20 +0,0 @@ -# DEPENDENCIES -## Built-In -import json -## Local -from constants import ( - Files, - ModelTypes, ThreeDModelTypes, AudioModelTypes, ImageModelTypes, LLMModelTypes, MultiModalModelTypes, RAGModelTypes, RoboticsModelTypes, VideoModelTypes -) -from models.data.initial import INTITAL_LLM_MODEL_PROVIDERS - - -def get_llm_model_types() -> tuple[str, ...]: - return LLMModelTypes.get_tuple() - -def get_llm_models() -> list[dict]: - llm_model_providers: list[dict] = [initial_llm_model_provider.model_dump() for initial_llm_model_provider in INTITAL_LLM_MODEL_PROVIDERS] - with open(Files.CONTROLLER_LLM_MODELS, "r", encoding="utf-8") as llm_models_file: - llm_models: dict = json.loads(llm_models_file.read()) - llm_model_providers.extend(llm_models) - return llm_model_providers diff --git a/app/components/controller/api/services/root.py b/app/components/controller/api/services/root.py deleted file mode 100644 index 079be34f..00000000 --- a/app/components/controller/api/services/root.py +++ /dev/null @@ -1,36 +0,0 @@ -# DEPENDENCIES -## Built-In -import json -## Local -from constants import Files -from models.config.controller import ControllerSettingsSchema - - -# HELPERS -def _get_settings() -> dict: - settings: dict = {} - with open(Files.CONTROLLER_SETTINGS, "r", encoding="utf-8") as settings_file: - settings = json.loads(settings_file.read()) - settings = ControllerSettingsSchema(**settings).model_dump() - with open(Files.CONTROLLER_SETTINGS, "w", encoding="utf-8") as settings_file: - settings_file.write(json.dumps(settings)) - return settings - - -# ROOT -def get_version() -> dict: - with open(Files.VERSION, "r", encoding="utf-8") as settings_file: - return json.loads(settings_file.read()) - -def get_settings_data() -> dict: - return _get_settings() - -def edit_settings_data(updated_settings: dict): - settings: dict = _get_settings() - settings.update(updated_settings) - with open(Files.CONTROLLER_SETTINGS, "w", encoding="utf-8") as settings_file: - settings_file.write(json.dumps(settings)) - -def delete_settings_data(): - with open(Files.CONTROLLER_SETTINGS, "w", encoding="utf-8") as settings_file: - settings_file.write(json.dumps({})) diff --git a/app/components/controller/start.py b/app/components/controller/start.py deleted file mode 100644 index 55b36c1b..00000000 --- a/app/components/controller/start.py +++ /dev/null @@ -1,11 +0,0 @@ -# DEPENDENCIES -## Third-Party -import uvicorn -## Local -from constants import NetworkPorts -from logger import logger -from .api import controller_api - -def start_controller(component_type: str, dev: bool) -> None: - logger.startup(f"Starting {component_type}...") - uvicorn.run(controller_api, host="0.0.0.0", port=int(NetworkPorts.CONTROLLER)) diff --git a/app/components/layer/__init__.py b/app/components/layer/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/layer/start.py b/app/components/layer/start.py deleted file mode 100644 index 031bd90d..00000000 --- a/app/components/layer/start.py +++ /dev/null @@ -1,6 +0,0 @@ -# DEPENDENCIES -## Local -from logger import logger - -def start_layer(component_type: str, dev: bool) -> None: - logger.startup(f"Starting {component_type}...") diff --git a/app/components/memory/__init__.py b/app/components/memory/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/memory/start.py b/app/components/memory/start.py deleted file mode 100644 index 0c553c91..00000000 --- a/app/components/memory/start.py +++ /dev/null @@ -1,6 +0,0 @@ -# DEPENDENCIES -## Local -from logger import logger - -def start_memory(component_type: str, dev: bool) -> None: - logger.startup(f"Starting {component_type}...") diff --git a/app/components/model_provider/__init__.py b/app/components/model_provider/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/model_provider/start.py b/app/components/model_provider/start.py deleted file mode 100644 index 5fb03644..00000000 --- a/app/components/model_provider/start.py +++ /dev/null @@ -1,6 +0,0 @@ -# DEPENDENCIES -## Local -from logger import logger - -def start_model_provider(component_type: str, dev: bool) -> None: - logger.startup(f"Starting {component_type}...") diff --git a/app/components/queue/__init__.py b/app/components/queue/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/queue/start.py b/app/components/queue/start.py deleted file mode 100644 index 4d32faab..00000000 --- a/app/components/queue/start.py +++ /dev/null @@ -1,6 +0,0 @@ -# DEPENDENCIES -## Local -from logger import logger - -def start_queue(component_type: str, dev: bool) -> None: - logger.startup(f"Starting {component_type}...") diff --git a/app/components/telemetry/__init__.py b/app/components/telemetry/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/telemetry/start.py b/app/components/telemetry/start.py deleted file mode 100644 index e25521d4..00000000 --- a/app/components/telemetry/start.py +++ /dev/null @@ -1,6 +0,0 @@ -# DEPENDENCIES -## Local -from logger import logger - -def start_telemetry(component_type: str, dev: bool) -> None: - logger.startup(f"Starting {component_type}...") diff --git a/app/components/ui/.editorconfig b/app/components/ui/.editorconfig deleted file mode 100644 index f166060d..00000000 --- a/app/components/ui/.editorconfig +++ /dev/null @@ -1,17 +0,0 @@ -# Editor configuration, see https://editorconfig.org -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -insert_final_newline = true -trim_trailing_whitespace = true - -[*.ts] -quote_type = single -ij_typescript_use_double_quotes = false - -[*.md] -max_line_length = off -trim_trailing_whitespace = false diff --git a/app/components/ui/.gitignore b/app/components/ui/.gitignore deleted file mode 100644 index cc7b1413..00000000 --- a/app/components/ui/.gitignore +++ /dev/null @@ -1,42 +0,0 @@ -# See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files. - -# Compiled output -/dist -/tmp -/out-tsc -/bazel-out - -# Node -/node_modules -npm-debug.log -yarn-error.log - -# IDEs and editors -.idea/ -.project -.classpath -.c9/ -*.launch -.settings/ -*.sublime-workspace - -# Visual Studio Code -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -.history/* - -# Miscellaneous -/.angular/cache -.sass-cache/ -/connect.lock -/coverage -/libpeerconnection.log -testem.log -/typings - -# System files -.DS_Store -Thumbs.db diff --git a/app/components/ui/__init__.py b/app/components/ui/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/ui/angular.json b/app/components/ui/angular.json deleted file mode 100644 index 3a6fb06a..00000000 --- a/app/components/ui/angular.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "$schema": "./node_modules/@angular/cli/lib/config/schema.json", - "version": 1, - "newProjectRoot": "projects", - "projects": { - "ui": { - "projectType": "application", - "schematics": { - "@schematics/angular:component": { - "style": "scss" - } - }, - "root": "", - "sourceRoot": "src", - "prefix": "app", - "architect": { - "build": { - "builder": "@angular-devkit/build-angular:application", - "options": { - "outputPath": "dist/ui", - "index": "src/index.html", - "browser": "src/main.ts", - "polyfills": [ - "zone.js" - ], - "tsConfig": "tsconfig.app.json", - "inlineStyleLanguage": "scss", - "assets": [ - { - "glob": "**/*", - "input": "public" - } - ], - "styles": [ - "@angular/material/prebuilt-themes/azure-blue.css", - "src/theme.scss", - "src/styles.scss" - ], - "scripts": [] - }, - "configurations": { - "production": { - "budgets": [ - { - "type": "initial", - "maximumWarning": "500kB", - "maximumError": "1MB" - }, - { - "type": "anyComponentStyle", - "maximumWarning": "4kB", - "maximumError": "8kB" - } - ], - "outputHashing": "all" - }, - "development": { - "optimization": false, - "extractLicenses": false, - "sourceMap": true - } - }, - "defaultConfiguration": "production" - }, - "serve": { - "builder": "@angular-devkit/build-angular:dev-server", - "configurations": { - "production": { - "buildTarget": "ui:build:production" - }, - "development": { - "buildTarget": "ui:build:development" - } - }, - "defaultConfiguration": "development" - }, - "extract-i18n": { - "builder": "@angular-devkit/build-angular:extract-i18n" - }, - "test": { - "builder": "@angular-devkit/build-angular:karma", - "options": { - "polyfills": [ - "zone.js", - "zone.js/testing" - ], - "tsConfig": "tsconfig.spec.json", - "inlineStyleLanguage": "scss", - "assets": [ - { - "glob": "**/*", - "input": "public" - } - ], - "styles": [ - "@angular/material/prebuilt-themes/azure-blue.css", - "src/styles.scss" - ], - "scripts": [] - } - } - } - } - }, - "cli": { - "analytics": false - } -} diff --git a/app/components/ui/package-lock.json b/app/components/ui/package-lock.json deleted file mode 100644 index 54fac815..00000000 --- a/app/components/ui/package-lock.json +++ /dev/null @@ -1,12561 +0,0 @@ -{ - "name": "ACE", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "ACE", - "version": "0.0.0", - "dependencies": { - "@angular/animations": "^19.1.0", - "@angular/cdk": "^19.1.2", - "@angular/common": "^19.1.0", - "@angular/compiler": "^19.1.0", - "@angular/core": "^19.1.0", - "@angular/forms": "^19.1.0", - "@angular/material": "^19.1.2", - "@angular/platform-browser": "^19.1.0", - "@angular/platform-browser-dynamic": "^19.1.0", - "@angular/router": "^19.1.0", - "@ngrx/component": "^19.0.1", - "@ngrx/data": "^19.0.1", - "@ngrx/effects": "^19.0.1", - "@ngrx/entity": "^19.0.1", - "@ngrx/store": "^19.0.1", - "@ngrx/store-devtools": "^19.0.1", - "rxjs": "~7.8.0", - "tslib": "^2.3.0", - "zone.js": "~0.15.0" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^19.1.5", - "@angular/cli": "^19.1.5", - "@angular/compiler-cli": "^19.1.0", - "@types/jasmine": "~5.1.0", - "jasmine-core": "~5.5.0", - "karma": "~6.4.0", - "karma-chrome-launcher": "~3.2.0", - "karma-coverage": "~2.2.0", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.1.0", - "typescript": "~5.7.2" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.3.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@angular-devkit/architect": { - "version": "0.1901.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "19.1.5", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular-devkit/build-angular": { - "version": "19.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1901.5", - "@angular-devkit/build-webpack": "0.1901.5", - "@angular-devkit/core": "19.1.5", - "@angular/build": "19.1.5", - "@babel/core": "7.26.0", - "@babel/generator": "7.26.3", - "@babel/helper-annotate-as-pure": "7.25.9", - "@babel/helper-split-export-declaration": "7.24.7", - "@babel/plugin-transform-async-generator-functions": "7.25.9", - "@babel/plugin-transform-async-to-generator": "7.25.9", - "@babel/plugin-transform-runtime": "7.25.9", - "@babel/preset-env": "7.26.0", - "@babel/runtime": "7.26.0", - "@discoveryjs/json-ext": "0.6.3", - "@ngtools/webpack": "19.1.5", - "@vitejs/plugin-basic-ssl": "1.2.0", - "ansi-colors": "4.1.3", - "autoprefixer": "10.4.20", - "babel-loader": "9.2.1", - "browserslist": "^4.21.5", - "copy-webpack-plugin": "12.0.2", - "css-loader": "7.1.2", - "esbuild-wasm": "0.24.2", - "fast-glob": "3.3.3", - "http-proxy-middleware": "3.0.3", - "istanbul-lib-instrument": "6.0.3", - "jsonc-parser": "3.3.1", - "karma-source-map-support": "1.4.0", - "less": "4.2.1", - "less-loader": "12.2.0", - "license-webpack-plugin": "4.0.2", - "loader-utils": "3.3.1", - "mini-css-extract-plugin": "2.9.2", - "open": "10.1.0", - "ora": "5.4.1", - "picomatch": "4.0.2", - "piscina": "4.8.0", - "postcss": "8.4.49", - "postcss-loader": "8.1.1", - "resolve-url-loader": "5.0.0", - "rxjs": "7.8.1", - "sass": "1.83.1", - "sass-loader": "16.0.4", - "semver": "7.6.3", - "source-map-loader": "5.0.0", - "source-map-support": "0.5.21", - "terser": "5.37.0", - "tree-kill": "1.2.2", - "tslib": "2.8.1", - "webpack": "5.97.1", - "webpack-dev-middleware": "7.4.2", - "webpack-dev-server": "5.2.0", - "webpack-merge": "6.0.1", - "webpack-subresource-integrity": "5.1.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "esbuild": "0.24.2" - }, - "peerDependencies": { - "@angular/compiler-cli": "^19.0.0", - "@angular/localize": "^19.0.0", - "@angular/platform-server": "^19.0.0", - "@angular/service-worker": "^19.0.0", - "@angular/ssr": "^19.1.5", - "@web/test-runner": "^0.19.0", - "browser-sync": "^3.0.2", - "jest": "^29.5.0", - "jest-environment-jsdom": "^29.5.0", - "karma": "^6.3.0", - "ng-packagr": "^19.0.0", - "protractor": "^7.0.0", - "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", - "typescript": ">=5.5 <5.8" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "@angular/ssr": { - "optional": true - }, - "@web/test-runner": { - "optional": true - }, - "browser-sync": { - "optional": true - }, - "jest": { - "optional": true - }, - "jest-environment-jsdom": { - "optional": true - }, - "karma": { - "optional": true - }, - "ng-packagr": { - "optional": true - }, - "protractor": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/build-webpack": { - "version": "0.1901.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/architect": "0.1901.5", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "webpack": "^5.30.0", - "webpack-dev-server": "^5.0.2" - } - }, - "node_modules/@angular-devkit/core": { - "version": "19.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "8.17.1", - "ajv-formats": "3.0.1", - "jsonc-parser": "3.3.1", - "picomatch": "4.0.2", - "rxjs": "7.8.1", - "source-map": "0.7.4" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "chokidar": "^4.0.0" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } - } - }, - "node_modules/@angular-devkit/schematics": { - "version": "19.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/core": "19.1.5", - "jsonc-parser": "3.3.1", - "magic-string": "0.30.17", - "ora": "5.4.1", - "rxjs": "7.8.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/animations": { - "version": "19.1.4", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/core": "19.1.4" - } - }, - "node_modules/@angular/build": { - "version": "19.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.1901.5", - "@angular-devkit/core": "19.1.5", - "@babel/core": "7.26.0", - "@babel/helper-annotate-as-pure": "7.25.9", - "@babel/helper-split-export-declaration": "7.24.7", - "@babel/plugin-syntax-import-attributes": "7.26.0", - "@inquirer/confirm": "5.1.1", - "@vitejs/plugin-basic-ssl": "1.2.0", - "beasties": "0.2.0", - "browserslist": "^4.23.0", - "esbuild": "0.24.2", - "fast-glob": "3.3.3", - "https-proxy-agent": "7.0.6", - "istanbul-lib-instrument": "6.0.3", - "listr2": "8.2.5", - "magic-string": "0.30.17", - "mrmime": "2.0.0", - "parse5-html-rewriting-stream": "7.0.0", - "picomatch": "4.0.2", - "piscina": "4.8.0", - "rollup": "4.30.1", - "sass": "1.83.1", - "semver": "7.6.3", - "vite": "6.0.11", - "watchpack": "2.4.2" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "optionalDependencies": { - "lmdb": "3.2.2" - }, - "peerDependencies": { - "@angular/compiler": "^19.0.0", - "@angular/compiler-cli": "^19.0.0", - "@angular/localize": "^19.0.0", - "@angular/platform-server": "^19.0.0", - "@angular/service-worker": "^19.0.0", - "@angular/ssr": "^19.1.5", - "less": "^4.2.0", - "ng-packagr": "^19.0.0", - "postcss": "^8.4.0", - "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", - "typescript": ">=5.5 <5.8" - }, - "peerDependenciesMeta": { - "@angular/localize": { - "optional": true - }, - "@angular/platform-server": { - "optional": true - }, - "@angular/service-worker": { - "optional": true - }, - "@angular/ssr": { - "optional": true - }, - "less": { - "optional": true - }, - "ng-packagr": { - "optional": true - }, - "postcss": { - "optional": true - }, - "tailwindcss": { - "optional": true - } - } - }, - "node_modules/@angular/cdk": { - "version": "19.1.2", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-19.1.2.tgz", - "integrity": "sha512-rzrZ4BkGNIZWSdw0OsuSB/H9UB5ppPvmBq+uRHdYmZoYjo5wu1pmePxAIZDIBR8xdaNy9rZ4ecS6IebDkgYPrg==", - "dependencies": { - "tslib": "^2.3.0" - }, - "optionalDependencies": { - "parse5": "^7.1.2" - }, - "peerDependencies": { - "@angular/common": "^19.0.0 || ^20.0.0", - "@angular/core": "^19.0.0 || ^20.0.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/cli": { - "version": "19.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@angular-devkit/architect": "0.1901.5", - "@angular-devkit/core": "19.1.5", - "@angular-devkit/schematics": "19.1.5", - "@inquirer/prompts": "7.2.1", - "@listr2/prompt-adapter-inquirer": "2.0.18", - "@schematics/angular": "19.1.5", - "@yarnpkg/lockfile": "1.1.0", - "ini": "5.0.0", - "jsonc-parser": "3.3.1", - "listr2": "8.2.5", - "npm-package-arg": "12.0.1", - "npm-pick-manifest": "10.0.0", - "pacote": "20.0.0", - "resolve": "1.22.10", - "semver": "7.6.3", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" - }, - "bin": { - "ng": "bin/ng.js" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/cli/node_modules/@schematics/angular": { - "version": "19.1.5", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-19.1.5.tgz", - "integrity": "sha512-Yks2QD87z2qJhVLi6O0tQDBG4pyX5n5c8BYEyZ+yiThjzIXBRkHjWS1jIFvd/y1+yU/NQFHYG/sy8sVOxfQ9IA==", - "dev": true, - "dependencies": { - "@angular-devkit/core": "19.1.5", - "@angular-devkit/schematics": "19.1.5", - "jsonc-parser": "3.3.1" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - } - }, - "node_modules/@angular/common": { - "version": "19.1.4", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-19.1.4.tgz", - "integrity": "sha512-E4MCl13VIotOxmzKQ/UGciPeaRXQgH7ymesEjYVGcT8jmC+qz5dEcoN7L5Jvq9aUsmLBt9MFp/B5QqKCIXMqYA==", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/core": "19.1.4", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/compiler": { - "version": "19.1.4", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/core": "19.1.4" - }, - "peerDependenciesMeta": { - "@angular/core": { - "optional": true - } - } - }, - "node_modules/@angular/compiler-cli": { - "version": "19.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "7.26.0", - "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^4.0.0", - "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.2.0", - "semver": "^7.0.0", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - }, - "bin": { - "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js", - "ngcc": "bundles/ngcc/index.js" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/compiler": "19.1.4", - "typescript": ">=5.5 <5.8" - } - }, - "node_modules/@angular/core": { - "version": "19.1.4", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.15.0" - } - }, - "node_modules/@angular/forms": { - "version": "19.1.4", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/common": "19.1.4", - "@angular/core": "19.1.4", - "@angular/platform-browser": "19.1.4", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/material": { - "version": "19.1.2", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-19.1.2.tgz", - "integrity": "sha512-MdczdTmvsXLtEFV9nTgFs9mPM1FSAz4L1kByJCdIgHtOu62e9t2XcSUqOPJTlDrA5wWafZvPWh2woJfJr4iwjw==", - "dependencies": { - "tslib": "^2.3.0" - }, - "peerDependencies": { - "@angular/animations": "^19.0.0 || ^20.0.0", - "@angular/cdk": "19.1.2", - "@angular/common": "^19.0.0 || ^20.0.0", - "@angular/core": "^19.0.0 || ^20.0.0", - "@angular/forms": "^19.0.0 || ^20.0.0", - "@angular/platform-browser": "^19.0.0 || ^20.0.0", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@angular/platform-browser": { - "version": "19.1.4", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/animations": "19.1.4", - "@angular/common": "19.1.4", - "@angular/core": "19.1.4" - }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - } - } - }, - "node_modules/@angular/platform-browser-dynamic": { - "version": "19.1.4", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/common": "19.1.4", - "@angular/compiler": "19.1.4", - "@angular/core": "19.1.4", - "@angular/platform-browser": "19.1.4" - } - }, - "node_modules/@angular/router": { - "version": "19.1.4", - "license": "MIT", - "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0" - }, - "peerDependencies": { - "@angular/common": "19.1.4", - "@angular/core": "19.1.4", - "@angular/platform-browser": "19.1.4", - "rxjs": "^6.5.3 || ^7.4.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.26.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.26.0", - "@babel/generator": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helpers": "^7.26.0", - "@babel/parser": "^7.26.0", - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.26.0", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.26.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.26.3", - "@babel/types": "^7.26.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.26.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.26.5", - "@babel/helper-validator-option": "^7.25.9", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.26.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "regexpu-core": "^6.2.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.26.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-wrap-function": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.26.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.25.9", - "@babel/helper-optimise-call-expression": "^7.25.9", - "@babel/traverse": "^7.26.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.24.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/traverse": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.26.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.26.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.26.7" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-remap-async-to-generator": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.26.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9", - "@babel/traverse": "^7.25.9", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/template": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.26.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.26.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.26.0", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9", - "@babel/traverse": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.26.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-replace-supers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.25.9", - "@babel/helper-create-class-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.26.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.26.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.26.0", - "@babel/helper-compilation-targets": "^7.25.9", - "@babel/helper-plugin-utils": "^7.25.9", - "@babel/helper-validator-option": "^7.25.9", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.9", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.9", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.9", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.9", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.9", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.26.0", - "@babel/plugin-syntax-import-attributes": "^7.26.0", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.25.9", - "@babel/plugin-transform-async-generator-functions": "^7.25.9", - "@babel/plugin-transform-async-to-generator": "^7.25.9", - "@babel/plugin-transform-block-scoped-functions": "^7.25.9", - "@babel/plugin-transform-block-scoping": "^7.25.9", - "@babel/plugin-transform-class-properties": "^7.25.9", - "@babel/plugin-transform-class-static-block": "^7.26.0", - "@babel/plugin-transform-classes": "^7.25.9", - "@babel/plugin-transform-computed-properties": "^7.25.9", - "@babel/plugin-transform-destructuring": "^7.25.9", - "@babel/plugin-transform-dotall-regex": "^7.25.9", - "@babel/plugin-transform-duplicate-keys": "^7.25.9", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-dynamic-import": "^7.25.9", - "@babel/plugin-transform-exponentiation-operator": "^7.25.9", - "@babel/plugin-transform-export-namespace-from": "^7.25.9", - "@babel/plugin-transform-for-of": "^7.25.9", - "@babel/plugin-transform-function-name": "^7.25.9", - "@babel/plugin-transform-json-strings": "^7.25.9", - "@babel/plugin-transform-literals": "^7.25.9", - "@babel/plugin-transform-logical-assignment-operators": "^7.25.9", - "@babel/plugin-transform-member-expression-literals": "^7.25.9", - "@babel/plugin-transform-modules-amd": "^7.25.9", - "@babel/plugin-transform-modules-commonjs": "^7.25.9", - "@babel/plugin-transform-modules-systemjs": "^7.25.9", - "@babel/plugin-transform-modules-umd": "^7.25.9", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.9", - "@babel/plugin-transform-new-target": "^7.25.9", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.9", - "@babel/plugin-transform-numeric-separator": "^7.25.9", - "@babel/plugin-transform-object-rest-spread": "^7.25.9", - "@babel/plugin-transform-object-super": "^7.25.9", - "@babel/plugin-transform-optional-catch-binding": "^7.25.9", - "@babel/plugin-transform-optional-chaining": "^7.25.9", - "@babel/plugin-transform-parameters": "^7.25.9", - "@babel/plugin-transform-private-methods": "^7.25.9", - "@babel/plugin-transform-private-property-in-object": "^7.25.9", - "@babel/plugin-transform-property-literals": "^7.25.9", - "@babel/plugin-transform-regenerator": "^7.25.9", - "@babel/plugin-transform-regexp-modifiers": "^7.26.0", - "@babel/plugin-transform-reserved-words": "^7.25.9", - "@babel/plugin-transform-shorthand-properties": "^7.25.9", - "@babel/plugin-transform-spread": "^7.25.9", - "@babel/plugin-transform-sticky-regex": "^7.25.9", - "@babel/plugin-transform-template-literals": "^7.25.9", - "@babel/plugin-transform-typeof-symbol": "^7.25.9", - "@babel/plugin-transform-unicode-escapes": "^7.25.9", - "@babel/plugin-transform-unicode-property-regex": "^7.25.9", - "@babel/plugin-transform-unicode-regex": "^7.25.9", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.9", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.10", - "babel-plugin-polyfill-corejs3": "^0.10.6", - "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.38.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.26.0", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.25.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/parser": "^7.25.9", - "@babel/types": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.26.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.26.2", - "@babel/generator": "^7.26.5", - "@babel/parser": "^7.26.7", - "@babel/template": "^7.25.9", - "@babel/types": "^7.26.7", - "debug": "^4.3.1", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.26.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.26.5", - "@babel/types": "^7.26.5", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.26.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.17.0" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.24.2", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/checkbox": { - "version": "4.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.5", - "@inquirer/figures": "^1.0.10", - "@inquirer/type": "^3.0.3", - "ansi-escapes": "^4.3.2", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/confirm": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.2", - "@inquirer/type": "^3.0.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/core": { - "version": "10.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/figures": "^1.0.10", - "@inquirer/type": "^3.0.3", - "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" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/editor": { - "version": "4.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.5", - "@inquirer/type": "^3.0.3", - "external-editor": "^3.1.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/expand": { - "version": "4.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.5", - "@inquirer/type": "^3.0.3", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/figures": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/input": { - "version": "4.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.5", - "@inquirer/type": "^3.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/number": { - "version": "3.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.5", - "@inquirer/type": "^3.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/password": { - "version": "4.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.5", - "@inquirer/type": "^3.0.3", - "ansi-escapes": "^4.3.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/prompts": { - "version": "7.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/checkbox": "^4.0.4", - "@inquirer/confirm": "^5.1.1", - "@inquirer/editor": "^4.2.1", - "@inquirer/expand": "^4.0.4", - "@inquirer/input": "^4.1.1", - "@inquirer/number": "^3.0.4", - "@inquirer/password": "^4.0.4", - "@inquirer/rawlist": "^4.0.4", - "@inquirer/search": "^3.0.4", - "@inquirer/select": "^4.0.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/rawlist": { - "version": "4.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.5", - "@inquirer/type": "^3.0.3", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/search": { - "version": "3.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.5", - "@inquirer/figures": "^1.0.10", - "@inquirer/type": "^3.0.3", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/select": { - "version": "4.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.1.5", - "@inquirer/figures": "^1.0.10", - "@inquirer/type": "^3.0.3", - "ansi-escapes": "^4.3.2", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@inquirer/type": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/fs-minipass": { - "version": "4.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.4" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@jsonjoy.com/base64": { - "version": "1.1.2", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/json-pack": { - "version": "1.1.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/base64": "^1.1.1", - "@jsonjoy.com/util": "^1.1.2", - "hyperdyperid": "^1.2.0", - "thingies": "^1.20.0" - }, - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@jsonjoy.com/util": { - "version": "1.5.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@listr2/prompt-adapter-inquirer": { - "version": "2.0.18", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/type": "^1.5.5" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@inquirer/prompts": ">= 3 < 8" - } - }, - "node_modules/@listr2/prompt-adapter-inquirer/node_modules/@inquirer/type": { - "version": "1.5.5", - "dev": true, - "license": "MIT", - "dependencies": { - "mute-stream": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@listr2/prompt-adapter-inquirer/node_modules/mute-stream": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@lmdb/lmdb-linux-arm64": { - "version": "3.2.2", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { - "version": "3.0.3", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@napi-rs/nice": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "optionalDependencies": { - "@napi-rs/nice-android-arm-eabi": "1.0.1", - "@napi-rs/nice-android-arm64": "1.0.1", - "@napi-rs/nice-darwin-arm64": "1.0.1", - "@napi-rs/nice-darwin-x64": "1.0.1", - "@napi-rs/nice-freebsd-x64": "1.0.1", - "@napi-rs/nice-linux-arm-gnueabihf": "1.0.1", - "@napi-rs/nice-linux-arm64-gnu": "1.0.1", - "@napi-rs/nice-linux-arm64-musl": "1.0.1", - "@napi-rs/nice-linux-ppc64-gnu": "1.0.1", - "@napi-rs/nice-linux-riscv64-gnu": "1.0.1", - "@napi-rs/nice-linux-s390x-gnu": "1.0.1", - "@napi-rs/nice-linux-x64-gnu": "1.0.1", - "@napi-rs/nice-linux-x64-musl": "1.0.1", - "@napi-rs/nice-win32-arm64-msvc": "1.0.1", - "@napi-rs/nice-win32-ia32-msvc": "1.0.1", - "@napi-rs/nice-win32-x64-msvc": "1.0.1" - } - }, - "node_modules/@napi-rs/nice-linux-arm64-gnu": { - "version": "1.0.1", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice-linux-arm64-musl": { - "version": "1.0.1", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-android-arm-eabi": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.1.tgz", - "integrity": "sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-android-arm64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.1.tgz", - "integrity": "sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-darwin-arm64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.1.tgz", - "integrity": "sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-darwin-x64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.1.tgz", - "integrity": "sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-freebsd-x64": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.1.tgz", - "integrity": "sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-linux-arm-gnueabihf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.1.tgz", - "integrity": "sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-linux-ppc64-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.1.tgz", - "integrity": "sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-linux-riscv64-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.1.tgz", - "integrity": "sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-linux-s390x-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.1.tgz", - "integrity": "sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-linux-x64-gnu": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.1.tgz", - "integrity": "sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-linux-x64-musl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.1.tgz", - "integrity": "sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-win32-arm64-msvc": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.1.tgz", - "integrity": "sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-win32-ia32-msvc": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.1.tgz", - "integrity": "sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@napi-rs/nice/node_modules/@napi-rs/nice-win32-x64-msvc": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.1.tgz", - "integrity": "sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@ngrx/component": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/component/-/component-19.0.1.tgz", - "integrity": "sha512-uuGgjB8eAcIj9IiaMUxbIqCHo++jcPPsV2zEiF0q6v8CY07wrCQnn02jxwY09eNCUnvXQiGfYosV2wIWF1gu5A==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/common": "^19.0.0", - "@angular/core": "^19.0.0", - "rxjs": "^6.5.3 || ^7.5.0" - } - }, - "node_modules/@ngrx/data": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/data/-/data-19.0.1.tgz", - "integrity": "sha512-B8HVkBauCycRB9VlvpGovIbldnXrMz9tga0SUQa0tSTQ3IBYY3IEtHO7Q4X1LnCxxuIw8sR6guT+erBaURHDfg==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/common": "^19.0.0", - "@angular/core": "^19.0.0", - "@ngrx/effects": "19.0.1", - "@ngrx/entity": "19.0.1", - "@ngrx/store": "19.0.1", - "rxjs": "^6.5.3 || ^7.5.0" - } - }, - "node_modules/@ngrx/effects": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/effects/-/effects-19.0.1.tgz", - "integrity": "sha512-q+eztS1zN1247BtUZ41gxhumj4wMmvtfdSMfkFEuu6zuA57Vbx8zitEsw9boqPGtP5E4Cj5HKJLSJrl2kgwgcQ==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/core": "^19.0.0", - "@ngrx/store": "19.0.1", - "rxjs": "^6.5.3 || ^7.5.0" - } - }, - "node_modules/@ngrx/entity": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/entity/-/entity-19.0.1.tgz", - "integrity": "sha512-Dw6UhLi7tGVWb/pLgYI81k1fPxCIbCWMztGKj08e8fLWoMvTWYTbG5tFbOJNSa9D3gPmxsBbbS8VMNqcUgl7wQ==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/core": "^19.0.0", - "@ngrx/store": "19.0.1", - "rxjs": "^6.5.3 || ^7.5.0" - } - }, - "node_modules/@ngrx/store": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/store/-/store-19.0.1.tgz", - "integrity": "sha512-+6eBLb+0rdJ856JRuKnvSzFxv1ISbYuX/OM12dMPf4wm+ddxjhyvi6tF8lPiNnaYb717PGNxXQzBFIGfIs4zGQ==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/core": "^19.0.0", - "rxjs": "^6.5.3 || ^7.5.0" - } - }, - "node_modules/@ngrx/store-devtools": { - "version": "19.0.1", - "resolved": "https://registry.npmjs.org/@ngrx/store-devtools/-/store-devtools-19.0.1.tgz", - "integrity": "sha512-afvr6NHh12LpYrOH9JKKEEi/z2DHq/wJ45hRn3mrcRDArQTKpTl7V2eu0dYgjGItSRSeJ2drzzKGjccL61PPSg==", - "dependencies": { - "tslib": "^2.0.0" - }, - "peerDependencies": { - "@angular/core": "^19.0.0", - "@ngrx/store": "19.0.1", - "rxjs": "^6.5.3 || ^7.5.0" - } - }, - "node_modules/@ngtools/webpack": { - "version": "19.1.5", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" - }, - "peerDependencies": { - "@angular/compiler-cli": "^19.0.0", - "typescript": ">=5.5 <5.8", - "webpack": "^5.54.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/agent": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "agent-base": "^7.1.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.1", - "lru-cache": "^10.0.1", - "socks-proxy-agent": "^8.0.3" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/agent/node_modules/lru-cache": { - "version": "10.4.3", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/fs": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/git": { - "version": "6.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^8.0.0", - "ini": "^5.0.0", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^10.0.0", - "proc-log": "^5.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/git/node_modules/isexe": { - "version": "3.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "10.4.3", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/git/node_modules/which": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-bundled": "^4.0.0", - "npm-normalize-package-bin": "^4.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/node-gyp": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/package-json": { - "version": "6.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^6.0.0", - "glob": "^10.2.2", - "hosted-git-info": "^8.0.0", - "json-parse-even-better-errors": "^4.0.0", - "proc-log": "^5.0.0", - "semver": "^7.5.3", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@npmcli/package-json/node_modules/glob": { - "version": "10.4.5", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/package-json/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@npmcli/promise-spawn": { - "version": "8.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/isexe": { - "version": "3.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/redact": { - "version": "3.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/run-script": { - "version": "9.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/node-gyp": "^4.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "node-gyp": "^11.0.0", - "proc-log": "^5.0.0", - "which": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@npmcli/run-script/node_modules/isexe": { - "version": "3.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@parcel/watcher": { - "version": "2.5.1", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "detect-libc": "^1.0.3", - "is-glob": "^4.0.3", - "micromatch": "^4.0.5", - "node-addon-api": "^7.0.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.5.1", - "@parcel/watcher-darwin-arm64": "2.5.1", - "@parcel/watcher-darwin-x64": "2.5.1", - "@parcel/watcher-freebsd-x64": "2.5.1", - "@parcel/watcher-linux-arm-glibc": "2.5.1", - "@parcel/watcher-linux-arm-musl": "2.5.1", - "@parcel/watcher-linux-arm64-glibc": "2.5.1", - "@parcel/watcher-linux-arm64-musl": "2.5.1", - "@parcel/watcher-linux-x64-glibc": "2.5.1", - "@parcel/watcher-linux-x64-musl": "2.5.1", - "@parcel/watcher-win32-arm64": "2.5.1", - "@parcel/watcher-win32-ia32": "2.5.1", - "@parcel/watcher-win32-x64": "2.5.1" - } - }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.5.1", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.5.1", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-android-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", - "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", - "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-darwin-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", - "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", - "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", - "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", - "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", - "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", - "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-win32-arm64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", - "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-win32-ia32": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", - "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/@parcel/watcher-win32-x64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", - "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/detect-libc": { - "version": "1.0.3", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/@parcel/watcher/node_modules/node-addon-api": { - "version": "7.1.1", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.30.1", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.30.1", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@sigstore/bundle": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/core": { - "version": "2.0.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.3.3", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/sign": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^3.0.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^14.0.1", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/tuf": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2", - "tuf-js": "^3.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sigstore/verify": { - "version": "2.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^3.0.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@socket.io/component-emitter": { - "version": "3.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@tufjs/models": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@tufjs/models/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/cors": { - "version": "2.8.17", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/express": { - "version": "4.17.21", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "5.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/express/node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/jasmine": { - "version": "5.1.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.13.0", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.20.0" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/qs": { - "version": "6.9.18", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/retry": { - "version": "0.12.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/send": { - "version": "0.17.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-index": { - "version": "1.9.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.36", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/ws": { - "version": "8.5.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@vitejs/plugin-basic-ssl": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.21.3" - }, - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/abbrev": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.14.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/adjust-sourcemap-loader": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "regex-parser": "^2.2.11" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/ajv": { - "version": "8.17.1", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-keywords": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "dev": true, - "engines": [ - "node >= 0.8.0" - ], - "license": "Apache-2.0", - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/anymatch/node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/autoprefixer": { - "version": "10.4.20", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "browserslist": "^4.23.3", - "caniuse-lite": "^1.0.30001646", - "fraction.js": "^4.3.7", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.1", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/autoprefixer/node_modules/caniuse-lite": { - "version": "1.0.30001696", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz", - "integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/babel-loader": { - "version": "9.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "find-cache-dir": "^4.0.0", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0", - "webpack": ">=5" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.12", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.6.3", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.10.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.2", - "core-js-compat": "^3.38.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.3" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/base64id": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^4.5.0 || >= 5.9" - } - }, - "node_modules/batch": { - "version": "0.6.1", - "dev": true, - "license": "MIT" - }, - "node_modules/beasties": { - "version": "0.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "htmlparser2": "^9.1.0", - "picocolors": "^1.1.1", - "postcss": "^8.4.49", - "postcss-media-query-parser": "^0.2.3" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/big.js": { - "version": "5.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/body-parser": { - "version": "1.20.3", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/bonjour-service": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.24.4", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "caniuse-lite": "^1.0.30001688", - "electron-to-chromium": "^1.5.73", - "node-releases": "^2.0.19", - "update-browserslist-db": "^1.1.1" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/browserslist/node_modules/caniuse-lite": { - "version": "1.0.30001696", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz", - "integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "node_modules/buffer": { - "version": "5.7.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/bundle-name": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "run-applescript": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacache": { - "version": "19.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/fs": "^4.0.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^10.0.1", - "minipass": "^7.0.3", - "minipass-collect": "^2.0.1", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "p-map": "^7.0.2", - "ssri": "^12.0.0", - "tar": "^7.4.3", - "unique-filename": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/cacache/node_modules/chownr": { - "version": "3.0.0", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "10.4.5", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "10.4.3", - "dev": true, - "license": "ISC" - }, - "node_modules/cacache/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/mkdirp": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/cacache/node_modules/tar": { - "version": "7.4.3", - "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/cacache/node_modules/yallist": { - "version": "5.0.0", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chardet": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/chokidar": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "readdirp": "^4.0.1" - }, - "engines": { - "node": ">= 14.16.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/chownr": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/cli-cursor": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-truncate": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^7.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-width": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/colorette": { - "version": "2.0.20", - "dev": true, - "license": "MIT" - }, - "node_modules/commander": { - "version": "2.20.3", - "dev": true, - "license": "MIT" - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/compressible": { - "version": "2.0.18", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.5", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.0.2", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/compression/node_modules/negotiator": { - "version": "0.6.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/connect": { - "version": "3.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.7.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/copy-anything": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "is-what": "^3.14.1" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "12.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-glob": "^3.3.2", - "glob-parent": "^6.0.1", - "globby": "^14.0.0", - "normalize-path": "^3.0.0", - "schema-utils": "^4.2.0", - "serialize-javascript": "^6.0.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/core-js-compat": { - "version": "3.40.0", - "dev": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.24.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/cors": { - "version": "2.8.5", - "dev": true, - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-loader": { - "version": "7.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.33", - "postcss-modules-extract-imports": "^3.1.0", - "postcss-modules-local-by-default": "^4.0.5", - "postcss-modules-scope": "^3.2.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "webpack": "^5.27.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/custom-event": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/date-format": { - "version": "4.0.14", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/debug": { - "version": "4.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/default-browser": { - "version": "5.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "bundle-name": "^4.1.0", - "default-browser-id": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-lazy-prop": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "2.0.3", - "dev": true, - "license": "Apache-2.0", - "optional": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/di": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/dns-packet": { - "version": "5.6.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dom-serialize": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "custom-event": "~1.0.0", - "ent": "~2.2.0", - "extend": "^3.0.0", - "void-elements": "^2.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.2.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.90", - "dev": true, - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "10.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/encoding": { - "version": "0.1.13", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.2" - } - }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/engine.io": { - "version": "6.6.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/cors": "^2.8.12", - "@types/node": ">=10.0.0", - "accepts": "~1.3.4", - "base64id": "2.0.0", - "cookie": "~0.7.2", - "cors": "~2.8.5", - "debug": "~4.3.1", - "engine.io-parser": "~5.2.1", - "ws": "~8.17.1" - }, - "engines": { - "node": ">=10.2.0" - } - }, - "node_modules/engine.io-parser": { - "version": "5.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/engine.io/node_modules/debug": { - "version": "4.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/enhanced-resolve": { - "version": "5.18.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/ent": { - "version": "2.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "punycode": "^1.4.1", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "devOptional": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/environment": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/errno": { - "version": "0.1.8", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "1.6.0", - "dev": true, - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/esbuild": { - "version": "0.24.2", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.24.2", - "@esbuild/android-arm": "0.24.2", - "@esbuild/android-arm64": "0.24.2", - "@esbuild/android-x64": "0.24.2", - "@esbuild/darwin-arm64": "0.24.2", - "@esbuild/darwin-x64": "0.24.2", - "@esbuild/freebsd-arm64": "0.24.2", - "@esbuild/freebsd-x64": "0.24.2", - "@esbuild/linux-arm": "0.24.2", - "@esbuild/linux-arm64": "0.24.2", - "@esbuild/linux-ia32": "0.24.2", - "@esbuild/linux-loong64": "0.24.2", - "@esbuild/linux-mips64el": "0.24.2", - "@esbuild/linux-ppc64": "0.24.2", - "@esbuild/linux-riscv64": "0.24.2", - "@esbuild/linux-s390x": "0.24.2", - "@esbuild/linux-x64": "0.24.2", - "@esbuild/netbsd-arm64": "0.24.2", - "@esbuild/netbsd-x64": "0.24.2", - "@esbuild/openbsd-arm64": "0.24.2", - "@esbuild/openbsd-x64": "0.24.2", - "@esbuild/sunos-x64": "0.24.2", - "@esbuild/win32-arm64": "0.24.2", - "@esbuild/win32-ia32": "0.24.2", - "@esbuild/win32-x64": "0.24.2" - } - }, - "node_modules/esbuild-wasm": { - "version": "0.24.2", - "dev": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/aix-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", - "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/android-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", - "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/android-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", - "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/android-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", - "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", - "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", - "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", - "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", - "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", - "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", - "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", - "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", - "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", - "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", - "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", - "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/linux-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", - "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/netbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", - "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", - "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/openbsd-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", - "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", - "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", - "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", - "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", - "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/esbuild/node_modules/@esbuild/win32-x64": { - "version": "0.24.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", - "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=18" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/express": { - "version": "4.21.2", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.3", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", - "proxy-addr": "~2.0.7", - "qs": "6.13.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.7.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/encodeurl": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/finalhandler": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/express/node_modules/statuses": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.0.6", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastq": { - "version": "1.19.0", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-cache-dir": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "common-path-prefix": "^3.0.0", - "pkg-dir": "^7.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-up": { - "version": "6.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" - } - }, - "node_modules/flatted": { - "version": "3.3.2", - "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.9", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/foreground-child": { - "version": "3.3.0", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.3.7", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://github.com/sponsors/rawify" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs-minipass": { - "version": "3.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-east-asian-width": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.7", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "function-bind": "^1.1.2", - "get-proto": "^1.0.0", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "14.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "dev": true, - "license": "ISC" - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hosted-git-info": { - "version": "8.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "10.4.3", - "dev": true, - "license": "ISC" - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/htmlparser2": { - "version": "9.1.0", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.1.0", - "entities": "^4.5.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "dev": true, - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.9", - "dev": true, - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "dev": true, - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http-proxy-middleware": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.15", - "debug": "^4.3.6", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.3", - "is-plain-object": "^5.0.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/hyperdyperid": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.18" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-walk": { - "version": "7.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/ignore-walk/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/image-size": { - "version": "0.5.5", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/immutable": { - "version": "5.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "dev": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/ip-address": { - "version": "9.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "jsbn": "1.1.0", - "sprintf-js": "^1.1.3" - }, - "engines": { - "node": ">= 12" - } - }, - "node_modules/ipaddr.js": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-network-error": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-what": { - "version": "3.14.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-wsl": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-inside-container": "^1.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/isbinaryfile": { - "version": "4.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/gjtorikian/" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.7", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jasmine-core": { - "version": "5.5.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/jiti": { - "version": "1.21.7", - "dev": true, - "license": "MIT", - "bin": { - "jiti": "bin/jiti.js" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jsesc": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonc-parser": { - "version": "3.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/karma": { - "version": "6.4.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@colors/colors": "1.5.0", - "body-parser": "^1.19.0", - "braces": "^3.0.2", - "chokidar": "^3.5.1", - "connect": "^3.7.0", - "di": "^0.0.1", - "dom-serialize": "^2.2.1", - "glob": "^7.1.7", - "graceful-fs": "^4.2.6", - "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.8", - "lodash": "^4.17.21", - "log4js": "^6.4.1", - "mime": "^2.5.2", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.5", - "qjobs": "^1.2.0", - "range-parser": "^1.2.1", - "rimraf": "^3.0.2", - "socket.io": "^4.7.2", - "source-map": "^0.6.1", - "tmp": "^0.2.1", - "ua-parser-js": "^0.7.30", - "yargs": "^16.1.1" - }, - "bin": { - "karma": "bin/karma" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/karma-chrome-launcher": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "which": "^1.2.1" - } - }, - "node_modules/karma-coverage": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "istanbul-lib-coverage": "^3.2.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.1", - "istanbul-reports": "^3.0.5", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/karma-coverage/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/karma-coverage/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/karma-jasmine": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "jasmine-core": "^4.1.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "karma": "^6.0.0" - } - }, - "node_modules/karma-jasmine-html-reporter": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "peerDependencies": { - "jasmine-core": "^4.0.0 || ^5.0.0", - "karma": "^6.0.0", - "karma-jasmine": "^5.0.0" - } - }, - "node_modules/karma-jasmine/node_modules/jasmine-core": { - "version": "4.6.1", - "dev": true, - "license": "MIT" - }, - "node_modules/karma-source-map-support": { - "version": "1.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "source-map-support": "^0.5.5" - } - }, - "node_modules/karma/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/karma/node_modules/chokidar": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/karma/node_modules/cliui": { - "version": "7.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/karma/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/karma/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/karma/node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/karma/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/karma/node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/karma/node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/karma/node_modules/readdirp": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/karma/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/karma/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/karma/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/karma/node_modules/tmp": { - "version": "0.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/karma/node_modules/wrap-ansi": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/karma/node_modules/yargs": { - "version": "16.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/karma/node_modules/yargs-parser": { - "version": "20.2.9", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/launch-editor": { - "version": "2.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "picocolors": "^1.0.0", - "shell-quote": "^1.8.1" - } - }, - "node_modules/less": { - "version": "4.2.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "copy-anything": "^2.0.1", - "parse-node-version": "^1.0.1", - "tslib": "^2.3.0" - }, - "bin": { - "lessc": "bin/lessc" - }, - "engines": { - "node": ">=6" - }, - "optionalDependencies": { - "errno": "^0.1.1", - "graceful-fs": "^4.1.2", - "image-size": "~0.5.0", - "make-dir": "^2.1.0", - "mime": "^1.4.1", - "needle": "^3.1.0", - "source-map": "~0.6.0" - } - }, - "node_modules/less-loader": { - "version": "12.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "less": "^3.5.0 || ^4.0.0", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/less/node_modules/make-dir": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/less/node_modules/mime": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "optional": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/less/node_modules/semver": { - "version": "5.7.2", - "dev": true, - "license": "ISC", - "optional": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/less/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "optional": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/license-webpack-plugin": { - "version": "4.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "webpack-sources": "^3.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-sources": { - "optional": true - } - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "dev": true, - "license": "MIT" - }, - "node_modules/listr2": { - "version": "8.2.5", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/listr2/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/listr2/node_modules/eventemitter3": { - "version": "5.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "9.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/lmdb": { - "version": "3.2.2", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "msgpackr": "^1.11.2", - "node-addon-api": "^6.1.0", - "node-gyp-build-optional-packages": "5.2.2", - "ordered-binary": "^1.5.3", - "weak-lru-cache": "^1.2.2" - }, - "bin": { - "download-lmdb-prebuilds": "bin/download-prebuilds.js" - }, - "optionalDependencies": { - "@lmdb/lmdb-darwin-arm64": "3.2.2", - "@lmdb/lmdb-darwin-x64": "3.2.2", - "@lmdb/lmdb-linux-arm": "3.2.2", - "@lmdb/lmdb-linux-arm64": "3.2.2", - "@lmdb/lmdb-linux-x64": "3.2.2", - "@lmdb/lmdb-win32-x64": "3.2.2" - } - }, - "node_modules/lmdb/node_modules/@lmdb/lmdb-darwin-arm64": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-3.2.2.tgz", - "integrity": "sha512-WBSJT9Z7DTol5viq+DZD2TapeWOw7mlwXxiSBHgAzqVwsaVb0h/ekMD9iu/jDD8MUA20tO9N0WEdnT06fsUp+g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/lmdb/node_modules/@lmdb/lmdb-darwin-x64": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-3.2.2.tgz", - "integrity": "sha512-4S13kUtR7c/j/MzkTIBJCXv52hQ41LG2ukeaqw4Eng9K0pNKLFjo1sDSz96/yKhwykxrWDb13ddJ/ZqD3rAhUA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/lmdb/node_modules/@lmdb/lmdb-linux-arm": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-3.2.2.tgz", - "integrity": "sha512-uW31JmfuPAaLUYW7NsEU8gzwgDAzpGPwjvkxnKlcWd8iDutoPKDJi8Wk9lFmPEZRxVSB0j1/wDQ7N2qliR9UFA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/lmdb/node_modules/@lmdb/lmdb-linux-x64": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-3.2.2.tgz", - "integrity": "sha512-A0zjf4a2vM4B4GAx78ncuOTZ8Ka1DbTaG1Axf1e00Sa7f5coqlWiLg1PX7Gxvyibc2YqtqB+8tg1KKrE8guZVw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/lmdb/node_modules/@lmdb/lmdb-win32-x64": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-3.2.2.tgz", - "integrity": "sha512-Y0qoSCAja+xZE7QQ0LCHoYAuyI1n9ZqukQJa8lv9X3yCvWahFF7OYHAgVH1ejp43XWstj3U89/PAAzcowgF/uQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "3.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/locate-path": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "environment": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-update/node_modules/is-fullwidth-code-point": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "get-east-asian-width": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-update/node_modules/slice-ansi": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "is-fullwidth-code-point": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "9.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.2.1", - "string-width": "^7.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/log4js": { - "version": "6.9.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "flatted": "^3.2.7", - "rfdc": "^1.3.0", - "streamroller": "^3.1.5" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.30.17", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-fetch-happen": { - "version": "14.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/agent": "^3.0.0", - "cacache": "^19.0.1", - "http-cache-semantics": "^4.1.1", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "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" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "4.17.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jsonjoy.com/json-pack": "^1.0.3", - "@jsonjoy.com/util": "^1.3.0", - "tree-dump": "^1.0.1", - "tslib": "^2.0.0" - }, - "engines": { - "node": ">= 4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-function": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.9.2", - "dev": true, - "license": "MIT", - "dependencies": { - "schema-utils": "^4.0.0", - "tapable": "^2.2.1" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.1.2", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-collect": { - "version": "2.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minipass-fetch": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^3.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" - } - }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-flush/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-sized/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/minizlib": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^7.0.4", - "rimraf": "^5.0.5" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/minizlib/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/minizlib/node_modules/glob": { - "version": "10.4.5", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minizlib/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minizlib/node_modules/rimraf": { - "version": "5.0.10", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mrmime": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/msgpackr": { - "version": "1.11.2", - "dev": true, - "license": "MIT", - "optional": true, - "optionalDependencies": { - "msgpackr-extract": "^3.0.2" - } - }, - "node_modules/msgpackr-extract": { - "version": "3.0.3", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "dependencies": { - "node-gyp-build-optional-packages": "5.2.2" - }, - "bin": { - "download-msgpackr-prebuilds": "bin/download-prebuilds.js" - }, - "optionalDependencies": { - "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.3", - "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.3" - } - }, - "node_modules/msgpackr-extract/node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.3.tgz", - "integrity": "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/msgpackr-extract/node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.3.tgz", - "integrity": "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/msgpackr-extract/node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.3.tgz", - "integrity": "sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/msgpackr-extract/node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.3.tgz", - "integrity": "sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/msgpackr-extract/node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz", - "integrity": "sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "dev": true, - "license": "MIT", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/mute-stream": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.8", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/needle": { - "version": "3.3.1", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" - }, - "engines": { - "node": ">= 4.4.x" - } - }, - "node_modules/needle/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/negotiator": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/node-addon-api": { - "version": "6.1.0", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/node-forge": { - "version": "1.3.1", - "dev": true, - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-gyp": { - "version": "11.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^14.0.3", - "nopt": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "tar": "^7.4.3", - "which": "^5.0.0" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/node-gyp-build-optional-packages": { - "version": "5.2.2", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "detect-libc": "^2.0.1" - }, - "bin": { - "node-gyp-build-optional-packages": "bin.js", - "node-gyp-build-optional-packages-optional": "optional.js", - "node-gyp-build-optional-packages-test": "build-test.js" - } - }, - "node_modules/node-gyp/node_modules/brace-expansion": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/node-gyp/node_modules/chownr": { - "version": "3.0.0", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/node-gyp/node_modules/glob": { - "version": "10.4.5", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/isexe": { - "version": "3.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=16" - } - }, - "node_modules/node-gyp/node_modules/minimatch": { - "version": "9.0.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/mkdirp": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/node-gyp/node_modules/tar": { - "version": "7.4.3", - "dev": true, - "license": "ISC", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.0.1", - "mkdirp": "^3.0.1", - "yallist": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/node-gyp/node_modules/which": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^3.1.1" - }, - "bin": { - "node-which": "bin/which.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/node-gyp/node_modules/yallist": { - "version": "5.0.0", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/node-releases": { - "version": "2.0.19", - "dev": true, - "license": "MIT" - }, - "node_modules/nopt": { - "version": "8.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "abbrev": "^3.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-bundled": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^4.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-install-checks": { - "version": "7.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "semver": "^7.1.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-normalize-package-bin": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-package-arg": { - "version": "12.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^8.0.0", - "proc-log": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^6.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-packlist": { - "version": "9.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "ignore-walk": "^7.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-pick-manifest": { - "version": "10.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "npm-install-checks": "^7.1.0", - "npm-normalize-package-bin": "^4.0.0", - "npm-package-arg": "^12.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "18.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/redact": "^3.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^14.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^4.0.0", - "minizlib": "^3.0.1", - "npm-package-arg": "^12.0.0", - "proc-log": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-function": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "10.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "default-browser": "^5.2.1", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^3.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/cli-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/onetime": { - "version": "5.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/restore-cursor": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/signal-exit": { - "version": "3.0.7", - "dev": true, - "license": "ISC" - }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ordered-binary": { - "version": "1.5.3", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "7.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.2", - "is-network-error": "^1.0.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry/node_modules/retry": { - "version": "0.13.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/pacote": { - "version": "20.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^6.0.0", - "@npmcli/installed-package-contents": "^3.0.0", - "@npmcli/package-json": "^6.0.0", - "@npmcli/promise-spawn": "^8.0.0", - "@npmcli/run-script": "^9.0.0", - "cacache": "^19.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^12.0.0", - "npm-packlist": "^9.0.0", - "npm-pick-manifest": "^10.0.0", - "npm-registry-fetch": "^18.0.0", - "proc-log": "^5.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^3.0.0", - "ssri": "^12.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-json/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/parse-node-version": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse5": { - "version": "7.2.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "entities": "^4.5.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-html-rewriting-stream": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "entities": "^4.3.0", - "parse5": "^7.0.0", - "parse5-sax-parser": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-sax-parser": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/path-scurry": { - "version": "1.11.1", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.4.3", - "dev": true, - "license": "ISC" - }, - "node_modules/path-to-regexp": { - "version": "0.1.12", - "dev": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/piscina": { - "version": "4.8.0", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "@napi-rs/nice": "^1.0.1" - } - }, - "node_modules/pkg-dir": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^6.3.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/postcss": { - "version": "8.4.49", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-loader": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cosmiconfig": "^9.0.0", - "jiti": "^1.20.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^7.0.0", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.2.1", - "dev": true, - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^7.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-selector-parser": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/proc-log": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/punycode": { - "version": "1.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/qjobs": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.9" - } - }, - "node_modules/qs": { - "version": "6.13.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.18.0" - }, - "funding": { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/reflect-metadata": { - "version": "0.2.2", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/regenerate": { - "version": "1.4.2", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "dev": true, - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regex-parser": { - "version": "2.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/regexpu-core": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.0", - "regjsgen": "^0.8.0", - "regjsparser": "^0.12.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "dev": true, - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.12.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~3.0.2" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.10", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-url-loader": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "adjust-sourcemap-loader": "^4.0.0", - "convert-source-map": "^1.7.0", - "loader-utils": "^2.0.0", - "postcss": "^8.2.14", - "source-map": "0.6.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/resolve-url-loader/node_modules/loader-utils": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/resolve-url-loader/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/restore-cursor": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "4.30.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.6" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.30.1", - "@rollup/rollup-android-arm64": "4.30.1", - "@rollup/rollup-darwin-arm64": "4.30.1", - "@rollup/rollup-darwin-x64": "4.30.1", - "@rollup/rollup-freebsd-arm64": "4.30.1", - "@rollup/rollup-freebsd-x64": "4.30.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.30.1", - "@rollup/rollup-linux-arm-musleabihf": "4.30.1", - "@rollup/rollup-linux-arm64-gnu": "4.30.1", - "@rollup/rollup-linux-arm64-musl": "4.30.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.30.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.30.1", - "@rollup/rollup-linux-riscv64-gnu": "4.30.1", - "@rollup/rollup-linux-s390x-gnu": "4.30.1", - "@rollup/rollup-linux-x64-gnu": "4.30.1", - "@rollup/rollup-linux-x64-musl": "4.30.1", - "@rollup/rollup-win32-arm64-msvc": "4.30.1", - "@rollup/rollup-win32-ia32-msvc": "4.30.1", - "@rollup/rollup-win32-x64-msvc": "4.30.1", - "fsevents": "~2.3.2" - } - }, - "node_modules/rollup/node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.30.1.tgz", - "integrity": "sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-android-arm64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.30.1.tgz", - "integrity": "sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.30.1.tgz", - "integrity": "sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-darwin-x64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.30.1.tgz", - "integrity": "sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.30.1.tgz", - "integrity": "sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.30.1.tgz", - "integrity": "sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.30.1.tgz", - "integrity": "sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.30.1.tgz", - "integrity": "sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.30.1.tgz", - "integrity": "sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.30.1.tgz", - "integrity": "sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.30.1.tgz", - "integrity": "sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.30.1.tgz", - "integrity": "sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.30.1.tgz", - "integrity": "sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.30.1.tgz", - "integrity": "sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.30.1.tgz", - "integrity": "sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.30.1.tgz", - "integrity": "sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/rollup/node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.30.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.30.1.tgz", - "integrity": "sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/rollup/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/run-applescript": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/sass": { - "version": "1.83.1", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^4.0.0", - "immutable": "^5.0.2", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "optionalDependencies": { - "@parcel/watcher": "^2.4.1" - } - }, - "node_modules/sass-loader": { - "version": "16.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "@rspack/core": "0.x || 1.x", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@rspack/core": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "webpack": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.4.1", - "dev": true, - "license": "ISC", - "optional": true - }, - "node_modules/schema-utils": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv-formats": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/selfsigned": { - "version": "2.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.6.3", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.19.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "dev": true, - "license": "ISC" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "dev": true, - "license": "ISC" - }, - "node_modules/serve-static": { - "version": "1.16.2", - "dev": true, - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-static/node_modules/encodeurl": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "dev": true, - "license": "ISC" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sigstore": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@sigstore/bundle": "^3.0.0", - "@sigstore/core": "^2.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "@sigstore/sign": "^3.0.0", - "@sigstore/tuf": "^3.0.0", - "@sigstore/verify": "^2.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/slash": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/slice-ansi": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/smart-buffer": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socket.io": { - "version": "4.8.1", - "dev": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "base64id": "~2.0.0", - "cors": "~2.8.5", - "debug": "~4.3.2", - "engine.io": "~6.6.0", - "socket.io-adapter": "~2.5.2", - "socket.io-parser": "~4.2.4" - }, - "engines": { - "node": ">=10.2.0" - } - }, - "node_modules/socket.io-adapter": { - "version": "2.5.5", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "~4.3.4", - "ws": "~8.17.1" - } - }, - "node_modules/socket.io-adapter/node_modules/debug": { - "version": "4.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/socket.io-parser": { - "version": "4.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@socket.io/component-emitter": "~3.1.0", - "debug": "~4.3.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/socket.io-parser/node_modules/debug": { - "version": "4.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/socket.io/node_modules/debug": { - "version": "4.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "dev": true, - "license": "MIT", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/socks": { - "version": "2.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "ip-address": "^9.0.5", - "smart-buffer": "^4.2.0" - }, - "engines": { - "node": ">= 10.0.0", - "npm": ">= 3.0.0" - } - }, - "node_modules/socks-proxy-agent": { - "version": "8.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "^4.3.4", - "socks": "^2.8.3" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/source-map": { - "version": "0.7.4", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-loader": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "iconv-lite": "^0.6.3", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.72.1" - } - }, - "node_modules/source-map-loader/node_modules/iconv-lite": { - "version": "0.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.21", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/spdy": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.1.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/ssri": { - "version": "12.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/streamroller": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "date-format": "^4.0.14", - "debug": "^4.3.4", - "fs-extra": "^8.1.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/symbol-observable": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.2.1", - "dev": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/minizlib": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/mkdirp": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/terser": { - "version": "5.37.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/thingies": { - "version": "1.21.0", - "dev": true, - "license": "Unlicense", - "engines": { - "node": ">=10.18" - }, - "peerDependencies": { - "tslib": "^2" - } - }, - "node_modules/thunky": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/tmp": { - "version": "0.0.33", - "dev": true, - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tree-dump": { - "version": "1.0.2", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/streamich" - }, - "peerDependencies": { - "tslib": "2" - } - }, - "node_modules/tree-kill": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "bin": { - "tree-kill": "cli.js" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "license": "0BSD" - }, - "node_modules/tuf-js": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@tufjs/models": "3.0.1", - "debug": "^4.3.6", - "make-fetch-happen": "^14.0.1" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "dev": true, - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-assert": { - "version": "1.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.40", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - }, - { - "type": "github", - "url": "https://github.com/sponsors/faisalman" - } - ], - "license": "MIT", - "bin": { - "ua-parser-js": "script/cli.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/undici-types": { - "version": "6.20.0", - "dev": true, - "license": "MIT" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicorn-magic": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unique-filename": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "unique-slug": "^5.0.0" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/unique-slug": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4" - }, - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.2", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vite": { - "version": "6.0.11", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.24.2", - "postcss": "^8.4.49", - "rollup": "^4.23.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", - "jiti": ">=1.21.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.16.0", - "tsx": "^4.8.1", - "yaml": "^2.4.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/void-elements": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "dev": true, - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/weak-lru-cache": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "optional": true - }, - "node_modules/webpack": { - "version": "5.97.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.97.1.tgz", - "integrity": "sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-middleware": { - "version": "7.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^4.6.0", - "mime-types": "^2.1.31", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/bonjour": "^3.5.13", - "@types/connect-history-api-fallback": "^1.5.4", - "@types/express": "^4.17.21", - "@types/serve-index": "^1.9.4", - "@types/serve-static": "^1.15.5", - "@types/sockjs": "^0.3.36", - "@types/ws": "^8.5.10", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.2.1", - "chokidar": "^3.6.0", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "express": "^4.21.2", - "graceful-fs": "^4.2.6", - "http-proxy-middleware": "^2.0.7", - "ipaddr.js": "^2.1.0", - "launch-editor": "^2.6.1", - "open": "^10.0.3", - "p-retry": "^6.2.0", - "schema-utils": "^4.2.0", - "selfsigned": "^2.4.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^7.4.2", - "ws": "^8.18.0" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 18.12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "webpack": { - "optional": true - }, - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/chokidar": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/webpack-dev-server/node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/webpack-dev-server/node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/webpack-dev-server/node_modules/http-proxy-middleware": { - "version": "2.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/webpack-dev-server/node_modules/readdirp": { - "version": "3.6.0", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.18.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-subresource-integrity": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "typed-assert": "^1.0.8" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", - "webpack": "^5.12.0" - }, - "peerDependenciesMeta": { - "html-webpack-plugin": { - "optional": true - } - } - }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/webpack/node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/which": { - "version": "1.3.1", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/wildcard": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.17.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "dev": true, - "license": "ISC" - }, - "node_modules/yargs": { - "version": "17.7.2", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yocto-queue": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yoctocolors-cjs": { - "version": "2.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zone.js": { - "version": "0.15.0", - "license": "MIT" - } - } -} diff --git a/app/components/ui/package.json b/app/components/ui/package.json deleted file mode 100644 index 66d4befd..00000000 --- a/app/components/ui/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "ACE", - "version": "0.0.0", - "scripts": { - "ng": "ng", - "start": "ng serve --host 0.0.0.0 --disable-host-check", - "start-local": "/opt/homebrew/opt/node@18/bin/node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng serve --host 0.0.0.0 --disable-host-check", - "build": "ng build", - "watch": "ng build --watch --configuration development", - "test": "ng test --watch=false --browsers=ChromeHeadless", - "test-local": "/opt/homebrew/opt/node@18/bin/node --max_old_space_size=8192 node_modules/@angular/cli/bin/ng test --watch=false --browsers=ChromeHeadless" - }, - "private": true, - "dependencies": { - "@angular/animations": "^19.1.0", - "@angular/cdk": "^19.1.2", - "@angular/common": "^19.1.0", - "@angular/compiler": "^19.1.0", - "@angular/core": "^19.1.0", - "@angular/forms": "^19.1.0", - "@angular/material": "^19.1.2", - "@angular/platform-browser": "^19.1.0", - "@angular/platform-browser-dynamic": "^19.1.0", - "@angular/router": "^19.1.0", - "@ngrx/component": "^19.0.1", - "@ngrx/data": "^19.0.1", - "@ngrx/effects": "^19.0.1", - "@ngrx/entity": "^19.0.1", - "@ngrx/store": "^19.0.1", - "@ngrx/store-devtools": "^19.0.1", - "rxjs": "~7.8.0", - "tslib": "^2.3.0", - "zone.js": "~0.15.0" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^19.1.5", - "@angular/cli": "^19.1.5", - "@angular/compiler-cli": "^19.1.0", - "@types/jasmine": "~5.1.0", - "jasmine-core": "~5.5.0", - "karma": "~6.4.0", - "karma-chrome-launcher": "~3.2.0", - "karma-coverage": "~2.2.0", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.1.0", - "typescript": "~5.7.2" - } -} diff --git a/app/components/ui/public/favicon.ico b/app/components/ui/public/favicon.ico deleted file mode 100644 index 57614f9c967596fad0a3989bec2b1deff33034f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15086 zcmd^G33O9Omi+`8$@{|M-I6TH3wzF-p5CV8o}7f~KxR60LK+ApEFB<$bcciv%@SmA zV{n>g85YMFFeU*Uvl=i4v)C*qgnb;$GQ=3XTe9{Y%c`mO%su)noNCCQ*@t1WXn|B(hQ7i~ zrUK8|pUkD6#lNo!bt$6)jR!&C?`P5G(`e((P($RaLeq+o0Vd~f11;qB05kdbAOm?r zXv~GYr_sibQO9NGTCdT;+G(!{4Xs@4fPak8#L8PjgJwcs-Mm#nR_Z0s&u?nDX5^~@ z+A6?}g0|=4e_LoE69pPFO`yCD@BCjgKpzMH0O4Xs{Ahc?K3HC5;l=f zg>}alhBXX&);z$E-wai+9TTRtBX-bWYY@cl$@YN#gMd~tM_5lj6W%8ah4;uZ;jP@Q zVbuel1rPA?2@x9Y+u?e`l{Z4ngfG5q5BLH5QsEu4GVpt{KIp1?U)=3+KQ;%7ec8l* zdV=zZgN5>O3G(3L2fqj3;oBbZZw$Ij@`Juz@?+yy#OPw)>#wsTewVgTK9BGt5AbZ&?K&B3GVF&yu?@(Xj3fR3n+ZP0%+wo)D9_xp>Z$`A4 zfV>}NWjO#3lqumR0`gvnffd9Ka}JJMuHS&|55-*mCD#8e^anA<+sFZVaJe7{=p*oX zE_Uv?1>e~ga=seYzh{9P+n5<+7&9}&(kwqSaz;1aD|YM3HBiy<))4~QJSIryyqp| z8nGc(8>3(_nEI4n)n7j(&d4idW1tVLjZ7QbNLXg;LB ziHsS5pXHEjGJZb59KcvS~wv;uZR-+4qEqow`;JCfB*+b^UL^3!?;-^F%yt=VjU|v z39SSqKcRu_NVvz!zJzL0CceJaS6%!(eMshPv_0U5G`~!a#I$qI5Ic(>IONej@aH=f z)($TAT#1I{iCS4f{D2+ApS=$3E7}5=+y(rA9mM#;Cky%b*Gi0KfFA`ofKTzu`AV-9 znW|y@19rrZ*!N2AvDi<_ZeR3O2R{#dh1#3-d%$k${Rx42h+i&GZo5!C^dSL34*AKp z27mTd>k>?V&X;Nl%GZ(>0s`1UN~Hfyj>KPjtnc|)xM@{H_B9rNr~LuH`Gr5_am&Ep zTjZA8hljNj5H1Ipm-uD9rC}U{-vR!eay5&6x6FkfupdpT*84MVwGpdd(}ib)zZ3Ky z7C$pnjc82(W_y_F{PhYj?o!@3__UUvpX)v69aBSzYj3 zdi}YQkKs^SyXyFG2LTRz9{(w}y~!`{EuAaUr6G1M{*%c+kP1olW9z23dSH!G4_HSK zzae-DF$OGR{ofP*!$a(r^5Go>I3SObVI6FLY)N@o<*gl0&kLo-OT{Tl*7nCz>Iq=? zcigIDHtj|H;6sR?or8Wd_a4996GI*CXGU}o;D9`^FM!AT1pBY~?|4h^61BY#_yIfO zKO?E0 zJ{Pc`9rVEI&$xxXu`<5E)&+m(7zX^v0rqofLs&bnQT(1baQkAr^kEsk)15vlzAZ-l z@OO9RF<+IiJ*O@HE256gCt!bF=NM*vh|WVWmjVawcNoksRTMvR03H{p@cjwKh(CL4 z7_PB(dM=kO)!s4fW!1p0f93YN@?ZSG` z$B!JaAJCtW$B97}HNO9(x-t30&E}Mo1UPi@Av%uHj~?T|!4JLwV;KCx8xO#b9IlUW zI6+{a@Wj|<2Y=U;a@vXbxqZNngH8^}LleE_4*0&O7#3iGxfJ%Id>+sb;7{L=aIic8 z|EW|{{S)J-wr@;3PmlxRXU8!e2gm_%s|ReH!reFcY8%$Hl4M5>;6^UDUUae?kOy#h zk~6Ee_@ZAn48Bab__^bNmQ~+k=02jz)e0d9Z3>G?RGG!65?d1>9}7iG17?P*=GUV-#SbLRw)Hu{zx*azHxWkGNTWl@HeWjA?39Ia|sCi{e;!^`1Oec zb>Z|b65OM*;eC=ZLSy?_fg$&^2xI>qSLA2G*$nA3GEnp3$N-)46`|36m*sc#4%C|h zBN<2U;7k>&G_wL4=Ve5z`ubVD&*Hxi)r@{4RCDw7U_D`lbC(9&pG5C*z#W>8>HU)h z!h3g?2UL&sS!oY5$3?VlA0Me9W5e~V;2jds*fz^updz#AJ%G8w2V}AEE?E^=MK%Xt z__Bx1cr7+DQmuHmzn*|hh%~eEc9@m05@clWfpEFcr+06%0&dZJH&@8^&@*$qR@}o3 z@Tuuh2FsLz^zH+dN&T&?0G3I?MpmYJ;GP$J!EzjeM#YLJ!W$}MVNb0^HfOA>5Fe~UNn%Zk(PT@~9}1dt)1UQ zU*B5K?Dl#G74qmg|2>^>0WtLX#Jz{lO4NT`NYB*(L#D|5IpXr9v&7a@YsGp3vLR7L zHYGHZg7{ie6n~2p$6Yz>=^cEg7tEgk-1YRl%-s7^cbqFb(U7&Dp78+&ut5!Tn(hER z|Gp4Ed@CnOPeAe|N>U(dB;SZ?NU^AzoD^UAH_vamp6Ws}{|mSq`^+VP1g~2B{%N-!mWz<`)G)>V-<`9`L4?3dM%Qh6<@kba+m`JS{Ya@9Fq*m6$$ zA1%Ogc~VRH33|S9l%CNb4zM%k^EIpqY}@h{w(aBcJ9c05oiZx#SK9t->5lSI`=&l~ z+-Ic)a{FbBhXV$Xt!WRd`R#Jk-$+_Z52rS>?Vpt2IK<84|E-SBEoIw>cs=a{BlQ7O z-?{Fy_M&84&9|KM5wt~)*!~i~E=(6m8(uCO)I=)M?)&sRbzH$9Rovzd?ZEY}GqX+~ zFbEbLz`BZ49=2Yh-|<`waK-_4!7`ro@zlC|r&I4fc4oyb+m=|c8)8%tZ-z5FwhzDt zL5kB@u53`d@%nHl0Sp)Dw`(QU&>vujEn?GPEXUW!Wi<+4e%BORl&BIH+SwRcbS}X@ z01Pk|vA%OdJKAs17zSXtO55k!;%m9>1eW9LnyAX4uj7@${O6cfii`49qTNItzny5J zH&Gj`e}o}?xjQ}r?LrI%FjUd@xflT3|7LA|ka%Q3i}a8gVm<`HIWoJGH=$EGClX^C0lysQJ>UO(q&;`T#8txuoQ_{l^kEV9CAdXuU1Ghg8 zN_6hHFuy&1x24q5-(Z7;!poYdt*`UTdrQOIQ!2O7_+AHV2hgXaEz7)>$LEdG z<8vE^Tw$|YwZHZDPM!SNOAWG$?J)MdmEk{U!!$M#fp7*Wo}jJ$Q(=8>R`Ats?e|VU?Zt7Cdh%AdnfyN3MBWw{ z$OnREvPf7%z6`#2##_7id|H%Y{vV^vWXb?5d5?a_y&t3@p9t$ncHj-NBdo&X{wrfJ zamN)VMYROYh_SvjJ=Xd!Ga?PY_$;*L=SxFte!4O6%0HEh%iZ4=gvns7IWIyJHa|hT z2;1+e)`TvbNb3-0z&DD_)Jomsg-7p_Uh`wjGnU1urmv1_oVqRg#=C?e?!7DgtqojU zWoAB($&53;TsXu^@2;8M`#z{=rPy?JqgYM0CDf4v@z=ZD|ItJ&8%_7A#K?S{wjxgd z?xA6JdJojrWpB7fr2p_MSsU4(R7=XGS0+Eg#xR=j>`H@R9{XjwBmqAiOxOL` zt?XK-iTEOWV}f>Pz3H-s*>W z4~8C&Xq25UQ^xH6H9kY_RM1$ch+%YLF72AA7^b{~VNTG}Tj#qZltz5Q=qxR`&oIlW Nr__JTFzvMr^FKp4S3v*( diff --git a/app/components/ui/src/app/app.component.html b/app/components/ui/src/app/app.component.html deleted file mode 100644 index 5089ac9d..00000000 --- a/app/components/ui/src/app/app.component.html +++ /dev/null @@ -1,34 +0,0 @@ -
- - - - @for (item of sidebarItems(); track item.name) { - - - {{ item.icon }} - - - } - - - - - - - - - @if ( uiSettings?.show_footer ) { - - } -
diff --git a/app/components/ui/src/app/app.component.scss b/app/components/ui/src/app/app.component.scss deleted file mode 100644 index 43696191..00000000 --- a/app/components/ui/src/app/app.component.scss +++ /dev/null @@ -1,35 +0,0 @@ -.page-root { - display: flex; - flex-direction: column; - height: 100%; - - .sidebar-root { - height: 100%; - - .sidebar { - width: 3.5rem; - display: grid; - align-content: center; - outline: auto; - border-radius: 0; - - .sidebar-item { - margin-bottom: 1rem; - - .active-link { - background-color: rgba(0, 0, 0, 0.04); - } - } - } - } -} - -.footer { - display: flex; - align-items: center; - justify-content: center; - height: 2rem; - gap: 2rem; - outline: auto; - background-color: gray; -} diff --git a/app/components/ui/src/app/app.component.ts b/app/components/ui/src/app/app.component.ts deleted file mode 100644 index ba524871..00000000 --- a/app/components/ui/src/app/app.component.ts +++ /dev/null @@ -1,108 +0,0 @@ -// DEPENDENCIES -//// Angular -import { Component, inject, OnInit, signal } from "@angular/core"; -import { MatButtonModule } from "@angular/material/button"; -import { MatIconModule } from "@angular/material/icon"; -import { MatListModule } from "@angular/material/list"; -import { MatTooltipModule } from "@angular/material/tooltip"; -import { MatSidenavModule } from "@angular/material/sidenav"; -import { RouterModule, RouterOutlet } from "@angular/router"; -import { Store } from "@ngrx/store"; -//// Local -import { ThemeService } from "./theme"; -import { IAppVersionData } from "./models/app.models"; -import { ISettings, IUISettings } from "./models/settings.models"; -import { appActions } from "./store/app/app.actions"; -import { settingsActions } from "./store/settings/settings.actions"; -import { selectAppVersionDataState } from './store/app/app.selectors'; -import { selectSettingsState } from "./store/settings/settings.selectors"; - - -// TYPES -export type SidebarItem = { - name: string, - icon: string, - route?: string, -} - - -// COMPONENT -@Component({ - selector: "app-root", - imports: [ - MatButtonModule, - MatIconModule, - MatListModule, - MatSidenavModule, - MatTooltipModule, - RouterModule, - RouterOutlet - ], - templateUrl: "./app.component.html", - styleUrl: "./app.component.scss" -}) -export class AppComponent implements OnInit { - // Variables - title = "ACE"; - themeService = inject(ThemeService); - sidebarItems = signal([ - { - name: "Home", - icon: "home", - route: "" - }, - { - name: "Dashboard", - icon: "dashboard", - route: "dashboard" - }, - { - name: "Chat", - icon: "chat", - route: "chat" - }, - { - name: "Model Garden", - icon: "local_florist", - route: "model-garden" - }, - { - name: "Settings", - icon: "settings", - route: "settings" - } - ]) - - settings?: ISettings; - uiSettings?: IUISettings; - appVersionData?: IAppVersionData; - - // Initialisation - constructor(private store: Store) {} - - ngOnInit(): void { - this.store.dispatch(appActions.getAppVersionData()); - this.store.select(selectAppVersionDataState).subscribe( version_data => this.appVersionData = version_data ); - this.store.dispatch(settingsActions.getSettings()); - this.store.select(selectSettingsState).subscribe( settings => { - this.settings = settings.settings; - this.uiSettings = settings.settings.ui_settings; - this.themeService.setDarkMode(this.uiSettings.dark_mode); - }) - } - - toggleDarkMode() { - if (!this.settings) { - return; - } - this.store.dispatch(settingsActions.editSettings({ - settings: { - ...this.settings, - ui_settings: { - ...this.settings.ui_settings, - dark_mode: !this.settings.ui_settings.dark_mode - } - } - })) - } -} diff --git a/app/components/ui/src/app/app.config.ts b/app/components/ui/src/app/app.config.ts deleted file mode 100644 index 5d78379a..00000000 --- a/app/components/ui/src/app/app.config.ts +++ /dev/null @@ -1,34 +0,0 @@ -// DEPENDENCIES -//// Angular -import { ApplicationConfig, provideZoneChangeDetection } from '@angular/core'; -import { provideHttpClient } from '@angular/common/http'; -import { provideRouter } from '@angular/router'; -import { provideEffects } from '@ngrx/effects'; -import { provideStore } from '@ngrx/store'; -import { provideStoreDevtools } from '@ngrx/store-devtools'; -//// Local -import { routes } from './app.routes'; -import { provideAnimationsAsync } from '@angular/platform-browser/animations/async'; -import { AppEffects } from './store/app/app.effects'; -import { modelProviderEffects } from './store/model-provider/model-provider.effects'; -import { SettingsEffects } from './store/settings/settings.effects'; -import { appReducer } from './store/app/app.reducers'; -import { modelProviderReducer } from './store/model-provider/model-provider.reducers'; -import { settingsReducer } from './store/settings/settings.reducers'; - - -// CONFIG -export const appConfig: ApplicationConfig = { - providers: [ - provideAnimationsAsync(), - provideEffects([AppEffects, modelProviderEffects, SettingsEffects]), - provideHttpClient(), - provideStore({ app_data: appReducer, model_provider: modelProviderReducer, settings: settingsReducer }), - provideStoreDevtools({ - maxAge: 25, - logOnly: false - }), - provideRouter(routes), - provideZoneChangeDetection({ eventCoalescing: true }) - ] -}; diff --git a/app/components/ui/src/app/app.routes.ts b/app/components/ui/src/app/app.routes.ts deleted file mode 100644 index 0f8f38a3..00000000 --- a/app/components/ui/src/app/app.routes.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Routes } from "@angular/router"; -import { HomeComponent } from "./pages/home/home.component"; -import { DashboardComponent } from "./pages/dashboard/dashboard.component"; -import { ChatComponent } from "./pages/chat/chat.component"; -import { ModelGardenComponent } from "./pages/model_garden/model-garden.component"; -import { SettingsComponent } from "./pages/settings/settings.component"; - -export const routes: Routes = [ - { path: "", component: HomeComponent }, - { path: "dashboard", component: DashboardComponent }, - { path: "chat", component: ChatComponent }, - { path: "model-garden", component: ModelGardenComponent }, - { path: "settings", component: SettingsComponent }, -]; diff --git a/app/components/ui/src/app/constants.ts b/app/components/ui/src/app/constants.ts deleted file mode 100644 index 513b4859..00000000 --- a/app/components/ui/src/app/constants.ts +++ /dev/null @@ -1,9 +0,0 @@ -export const Values = { - NOT_LOADED: "not_loaded", -} - -const ROOT = "/"; -export const APIRoutes = { - ROOT, - MODEL_PROVIDER: `${ROOT}model-provider/`, -} diff --git a/app/components/ui/src/app/environment.ts b/app/components/ui/src/app/environment.ts deleted file mode 100644 index 5aa9e8e7..00000000 --- a/app/components/ui/src/app/environment.ts +++ /dev/null @@ -1,5 +0,0 @@ -const defaultClusterURL: string = `http://127.0.0.1`; - -export const environmentURLs = { - controller: defaultClusterURL + ":2349" -}; diff --git a/app/components/ui/src/app/models/app.models.ts b/app/components/ui/src/app/models/app.models.ts deleted file mode 100644 index a5512edc..00000000 --- a/app/components/ui/src/app/models/app.models.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface IAppVersionData { - version: string - authors: string[] - license: string - last_update: string - rebuild_date: string -} diff --git a/app/components/ui/src/app/models/model-provider.models.ts b/app/components/ui/src/app/models/model-provider.models.ts deleted file mode 100644 index c6ee0862..00000000 --- a/app/components/ui/src/app/models/model-provider.models.ts +++ /dev/null @@ -1,13 +0,0 @@ -export interface ILLMModelProvider { - id: string; - model_provider: string; - name: string; - model_name: string; - default: boolean; - max_input_tokens: number; - max_output_tokens: number; - cost_per_million_input_tokens: number; - cost_per_million_output_tokens: number; - knowledge_cutoff: string; - rate_limits: string; -} diff --git a/app/components/ui/src/app/models/settings.models.ts b/app/components/ui/src/app/models/settings.models.ts deleted file mode 100644 index d967bc75..00000000 --- a/app/components/ui/src/app/models/settings.models.ts +++ /dev/null @@ -1,52 +0,0 @@ -// SECTIONS -//// UI -export interface IUISettings { - dark_mode: boolean; - show_footer: boolean; -} - -//// Layers -export interface ILayerSetting { - layer_name: string; - model_type: string; -} - -//// Model Provider -////// Unique Providers -export interface IIndividualProviderSettings { - name: string; - enabled: boolean; - api_key: string; -} - -////// Model Types -export interface ILLMModelTypeSettings { - model_type: string; - model_id: string; - logical_temperature: number; - creative_temperature: number; - output_token_limit: number; -} - -////// Full -export interface IModelProviderSetting { - individual_provider_settings: IIndividualProviderSettings[]; - - three_d_model_type_settings: string[]; - audio_model_type_settings: string[]; - image_model_type_settings: string[]; - llm_model_type_settings: ILLMModelTypeSettings[]; - multimodal_model_type_settings: string[]; - rag_model_type_settings: string[]; - robotics_model_type_settings: string[]; - video_model_type_settings: string[]; -} - - -// FULL SETTINGS -export interface ISettings { - ace_name: string; - ui_settings: IUISettings; - layer_settings: ILayerSetting[]; - model_provider_settings: IModelProviderSetting; -} diff --git a/app/components/ui/src/app/pages/chat/chat.component.html b/app/components/ui/src/app/pages/chat/chat.component.html deleted file mode 100644 index a0cd3a87..00000000 --- a/app/components/ui/src/app/pages/chat/chat.component.html +++ /dev/null @@ -1,3 +0,0 @@ -
-

Chat

-
diff --git a/app/components/ui/src/app/pages/chat/chat.component.scss b/app/components/ui/src/app/pages/chat/chat.component.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/ui/src/app/pages/chat/chat.component.ts b/app/components/ui/src/app/pages/chat/chat.component.ts deleted file mode 100644 index 931b7061..00000000 --- a/app/components/ui/src/app/pages/chat/chat.component.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Component } from "@angular/core"; - -@Component({ - selector: "page-chat", - imports: [], - templateUrl: "./chat.component.html", - styleUrl: "./chat.component.scss" -}) -export class ChatComponent {} diff --git a/app/components/ui/src/app/pages/dashboard/dashboard.component.html b/app/components/ui/src/app/pages/dashboard/dashboard.component.html deleted file mode 100644 index 045c851a..00000000 --- a/app/components/ui/src/app/pages/dashboard/dashboard.component.html +++ /dev/null @@ -1,3 +0,0 @@ -
-

Dashboard

-
diff --git a/app/components/ui/src/app/pages/dashboard/dashboard.component.scss b/app/components/ui/src/app/pages/dashboard/dashboard.component.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/ui/src/app/pages/dashboard/dashboard.component.ts b/app/components/ui/src/app/pages/dashboard/dashboard.component.ts deleted file mode 100644 index 762676bf..00000000 --- a/app/components/ui/src/app/pages/dashboard/dashboard.component.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Component } from "@angular/core"; - -@Component({ - selector: "page-dashboard", - imports: [], - templateUrl: "./dashboard.component.html", - styleUrl: "./dashboard.component.scss" -}) -export class DashboardComponent {} diff --git a/app/components/ui/src/app/pages/home/home.component.html b/app/components/ui/src/app/pages/home/home.component.html deleted file mode 100644 index 6ada622b..00000000 --- a/app/components/ui/src/app/pages/home/home.component.html +++ /dev/null @@ -1,3 +0,0 @@ -
-

Home

-
diff --git a/app/components/ui/src/app/pages/home/home.component.scss b/app/components/ui/src/app/pages/home/home.component.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/ui/src/app/pages/home/home.component.ts b/app/components/ui/src/app/pages/home/home.component.ts deleted file mode 100644 index d597d757..00000000 --- a/app/components/ui/src/app/pages/home/home.component.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Component } from "@angular/core"; - -@Component({ - selector: "page-home", - imports: [], - templateUrl: "./home.component.html", - styleUrl: "./home.component.scss" -}) -export class HomeComponent {} diff --git a/app/components/ui/src/app/pages/model_garden/model-garden.component.html b/app/components/ui/src/app/pages/model_garden/model-garden.component.html deleted file mode 100644 index c5e86298..00000000 --- a/app/components/ui/src/app/pages/model_garden/model-garden.component.html +++ /dev/null @@ -1,3 +0,0 @@ -
-

Model Garden

-
diff --git a/app/components/ui/src/app/pages/model_garden/model-garden.component.scss b/app/components/ui/src/app/pages/model_garden/model-garden.component.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/app/components/ui/src/app/pages/model_garden/model-garden.component.ts b/app/components/ui/src/app/pages/model_garden/model-garden.component.ts deleted file mode 100644 index 78f400bd..00000000 --- a/app/components/ui/src/app/pages/model_garden/model-garden.component.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Component } from "@angular/core"; - -@Component({ - selector: "page-model-garden", - imports: [], - templateUrl: "./model-garden.component.html", - styleUrl: "./model-garden.component.scss" -}) -export class ModelGardenComponent {} diff --git a/app/components/ui/src/app/pages/settings/settings.component.html b/app/components/ui/src/app/pages/settings/settings.component.html deleted file mode 100644 index dd933d4e..00000000 --- a/app/components/ui/src/app/pages/settings/settings.component.html +++ /dev/null @@ -1,90 +0,0 @@ -
-

Settings

- - @if (settingsForm) { -
-

General:

-
- - Ace Name - - @if (aceNameControl?.hasError("required")) { - Please enter a name for the ace - } - @if (aceNameControl?.hasError("maxlength")) { - Max length of 32 characters - } - -
- - - -

UI:

-
- Dark Mode - Show Footer -
- - - -

Model Provider:

-
-

Individual Model Providers:

-
- @for (provider of individualModelProviderSettingsControl.controls; track provider.value?.name; let i = $index) { - @if (provider.get("name")?.value !== "ollama") { -

{{ formatSnakeCase(provider.get('name')?.value) }}

-
- Enabled - - API Key - - -
- } - } -
-
- - - -

ACE Layers:

-
- @for (layerSetting of layerSettingsControl.controls; track layerSetting; let i = $index) { -
-

{{ formatSnakeCase(layerSetting.value?.layer_name || "") }} Layer:

- - Model Type - - @for (type of llmModelTypes; track type) { - {{ formatSnakeCase(type) }} - } - - -
- } -
- - - -

About:

-
-

Developed by {{ appVersionData.authors.join(", ") }}

-

Version: v{{ appVersionData.version }}

-

License: {{ appVersionData.license }}

-

Last Update: {{ appVersionData.last_update }}

-

Last Container Image Update: {{ appVersionData.rebuild_date }}

-

- -
-
- - - } -
diff --git a/app/components/ui/src/app/pages/settings/settings.component.scss b/app/components/ui/src/app/pages/settings/settings.component.scss deleted file mode 100644 index 62facf61..00000000 --- a/app/components/ui/src/app/pages/settings/settings.component.scss +++ /dev/null @@ -1,5 +0,0 @@ -.save-button { - position: sticky; - float: right; - bottom: 1rem; -} diff --git a/app/components/ui/src/app/pages/settings/settings.component.ts b/app/components/ui/src/app/pages/settings/settings.component.ts deleted file mode 100644 index 6a6a8985..00000000 --- a/app/components/ui/src/app/pages/settings/settings.component.ts +++ /dev/null @@ -1,191 +0,0 @@ -// DEPENDENCIES -//// Angular -import { Component, OnInit } from "@angular/core"; -import { Store } from "@ngrx/store"; -import { filter, take } from "rxjs"; -import { FormArray, FormBuilder, FormGroup, ReactiveFormsModule, Validators } from "@angular/forms"; -import { MatButtonModule } from "@angular/material/button"; -import { MatDividerModule } from "@angular/material/divider"; -import { MatIconModule } from "@angular/material/icon"; -import { MatInputModule } from "@angular/material/input"; -import { MatFormFieldModule } from "@angular/material/form-field"; -import { MatSelectModule } from "@angular/material/select"; -import { MatSlideToggleModule } from "@angular/material/slide-toggle"; -//// Local -import { IAppVersionData } from "../../models/app.models"; -import { ILLMModelProvider } from "../../models/model-provider.models"; -import { IModelProviderSetting, ISettings } from "../../models/settings.models"; -import { modelProviderActions } from "../../store/model-provider/model-provider.actions"; -import { selectAppVersionDataState } from "../../store/app/app.selectors"; -import { selectLLMModelTypes } from "../../store/model-provider/model-provider.selectors"; -import { settingsActions } from "../../store/settings/settings.actions"; -import { selectSettingsState } from "../../store/settings/settings.selectors"; - -@Component({ - selector: "page-settings", - imports: [ - ReactiveFormsModule, - MatButtonModule, - MatDividerModule, - MatIconModule, - MatInputModule, - MatFormFieldModule, - MatSelectModule, - MatSlideToggleModule - ], - templateUrl: "./settings.component.html", - styleUrl: "./settings.component.scss" -}) -export class SettingsComponent implements OnInit { - appVersionData!: IAppVersionData; - llmModels: ILLMModelProvider[] = []; - llmModelTypes: string[] = []; - selectedLLMModelType: string = ""; - settings!: ISettings; - - settingsForm!: FormGroup; - generalForm!: FormGroup; - uiSettingsForm!: FormGroup; - modelProviderForm!: FormGroup; - layerSettingsForm!: FormArray; - - changesDetected: boolean = false; - - constructor( - private formBuilder: FormBuilder, - private store: Store - ) { - this.initialiseForm(); - } - - ngOnInit(): void { - this.store.select(selectAppVersionDataState).subscribe( version_data => this.appVersionData = version_data ); - this.store.dispatch(modelProviderActions.getLLMModels()); - this.store.dispatch(modelProviderActions.getLLMModelTypes()); - this.store.select(selectLLMModelTypes).pipe( - filter((model_types: string[]): model_types is string[] => model_types.length > 0), - take(1) - ).subscribe(model_types => { - this.llmModelTypes = model_types; - this.initialiseForm(); - }); - - this.store.dispatch(settingsActions.getSettings()); - this.store.select(selectSettingsState).subscribe(settings => { - this.settings = settings.settings; - this.patchFormValues(); - }); - } - - private initialiseForm(): void { - this.generalForm = this.formBuilder.group({ - ace_name: ["", [Validators.required, Validators.maxLength(32)]] - }); - - this.uiSettingsForm = this.formBuilder.group({ - dark_mode: [true], - show_footer: [true] - }); - - this.layerSettingsForm = this.formBuilder.array([]); - - this.modelProviderForm = this.formBuilder.group({ - individual_provider_settings: this.formBuilder.array([]), - three_d_model_type_settings: this.formBuilder.array([]), - audio_model_type_settings: this.formBuilder.array([]), - image_model_type_settings: this.formBuilder.array([]), - llm_model_type_settings: this.formBuilder.array([]), - rag_model_type_settings: this.formBuilder.array([]) - }); - - this.settingsForm = this.formBuilder.group({ - ...this.generalForm.controls, - ui_settings: this.uiSettingsForm, - layer_settings: this.layerSettingsForm, - model_provider_settings: this.modelProviderForm - }); - - this.settingsForm.valueChanges.subscribe(() => { - this.changesDetected = true; - }); - } - - private patchFormValues(): void { - if (!this.settings) return; - - this.initialiseForm(); - - this.generalForm.patchValue({ - ace_name: this.settings.ace_name, - }); - - this.uiSettingsForm.patchValue({ - dark_mode: this.settings.ui_settings.dark_mode, - show_footer: this.settings.ui_settings.show_footer - }); - - const modelProviderSettings: IModelProviderSetting = this.settings.model_provider_settings; - this.individualModelProviderSettingsControl?.clear(); - - modelProviderSettings.individual_provider_settings.forEach(provider => { - this.individualModelProviderSettingsControl?.push( - this.formBuilder.group({ - name: [provider.name], - enabled: [provider.enabled], - api_key: [provider.api_key] - }) - ); - }); - - this.layerSettingsForm.clear(); - this.settings.layer_settings.forEach(layer => { - this.layerSettingsForm.push( - this.formBuilder.group({ - layer_name: [layer?.layer_name || "", Validators.required], - model_type: [layer?.model_type || "", Validators.required] - }) - ); - }); - - this.settingsForm.markAsPristine(); - this.changesDetected = false; - } - - formatSnakeCase(layerName?: string): string { - return (layerName || "") - .split("_") - .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()) - .join(" "); - } - - onReset() { - this.store.dispatch(settingsActions.resetSettings()); - } - - onSave() { - if (!this.settingsForm.valid) { - return; - } - const updatedSettings = { - ...this.settings, - ...this.settingsForm.value - }; - - this.changesDetected = false; - this.settingsForm.markAsPristine(); - - this.store.dispatch(settingsActions.editSettings({ settings: updatedSettings })); - } - - get aceNameControl() { - return this.generalForm.get("ace_name"); - } - - get individualModelProviderSettingsControl(): FormArray { - return this.modelProviderForm.get("individual_provider_settings") as FormArray; - } - - get layerSettingsControl(): FormArray { - return this.layerSettingsForm; - } -} diff --git a/app/components/ui/src/app/services/app.service.ts b/app/components/ui/src/app/services/app.service.ts deleted file mode 100644 index 978589fd..00000000 --- a/app/components/ui/src/app/services/app.service.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Injectable } from "@angular/core"; -import { HttpClient } from "@angular/common/http"; -import { Observable } from 'rxjs/internal/Observable'; -import { APIRoutes } from "../constants"; -import { environmentURLs } from "../environment"; - - -export type HttpListResponseFailure = { status: string, message: string }; - - -const endpoints = { - getAppVersionData: `${environmentURLs.controller}${APIRoutes.ROOT}version`, -}; - - -@Injectable({ - providedIn: "root" -}) -export class AppService { - constructor(private http: HttpClient) { } - - getAppVersionData(): Observable { - return this.http.get(endpoints.getAppVersionData); - } -} diff --git a/app/components/ui/src/app/services/model-provider.service.ts b/app/components/ui/src/app/services/model-provider.service.ts deleted file mode 100644 index 59316f7c..00000000 --- a/app/components/ui/src/app/services/model-provider.service.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { Injectable } from "@angular/core"; -import { HttpClient } from "@angular/common/http"; -import { Observable } from 'rxjs/internal/Observable'; -import { APIRoutes } from "../constants"; -import { environmentURLs } from "../environment"; - - -export type HttpListResponseFailure = { status: string, message: string }; - -const endpoints = { - getLLMModels: `${environmentURLs.controller}${APIRoutes.MODEL_PROVIDER}llm/models`, - getLLMModelTypes: `${environmentURLs.controller}${APIRoutes.MODEL_PROVIDER}llm/model-types` -}; - - -@Injectable({ - providedIn: "root" -}) -export class ModelProviderService { - constructor(private http: HttpClient) { } - - getLLMModelTypes(): Observable { - return this.http.get(endpoints.getLLMModelTypes); - } - - getLLMModels(): Observable { - return this.http.get(endpoints.getLLMModels); - } -} diff --git a/app/components/ui/src/app/services/settings.service.ts b/app/components/ui/src/app/services/settings.service.ts deleted file mode 100644 index 9b5ef034..00000000 --- a/app/components/ui/src/app/services/settings.service.ts +++ /dev/null @@ -1,39 +0,0 @@ -// DEPENDENCIES -//// Built-In -import { Injectable } from "@angular/core"; -import { HttpClient } from "@angular/common/http"; -import { Observable } from 'rxjs/internal/Observable'; -//// Local -import { APIRoutes } from "../constants"; -import { environmentURLs } from "../environment"; -import { ISettings } from "../models/settings.models"; - - -export type HttpListResponseFailure = { status: string, message: string }; - - -const endpoints = { - getSettings: `${environmentURLs.controller}${APIRoutes.ROOT}settings`, - editSettings: `${environmentURLs.controller}${APIRoutes.ROOT}settings`, - resetSettings: `${environmentURLs.controller}${APIRoutes.ROOT}settings` -}; - - -@Injectable({ - providedIn: "root" -}) -export class SettingsService { - constructor(private http: HttpClient) { } - - getSettings(): Observable { - return this.http.get(endpoints.getSettings); - } - - editSettings(settings: ISettings): Observable { - return this.http.post(endpoints.editSettings, settings); - } - - resetSettings(): Observable { - return this.http.delete(endpoints.resetSettings); - } -} diff --git a/app/components/ui/src/app/state/app.state.ts b/app/components/ui/src/app/state/app.state.ts deleted file mode 100644 index 3c776314..00000000 --- a/app/components/ui/src/app/state/app.state.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { createDefaultLoadable, Loadable } from "./loadable.state"; -import { IAppVersionData } from "../models/app.models"; - -export interface AppState extends Loadable { - version_data: IAppVersionData; -} - -export function createInitialAppState(): AppState { - return { - ...createDefaultLoadable(), - version_data: { - version: "0", - authors: [], - license: "", - last_update: "", - rebuild_date: "" - } - } -} - - diff --git a/app/components/ui/src/app/state/loadable.state.ts b/app/components/ui/src/app/state/loadable.state.ts deleted file mode 100644 index 920f3982..00000000 --- a/app/components/ui/src/app/state/loadable.state.ts +++ /dev/null @@ -1,35 +0,0 @@ -export interface Loadable { - loading: boolean; - error: any; -} - -export function createDefaultLoadable(): Loadable { - return { - loading: false, - error: null, - }; -} - -export function onLoadableLoad(loadable: T): T { - return { - ...(loadable as any), - loading: true, - error: null, - } as T; -} - -export function onLoadableSuccess(loadable: T): T { - return { - ...(loadable as any), - loading: false, - error: null, - } as T; -} - -export function onLoadableError(loadable: T, error: any): T { - return { - ...(loadable as any), - loading: false, - error: error, - } as T; -} diff --git a/app/components/ui/src/app/state/model-provider.state.ts b/app/components/ui/src/app/state/model-provider.state.ts deleted file mode 100644 index 8ec60837..00000000 --- a/app/components/ui/src/app/state/model-provider.state.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { createDefaultLoadable, Loadable } from "./loadable.state"; -import { ILLMModelProvider } from "../models/model-provider.models"; - -export interface ModelProviderLLMState extends Loadable { - models: ILLMModelProvider[], - model_types: string[] -} - -export interface ModelProviderState extends Loadable { - llm: ModelProviderLLMState -} - -export function createInitialModelProviderState(): ModelProviderState { - return { - ...createDefaultLoadable(), - llm: { - ...createDefaultLoadable(), - models: [], - model_types: [] - } - } -} diff --git a/app/components/ui/src/app/state/settings.state.ts b/app/components/ui/src/app/state/settings.state.ts deleted file mode 100644 index 74deea82..00000000 --- a/app/components/ui/src/app/state/settings.state.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { createDefaultLoadable, Loadable } from "./loadable.state"; -import { Values } from '../constants' -import { ISettings } from "../models/settings.models"; - -export interface SettingsState extends Loadable { - settings: ISettings; -} - -export function createInitialSettingsState(): SettingsState { - return { - ...createDefaultLoadable(), - settings: { - ace_name: Values.NOT_LOADED, - ui_settings: { - dark_mode: true, - show_footer: true - }, - layer_settings: [], - model_provider_settings: { - individual_provider_settings: [], - three_d_model_type_settings: [], - audio_model_type_settings: [], - image_model_type_settings: [], - llm_model_type_settings: [ - { - model_type: Values.NOT_LOADED, - model_id: Values.NOT_LOADED, - logical_temperature: 0, - creative_temperature: 0, - output_token_limit: 0 - } - ], - multimodal_model_type_settings: [], - rag_model_type_settings: [], - robotics_model_type_settings: [], - video_model_type_settings: [] - } - } - } -} - - diff --git a/app/components/ui/src/app/store/app/app.actions.ts b/app/components/ui/src/app/store/app/app.actions.ts deleted file mode 100644 index a23f2b89..00000000 --- a/app/components/ui/src/app/store/app/app.actions.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { createActionGroup, props, emptyProps } from "@ngrx/store"; -import { IAppVersionData } from "../../models/app.models"; - -export const appActions = createActionGroup({ - source: "app", - events: { - getAppVersionData: emptyProps(), - getAppVersionDataSuccess: props<{ version_data: IAppVersionData }>(), - getAppVersionDataFailure: props<{ error: Error }>() - }, -}); diff --git a/app/components/ui/src/app/store/app/app.effects.ts b/app/components/ui/src/app/store/app/app.effects.ts deleted file mode 100644 index f00ed801..00000000 --- a/app/components/ui/src/app/store/app/app.effects.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { inject, Injectable } from "@angular/core"; -import { createEffect, ofType, Actions } from "@ngrx/effects"; -import { map, catchError, of, switchMap } from "rxjs"; -import { appActions } from "./app.actions"; -import { IAppVersionData } from "../../models/app.models"; -import { AppService } from "../../services/app.service"; - - -@Injectable() -export class AppEffects { - private actions$ = inject(Actions); - - getACEVersionData$ = createEffect(() => this.actions$.pipe( - ofType(appActions.getAppVersionData), - switchMap(() => this.appService.getAppVersionData().pipe( - map((version_data: IAppVersionData) => appActions.getAppVersionDataSuccess({ version_data })), - catchError(error => of(appActions.getAppVersionDataFailure({ error }))) - )) - )) - - constructor( - private appService: AppService - ) { } -} diff --git a/app/components/ui/src/app/store/app/app.reducers.ts b/app/components/ui/src/app/store/app/app.reducers.ts deleted file mode 100644 index 9fba4927..00000000 --- a/app/components/ui/src/app/store/app/app.reducers.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { createReducer, on } from "@ngrx/store"; -import { onLoadableError, onLoadableLoad, onLoadableSuccess } from "../../state/loadable.state"; -import { appActions } from "./app.actions"; -import { createInitialAppState } from "../../state/app.state"; - -export const appReducer = createReducer( - createInitialAppState(), - on(appActions.getAppVersionData, state => ({...onLoadableLoad(state)})), - on(appActions.getAppVersionDataSuccess, (state, { version_data }) => ({...onLoadableSuccess(state), version_data: {...version_data}})), - on(appActions.getAppVersionDataFailure, (state, { error }) => ({...onLoadableError(state, error)})) -) diff --git a/app/components/ui/src/app/store/app/app.selectors.ts b/app/components/ui/src/app/store/app/app.selectors.ts deleted file mode 100644 index 86260c17..00000000 --- a/app/components/ui/src/app/store/app/app.selectors.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { createSelector, createFeatureSelector } from "@ngrx/store"; -import { AppState } from "../../state/app.state"; - -export const selectAppState = createFeatureSelector("app_data"); -export const selectAppVersionDataState = createSelector(selectAppState, (state: AppState) => state.version_data); diff --git a/app/components/ui/src/app/store/model-provider/model-provider.actions.ts b/app/components/ui/src/app/store/model-provider/model-provider.actions.ts deleted file mode 100644 index f691e8a6..00000000 --- a/app/components/ui/src/app/store/model-provider/model-provider.actions.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { createActionGroup, props, emptyProps } from "@ngrx/store"; -import { ILLMModelProvider } from "../../models/model-provider.models"; - -export const modelProviderActions = createActionGroup({ - source: "model_provider", - events: { - getLLMModels: emptyProps(), - getLLMModelsSuccess: props<{ models: ILLMModelProvider[] }>(), - getLLMModelsFailure: props<{ error: Error }>(), - getLLMModelTypes: emptyProps(), - getLLMModelTypesSuccess: props<{ model_types: string[] }>(), - getLLMModelTypesFailure: props<{ error: Error }>() - }, -}); diff --git a/app/components/ui/src/app/store/model-provider/model-provider.effects.ts b/app/components/ui/src/app/store/model-provider/model-provider.effects.ts deleted file mode 100644 index 0927fb69..00000000 --- a/app/components/ui/src/app/store/model-provider/model-provider.effects.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { inject, Injectable } from "@angular/core"; -import { createEffect, ofType, Actions } from "@ngrx/effects"; -import { map, catchError, of, switchMap } from "rxjs"; -import { modelProviderActions } from "./model-provider.actions"; -import { ILLMModelProvider } from "../../models/model-provider.models"; -import { ModelProviderService } from "../../services/model-provider.service"; - - -@Injectable() -export class modelProviderEffects { - private actions$ = inject(Actions); - - getLLMModels$ = createEffect(() => this.actions$.pipe( - ofType(modelProviderActions.getLLMModels), - switchMap(() => this.modelProviderService.getLLMModels().pipe( - map((models: ILLMModelProvider[]) => modelProviderActions.getLLMModelsSuccess({ models })), - catchError(error => of(modelProviderActions.getLLMModelsFailure({ error }))) - )) - )) - - getLLMModelTypes$ = createEffect(() => this.actions$.pipe( - ofType(modelProviderActions.getLLMModelTypes), - switchMap(() => this.modelProviderService.getLLMModelTypes().pipe( - map((model_types: string[]) => modelProviderActions.getLLMModelTypesSuccess({ model_types })), - catchError(error => of(modelProviderActions.getLLMModelTypesFailure({ error }))) - )) - )) - - constructor( - private modelProviderService: ModelProviderService - ) { } -} diff --git a/app/components/ui/src/app/store/model-provider/model-provider.reducers.ts b/app/components/ui/src/app/store/model-provider/model-provider.reducers.ts deleted file mode 100644 index 4e29710b..00000000 --- a/app/components/ui/src/app/store/model-provider/model-provider.reducers.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { createReducer, on } from "@ngrx/store"; -import { onLoadableError, onLoadableLoad, onLoadableSuccess } from "../../state/loadable.state"; -import { modelProviderActions } from "./model-provider.actions"; -import { createInitialModelProviderState } from "../../state/model-provider.state"; - -export const modelProviderReducer = createReducer( - createInitialModelProviderState(), - on(modelProviderActions.getLLMModels, state => ({ - ...state, - llm: { - ...state.llm, - ...onLoadableLoad(state.llm) - } - })), - on(modelProviderActions.getLLMModelsSuccess, (state, { models }) => ({ - ...state, - llm: { - ...state.llm, - ...onLoadableSuccess(state.llm), - models: models - } - })), - on(modelProviderActions.getLLMModelsFailure, (state, { error }) => ({ - ...state, - llm: { - ...state.llm, - ...onLoadableError(state.llm, error) - } - })), - on(modelProviderActions.getLLMModelTypes, state => ({ - ...state, - llm: { - ...state.llm, - ...onLoadableLoad(state.llm) - } - })), - on(modelProviderActions.getLLMModelTypesSuccess, (state, { model_types }) => ({ - ...state, - llm: { - ...state.llm, - ...onLoadableSuccess(state.llm), - model_types: model_types - } - })), - on(modelProviderActions.getLLMModelTypesFailure, (state, { error }) => ({ - ...state, - llm: { - ...state.llm, - ...onLoadableError(state.llm, error) - } - })) -) diff --git a/app/components/ui/src/app/store/model-provider/model-provider.selectors.ts b/app/components/ui/src/app/store/model-provider/model-provider.selectors.ts deleted file mode 100644 index 10cc0209..00000000 --- a/app/components/ui/src/app/store/model-provider/model-provider.selectors.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { createFeatureSelector, createSelector } from "@ngrx/store"; -import { ModelProviderState } from "../../state/model-provider.state"; - -export const selectModelProviderState = createFeatureSelector("model_provider"); -export const selectLLMModels = createSelector(selectModelProviderState, (state: ModelProviderState) => state.llm.models); -export const selectLLMModelTypes = createSelector(selectModelProviderState, (state: ModelProviderState) => state.llm.model_types); diff --git a/app/components/ui/src/app/store/settings/settings.actions.ts b/app/components/ui/src/app/store/settings/settings.actions.ts deleted file mode 100644 index bb61a909..00000000 --- a/app/components/ui/src/app/store/settings/settings.actions.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { createActionGroup, props, emptyProps } from "@ngrx/store"; -import { ISettings } from "../../models/settings.models"; - -export const settingsActions = createActionGroup({ - source: "settings", - events: { - getSettings: emptyProps(), - getSettingsSuccess: props<{ settings: ISettings }>(), - getSettingsFailure: props<{ error: Error }>(), - editSettings: props<{ settings: ISettings }>(), - editSettingsSuccess: emptyProps(), - editSettingsFailure: props<{ error: Error }>(), - resetSettings: emptyProps(), - resetSettingsSuccess: emptyProps(), - resetSettingsFailure: props<{ error: Error }>() - }, -}); diff --git a/app/components/ui/src/app/store/settings/settings.effects.ts b/app/components/ui/src/app/store/settings/settings.effects.ts deleted file mode 100644 index f1faf3d5..00000000 --- a/app/components/ui/src/app/store/settings/settings.effects.ts +++ /dev/null @@ -1,53 +0,0 @@ -// DEPENDENCIES -//// Angular -import { inject, Injectable } from "@angular/core"; -import { createEffect, ofType, Actions } from "@ngrx/effects"; -import { map, catchError, of, switchMap } from "rxjs"; -//// Local -import { settingsActions } from "./settings.actions"; -import { ISettings } from "../../models/settings.models"; -import { SettingsService } from "../../services/settings.service"; - - -@Injectable() -export class SettingsEffects { - private actions$ = inject(Actions); - - getSettings$ = createEffect(() => this.actions$.pipe( - ofType(settingsActions.getSettings), - switchMap(() => this.settingsService.getSettings().pipe( - map((settings: ISettings) => settingsActions.getSettingsSuccess({ settings })), - catchError(error => of(settingsActions.getSettingsFailure({ error }))) - )) - )) - - editSettings$ = createEffect(() => this.actions$.pipe( - ofType(settingsActions.editSettings), - switchMap(({ settings }) => this.settingsService.editSettings(settings).pipe( - map(() => settingsActions.getSettings()), - catchError(error => of(settingsActions.editSettingsFailure({ error }))) - )) - )) - - editSettingsSuccess$ = createEffect(() => this.actions$.pipe( - ofType(settingsActions.editSettingsSuccess), - map(() => settingsActions.getSettings()) - )); - - resetSettings$ = createEffect(() => this.actions$.pipe( - ofType(settingsActions.resetSettings), - switchMap(() => this.settingsService.resetSettings().pipe( - map(() => settingsActions.resetSettingsSuccess()), - catchError(error => of(settingsActions.resetSettingsFailure({ error }))) - )) - )) - - resetSettingsSuccess$ = createEffect(() => this.actions$.pipe( - ofType(settingsActions.resetSettingsSuccess), - map(() => settingsActions.getSettings()) - )); - - constructor( - private settingsService: SettingsService - ) { } -} diff --git a/app/components/ui/src/app/store/settings/settings.reducers.ts b/app/components/ui/src/app/store/settings/settings.reducers.ts deleted file mode 100644 index dd6c8616..00000000 --- a/app/components/ui/src/app/store/settings/settings.reducers.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { createReducer, on } from "@ngrx/store"; -import { onLoadableError, onLoadableLoad, onLoadableSuccess } from "../../state/loadable.state"; -import { settingsActions } from "./settings.actions"; -import { createInitialSettingsState } from "../../state/settings.state"; - -export const settingsReducer = createReducer( - createInitialSettingsState(), - on(settingsActions.getSettings, state => ({...onLoadableLoad(state)})), - on(settingsActions.getSettingsSuccess, (state, { settings }) => ({...onLoadableSuccess(state), settings: {...settings}})), - on(settingsActions.getSettingsFailure, (state, { error }) => ({...onLoadableError(state, error)})) -) diff --git a/app/components/ui/src/app/store/settings/settings.selectors.ts b/app/components/ui/src/app/store/settings/settings.selectors.ts deleted file mode 100644 index b7eb338e..00000000 --- a/app/components/ui/src/app/store/settings/settings.selectors.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { createFeatureSelector, createSelector } from "@ngrx/store"; -import { SettingsState } from "../../state/settings.state"; - -export const selectSettingsState = createFeatureSelector("settings"); diff --git a/app/components/ui/src/app/theme.ts b/app/components/ui/src/app/theme.ts deleted file mode 100644 index dff6206b..00000000 --- a/app/components/ui/src/app/theme.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { Injectable, signal } from '@angular/core'; -import { BehaviorSubject } from 'rxjs'; - -@Injectable({ - providedIn: 'root' -}) -export class ThemeService { - private darkModeSubject = new BehaviorSubject(false); - darkMode$ = this.darkModeSubject.asObservable(); - - setDarkMode(enabled: boolean) { - this.darkModeSubject.next(enabled); - if (enabled) { - document.body.classList.add('dark'); - } else { - document.body.classList.remove('dark'); - } - } -} diff --git a/app/components/ui/src/index.html b/app/components/ui/src/index.html deleted file mode 100644 index f85205d2..00000000 --- a/app/components/ui/src/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - Ui - - - - - - - - - - diff --git a/app/components/ui/src/main.ts b/app/components/ui/src/main.ts deleted file mode 100644 index df42ea9e..00000000 --- a/app/components/ui/src/main.ts +++ /dev/null @@ -1,9 +0,0 @@ -// DEPENDENCIES -//// Angular -import { bootstrapApplication } from '@angular/platform-browser'; -//// Local -import { appConfig } from './app/app.config'; -import { AppComponent } from './app/app.component'; - - -bootstrapApplication(AppComponent, appConfig).catch((err) => console.error(err)); diff --git a/app/components/ui/src/styles.scss b/app/components/ui/src/styles.scss deleted file mode 100644 index ee87f520..00000000 --- a/app/components/ui/src/styles.scss +++ /dev/null @@ -1,30 +0,0 @@ -/* You can add global styles to this file, and also import other style files */ - -html, body { - height: 100%; - overscroll-behavior: none; -} -body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } - -.main-page { - position: relative; - padding-top: 1rem; - padding-left: 3rem; - padding-right: 3rem; - padding-bottom: 1rem; -} - -.subsection { - display: flex; - padding-left: 1rem; - padding-right: 1rem; - flex-direction: column; - - &.multi-input { - row-gap: 0.75rem; - } - - .subsection-divider { - margin-top: 1rem; - } -} diff --git a/app/components/ui/src/theme.scss b/app/components/ui/src/theme.scss deleted file mode 100644 index 2f53fa75..00000000 --- a/app/components/ui/src/theme.scss +++ /dev/null @@ -1,128 +0,0 @@ -/* These tokens are generated using https://themes.angular-material.dev/ */ -/* Preview: https://themes.angular-material.dev/?seed-error=%23ffb4ab&seed-neutral=%23767778&seed-neutral-variant=%2371787a&seed-primary=%233D636B&seed-secondary=%23bac9cd&seed-tertiary=%23d1c0e4 */ -/* Seed Colors: primary: #3D636B, secondary: #bac9cd, tertiary: #d1c0e4, error: #ffb4ab, neutral: #767778, neutral-variant: #71787a */ - -@use "@angular/material" as mat; - - -/* Light Theme */ -:root, :host { - @include mat.theme-overrides(( - primary: #3e646c, - on-primary: #ffffff, - primary-container: #c1e9f3, - on-primary-container: #001f25, - inverse-primary: #a6cdd6, - primary-fixed: #c1e9f3, - primary-fixed-dim: #a6cdd6, - on-primary-fixed: #001f25, - on-primary-fixed-variant: #254c54, - secondary: #536164, - on-secondary: #ffffff, - secondary-container: #d6e5e9, - on-secondary-container: #101e21, - secondary-fixed: #d6e5e9, - secondary-fixed-dim: #bac9cd, - on-secondary-fixed: #101e21, - on-secondary-fixed-variant: #3b494d, - tertiary: #665978, - on-tertiary: #ffffff, - tertiary-container: #eddcff, - on-tertiary-container: #211631, - tertiary-fixed: #eddcff, - tertiary-fixed-dim: #d1c0e4, - on-tertiary-fixed: #211631, - on-tertiary-fixed-variant: #4e415f, - background: #fcf8f8, - on-background: #1c1b1b, - surface: #fcf8f8, - surface-dim: #ddd9d9, - surface-bright: #fcf8f8, - surface-container-lowest: #ffffff, - surface-container-low: #f7f3f2, - surface-container: #f1edec, - surface-container-high: #ebe7e7, - surface-container-highest: #e5e2e1, - on-surface: #1c1b1b, - shadow: #000000, - scrim: #000000, - surface-tint: #5d5e5f, - inverse-surface: #313030, - inverse-on-surface: #f4f0ef, - outline: #747779, - outline-variant: #c3c7c8, - neutral: #797776, - neutral10: #1c1b1b, - error: #ba1a1a, - error-container: #ffdad6, - on-error: #ffffff, - on-error-container: #410002, - surface-variant: #dfe3e4, - on-surface-variant: #434749, - neutral-variant: #747879, - neutral-variant20: #2d3132, - inverse-secondary: #bac9cd, - inverse-tertiary: #d1c0e4, - )); -} - -/* Dark Theme */ -.dark { - @include mat.theme-overrides(( - primary: #a6cdd6, - on-primary: #0a353d, - primary-container: #254c54, - on-primary-container: #c1e9f3, - inverse-primary: #3e646c, - primary-fixed: #c1e9f3, - primary-fixed-dim: #a6cdd6, - on-primary-fixed: #001f25, - on-primary-fixed-variant: #254c54, - secondary: #bac9cd, - on-secondary: #253336, - secondary-container: #3b494d, - on-secondary-container: #d6e5e9, - secondary-fixed: #d6e5e9, - secondary-fixed-dim: #bac9cd, - on-secondary-fixed: #101e21, - on-secondary-fixed-variant: #3b494d, - tertiary: #d1c0e4, - on-tertiary: #372b47, - tertiary-container: #4e415f, - on-tertiary-container: #eddcff, - tertiary-fixed: #eddcff, - tertiary-fixed-dim: #d1c0e4, - on-tertiary-fixed: #211631, - on-tertiary-fixed-variant: #4e415f, - background: #141313, - on-background: #e5e2e1, - surface: #141313, - surface-dim: #141313, - surface-bright: #3a3939, - surface-container-lowest: #0e0e0e, - surface-container-low: #1c1b1b, - surface-container: #201f1f, - surface-container-high: #2a2a2a, - surface-container-highest: #353434, - on-surface: #e5e2e1, - shadow: #000000, - scrim: #000000, - surface-tint: #c6c6c7, - inverse-surface: #e5e2e1, - inverse-on-surface: #313030, - outline: #8e9193, - outline-variant: #434749, - neutral: #797776, - neutral10: #1c1b1b, - error: #ffb4ab, - error-container: #93000a, - on-error: #690005, - on-error-container: #ffdad6, - surface-variant: #434749, - on-surface-variant: #c3c7c8, - neutral-variant: #747879, - neutral-variant20: #2d3132, - inverse-secondary: #536164, - inverse-tertiary: #665978, - )); -} diff --git a/app/components/ui/start.py b/app/components/ui/start.py deleted file mode 100644 index 6899a0e8..00000000 --- a/app/components/ui/start.py +++ /dev/null @@ -1,15 +0,0 @@ -# DEPENDENCIES -## Built-in -import os -## Local -from constants import ShellCommands -from logger import logger -from shell import execute_shell - -def start_ui(component_type: str, dev: bool) -> None: - logger.startup(f"Starting {component_type}...") - module_path: str = os.path.dirname(os.path.abspath(__file__)) - os.chdir(module_path) - execute_shell(ShellCommands.INSTALL_NPM_DEPENDENCIES) - if dev: - execute_shell(ShellCommands.RUN_UI_DEV) diff --git a/app/components/ui/tsconfig.app.json b/app/components/ui/tsconfig.app.json deleted file mode 100644 index 3775b37e..00000000 --- a/app/components/ui/tsconfig.app.json +++ /dev/null @@ -1,15 +0,0 @@ -/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ -/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/app", - "types": [] - }, - "files": [ - "src/main.ts" - ], - "include": [ - "src/**/*.d.ts" - ] -} diff --git a/app/components/ui/tsconfig.json b/app/components/ui/tsconfig.json deleted file mode 100644 index 5525117c..00000000 --- a/app/components/ui/tsconfig.json +++ /dev/null @@ -1,27 +0,0 @@ -/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ -/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ -{ - "compileOnSave": false, - "compilerOptions": { - "outDir": "./dist/out-tsc", - "strict": true, - "noImplicitOverride": true, - "noPropertyAccessFromIndexSignature": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "skipLibCheck": true, - "isolatedModules": true, - "esModuleInterop": true, - "experimentalDecorators": true, - "moduleResolution": "bundler", - "importHelpers": true, - "target": "ES2022", - "module": "ES2022" - }, - "angularCompilerOptions": { - "enableI18nLegacyMessageIdFormat": false, - "strictInjectionParameters": true, - "strictInputAccessModifiers": true, - "strictTemplates": true - } -} diff --git a/app/components/ui/tsconfig.spec.json b/app/components/ui/tsconfig.spec.json deleted file mode 100644 index 5fb748d9..00000000 --- a/app/components/ui/tsconfig.spec.json +++ /dev/null @@ -1,15 +0,0 @@ -/* To learn more about Typescript configuration file: https://www.typescriptlang.org/docs/handbook/tsconfig-json.html. */ -/* To learn more about Angular compiler options: https://angular.dev/reference/configs/angular-compiler-options. */ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "./out-tsc/spec", - "types": [ - "jasmine" - ] - }, - "include": [ - "src/**/*.spec.ts", - "src/**/*.d.ts" - ] -} diff --git a/app/constants/__init__.py b/app/constants/__init__.py deleted file mode 100644 index 96e898ad..00000000 --- a/app/constants/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -from .api_routes import APIRoutes -from .components import Components -from .container_folders import ContainerFolders -from .defaults import Defaults -from .dict_keys import DictKeys -from .environment_variables import EnvironmentVariables -from .folders import Folders # Folders need to be created before files! -from .files import Files -from .layer_types import LayerTypes -from .logger import CustomLogLevels, TERMINAL_COLOR_CODES -from .model_providers import ModelProviders -from .model_types import ModelTypes, ThreeDModelTypes, ImageModelTypes, AudioModelTypes, LLMModelTypes, MultiModalModelTypes, RAGModelTypes, RoboticsModelTypes, VideoModelTypes -from .names import Names -from .network import NetworkPorts -from .shell_commands import ShellCommands diff --git a/app/constants/api_routes.py b/app/constants/api_routes.py deleted file mode 100644 index 0d0f159d..00000000 --- a/app/constants/api_routes.py +++ /dev/null @@ -1,9 +0,0 @@ -# DEPENDENCIES -## Local -from .base_enum import BaseEnum - - -class APIRoutes(BaseEnum): - """Enum""" - ROOT: str = "/" - MODEL_PROVIDER: str = f"{ROOT}model-provider/" diff --git a/app/constants/base_enum.py b/app/constants/base_enum.py deleted file mode 100644 index 00a2693b..00000000 --- a/app/constants/base_enum.py +++ /dev/null @@ -1,39 +0,0 @@ -# DEPENDENCIES -## Built-in -from abc import ABC -import inspect - - -# ENUMS -class BaseEnum(ABC): - """Base Enum Class""" - _ALLOWED_ENUM_TYPES: tuple[type, ...] = (str, int, float) - - def __init_subclass__(cls, **kwargs): - super().__init_subclass__(**kwargs) - for attr_name in dir(cls): - if attr_name.startswith("__") or attr_name.startswith("_"): - continue - # Skip methods - attr = getattr(cls, attr_name) - if inspect.ismethod(attr) or inspect.isfunction(attr): - continue - if not isinstance(attr, cls._ALLOWED_ENUM_TYPES): - raise TypeError(f"Attribute '{attr_name}' must be of type {cls._ALLOWED_ENUM_TYPES}") - - @classmethod - def get_dict(cls) -> dict[str, str]: - base_enum_dict: dict[str, str] = { - variable_name: value - for variable_name, value in vars(cls).items() - if not variable_name.startswith("__") and not variable_name.startswith("_") - } - return base_enum_dict - - @classmethod - def get_tuple(cls) -> tuple[str, ...]: - return tuple(cls.get_dict().values()) - - @classmethod - def get_frozenset(cls) -> frozenset[str]: - return frozenset(cls.get_tuple()) diff --git a/app/constants/components.py b/app/constants/components.py deleted file mode 100644 index 7c6d994c..00000000 --- a/app/constants/components.py +++ /dev/null @@ -1,20 +0,0 @@ -# DEPENDENCIES -## Local -from .base_enum import BaseEnum - - -class Components(BaseEnum): - """Enum""" - CONTROLLER: str = "controller" - UI: str = "ui" - QUEUE: str = "queue" - TELEMETRY: str = "telemetry" - ACTIONS: str = "actions" - MEMORY: str = "memory" - MODEL_PROVIDER: str = "model_provider" - ASPIRATIONAL: str = "aspirational" - GLOBAL_STRATEGY: str = "global_strategy" - AGENT_MODEL: str = "agent_model" - EXECUTIVE_FUNCTION: str = "executive_function" - COGNITIVE_CONTROL: str = "cognitive_control" - TASK_PROSECUTION: str = "task_prosecution" diff --git a/app/constants/container_folders.py b/app/constants/container_folders.py deleted file mode 100644 index 77875aba..00000000 --- a/app/constants/container_folders.py +++ /dev/null @@ -1,17 +0,0 @@ -# DEPENDENCIES -## Local -from .base_enum import BaseEnum -from .folders import Folders - - -class ContainerFolders(BaseEnum): - """Enum""" - APP_DIR: str = "/home/ace/" - # Logging - LOGS: str = f"{APP_DIR}{Folders.LOGS}" - # Storage - STORAGE: str = f"{APP_DIR}{Folders.STORAGE}" - CONTROLLER_STORAGE: str = f"{STORAGE}controller" - LAYERS_STORAGE: str = f"{STORAGE}layers" - MODEL_PROVIDER_STORAGE: str = f"{STORAGE}model_provider" - OUTPUT_STORAGE: str = f"{STORAGE}output" diff --git a/app/constants/defaults.py b/app/constants/defaults.py deleted file mode 100644 index 3472c9d4..00000000 --- a/app/constants/defaults.py +++ /dev/null @@ -1,17 +0,0 @@ -# DEPENDENCIES -## Local -from .base_enum import BaseEnum - - -class Defaults(BaseEnum): - # API - INTERNAL_SERVER_ERROR_MESSAGE: str = "Server experienced an internal error!" - # Layers - ACE_NAME: str = "PrototypeACE" - # Model Provider - CREATIVE_TEMPERATURE: float = 0.7 - LOGICAL_TEMPERATURE: float = 0.2 - OUTPUT_TOKEN_LIMIT: int = 2048 - # Logger - TERMINAL_COLOR_CODE: str = "\033[0m" # Default color - SHUTDOWN_MESSAGE: str = "Shutting down logger..." diff --git a/app/constants/dict_keys.py b/app/constants/dict_keys.py deleted file mode 100644 index 7f0fe16b..00000000 --- a/app/constants/dict_keys.py +++ /dev/null @@ -1,22 +0,0 @@ -# DEPENDENCIES -# Local -from .base_enum import BaseEnum - - -class DictKeys(BaseEnum): - ACE_NAME: str = "ace_name" - DEV: str = "dev" - BUILD: str = "build" - FUNCTION_NAME: str = "function_name" - LAYER_SETTINGS: str = "layer_settings" - LEVEL: str = "level" - MESSAGE: str = "message" - MODEL_PROVIDER: str = "model_provider" - MODEL_PROVIDER_SETTINGS: str = "model_provider_settings" - PROD: str = "prod" - REBUILD_DATE: str = "rebuild_date" - RESTART: str = "restart" - STACKTRACE: str = "stacktrace" - STOP: str = "stop" - TEMPERATURE: str = "temperature" - TIMESTAMP: str = "timestamp" diff --git a/app/constants/environment_variables.py b/app/constants/environment_variables.py deleted file mode 100644 index 744883f3..00000000 --- a/app/constants/environment_variables.py +++ /dev/null @@ -1,8 +0,0 @@ -# DEPENDENCIES -# Local -from .base_enum import BaseEnum - - -class EnvironmentVariables(BaseEnum): - LOG_FILE_NAME: str = "ACE_LOGGER_FILE_NAME" - LOGGER_VERBOSE: str = "ACE_LOGGER_VERBOSE" diff --git a/app/constants/files.py b/app/constants/files.py deleted file mode 100644 index 31f23f5b..00000000 --- a/app/constants/files.py +++ /dev/null @@ -1,116 +0,0 @@ -# DEPENDENCIES -## Built-in -import os -import json -## Local -from .base_enum import BaseEnum -from .components import Components -from .container_folders import ContainerFolders -from .environment_variables import EnvironmentVariables -from .folders import Folders -from .names import Names -from .network import NetworkPorts - - -class Files(BaseEnum): - """Enum""" - # Containers - CONTAINERFILE: str = f"{Folders.CONTAINERS}Containerfile" - TEMPLATE_DEPLOYMENT_FILE: str = f"{Folders.CONTAINERS}template_deployment.yaml" - USER_DEPLOYMENT_FILE: str = f"{Folders.CONTAINERS}.user_deployment.yaml" - # Startup - STARTUP_HISTORY: str = f"{Folders.STORAGE}.startup_history" - VERSION: str = "version" - # Storage - CONTROLLER_SETTINGS: str = f"{Folders.CONTROLLER_STORAGE}.settings" - CONTROLLER_THREE_D_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.three_d_models" - CONTROLLER_AUDIO_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.audio_models" - CONTROLLER_IMAGE_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.image_models" - CONTROLLER_LLM_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.llm_models" - CONTROLLER_MULTIMODAL_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.multimodal_models" - CONTROLLER_RAG_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.rag_models" - CONTROLLER_ROBOTICS_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.robotics_models" - CONTROLLER_VIDEO_MODELS: str = f"{Folders.CONTROLLER_MODEL_TYPES}.video_models" - - -# INIT -_ENSURE_JSON_FILES: frozenset[str] = frozenset([ - Files.STARTUP_HISTORY, - Files.CONTROLLER_SETTINGS, - Files.CONTROLLER_THREE_D_MODELS, - Files.CONTROLLER_AUDIO_MODELS, - Files.CONTROLLER_IMAGE_MODELS, - Files.CONTROLLER_LLM_MODELS, - Files.CONTROLLER_MULTIMODAL_MODELS, - Files.CONTROLLER_RAG_MODELS, - Files.CONTROLLER_ROBOTICS_MODELS, - Files.CONTROLLER_VIDEO_MODELS -]) -def _ensure_json_files(): - for file in _ENSURE_JSON_FILES: - if not os.path.isfile(file): - with open(file, "w", encoding="utf-8") as file: - json.dump({}, file) -_ensure_json_files() - -_DEPLOYMENT_REPLACE_KEYWORDS: dict[str, str] = { - "{{ ace_pod_name }}": Names.ACE, - "{{ ace_image_name }}": Names.FULL_IMAGE, - "{{ start_command }}": """python3\n - component.py\n - --{{ env }}""", - "{{ app_host_path }}": os.getcwd(), - "{{ app_container_path }}": ContainerFolders.APP_DIR, - "{{ app_volume }}": f"{Names.ACE}_app_{Names.VOLUME}", - "{{ logs_host_path }}": Folders.HOST_LOGS, - "{{ logs_container_path }}": ContainerFolders.LOGS, - "{{ logs_volume }}": f"{Names.ACE}_logs_{Names.VOLUME}", - "{{ logger_name_env }}": EnvironmentVariables.LOG_FILE_NAME, - "{{ logger_verbose_env }}": EnvironmentVariables.LOGGER_VERBOSE, - "{{ controller_name }}": Components.CONTROLLER, - "{{ controller_port }}": NetworkPorts.CONTROLLER, - "{{ ui_name }}": Components.UI, - "{{ ui_port }}": NetworkPorts.UI, - "{{ queue_name }}": Components.QUEUE, - "{{ queue_port }}": NetworkPorts.QUEUE, - "{{ model_provider_name }}": Components.MODEL_PROVIDER, - "{{ model_provider_port }}": NetworkPorts.MODEL_PROVIDER, - "{{ telemetry_name }}": Components.TELEMETRY, - "{{ telemetry_port }}": NetworkPorts.TELEMETRY, - "{{ actions_name }}": Components.ACTIONS, - "{{ actions_port }}": NetworkPorts.ACTIONS, - "{{ memory_name }}": Components.MEMORY, - "{{ memory_port }}": NetworkPorts.MEMORY, - "{{ aspirational_name }}": Components.ASPIRATIONAL, - "{{ aspirational_port }}": NetworkPorts.ASPIRATIONAL, - "{{ global_strategy_name }}": Components.GLOBAL_STRATEGY, - "{{ global_strategy_port }}": NetworkPorts.GLOBAL_STRATEGY, - "{{ agent_model_name }}": Components.AGENT_MODEL, - "{{ agent_model_port }}": NetworkPorts.AGENT_MODEL, - "{{ executive_function_name }}": Components.EXECUTIVE_FUNCTION, - "{{ executive_function_port }}": NetworkPorts.EXECUTIVE_FUNCTION, - "{{ cognitive_control_name }}": Components.COGNITIVE_CONTROL, - "{{ cognitive_control_port }}": NetworkPorts.COGNITIVE_CONTROL, - "{{ task_prosecution_name }}": Components.TASK_PROSECUTION, - "{{ task_prosecution_port }}": NetworkPorts.TASK_PROSECUTION, - "{{ controller_host_path }}": Folders.CONTROLLER_STORAGE, - "{{ controller_container_path }}": ContainerFolders.CONTROLLER_STORAGE, - "{{ controller_volume }}": f"{Names.ACE}_{Components.CONTROLLER}_{Names.VOLUME}", - "{{ output_host_path }}": Folders.OUTPUT_STORAGE, - "{{ output_container_path }}": ContainerFolders.OUTPUT_STORAGE, - "{{ output_volume }}": f"{Names.ACE}_output_{Names.VOLUME}" -} -def setup_user_deployment_file(dev: bool): - """Sets up the user deployment file""" - if os.path.isfile(Files.USER_DEPLOYMENT_FILE): - os.remove(Files.USER_DEPLOYMENT_FILE) - with open(Files.TEMPLATE_DEPLOYMENT_FILE, "r", encoding="utf-8") as template_deployment_file: - deployment_string: str = template_deployment_file.read() - template_deployment_file.close() - dev_env: str = "" if dev else "." - deployment_string = deployment_string.replace("{{ dev_env }}", dev_env) - for key, replace_string in _DEPLOYMENT_REPLACE_KEYWORDS.items(): - if key == "{{ start_command }}": - replace_string = replace_string.replace("{{ env }}", "dev" if dev else "prod") - deployment_string = deployment_string.replace(key, replace_string) - with open(Files.USER_DEPLOYMENT_FILE, "w", encoding="utf-8") as user_deployment_file: - user_deployment_file.write(deployment_string) - user_deployment_file.close() diff --git a/app/constants/folders.py b/app/constants/folders.py deleted file mode 100644 index 4247bc07..00000000 --- a/app/constants/folders.py +++ /dev/null @@ -1,35 +0,0 @@ -# DEPENDENCIES -## Built-In -import os -## Local -from .base_enum import BaseEnum - - -class Folders(BaseEnum): - """Enum""" - # Containers - CONTAINERS: str = "containers/" - # Logging - LOGS: str = ".logs/" - HOST_LOGS: str = f"{os.getcwd()}/{LOGS}" - # Storage - STORAGE: str = ".storage/" - _HOST_STORAGE: str = f"{os.getcwd()}/{STORAGE}" - CONTROLLER_STORAGE: str = f"{_HOST_STORAGE}controller/" - CONTROLLER_MODEL_TYPES: str = f"{CONTROLLER_STORAGE}model_types/" - OUTPUT_STORAGE: str = f"{_HOST_STORAGE}output/" - - -# INIT -_ENSURED_FOLDERS: tuple[str, ...] = ( - Folders.LOGS, - Folders.STORAGE, - Folders.CONTROLLER_STORAGE, - Folders.CONTROLLER_MODEL_TYPES, - Folders.OUTPUT_STORAGE -) - -def _ensure_folders(): - for path in _ENSURED_FOLDERS: - os.makedirs(path, exist_ok=True) -_ensure_folders() diff --git a/app/constants/layer_types.py b/app/constants/layer_types.py deleted file mode 100644 index 8b45a521..00000000 --- a/app/constants/layer_types.py +++ /dev/null @@ -1,13 +0,0 @@ -# DEPENDENCIES -## Local -from .base_enum import BaseEnum -from .components import Components - - -class LayerTypes(BaseEnum): - ASPIRATIONAL: str = Components.ASPIRATIONAL - GLOBAL_STRATEGY: str = Components.GLOBAL_STRATEGY - AGENT_MODEL: str = Components.AGENT_MODEL - EXECUTIVE_FUNCTION: str = Components.EXECUTIVE_FUNCTION - COGNITIVE_CONTROL: str = Components.COGNITIVE_CONTROL - TASK_PROSECUTION: str = Components.TASK_PROSECUTION diff --git a/app/constants/logger.py b/app/constants/logger.py deleted file mode 100644 index 857f687a..00000000 --- a/app/constants/logger.py +++ /dev/null @@ -1,20 +0,0 @@ -# DEPENDENCIES -## Built-In -import logging -## Local -from .base_enum import BaseEnum - - -class CustomLogLevels(BaseEnum): - STARTUP: int = 25 - STACKTRACE: int = 45 - -TERMINAL_COLOR_CODES: dict[int, str] = { - logging.DEBUG: "\033[35m", # Purple - CustomLogLevels.STARTUP: "\033[36m", # Cyan - logging.INFO: "\033[34m", # Blue - logging.WARNING: "\033[33m", # Yellow - logging.ERROR: "\033[31m", # Red - CustomLogLevels.STACKTRACE: "\033[37m", # White - logging.CRITICAL: "\033[30m", # Black -} diff --git a/app/constants/model_providers.py b/app/constants/model_providers.py deleted file mode 100644 index cc109b46..00000000 --- a/app/constants/model_providers.py +++ /dev/null @@ -1,13 +0,0 @@ -# DEPENDENCIES -## Local -from .base_enum import BaseEnum - - -class ModelProviders(BaseEnum): - ANTHROPIC: str = "anthropic" - DEEPSEEK: str = "deepseek" - GOOGLE_VERTEX_AI: str = "google_vertex_ai" - GROK: str = "grok" - GROQ: str = "groq" - OLLAMA: str = "ollama" - OPENAI: str = "openai" diff --git a/app/constants/model_types.py b/app/constants/model_types.py deleted file mode 100644 index 1edd62f9..00000000 --- a/app/constants/model_types.py +++ /dev/null @@ -1,49 +0,0 @@ -# DEPENDENCIES -## Local -from .base_enum import BaseEnum - - -# BASE -class ModelTypes(BaseEnum): - THREE_D: str = "3d" - AUDIO: str = "audio" - IMAGE: str = "image" - LLM: str = "llm" - MULTIMODAL: str = "multimodal" - RAG: str = "rag" - ROBOTICS: str = "robotics" - VIDEO: str = "video" - - -# INDIVIDUAL -class ThreeDModelTypes(BaseEnum): - THREED_MODEL_GENERATOR: str = "3d_model_generator" - -class AudioModelTypes(BaseEnum): - AUDIO_GENERATOR: str = "audio_generator" - AUDIO_TRANSCRIPTIONIST: str = "audio_transcriptionist" - -class ImageModelTypes(BaseEnum): - IMAGE_GENERATOR: str = "image_generator" - -class LLMModelTypes(BaseEnum): - CODER: str = "coder" - EFFICIENT: str = "efficient" - FUNCTION_CALLER: str = "function_caller" - GENERALIST: str = "generalist" - REASONER: str = "reasoner" - -class MultiModalModelTypes(BaseEnum): - AUDIO_ONLY_MULTIMODAL: str = "audio_only_multimodal" - FULLY_MULTIMODAL: str = "fully_multimodal" - IMAGE_ONLY_MULTIMODAL: str = "image_only_multimodal" - -class RAGModelTypes(BaseEnum): - EMBEDDER: str = "embedder" - RERANKER: str = "reranker" - -class RoboticsModelTypes(BaseEnum): - ROBOTICS_CONTROLLER: str = "robotics_controller" - -class VideoModelTypes(BaseEnum): - VIDEO_GENERATOR: str = "video_generator" diff --git a/app/constants/names.py b/app/constants/names.py deleted file mode 100644 index 99fb3bff..00000000 --- a/app/constants/names.py +++ /dev/null @@ -1,11 +0,0 @@ -# DEPENDENCIES -## Local -from .base_enum import BaseEnum - - -class Names(BaseEnum): - ACE: str = "ace" - IMAGE: str = ACE - FULL_IMAGE: str = f"localhost/{IMAGE}:latest" - NETWORK: str = f"{ACE}_network" - VOLUME: str = "volume" diff --git a/app/constants/network.py b/app/constants/network.py deleted file mode 100644 index 11a05ecd..00000000 --- a/app/constants/network.py +++ /dev/null @@ -1,20 +0,0 @@ -# DEPENDENCIES -## Local -from .base_enum import BaseEnum - - -class NetworkPorts(BaseEnum): - """Enum""" - CONTROLLER: str = "2349" - UI: str = "2350" - QUEUE: str = "4222" - MODEL_PROVIDER: str = "4223" - TELEMETRY: str = "4931" - ACTIONS: str = "4932" - MEMORY: str = "4933" - ASPIRATIONAL: str = "4581" - GLOBAL_STRATEGY: str = "4582" - AGENT_MODEL: str = "4583" - EXECUTIVE_FUNCTION: str = "4584" - COGNITIVE_CONTROL: str = "4585" - TASK_PROSECUTION: str = "4586" diff --git a/app/constants/shell_commands.py b/app/constants/shell_commands.py deleted file mode 100644 index 1dd35cbb..00000000 --- a/app/constants/shell_commands.py +++ /dev/null @@ -1,25 +0,0 @@ -# DEPENDENCIES -## Local -from .base_enum import BaseEnum -from .files import Files -from .names import Names - - -class ShellCommands(BaseEnum): - UPDATE: str = "git pull" - # Containers - ## Deployment - CHECK_PODS: str = "podman pod ps" - _DEPLOY_KUBE_COMMAND: str = "podman kube play" - DEPLOY_CLUSTER: str = f"{_DEPLOY_KUBE_COMMAND} --network {Names.NETWORK} --replace {Files.USER_DEPLOYMENT_FILE}" - STOP_CLUSTER: str = f"{_DEPLOY_KUBE_COMMAND} --network {Names.NETWORK} --down {Files.USER_DEPLOYMENT_FILE}" - ## Images - CHECK_IMAGES: str = "podman images" - BUILD_IMAGE: str = f"podman build -t {Names.IMAGE} -f {Files.CONTAINERFILE} ." - CLEAR_OLD_IMAGES: str = "podman image prune --force" - ## Network - CHECK_NETWORK: str = "podman network ls" - CREATE_NETWORK: str = f"podman network create {Names.NETWORK}" - # UI - INSTALL_NPM_DEPENDENCIES: str = "npm install" - RUN_UI_DEV: str = "npm start" diff --git a/app/containers/Containerfile b/app/containers/Containerfile deleted file mode 100644 index bf4c1250..00000000 --- a/app/containers/Containerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM python:3.13-bookworm - -COPY ./requirements /home/requirements - -RUN apt-get update && apt-get install -y libffi-dev nats-server nodejs npm && \ - pip install -r /home/requirements && \ - apt-get purge -y libffi-dev python3-dev && \ - npm install -g @angular/cli && \ - cd /home/ace/components/ui && \ - npm install && \ - ng analytics off && \ - rm -rf /var/cache/* - -RUN mkdir /home/ace -WORKDIR /home/ace diff --git a/app/containers/template_deployment.yaml b/app/containers/template_deployment.yaml deleted file mode 100644 index 5cb1dc9c..00000000 --- a/app/containers/template_deployment.yaml +++ /dev/null @@ -1,252 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - labels: - app: {{ ace_pod_name }} - name: {{ ace_pod_name }} -spec: - containers: - - command: - - {{ start_command }} - - --{{ controller_name }} - image: {{ ace_image_name }} - name: {{ controller_name }} - env: - - name: {{ logger_name_env }} - value: {{ controller_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ controller_port }} - hostPort: {{ controller_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ controller_container_path }} - name: {{ controller_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ ui_name }} - image: {{ ace_image_name }} - name: {{ ui_name }} - env: - - name: {{ logger_name_env }} - value: {{ ui_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: 4200 - hostPort: {{ ui_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ queue_name }} - image: {{ ace_image_name }} - name: {{ queue_name }} - env: - - name: {{ logger_name_env }} - value: {{ queue_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ queue_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ model_provider_name }} - image: {{ ace_image_name }} - name: {{ model_provider_name }} - env: - - name: {{ logger_name_env }} - value: {{ model_provider_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ model_provider_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ telemetry_name }} - image: {{ ace_image_name }} - name: {{ telemetry_name }} - env: - - name: {{ logger_name_env }} - value: {{ telemetry_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ telemetry_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ actions_name }} - image: {{ ace_image_name }} - name: {{ actions_name }} - env: - - name: {{ logger_name_env }} - value: {{ actions_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ actions_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ memory_name }} - image: {{ ace_image_name }} - name: {{ memory_name }} - env: - - name: {{ logger_name_env }} - value: {{ memory_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ memory_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ aspirational_name }} - image: {{ ace_image_name }} - name: {{ aspirational_name }} - env: - - name: {{ logger_name_env }} - value: {{ aspirational_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ aspirational_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ global_strategy_name }} - image: {{ ace_image_name }} - name: {{ global_strategy_name }} - env: - - name: {{ logger_name_env }} - value: {{ global_strategy_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ global_strategy_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ agent_model_name }} - image: {{ ace_image_name }} - name: {{ agent_model_name }} - env: - - name: {{ logger_name_env }} - value: {{ agent_model_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ agent_model_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ executive_function_name }} - image: {{ ace_image_name }} - name: {{ executive_function_name }} - env: - - name: {{ logger_name_env }} - value: {{ executive_function_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ executive_function_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ cognitive_control_name }} - image: {{ ace_image_name }} - name: {{ cognitive_control_name }} - env: - - name: {{ logger_name_env }} - value: {{ cognitive_control_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ cognitive_control_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - - command: - - {{ start_command }} - - --{{ task_prosecution_name }} - image: {{ ace_image_name }} - name: {{ task_prosecution_name }} - env: - - name: {{ logger_name_env }} - value: {{ task_prosecution_name }} - - name: {{ logger_verbose_env }} - value: {{ dev_env }} - ports: - - containerPort: {{ task_prosecution_port }} - volumeMounts: - - mountPath: {{ app_container_path }} - name: {{ app_volume }} - - mountPath: {{ output_container_path }} - name: {{ output_volume }} - - mountPath: {{ logs_container_path }} - name: {{ logs_volume }} - volumes: - - hostPath: - path: {{ app_host_path }} - type: Directory - name: {{ app_volume }} - - hostPath: - path: {{ logs_host_path }} - type: Directory - name: {{ logs_volume }} - - hostPath: - path: {{ controller_host_path }} - type: Directory - name: {{ controller_volume }} - - hostPath: - path: {{ output_host_path }} - type: Directory - name: {{ output_volume }} diff --git a/app/logger.py b/app/logger.py deleted file mode 100644 index d7d42b00..00000000 --- a/app/logger.py +++ /dev/null @@ -1,168 +0,0 @@ -# DEPENDENCIES -## Built-In -import atexit -import datetime -import inspect -import json -import logging -import os -import re -import signal -import sys -import traceback -## Local -from constants import CustomLogLevels, Defaults, DictKeys, EnvironmentVariables, Folders, TERMINAL_COLOR_CODES - - -# INITIALISATION -logging.addLevelName(CustomLogLevels.STARTUP, "STARTUP") -logging.addLevelName(CustomLogLevels.STACKTRACE, "STACKTRACE") - - -# Private -## Formatters -class _JSONFormatter(logging.Formatter): - def format(self, record: logging.LogRecord): - log_data: dict[str, str] = { - DictKeys.TIMESTAMP: datetime.datetime.now(datetime.UTC).isoformat(), - DictKeys.LEVEL: record.levelname, - DictKeys.FUNCTION_NAME: f"{record.name}()", - DictKeys.MESSAGE: record.getMessage(), - } - # check if record has attr stacktrace and then add that to dict - if hasattr(record, DictKeys.STACKTRACE): - stacktrace: str = re.sub(r"[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\x9f]", "", record.stacktrace).replace("\n", " | ").replace("'", '').replace('"', '') - log_data[DictKeys.STACKTRACE] = stacktrace - return json.dumps(log_data, ensure_ascii=False) - -class _HumanReadableFormatter(logging.Formatter): - def format(self, record: logging.LogRecord) -> str: - color_code: str = TERMINAL_COLOR_CODES.get(record.levelno, Defaults.TERMINAL_COLOR_CODE) - - log_string = "" - log_string += datetime.datetime.now(datetime.UTC).strftime("%Y-%m-%d %H:%M:%S") - log_string += " | " - log_string += f"{color_code}{record.levelname}{Defaults.TERMINAL_COLOR_CODE}" - log_string += " | " - log_string += f"{record.name}()" - log_string += " | " - log_string += record.getMessage() - - return log_string - - -## Logger Class -class _Logger: - _instance: "_Logger" = None - _initialised: bool - - def __new__(cls, *args, **kwargs): - if cls._instance is not None: - return cls._instance - cls._instance = super(_Logger, cls).__new__(cls) - cls._instance._initialised = False - cls._instance.__init__(*args, **kwargs) - return cls._instance - - def __init__(self, log_name: str, verbose: bool = False): - if self._initialised: - return - self._initialised = True - - log_file: str = os.path.join(Folders.LOGS, f"{log_name}_{datetime.datetime.now(datetime.UTC).strftime('%Y-%m-%d')}.log") - log_file = os.path.abspath(log_file) - - self.verbose = verbose - - self.logger: logging.Logger = logging.getLogger() - self.logger.setLevel(logging.INFO) - - self.logger.handlers: list[logging.Handler] = [] - self.logger.handlers.clear() - - self.file_handler = logging.FileHandler(log_file) - self.file_handler.setFormatter(_JSONFormatter()) - self.logger.addHandler(self.file_handler) - - self.console_handler: logging.StreamHandler | None = None - if not self.verbose: - self.console_handler = logging.StreamHandler(sys.stdout) - self.console_handler.setFormatter(_HumanReadableFormatter()) - self.logger.addHandler(self.console_handler) - - self._register_shutdown_handlers() - - def _register_shutdown_handlers(self): - def shutdown_handler(): - self.logger.warning(Defaults.SHUTDOWN_MESSAGE) - self.file_handler.close() - if self.console_handler: - self.console_handler.close() - self.logger.handlers = [] - logging.shutdown() - - signal.signal(signal.SIGINT, shutdown_handler) - signal.signal(signal.SIGTERM, shutdown_handler) - atexit.register(shutdown_handler) - - def _log(self, level: int, message: str, stacktrace: str | None = None): - caller_frame: inspect.FrameInfo = inspect.currentframe().f_back.f_back - func_name: str = caller_frame.f_code.co_name - - record = logging.LogRecord( - name=func_name, - level=level, - pathname=caller_frame.f_code.co_filename, - lineno=caller_frame.f_lineno, - msg=message, - args=(), - exc_info=None - ) - record.verbose = self.verbose - if stacktrace: - record.stacktrace = stacktrace - - self.logger.handle(record) - if stacktrace and not self.verbose: - print(stacktrace) - - - def debug(self, message: str): - if not self.verbose: - self._log(logging.DEBUG, message) - - def startup(self, message: str): - self._log(CustomLogLevels.STARTUP, message) - - def info(self, message: str): - self._log(logging.INFO, message) - - def warn(self, message: str): - self._log(logging.WARNING, message) - - def error(self, message: str): - stacktrace: str = "".join(traceback.format_stack()[:-1]) - self._log(logging.ERROR, message, stacktrace) - - def critical(self, message: str): - stacktrace: str = "".join(traceback.format_stack()[:-1]) - self._log(logging.CRITICAL, message, stacktrace) - - -# PUBLIC -if not os.environ.get(EnvironmentVariables.LOG_FILE_NAME): - raise SystemError("You need to initialise the ace logger envs first before using it!") -logger = _Logger( - log_name=os.environ.get(EnvironmentVariables.LOG_FILE_NAME), - verbose=bool(os.environ.get(EnvironmentVariables.LOGGER_VERBOSE, False)) -) - - -# EXAMPLES -def example_logs(): - logger.startup("Hello ACE!") - logger.debug("Dev logs...") - logger.info("Operations logs...") - logger.warn("Warning logs...") - logger.error("Error logs...") - logger.critical("Critical logs...") diff --git a/app/models/__init__.py b/app/models/__init__.py deleted file mode 100644 index 511074ad..00000000 --- a/app/models/__init__.py +++ /dev/null @@ -1,33 +0,0 @@ -# DEPENDENCIES -## Local -from logger import logger -from .config.defaults import DEFAULT_LLM_MODEL_TYPE_SETTINGS -from .data.required import REQUIRED_LLM_MODEL_TYPES - - -# TODO: Orchestrate data checks, validation and population here - -def _initialise_database_with_defaults(): - # TODO: Implement this - pass - -def _verify_required_model_types(): - def _verify_required_model_type(category: str, default_settings: list, required_types: frozenset[str]): - verified_types: list[str] = [] - for type_setting in default_settings: - if type_setting.model_type in verified_types: - continue - if type_setting.model_type in required_types: - verified_types.append(type_setting.model_type) - if len(verified_types) != len(required_types): - raise ValueError(f"Missing required LLM types: {required_types - set(verified_types)}") - - _verify_required_model_type( - category="LLM", - default_settings=DEFAULT_LLM_MODEL_TYPE_SETTINGS, - required_types=REQUIRED_LLM_MODEL_TYPES - ) - -def initialise(): - _initialise_database_with_defaults() - _verify_required_model_types() diff --git a/app/models/api_schemas/__init__.py b/app/models/api_schemas/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app/models/api_schemas/controller.py b/app/models/api_schemas/controller.py deleted file mode 100644 index 5edbfe9a..00000000 --- a/app/models/api_schemas/controller.py +++ /dev/null @@ -1,23 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel -## Local -from models.config.controller import ControllerSettingsSchema -from models.data.model_providers import LLMModelProvider - - -# REQUESTS -EditSettingsRequest: type[BaseModel] = ControllerSettingsSchema - - -# RESPONSES -class GetVersionDetailsResponse(BaseModel): - version: str - authors: list[str] - license: str - last_update: str - rebuild_date: str - -GetSettingsResponse: type[BaseModel] = ControllerSettingsSchema - -GetLLMModelsResponse: type[BaseModel] = LLMModelProvider diff --git a/app/models/api_schemas/defaults.py b/app/models/api_schemas/defaults.py deleted file mode 100644 index 20c01ab0..00000000 --- a/app/models/api_schemas/defaults.py +++ /dev/null @@ -1,11 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel - - -# REQUESTS - - -# RESPONSES -class DefaultAPIResponse(BaseModel): - message: str diff --git a/app/models/config/__init__.py b/app/models/config/__init__.py deleted file mode 100644 index 2d8045fd..00000000 --- a/app/models/config/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .model_providers import ModelProviderSettings \ No newline at end of file diff --git a/app/models/config/controller.py b/app/models/config/controller.py deleted file mode 100644 index d6fe407d..00000000 --- a/app/models/config/controller.py +++ /dev/null @@ -1,16 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel -## Local -from constants import Defaults -from .defaults import DEFAULT_LAYER_SETTINGS, DEFAULT_MODEL_PROVIDER_SETTINGS, DEFAULT_UI_SETTINGS -from .layers import LayerSettings -from .model_providers import ModelProviderSettings -from .ui import UISettings - - -class ControllerSettingsSchema(BaseModel): - ace_name: str = Defaults.ACE_NAME - ui_settings: UISettings = DEFAULT_UI_SETTINGS - model_provider_settings: ModelProviderSettings = DEFAULT_MODEL_PROVIDER_SETTINGS - layer_settings: list[LayerSettings] = DEFAULT_LAYER_SETTINGS diff --git a/app/models/config/defaults.py b/app/models/config/defaults.py deleted file mode 100644 index 2d2448d5..00000000 --- a/app/models/config/defaults.py +++ /dev/null @@ -1,102 +0,0 @@ -# DEPENDENCIES -## Local -from constants import ( - Defaults, - LayerTypes, - LLMModelTypes -) -from .layers import LayerSettings -from .model_providers import ModelProviderSettings, model_types -from .ui import UISettings - - -# UI -DEFAULT_UI_SETTINGS: UISettings = UISettings( - dark_mode=True, - show_footer=False -) - - -# MODEL PROVIDERS -## Model Types -DEFAULT_LLM_MODEL_TYPE_SETTINGS: list[model_types.LLMModelTypeSetting] = [ - model_types.LLMModelTypeSetting( - model_type=LLMModelTypes.CODER, - model_id="0194c745-de29-7bc6-ad6b-f7b5f8d0e414", - creative_temperature=Defaults.CREATIVE_TEMPERATURE, - logical_temperature=Defaults.LOGICAL_TEMPERATURE, - output_token_limit=Defaults.OUTPUT_TOKEN_LIMIT - ), - model_types.LLMModelTypeSetting( - model_type=LLMModelTypes.EFFICIENT, - model_id="0194c74b-ff7d-7c91-a7b2-934a16aafb04", - creative_temperature=Defaults.CREATIVE_TEMPERATURE, - logical_temperature=Defaults.LOGICAL_TEMPERATURE, - output_token_limit=Defaults.OUTPUT_TOKEN_LIMIT - ), - model_types.LLMModelTypeSetting( - model_type=LLMModelTypes.FUNCTION_CALLER, - model_id="0194c751-721a-7470-a277-e76ccdb840b8", - creative_temperature=Defaults.CREATIVE_TEMPERATURE, - logical_temperature=Defaults.LOGICAL_TEMPERATURE, - output_token_limit=Defaults.OUTPUT_TOKEN_LIMIT - ), - model_types.LLMModelTypeSetting( - model_type=LLMModelTypes.GENERALIST, - model_id="0194c751-721a-7470-a277-e76ccdb840b8", - creative_temperature=Defaults.CREATIVE_TEMPERATURE, - logical_temperature=Defaults.LOGICAL_TEMPERATURE, - output_token_limit=Defaults.OUTPUT_TOKEN_LIMIT - ), - model_types.LLMModelTypeSetting( - model_type=LLMModelTypes.REASONER, - model_id="0194c74e-13ea-72d5-9b2d-a46dfa196784", - creative_temperature=Defaults.CREATIVE_TEMPERATURE, - logical_temperature=Defaults.LOGICAL_TEMPERATURE, - output_token_limit=Defaults.OUTPUT_TOKEN_LIMIT - ) -] - -DEFAULT_RAG_MODEL_TYPE_SETTINGS: list[model_types.RAGModelTypeSetting] = [] -# model_types.LLMModelTypeSetting( -# model_type=RAGModelTypes.EMBEDDER, -# model_name="granite-embedding:30m", -# creative_temperature=Defaults.CREATIVE_TEMPERATURE, -# logical_temperature=Defaults.LOGICAL_TEMPERATURE, -# output_token_limit=Defaults.OUTPUT_TOKEN_LIMIT -# ), - -## Overall -DEFAULT_MODEL_PROVIDER_SETTINGS = ModelProviderSettings( - llm_model_type_settings=DEFAULT_LLM_MODEL_TYPE_SETTINGS, - rag_model_type_settings=DEFAULT_RAG_MODEL_TYPE_SETTINGS -) - - -# LAYERS -DEFAULT_LAYER_SETTINGS: list[LayerSettings] = [ - LayerSettings( - layer_name=LayerTypes.ASPIRATIONAL, - model_type=LLMModelTypes.REASONER - ), - LayerSettings( - layer_name=LayerTypes.GLOBAL_STRATEGY, - model_type=LLMModelTypes.REASONER - ), - LayerSettings( - layer_name=LayerTypes.AGENT_MODEL, - model_type=LLMModelTypes.GENERALIST - ), - LayerSettings( - layer_name=LayerTypes.EXECUTIVE_FUNCTION, - model_type=LLMModelTypes.GENERALIST - ), - LayerSettings( - layer_name=LayerTypes.COGNITIVE_CONTROL, - model_type=LLMModelTypes.EFFICIENT - ), - LayerSettings( - layer_name=LayerTypes.TASK_PROSECUTION, - model_type=LLMModelTypes.FUNCTION_CALLER - ) -] diff --git a/app/models/config/layers.py b/app/models/config/layers.py deleted file mode 100644 index 2eb0a33e..00000000 --- a/app/models/config/layers.py +++ /dev/null @@ -1,12 +0,0 @@ -# DEPENDENCIES -## Built-In -from typing import Literal -## Third-Party -from pydantic import BaseModel -## Local -from constants import LayerTypes, LLMModelTypes - - -class LayerSettings(BaseModel): - layer_name: Literal[*LayerTypes.get_frozenset()] - model_type: Literal[*LLMModelTypes.get_frozenset()] diff --git a/app/models/config/model_providers/__init__.py b/app/models/config/model_providers/__init__.py deleted file mode 100644 index a2791c70..00000000 --- a/app/models/config/model_providers/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from .model_providers import ModelProviderSettings -from .individual_providers import IndividualProviderSettings \ No newline at end of file diff --git a/app/models/config/model_providers/individual_providers.py b/app/models/config/model_providers/individual_providers.py deleted file mode 100644 index 0b9163ab..00000000 --- a/app/models/config/model_providers/individual_providers.py +++ /dev/null @@ -1,9 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel - - -class IndividualProviderSettings(BaseModel): - name: str - enabled: bool = False - api_key: str = "" diff --git a/app/models/config/model_providers/model_providers.py b/app/models/config/model_providers/model_providers.py deleted file mode 100644 index e79f9b53..00000000 --- a/app/models/config/model_providers/model_providers.py +++ /dev/null @@ -1,56 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel -## Local -from constants import ModelProviders -from .individual_providers import IndividualProviderSettings -from . import model_types - - -class ModelProviderSettings(BaseModel): - individual_provider_settings: list[IndividualProviderSettings] = [ - IndividualProviderSettings( - name=ModelProviders.ANTHROPIC, - enabled=False, - api_key="" - ), - IndividualProviderSettings( - name=ModelProviders.DEEPSEEK, - enabled=False, - api_key="" - ), - IndividualProviderSettings( - name=ModelProviders.GOOGLE_VERTEX_AI, - enabled=False, - api_key="" - ), - IndividualProviderSettings( - name=ModelProviders.GROK, - enabled=False, - api_key="" - ), - IndividualProviderSettings( - name=ModelProviders.GROQ, - enabled=False, - api_key="" - ), - IndividualProviderSettings( - name=ModelProviders.OLLAMA, - enabled=True, - api_key="" - ), - IndividualProviderSettings( - name=ModelProviders.OPENAI, - enabled=False, - api_key="" - ) - ] - - three_d_model_type_settings: list[model_types.ThreeDModelTypeSetting] = [] - audio_model_type_settings: list[model_types.AudioModelTypeSetting] = [] - image_model_type_settings: list[model_types.ImageModelTypeSetting] = [] - llm_model_type_settings: list[model_types.LLMModelTypeSetting] - multimodal_model_type_settings: list[model_types.MultiModalModelTypeSetting] = [] - rag_model_type_settings: list[model_types.RAGModelTypeSetting] - robotics_model_type_settings: list[model_types.RoboticsModelTypeSetting] = [] - video_model_type_settings: list[model_types.VideoModelTypeSetting] = [] diff --git a/app/models/config/model_providers/model_types/__init__.py b/app/models/config/model_providers/model_types/__init__.py deleted file mode 100644 index 99931d4b..00000000 --- a/app/models/config/model_providers/model_types/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -from .three_d import ThreeDModelTypeSetting -from .audio import AudioModelTypeSetting -from .image import ImageModelTypeSetting -from .llm import LLMModelTypeSetting -from .multimodal import MultiModalModelTypeSetting -from .rag import RAGModelTypeSetting -from .robotics import RoboticsModelTypeSetting -from .video import VideoModelTypeSetting \ No newline at end of file diff --git a/app/models/config/model_providers/model_types/audio.py b/app/models/config/model_providers/model_types/audio.py deleted file mode 100644 index b92802ab..00000000 --- a/app/models/config/model_providers/model_types/audio.py +++ /dev/null @@ -1,7 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel - - -class AudioModelTypeSetting(BaseModel): - pass diff --git a/app/models/config/model_providers/model_types/image.py b/app/models/config/model_providers/model_types/image.py deleted file mode 100644 index 39a18958..00000000 --- a/app/models/config/model_providers/model_types/image.py +++ /dev/null @@ -1,7 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel - - -class ImageModelTypeSetting(BaseModel): - pass diff --git a/app/models/config/model_providers/model_types/llm.py b/app/models/config/model_providers/model_types/llm.py deleted file mode 100644 index 79b3731b..00000000 --- a/app/models/config/model_providers/model_types/llm.py +++ /dev/null @@ -1,23 +0,0 @@ -# DEPENDENCIES -## Built-In -from typing import Literal -## Third-Party -from pydantic import BaseModel, field_validator -## Local -from constants import LLMModelTypes - - -class LLMModelTypeSetting(BaseModel): - model_type: Literal[*LLMModelTypes.get_frozenset()] - model_id: str - logical_temperature: float - creative_temperature: float - output_token_limit: int - - @field_validator("logical_temperature") - def validate_logical_temperature(cls, value): - return min(max(0.0, value), 2.0) - - @field_validator("creative_temperature") - def validate_creative_temperature(cls, value): - return min(max(0.0, value), 2.0) diff --git a/app/models/config/model_providers/model_types/multimodal.py b/app/models/config/model_providers/model_types/multimodal.py deleted file mode 100644 index ad243c83..00000000 --- a/app/models/config/model_providers/model_types/multimodal.py +++ /dev/null @@ -1,7 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel - - -class MultiModalModelTypeSetting(BaseModel): - pass diff --git a/app/models/config/model_providers/model_types/rag.py b/app/models/config/model_providers/model_types/rag.py deleted file mode 100644 index ffa26f8b..00000000 --- a/app/models/config/model_providers/model_types/rag.py +++ /dev/null @@ -1,7 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel - - -class RAGModelTypeSetting(BaseModel): - pass diff --git a/app/models/config/model_providers/model_types/robotics.py b/app/models/config/model_providers/model_types/robotics.py deleted file mode 100644 index 018dfbc5..00000000 --- a/app/models/config/model_providers/model_types/robotics.py +++ /dev/null @@ -1,7 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel - - -class RoboticsModelTypeSetting(BaseModel): - pass diff --git a/app/models/config/model_providers/model_types/three_d.py b/app/models/config/model_providers/model_types/three_d.py deleted file mode 100644 index dfd16271..00000000 --- a/app/models/config/model_providers/model_types/three_d.py +++ /dev/null @@ -1,7 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel - - -class ThreeDModelTypeSetting(BaseModel): - pass diff --git a/app/models/config/model_providers/model_types/video.py b/app/models/config/model_providers/model_types/video.py deleted file mode 100644 index 059cea6d..00000000 --- a/app/models/config/model_providers/model_types/video.py +++ /dev/null @@ -1,7 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel - - -class VideoModelTypeSetting(BaseModel): - pass diff --git a/app/models/config/ui.py b/app/models/config/ui.py deleted file mode 100644 index 50f19b00..00000000 --- a/app/models/config/ui.py +++ /dev/null @@ -1,8 +0,0 @@ -# DEPENDENCIES -## Third-Party -from pydantic import BaseModel - - -class UISettings(BaseModel): - dark_mode: bool - show_footer: bool diff --git a/app/models/data/__init__.py b/app/models/data/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/app/models/data/initial.py b/app/models/data/initial.py deleted file mode 100644 index 7b552bc1..00000000 --- a/app/models/data/initial.py +++ /dev/null @@ -1,200 +0,0 @@ -# DEPENDENCIES -## Built-In -from datetime import datetime -## Local -from constants import ModelProviders -from .model_providers import LLMModelProvider - - -# MODEL PROVIDERS -INTITAL_LLM_MODEL_PROVIDERS: list[LLMModelProvider] = [ - # Claude - LLMModelProvider( - id="0194c740-6300-7184-8eff-2be664245b03", - model_provider=ModelProviders.ANTHROPIC, - name="Claude 3.5 Haiku", - model_name="claude-3-5-haiku-latest", - default=True, - max_input_tokens=200000, - max_output_tokens=8192, - cost_per_million_input_tokens=0.8, - cost_per_million_output_tokens=4, - knowledge_cutoff=datetime(2024,7,1), - rate_limits="50 RPM | 50,000 ITPM | 10,000 OTPM" - ), - LLMModelProvider( - id="0194c740-98bb-76db-95ed-ef6cfa62839b", - model_provider=ModelProviders.ANTHROPIC, - name="Claude 3.5 Sonnet", - model_name="claude-3-5-sonnet-latest", - default=True, - max_input_tokens=200000, - max_output_tokens=8192, - cost_per_million_input_tokens=3, - cost_per_million_output_tokens=15, - knowledge_cutoff=datetime(2024,4,1), - rate_limits="50 RPM | 40,000 ITPM | 8,000 OTPM" - ), - # DeepSeek - LLMModelProvider( - id="0194c740-cb0b-797e-9106-008f0d6b989a", - model_provider=ModelProviders.DEEPSEEK, - name="DeepSeek Chat", - model_name="deepseek-chat", - default=True, - max_input_tokens=64000, - max_output_tokens=8192, - cost_per_million_input_tokens=0.14, - cost_per_million_output_tokens=0.28, - rate_limits="None", - knowledge_cutoff=datetime(2023,10,1) - ), - LLMModelProvider( - id="0194c740-ecc7-78e2-bd5d-e3e5b967bff6", - model_provider=ModelProviders.DEEPSEEK, - name="DeepSeek Reasoner", - model_name="deepseek-reasoner", - default=True, - max_input_tokens=64000, - max_output_tokens=8192, - cost_per_million_input_tokens=0.55, - cost_per_million_output_tokens=2.19, - rate_limits="None", - knowledge_cutoff=datetime(2023,7,1) - ), - # Google Vertex AI - LLMModelProvider( - id="0194c741-1889-7ed9-8149-9c9e52f4be18", - model_provider=ModelProviders.GOOGLE_VERTEX_AI, - name="Gemini 2.0 Flash Exp", - model_name="gemini-2.0-flash-exp", - default=True, - max_input_tokens=1048576, - max_output_tokens=8192, - cost_per_million_input_tokens=0, - cost_per_million_output_tokens=0, - rate_limits="10 RPM | 4 million TPM | 1,500 RPD", - knowledge_cutoff=datetime(2024,8,1) - ), - LLMModelProvider( - id="0194c741-40f7-7bcf-968b-ca216c6c0943", - model_provider=ModelProviders.GOOGLE_VERTEX_AI, - name="Gemini 1.5 Flash", - model_name="gemini-1.5-flash", - default=True, - max_input_tokens=1048576, - max_output_tokens=8192, - cost_per_million_input_tokens=0.028125, - cost_per_million_output_tokens=0.11, - rate_limits="Free: 15 RPM | 1 million TPM | 1,500 RPD || Pay-as-you-go: 2,000 RPM | 4 million TPM", - knowledge_cutoff=datetime(2023,11,1) - ), - # Grok - LLMModelProvider( - id="0194c741-6a34-76e5-9442-15acf8623224", - model_provider=ModelProviders.GROK, - name="grok-2", - model_name="grok-2-latest", - default=True, - max_input_tokens=131072, - max_output_tokens=131072, - cost_per_million_input_tokens=2, - cost_per_million_output_tokens=10, - rate_limits="None", - knowledge_cutoff=None - ), - # Groq - LLMModelProvider( - id="0194c741-9423-7561-a795-eff3d8e26856", - model_provider=ModelProviders.GROQ, - name="LLama3 70B", - model_name="llama3-70b-8192", - default=True, - max_input_tokens=8192, - max_output_tokens=8192, - cost_per_million_input_tokens=0.59, - cost_per_million_output_tokens=0.79, - rate_limits="30 RPM | 14,000 RPD | 6,000 TPM | 500,000 TPD", - knowledge_cutoff=datetime(2023,12,1) - ), - LLMModelProvider( - id="0194c741-b4dc-7aba-aaf0-8bd569ff1910", - model_provider=ModelProviders.GROQ, - name="LLama3 8B", - model_name="llama3-8b-8192", - default=True, - max_input_tokens=8192, - max_output_tokens=8192, - cost_per_million_input_tokens=0.05, - cost_per_million_output_tokens=0.08, - rate_limits="30 RPM | 14,000 RPD | 6,000 TPM | 500,000 TPD", - knowledge_cutoff=datetime(2023,3,1) - ), - LLMModelProvider( - id="0194c741-e5b0-770b-9632-5a5029281c72", - model_provider=ModelProviders.GROQ, - name="Mixtral 8x7B", - model_name="mixtral-8x7b-32768", - default=True, - max_input_tokens=32768, - max_output_tokens=32768, - cost_per_million_input_tokens=0.24, - cost_per_million_output_tokens=0.24, - rate_limits="30 RPM | 14,000 RPD | 5,000 TPM | 500,000 TPD", - knowledge_cutoff=datetime(2023,12,1) - ), - # OLLAMA - LLMModelProvider( - id="0194c745-de29-7bc6-ad6b-f7b5f8d0e414", - model_provider=ModelProviders.OLLAMA, - name="Qwen 2.5 Coder 3B", - model_name="qwen2.5-coder:3b", - default=True, - max_input_tokens=32768, - max_output_tokens=32768, - cost_per_million_input_tokens=0, - cost_per_million_output_tokens=0, - rate_limits="Not Applicable", - knowledge_cutoff=datetime(2024,9,1) - ), - LLMModelProvider( - id="0194c74b-ff7d-7c91-a7b2-934a16aafb04", - model_provider=ModelProviders.OLLAMA, - name="Dolphin 3.0 LLaMA3 1B", - model_name="nchapman/dolphin3.0-llama3:1b", - default=True, - max_input_tokens=8192, - max_output_tokens=8192, - cost_per_million_input_tokens=0, - cost_per_million_output_tokens=0, - rate_limits="Not Applicable", - knowledge_cutoff=datetime(2023,12,1) - ), - LLMModelProvider( - id="0194c751-721a-7470-a277-e76ccdb840b8", - model_provider=ModelProviders.OLLAMA, - name="Dolphin 3.0 LLaMA3 3B", - model_name="nchapman/dolphin3.0-llama3:3b", - default=True, - max_input_tokens=8192, - max_output_tokens=8192, - cost_per_million_input_tokens=0, - cost_per_million_output_tokens=0, - rate_limits="Not Applicable", - knowledge_cutoff=datetime(2023,12,1) - ), - LLMModelProvider( - id="0194c74e-13ea-72d5-9b2d-a46dfa196784", - model_provider=ModelProviders.OLLAMA, - name="Deepseek R1 1.5B", - model_name="deepseek-r1:1.5b", - default=True, - max_input_tokens=32768, - max_output_tokens=32768, - cost_per_million_input_tokens=0, - cost_per_million_output_tokens=0, - rate_limits="Not Applicable", - knowledge_cutoff=datetime(2023,7,1) - ), - # OpenAI -] \ No newline at end of file diff --git a/app/models/data/model_providers.py b/app/models/data/model_providers.py deleted file mode 100644 index 288eeae7..00000000 --- a/app/models/data/model_providers.py +++ /dev/null @@ -1,23 +0,0 @@ -# DEPENDENCIES -## Built-In -from datetime import datetime -from typing import Literal -## Third-Party -from pydantic import BaseModel -## Local -from constants import ModelProviders - - -# BASE -class LLMModelProvider(BaseModel): - id: str - model_provider: Literal[*ModelProviders.get_frozenset()] - name: str - model_name: str - default: bool = False - max_input_tokens: int - max_output_tokens: int - cost_per_million_input_tokens: float = 0 - cost_per_million_output_tokens: float = 0 - knowledge_cutoff: datetime | None - rate_limits: str = "Not Available" diff --git a/app/models/data/required.py b/app/models/data/required.py deleted file mode 100644 index 83e515f9..00000000 --- a/app/models/data/required.py +++ /dev/null @@ -1,22 +0,0 @@ -# DEPENDENCIES -## Local -from constants import LLMModelTypes, RAGModelTypes - - -# MODEL PROVIDERS -REQUIRED_3D_MODEL_TYPES: frozenset[str] = frozenset() -REQUIRED_AUDIO_MODEL_TYPES: frozenset[str] = frozenset() -REQUIRED_IMAGE_MODEL_TYPES: frozenset[str] = frozenset() -REQUIRED_LLM_MODEL_TYPES: frozenset[str] = frozenset([ - LLMModelTypes.CODER, - LLMModelTypes.EFFICIENT, - LLMModelTypes.FUNCTION_CALLER, - LLMModelTypes.GENERALIST, - LLMModelTypes.REASONER -]) -REQUIRED_MULTIMODAL_MODEL_TYPES: frozenset[str] = frozenset() -REQUIRED_RAG_MODEL_TYPES: frozenset[str] = frozenset([ - RAGModelTypes.EMBEDDER -]) -REQUIRED_ROBOTICS_MODEL_TYPES: frozenset[str] = frozenset() -REQUIRED_VIDEO_MODEL_TYPES: frozenset[str] = frozenset() diff --git a/app/requirements b/app/requirements deleted file mode 100644 index 22cb80b9..00000000 --- a/app/requirements +++ /dev/null @@ -1,3 +0,0 @@ -fastapi==0.115.8 -pydantic==2.10.6 -uvicorn==0.34.0 \ No newline at end of file diff --git a/app/shell.py b/app/shell.py deleted file mode 100644 index e2f42fee..00000000 --- a/app/shell.py +++ /dev/null @@ -1,67 +0,0 @@ -# DEPENDENCIES -## Built-in -import os -import subprocess -from subprocess import Popen -## Local -from logger import logger - - -def execute_shell( - command: str, - should_print_result: bool = True, - ignore_error: bool = False, - error_message: str = "", - _testing: bool = False -) -> str: - """Execute a shell command and return the output""" - if not error_message: - error_message = f"Unable to execute command: {command}" - logger.debug(f'Running Command: "{command}"') - - process: Popen = subprocess.Popen( - command, - shell=True, # Use shell=True to handle complex commands - stdout=subprocess.PIPE, - stderr=subprocess.PIPE, - text=True - ) - - stdout_lines: list[str] = [] - while True: - error_output: str = process.stderr.readline() if process.stderr else "" - if error_output: - stdout_lines.append(error_output) - if should_print_result: - print(error_output, end="") - output: str = process.stdout.readline() if process.stdout else "" - if output == "" and process.poll() is not None: - break - if output: - stdout_lines.append(output) - if should_print_result: - print(output, end="") - - remaining_stdout, stderr = process.communicate() - if remaining_stdout: - stdout_lines.append(remaining_stdout) - if should_print_result: - print(remaining_stdout, end="") - - if process.returncode != 0 and not ignore_error: - logger.error(f"{error_message}: {stderr}") - if _testing: - raise SystemExit(f"{error_message}: {stderr}") - os._exit(1) - - return "".join(stdout_lines) - -def shell_check_exists(shell_command: str, keyword_to_find: str) -> bool: - """Checks if the keyword exists in the output of the check_command""" - logger.debug(f'Checking using "{shell_command}" for {keyword_to_find}...') - existing_terms = frozenset(execute_shell(shell_command).split("\n")) - logger.debug(f"Existing Terms: {existing_terms}") - for entry in existing_terms: - if keyword_to_find in entry: - return True - return False diff --git a/app/startup.py b/app/startup.py deleted file mode 100755 index 806acd1d..00000000 --- a/app/startup.py +++ /dev/null @@ -1,132 +0,0 @@ -#!/usr/bin/env python3.13 - -# DEPENDENCIES -## Built-in -import argparse -import json -## Local -from constants import DictKeys, Files, Names, ShellCommands -from constants.files import setup_user_deployment_file -from logger import logger -from shell import execute_shell, shell_check_exists - - -# ARGUMENTS -def _get_arguments() -> dict[str, bool]: - parser = argparse.ArgumentParser() - parser.add_argument("-d", "--dev", action="store_true", help="Enable dev mode") - parser.add_argument("-b", "--build", action="store_true", help="Build the container images") - parser.add_argument("-r", "--restart", action="store_true", help="Restart the ACE cluster") - parser.add_argument("-s", "--stop", action="store_true", help="Stop the ACE cluster") - return vars(parser.parse_args()) - - -# PREPARATION -def _setup_network() -> None: - if not shell_check_exists(check_command=ShellCommands.CHECK_NETWORK, keyword=Names.NETWORK): - logger.startup("First time setting up network...") - execute_shell(ShellCommands.CREATE_NETWORK) - -def _update() -> bool: - """Update the git repo, returning True if container needs to be rebuilt""" - logger.startup(f"Updating {Names.ACE}...") - execute_shell(ShellCommands.UPDATE) - -def _check_if_latest_build() -> bool: - """Compares the update history and version files to check if the container needs to be rebuilt""" - updates: dict[str] = {} - history: dict[str] = {} - with open(Files.VERSION, "r", encoding="utf-8") as updates_file: - updates = json.load(updates_file) - with open(Files.STARTUP_HISTORY, "r", encoding="utf-8") as history_file: - history = json.loads(history_file.read()) - if not history: - with open(Files.STARTUP_HISTORY, "w", encoding="utf-8") as history_file: - history[DictKeys.REBUILD_DATE] = "" - json.dump(history, history_file) - return True - - if history.get(DictKeys.REBUILD_DATE, "") != updates[DictKeys.REBUILD_DATE]: - return True - return False - -def _build_container_image(force_build: bool = False): - """ - A function which builds if image doesn't exist or if force_build flag is set - """ - logger.startup("Checking if build is required...") - image_exists: bool = shell_check_exists(check_command=ShellCommands.CHECK_IMAGES, keyword=Names.IMAGE) - should_build: bool = not image_exists or force_build - if not should_build: - logger.startup("Image already exists, skipping build...") - return - if not image_exists: - logger.startup("Image does not exist, building container...") - else: - logger.startup("Building container...") - execute_shell(ShellCommands.BUILD_IMAGE, error_message="Unable to build image") - - updates: dict[str] = {} - history: dict[str] = {} - with open(Files.VERSION, "r", encoding="utf-8") as updates_file: - updates = json.load(updates_file) - with open(Files.STARTUP_HISTORY, "r", encoding="utf-8") as history_file: - history = json.load(history_file) - - history[DictKeys.REBUILD_DATE] = updates[DictKeys.REBUILD_DATE] - with open(Files.STARTUP_HISTORY, "w", encoding="utf-8") as history_file: - json.dump(history, history_file) - - -# DEPLOYMENT -def _stop_cluster() -> None: - """ - Stops the ACE cluster if it is running - """ - exists: bool = shell_check_exists(ShellCommands.CHECK_PODS, Names.ACE) - if not exists: - logger.warn(f"{Names.ACE} is not running! Cannot stop...") - return - logger.startup(f"Stopping {Names.ACE}...") - execute_shell(ShellCommands.STOP_CLUSTER) - -def _start_cluster(force_restart: bool) -> None: - """ - Start the ACE cluster if it isn't running, handling restarts - """ - exists: bool = shell_check_exists(ShellCommands.CHECK_PODS, Names.ACE) - if not force_restart and exists: - logger.startup(f"ACE is already running... Run with --{DictKeys.RESTART} to restart!") - return - if force_restart: - logger.startup(f"Restarting {Names.ACE}...") - else: - logger.startup(f"Starting {Names.ACE}...") - execute_shell(ShellCommands.DEPLOY_CLUSTER) - - -# MAIN -def _startup(): - arguments: dict[str, bool] = _get_arguments() - dev: bool = arguments[DictKeys.DEV] - force_build: bool = arguments[DictKeys.BUILD] - - setup_user_deployment_file(dev) - _setup_network() - if not dev: - _update() - update_build: bool = _check_if_latest_build() - if update_build: - force_build = True - _build_container_image(force_build=force_build) - execute_shell(ShellCommands.CLEAR_OLD_IMAGES) - - if arguments[DictKeys.STOP]: - _stop_cluster() - return - - _start_cluster(force_restart=arguments[DictKeys.RESTART]) - - -if __name__ == "__main__": - _startup() diff --git a/app/version b/app/version deleted file mode 100644 index ecf10e70..00000000 --- a/app/version +++ /dev/null @@ -1,9 +0,0 @@ -{ - "version": "0.0.0", - "authors": [ - "Jayfalls" - ], - "license": "MIT", - "last_update": "2025-03-23 15:44:44", - "rebuild_date": "2025-02-02" -} diff --git a/design/source.md b/design/source.md new file mode 100644 index 00000000..aa954ef9 --- /dev/null +++ b/design/source.md @@ -0,0 +1,231 @@ +# ACE (Autonomous Cognitive Entity) Framework + +> A comprehensive summary of the ACE Framework based on the original paper (arXiv:2310.06775) and associated research. + +## Overview + +The Autonomous Cognitive Entity (ACE) framework is a conceptual cognitive architecture for building ethical autonomous agents. It was developed by David Shapiro, Wangfan Li, Manuel Delaflor, and Carlos Toxtli at the Human-AI Empowerment Lab at Clemson University, as presented in their paper "Conceptual Framework for Autonomous Cognitive Entities" (arXiv:2310.06775). + +The framework draws inspiration from the OSI model and uses six hierarchical layers to conceptualize artificial cognitive architectures. It is designed to harness the capabilities of the latest generative AI technologies, including large language models (LLMs) and multimodal generative models (MMMs), to build autonomous, agentic systems that are capable, secure, and aligned with human values. + +--- + +## The Six-Layer Cognitive Architecture + +The core innovation of the ACE model is its hierarchical structure consisting of six layers, each handling specialized cognitive functions. The layers progress from abstract ethical reasoning at the top to concrete task execution at the bottom. + +### Layer 1: Aspirational Layer (L1) + +The Aspirational Layer serves as the moral compass and ethical foundation of the ACE framework. It sets the moral direction and core values that guide the entire system. + +**Key Functions:** +- Establishes fundamental values and ethical principles +- Defines the entity's "prime directive" or core mission +- Provides moral reasoning capabilities +- Incorporates both deontological (duty-based) and teleological (outcome-based) ethical approaches +- Rejects an "either/or" stance in favor of a "both/and" perspective on ethics +- Monitors system activity through read access to all layers + +**Philosophical Foundations:** +- Lawrence Kohlberg's theory of moral development (progressing from obedience to universal ethical principles) +- Abraham Maslow's hierarchy of needs (from basic needs to self-actualization) +- Patricia Churchland's concept of expanding "spheres of caring" +- Sigmund Freud's concepts of the superego (capturing virtuous agent's essence) + +### Layer 2: Global Strategy (L2) + +The Global Strategy layer focuses on high-level planning and strategic thinking. It shapes the overall direction of the system based on the aspirational values. + +**Key Functions:** +- High-level planning and goal prioritization +- Strategic thinking and long-term objective setting +- Translates aspirational values into actionable strategies +- Coordinates with the Aspirational Layer to ensure alignment +- Handles resource allocation across competing objectives + +### Layer 3: Agent Model (L3) + +The Agent Model layer handles self-modeling and self-understanding. It represents the entity's understanding of itself. + +**Key Functions:** +- Maintains self-awareness and self-representation +- Models the entity's own capabilities and limitations +- Tracks internal state and emotional/affective states +- Informed by Freud's concept of the ego +- Enables introspection and self-assessment + +### Layer 4: Executive Function (L4) + +The Executive Function layer handles dynamic task management and orchestration of cognitive resources. + +**Key Functions:** +- Dynamic task management and switching +- Cognitive resource orchestration +- Memory management (both working and long-term) +- Planning and plan revision +- Handling task interruptions and prioritization + +### Layer 5: Cognitive Control (L5) + +The Cognitive Control layer manages decision-making and impulse control. + +**Key Functions:** +- Decision-making under uncertainty +- Inhibitory control and impulse management +- Attention allocation and focus +- Error detection and correction +- Conflict resolution between competing actions +- Bias management and mitigation + +### Layer 6: Task Prosecution (L6) + +The Task Prosecution layer handles execution and embodiment—the interaction with the external environment. + +**Key Functions:** +- Direct interaction with the environment +- Motor control and action execution +- Sensory processing and perception +- Real-time adaptation to environmental changes +- Handling failures and recovery + +--- + +## Bidirectional Communication Buses + +A key architectural feature of the ACE framework is the use of bidirectional communication buses that enable information flow between layers. + +### Southbound Bus (Top-Down) + +The Southbound bus carries directives and commands from higher layers down to lower layers. + +**Function:** +- Translates abstract ethical principles into concrete actions +- Propagates strategic decisions to tactical and operational levels +- Ensures that high-level values influence day-to-day decisions +- Enables top-down oversight by ethical reasoning modules + +### Northbound Bus (Bottom-Up) + +The Northbound bus carries feedback, sensory data, and learning signals from lower layers up to higher layers. + +**Function:** +- Reports execution results and environmental observations +- Conveys learning and adaptation signals +- Enables bottom-up learning from ground-up execution levels +- Guides revision of strategic plans and ethical frameworks based on experience + +### System Integrity Overlay + +The ACE framework includes a System Integrity overlay that provides: +- Read access for the Aspirational Layer to monitor all layers +- Privilege separation for security and corrigibility +- Transparency in communication between layers +- Ability to intervene and correct deviations from ethical principles + +--- + +## Key Design Principles + +### 1. Layered Encapsulation + +Inspired by the OSI model, the ACE framework uses layered abstraction to enhance: +- **Security**: Clear boundaries between cognitive functions +- **Corrigibility**: Ability to correct deviations from intended behavior +- **Coordination**: Well-defined interfaces between layers +- **Interpretability**: Transparent communication between layers + +### 2. Ethical Foundation + +The framework integrates ethics at the architectural level, not as an afterthought: +- Moral reasoning embedded in upper layers +- Both deontological and teleological approaches +- Focus on human values and alignment + +### 3. Bidirectional Information Flow + +The architecture enables: +- Top-down oversight by ethical modules +- Bottom-up learning from execution experience +- Adaptive strategy revision based on feedback + +### 4. Neuroscience-Inspired Design + +The framework incorporates principles from: +- Jeff Hawkins' "thousand brains" theory (modular, parallel processing) +- Robert Sapolsky's work on behavioral self-regulation +- David Badre's research on executive functions +- Antonio Damasio's somatic marker hypothesis + +### 5. Natural Language as Substrate + +The ACE framework leverages LLMs as key components because: +- Natural language enables flexible understanding of context +- Provides interpretability and common sense reasoning +- Allows integration of world knowledge +- Enables self-explanation capabilities + +--- + +## Implementation Considerations + +### Integration with LLMs + +The ACE framework is designed to work with modern large language models: +- LLMs can serve as reasoning engines for multiple layers +- Natural language enables layer-to-layer communication +- Constitutional AI and self-alignment techniques can inform implementation + +### Handling Failures + +The framework includes mechanisms for: +- Failure detection at each layer +- Graceful degradation +- Adaptive action revision +- Robust error handling + +### Safety and Alignment + +The architecture supports: +- Privilege separation for security +- Read-only monitoring by ethical layers +- Intervention capabilities for correction +- Transparent decision-making processes + +--- + +## Comparison to Related Models + +### OSI Model Analogy + +Like the OSI model for networking, the ACE framework provides: +- Clear separation of concerns +- Standardized interfaces between layers +- Modular implementation possibilities +- Encapsulation of complexity + +### Distinction from Traditional Agents + +Unlike conventional AI architectures that focus narrowly on technical skills, ACE: +- Integrates ethical reasoning from the ground up +- Emphasizes internal cognition over direct environmental interaction +- Provides hierarchical abstraction for cognitive functions + +--- + +## Conclusion + +The ACE framework provides a systematic approach to building autonomous agents that are: +- **Capable**: Leveraging LLMs and modern AI technologies +- **Secure**: Through layered encapsulation and privilege separation +- **Aligned**: By integrating ethical reasoning at the architectural level +- **Adaptable**: Through bidirectional learning and feedback loops +- **Interpretable**: Through transparent layer-to-layer communication + +This conceptual framework establishes a foundation for developing artificial general intelligence that learns, adapts, and thrives while remaining steadfastly aligned to the aspirations of humanity. + +--- + +## References + +- Shapiro, D., Li, W., Delaflor, M., & Toxtli, C. (2023). Conceptual Framework for Autonomous Cognitive Entities. arXiv:2310.06775 +- GitHub: https://github.com/daveshap/ACE_Framework (archived, read-only) diff --git a/documentation/personal.md b/documentation/personal.md deleted file mode 100644 index c4d93198..00000000 --- a/documentation/personal.md +++ /dev/null @@ -1,17 +0,0 @@ -[⬆️](..) - -## Component Commands -- UI -```shell -npm10 run start-local -``` -- Controller -```shell -source ../.venv/bin/activate -ACE_LOGGER_FILE_NAME="controller" ACE_LOGGER_VERBOSE="" ./component.py --controller --dev -``` - -## Podman Weirdness -```shell -podman machine stop && podman machine start -``` \ No newline at end of file diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/requirements b/tests/requirements deleted file mode 100644 index 5d7f208c..00000000 --- a/tests/requirements +++ /dev/null @@ -1,3 +0,0 @@ -pytest==8.3.4 -pytest-mock==3.14.0 -pyyaml==6.0.2 \ No newline at end of file diff --git a/tests/unit/__init__.py b/tests/unit/__init__.py deleted file mode 100644 index 572e9edc..00000000 --- a/tests/unit/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -# DEPENDENCIES -## Built-In -import os -## Local -from app.constants import EnvironmentVariables -from tests.unit.testing_constants import TestingConfigs - - -# LOGGER FIX -os.environ[EnvironmentVariables.LOG_FILE_NAME] = TestingConfigs.LOG_FILE_NAME -os.environ[EnvironmentVariables.LOGGER_VERBOSE] = TestingConfigs.VERBOSE_ENABLED diff --git a/tests/unit/components/__init__.py b/tests/unit/components/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/unit/components/controller/__init__.py b/tests/unit/components/controller/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/unit/components/controller/api/__init__.py b/tests/unit/components/controller/api/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/unit/components/controller/api/test_service.py b/tests/unit/components/controller/api/test_service.py deleted file mode 100644 index c83afa9c..00000000 --- a/tests/unit/components/controller/api/test_service.py +++ /dev/null @@ -1,102 +0,0 @@ -# DEPENDENCIES -## Built-In -import os -import json -## Third-Party -import pytest -## Local -from app.models.config.controller import ControllerSettingsSchema -from app.models.config.layers import LayerSettings -from app.models.config.model_providers import IndividualProviderSettings, ModelProviderSettings -from app.components.controller.api.services.root import ( - _get_settings, - edit_settings_data -) -from app.constants import Files, DictKeys, LayerTypes, LLMModelTypes - - -# CONSTANTS -class ExistingSettings: - ACE_NAME: str = "existing_name" - LAYER_SETTINGS: list[dict] = [ - LayerSettings( - layer_name=LayerTypes.ASPIRATIONAL, - model_type=LLMModelTypes.EFFICIENT - ).model_dump() - ] - MODEL_PROVIDER_SETTINGS = ModelProviderSettings( - llm_model_type_settings = [], - rag_model_type_settings = [] - ).model_dump() - - -# HELPERS -def _empty_settings_file(): - """Sets the settings file to an empty dictionary""" - with open(Files.CONTROLLER_SETTINGS, 'w') as f: - json.dump({}, f) - -def _default_settings_file(): - """Sets the settings file to an default values""" - _empty_settings_file() - _get_settings() - -def _existing_settings_file(): - """Sets the settings file to an existing dictionary""" - with open(Files.CONTROLLER_SETTINGS, 'w') as f: - json.dump( - ControllerSettingsSchema( - ace_name=ExistingSettings.ACE_NAME, - layer_settings=ExistingSettings.LAYER_SETTINGS, - model_provider_settings=ExistingSettings.MODEL_PROVIDER_SETTINGS - ).model_dump(), - f - ) - -def _assert_settings_populated(): - assert os.path.isfile(Files.CONTROLLER_SETTINGS), "Settings file should exist" - with open(Files.CONTROLLER_SETTINGS, 'r') as f: - settings = json.load(f) - assert DictKeys.ACE_NAME in settings, f"Settings file should contain {DictKeys.ACE_NAME}" - assert DictKeys.LAYER_SETTINGS in settings, f"Settings file should contain {DictKeys.LAYER_SETTINGS}" - assert DictKeys.MODEL_PROVIDER_SETTINGS in settings, f"Settings file should contain {DictKeys.MODEL_PROVIDER_SETTINGS}" - - -# TESTS -def test_get_settings_populates_empty_file(): - """Test that _get_settings populates the settings file""" - _empty_settings_file() - settings: dict = _get_settings() - assert isinstance(settings, dict), "Settings should be a dictionary" - assert DictKeys.ACE_NAME in settings, f"Settings should contain {DictKeys.ACE_NAME}" - assert DictKeys.LAYER_SETTINGS in settings, f"Settings should contain {DictKeys.LAYER_SETTINGS}" - assert DictKeys.MODEL_PROVIDER_SETTINGS in settings, f"Settings should contain {DictKeys.MODEL_PROVIDER_SETTINGS}" - _assert_settings_populated() - -def test_get_settings_does_not_overwrite_existing_values(): - """Test that _get_settings does not overwrite existing settings""" - _existing_settings_file() - _get_settings() - - with open(Files.CONTROLLER_SETTINGS, 'r') as f: - settings: dict = json.load(f) - assert settings[DictKeys.ACE_NAME] == ExistingSettings.ACE_NAME, f"{DictKeys.ACE_NAME} should not be overwritten" - assert settings[DictKeys.LAYER_SETTINGS] == ExistingSettings.LAYER_SETTINGS, f"{DictKeys.LAYER_SETTINGS} should not be overwritten" - assert settings[DictKeys.MODEL_PROVIDER_SETTINGS] == ExistingSettings.MODEL_PROVIDER_SETTINGS, f"{DictKeys.MODEL_PROVIDER_SETTINGS} should not be overwritten" - -def test_edit_settings_data(): - """Test that edit_settings_data updates the settings correctly.""" - updated_settings = { - DictKeys.ACE_NAME: ExistingSettings.ACE_NAME, - DictKeys.LAYER_SETTINGS: ExistingSettings.LAYER_SETTINGS, - DictKeys.MODEL_PROVIDER_SETTINGS: ExistingSettings.MODEL_PROVIDER_SETTINGS - } - - _empty_settings_file() - edit_settings_data(updated_settings) - - with open(Files.CONTROLLER_SETTINGS, 'r') as f: - new_settings: dict = json.load(f) - assert new_settings[DictKeys.ACE_NAME] == ExistingSettings.ACE_NAME, f"{DictKeys.ACE_NAME} should be updated" - assert new_settings[DictKeys.LAYER_SETTINGS] == ExistingSettings.LAYER_SETTINGS, f"{DictKeys.LAYER_SETTINGS} should be updated" - assert new_settings[DictKeys.MODEL_PROVIDER_SETTINGS] == ExistingSettings.MODEL_PROVIDER_SETTINGS, f"{DictKeys.MODEL_PROVIDER_SETTINGS} should be updated" diff --git a/tests/unit/conftest.py b/tests/unit/conftest.py deleted file mode 100644 index 5ebd2802..00000000 --- a/tests/unit/conftest.py +++ /dev/null @@ -1,32 +0,0 @@ -# DEPENDENCIES -## Built-In -from pathlib import Path -import shutil -import sys - - -PROJECT_ROOT = Path(__file__).parent.parent.parent -sys.path.insert(0, str(PROJECT_ROOT / "app")) -sys.path.insert(0, str(PROJECT_ROOT / "tests")) - - -# POST TESTING CLEANUP -from app.constants.folders import _ENSURED_FOLDERS -def pytest_sessionfinish(session, exitstatus): - """Clean up after the test session.""" - print("\nCleaning up test directories...") - for folder in _ENSURED_FOLDERS: - folder_path = Path(folder) - if folder_path.exists(): - try: - shutil.rmtree(folder_path) - print(f"Removed: {folder_path}") - except PermissionError: - print(f"Warning: Could not remove {folder_path} - Permission denied") - except Exception as e: - print(f"Warning: Could not remove {folder_path} - {str(e)}") - if session.testsfailed > 0: - print("Tests failed!") - # Force exit status to 1 if any tests failed - session.exitstatus = 1 - return session.exitstatus diff --git a/tests/unit/constants/__init__.py b/tests/unit/constants/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/unit/constants/test_base_enum.py b/tests/unit/constants/test_base_enum.py deleted file mode 100644 index 3e85242a..00000000 --- a/tests/unit/constants/test_base_enum.py +++ /dev/null @@ -1,52 +0,0 @@ -# DEPENDENCIES -## Third-Party -import pytest -## Local -from app.constants.base_enum import BaseEnum - -def test_type_checking(): - """Test that invalid types raise a TypeError.""" - class ValidEnum(BaseEnum): - VALID_ATTR = "value" # String - VALID_ATTR2 = 123 # Integer - VALID_ATTR3 = 0.2 # Float - - # Test non type hinted attributes - with pytest.raises(TypeError): - class InvalidEnum(BaseEnum): - INVALID_ATTR = {"key": "value"} - INVALID_ATTR2 = True - - # Test type hinted attributes - with pytest.raises(TypeError): - class InvalidEnum(BaseEnum): - INVALID_ATTR: dict = {"key": "value"} - INVALID_ATTR2: bool = True - -def test_get_dict(): - """Test that get_dict() returns the correct dictionary.""" - class TestEnum(BaseEnum): - ATTR1 = "value1" - ATTR2 = "value2" - _PRIVATE_ATTR = "private" - - expected_dict: dict[str, str] = {"ATTR1": "value1", "ATTR2": "value2"} - assert TestEnum.get_dict() == expected_dict, "get_dict() should return the correct dictionary" - -def test_get_tuple(): - """Test that get_tuple() returns the correct tuple.""" - class TestEnum(BaseEnum): - ATTR1 = "value1" - ATTR2 = "value2" - - expected_tuple: tuple[str, str] = ("value1", "value2") - assert TestEnum.get_tuple() == expected_tuple, "get_tuple() should return the correct tuple" - -def test_get_frozenset(): - """Test that get_frozenset() returns the correct frozenset.""" - class TestEnum(BaseEnum): - ATTR1 = "value1" - ATTR2 = "value2" - - expected_set: frozenset[str] = frozenset(["value1", "value2"]) - assert TestEnum.get_frozenset() == expected_set, "get_frozenset() should return the correct frozenset" diff --git a/tests/unit/constants/test_files.py b/tests/unit/constants/test_files.py deleted file mode 100644 index 304b01e3..00000000 --- a/tests/unit/constants/test_files.py +++ /dev/null @@ -1,56 +0,0 @@ -# DEPENDENCIES -## Built-In -import os -import importlib -import json -## Third-Party -import pytest -import yaml -## Local -from app.constants.files import _ENSURE_JSON_FILES, Files, setup_user_deployment_file - - -# HELPERS -@pytest.fixture -def _ensure_app_directory(): - os.chdir("./app") - yield - os.chdir("..") - -def _cleanup(): - for file in _ENSURE_JSON_FILES: - if os.path.isfile(file): - os.remove(file) - - -# TESTS -def test_setup_user_deployment_file_creates_valid_yaml_file(_ensure_app_directory): - """Test that setup_user_deployment_file creates a valid deployment.yaml file without placeholders""" - def check_deployment_file(dev: bool): - env_keyword: str = "dev" if dev else "prod" - setup_user_deployment_file(dev=dev) - if not os.path.isfile(Files.USER_DEPLOYMENT_FILE): - raise Exception("user_deployment.yaml file not created") - with open(Files.USER_DEPLOYMENT_FILE, "r") as f: - content: str = f.read() - assert "{{" not in content and "}}" not in content, "All placeholders should be replaced" - assert env_keyword in content, f"Environment should be set to {env_keyword} when creating deployment file with dev={dev}" - yaml.safe_load(content) - check_deployment_file(dev=True) - check_deployment_file(dev=False) - -def test_ensure_json_files_creates_valid_json_files(): - """Test that _ensure_json_files creates the necessary JSON files""" - _cleanup() - - from app import constants - importlib.reload(constants) # Ensure folders & files are auto created on module import - from app.constants import files - importlib.reload(files) # Ensure files are auto created on module import - - for file in _ENSURE_JSON_FILES: - with open(file, "r") as f: - content: str = f.read() - json_content: dict = json.loads(content) - assert content.strip() == "{}", "JSON file should be an empty dictionary" - assert json_content == {}, "JSON file should be an empty dictionary" diff --git a/tests/unit/constants/test_folder.py b/tests/unit/constants/test_folder.py deleted file mode 100644 index 367700a1..00000000 --- a/tests/unit/constants/test_folder.py +++ /dev/null @@ -1,27 +0,0 @@ -# DEPENDENCIES -## Built-In -import os -import importlib -import shutil -## Local -from app.constants.folders import _ENSURED_FOLDERS - - -# HELPERS -def _cleanup(): - for folder in _ENSURED_FOLDERS: - if os.path.isdir(folder): - shutil.rmtree(folder) - - -# TESTS -def test_ensure_folders_creates_folders(): - """Test that _ensure_json_files creates the necessary JSON files""" - _cleanup() - - from app.constants import folders - importlib.reload(folders) # Ensure folders are auto created on module import - - for folder in _ENSURED_FOLDERS: - if not os.path.isdir(folder): - raise Exception(f"Folder {folder} does not exist!") diff --git a/tests/unit/test_component.py b/tests/unit/test_component.py deleted file mode 100644 index c38d0ff1..00000000 --- a/tests/unit/test_component.py +++ /dev/null @@ -1,59 +0,0 @@ -# DEPENDENCIES -## Built-In -from unittest.mock import patch, MagicMock -## Third-Party -import pytest -## Local -from app.component import run_component -from app.constants import Components - - -def test_run_component_no_environment_specified(monkeypatch): - """Test run_component with no environment specified""" - with patch("app.component.logger.critical") as mock_critical: - with pytest.raises(SystemExit): - run_component() - mock_critical.assert_called_once_with("You must select a environment, either --dev or --prod!") - -def test_run_component_multiple_components(monkeypatch): - """Test run_component with multiple components specified""" - with patch("argparse.ArgumentParser.parse_args") as mock_parse_args: - mock_args = MagicMock() - mock_args.dev = True - mock_args[Components.CONTROLLER] = True - mock_args[Components.UI] = True - mock_parse_args.return_value = mock_args - - # Mock logger.critical and exit - with patch("app.component.logger.critical") as mock_critical: - with pytest.raises(SystemExit): - run_component() - mock_critical.assert_called_once_with("You can only start one component at a time!") - -def test_run_component_invalid_component(monkeypatch): - """Test run_component with an invalid component specified.""" - invalid_component: str = "invalid_component" - with patch("argparse.ArgumentParser.parse_args") as mock_parse_args: - mock_args = MagicMock() - mock_args.dev = True - mock_args[invalid_component] = True - mock_parse_args.return_value = mock_args - - # Mock logger.critical and exit - with patch("app.component.logger.critical") as mock_critical: - with pytest.raises(SystemExit): - run_component() - mock_critical.assert_called_once_with(f"{invalid_component} is not a valid component!") - -def test_run_component_no_component_selected(monkeypatch): - """Test run_component with no component selected.""" - with patch("argparse.ArgumentParser.parse_args") as mock_parse_args: - mock_args = MagicMock() - mock_args.dev = True - # No component flags set - mock_parse_args.return_value = mock_args - - with patch("app.component.logger.critical") as mock_critical: - with pytest.raises(SystemExit): - run_component() - mock_critical.assert_called_once_with("You must select a component to start!") diff --git a/tests/unit/test_logger.py b/tests/unit/test_logger.py deleted file mode 100644 index 776641e5..00000000 --- a/tests/unit/test_logger.py +++ /dev/null @@ -1,185 +0,0 @@ -# DEPENDENCIES -## Built-In -import json -import logging -import os -import signal -import sys -from unittest import mock -## Third-Party -import pytest -## Local -from app.constants import DictKeys, Defaults, EnvironmentVariables, Folders -from tests.unit.testing_constants import TestingConfigs, Modules - - -# HELPERS -def _get_log_files() -> list[str]: - return [ - os.path.join(Folders.LOGS, f) - for f in os.listdir(Folders.LOGS) - if f.endswith('.log') - ] - -def _cleanup_module(): - if Modules.LOGGER in sys.modules: - del sys.modules[Modules.LOGGER] - from app.logger import _Logger - _Logger._instance = None - if Modules.LOGGER in sys.modules: - del sys.modules[Modules.LOGGER] - -def _cleanup_log_files(): - for f in _get_log_files(): - os.remove(f) - - - - -# TESTS -def test_singleton_enforcement(cleanup): - """Ensure only one logger instance exists""" - from app.logger import _Logger - logger1 = _Logger(TestingConfigs.LOG_FILE_NAME, False) - logger2 = _Logger(TestingConfigs.LOG_FILE_NAME, False) - assert logger1 is logger2 - -def test_missing_environment_variables(cleanup): - """Test required environment variables validation""" - with mock.patch.dict(os.environ, clear=True): - if Modules.LOGGER in sys.modules: - del sys.modules[Modules.LOGGER] - with pytest.raises(SystemError): - from app.logger import logger # noqa: F401 - -def test_file_handler_creation(cleanup): - """Verify log file is created in correct location""" - from app.logger import logger - - logger.info("Test message") - logger.error("Test message") - - assert len(_get_log_files()) > 0, "No log file created in test directory" - - with open(_get_log_files()[0]) as f: - content = f.read() - assert "Test message" in content, "Log message missing from file" - -def test_verbose_mode_handler_config(monkeypatch, cleanup): - """Test handler configuration based on verbosity""" - monkeypatch.setenv(EnvironmentVariables.LOGGER_VERBOSE, TestingConfigs.VERBOSE_ENABLED) - from app.logger import logger - - file_handlers: logging.Handler = [handler for handler in logger.logger.handlers if isinstance(handler, logging.FileHandler)] - console_handlers: logging.Handler = [handler for handler in logger.logger.handlers if isinstance(handler, logging.StreamHandler) and handler == logger.console_handler] - - assert len(file_handlers) == 1, "Should have 1 FileHandler" - assert len(console_handlers) == 0, "Should have 0 ConsoleHandlers in verbose mode" - -def test_non_verbose_mode_handler_config(monkeypatch, cleanup): - """Test handler configuration based on verbosity""" - monkeypatch.setenv(EnvironmentVariables.LOGGER_VERBOSE, TestingConfigs.VERBOSE_DISABLED) - from app.logger import logger - - file_handlers: logging.Handler = [handler for handler in logger.logger.handlers if isinstance(handler, logging.FileHandler)] - console_handlers: logging.Handler = [handler for handler in logger.logger.handlers if isinstance(handler, logging.StreamHandler) and handler == logger.console_handler] - - assert len(file_handlers) == 1, "Should have 1 FileHandler" - assert len(console_handlers) == 1, "Should have 1 ConsoleHandlers in non verbose mode" - -def test_shutdown_cleanup(cleanup): - """Verify handlers close properly on shutdown""" - from app.logger import logger - - initial_handlers: int = len(logger.logger.handlers) - - logger._register_shutdown_handlers() - signal_handlers = signal.getsignal(signal.SIGTERM) - if isinstance(signal_handlers, list): - signal_handlers[0]() - else: - signal_handlers() - - assert len(logger.logger.handlers) < initial_handlers - - with open(_get_log_files()[0]) as f: - content: dict = json.loads(f.read().strip()) - assert content[DictKeys.MESSAGE] == Defaults.SHUTDOWN_MESSAGE - assert content[DictKeys.LEVEL] == "WARNING" - -def test_debug_logging_non_verbose_mode(monkeypatch, cleanup): - """Debug messages should NOT appear in logs when verbose=False""" - monkeypatch.setenv(EnvironmentVariables.LOGGER_VERBOSE, TestingConfigs.VERBOSE_DISABLED) - from app.logger import logger - - logger.debug("Debug test in non-verbose mode") - - with open(_get_log_files()[0]) as f: - content: dict = json.loads(f.read().strip()) - assert content[DictKeys.MESSAGE] == "Debug test in non-verbose mode" - -def test_debug_logging_verbose_mode(monkeypatch, cleanup): - """Debug messages should appear in logs when verbose=True""" - monkeypatch.setenv(EnvironmentVariables.LOGGER_VERBOSE, TestingConfigs.VERBOSE_ENABLED) - - from app.logger import logger - - logger.debug("Debug test in verbose mode") - logger.info("Info test in verbose mode") - - with open(_get_log_files()[0]) as f: - content: dict = json.loads(f.read().strip()) - assert content[DictKeys.MESSAGE] != "Debug test in verbose mode" - -def test_stacktrace_on_error(cleanup): - """Verify stacktrace is logged on error""" - from app.logger import logger - - logger.error("Error test") - - with open(_get_log_files()[0]) as f: - content: dict = json.loads(f.read().strip()) - assert content[DictKeys.MESSAGE] == "Error test" - assert content[DictKeys.STACKTRACE] - -def test_stacktrace_on_critical(cleanup): - """Verify stacktrace is logged on critical error""" - from app.logger import logger - - logger.error("Critical test") - - with open(_get_log_files()[0]) as f: - content: dict = json.loads(f.read().strip()) - assert content[DictKeys.MESSAGE] == "Critical test" - assert content[DictKeys.STACKTRACE] - -def test_startup_message(cleanup): - """Verify startup message is logged""" - from app.logger import logger - - logger.startup("Startup test") - - with open(_get_log_files()[0]) as f: - content: dict = json.loads(f.read().strip()) - assert content[DictKeys.MESSAGE] == "Startup test" - assert content[DictKeys.LEVEL] == "STARTUP" - -def test_info_message(cleanup): - """Verify info message is logged""" - from app.logger import logger - - logger.info("Info test") - - with open(_get_log_files()[0]) as f: - content: dict = json.loads(f.read().strip()) - assert content[DictKeys.MESSAGE] == "Info test" - assert content[DictKeys.LEVEL] == "INFO" - - -# CLEANUP -@pytest.fixture(autouse=True) -def cleanup(): - _cleanup_module() - _cleanup_log_files() - yield - _cleanup_module() diff --git a/tests/unit/test_shell.py b/tests/unit/test_shell.py deleted file mode 100644 index 79d4e098..00000000 --- a/tests/unit/test_shell.py +++ /dev/null @@ -1,38 +0,0 @@ -# DEPENDENCIES -## Third-Party -import pytest -## Local -from app.shell import execute_shell, shell_check_exists - - -@pytest.mark.parametrize("command,expected_output", [ - ("echo 'test'", "test\n"), - ("ls -a", ".\n..\n") -]) -def test_execute_shell(command, expected_output, caplog): - """Test the execute_shell function with various commands.""" - output: str = execute_shell(command) - assert expected_output in output, f"Expected '{expected_output}' in output, but got '{output}'" - with pytest.raises(SystemExit): - execute_shell("invalid_command", ignore_error=False, _testing=True) - error_output: str = execute_shell("invalid_command", ignore_error=True) - assert any(msg in error_output for msg in [ - "invalid_command: command not found", - "/bin/sh: 1: invalid_command: not found" - ]), "Error message should be printed" - -def test_shell_check_exists(): - """Test the shell_check_exists function.""" - result = shell_check_exists("ls -a", ".") - assert result is True, "Expected True, but got False" - result = shell_check_exists("ls -a", "non_existent_file") - assert result is False, "Expected False, but got True" - -def test_should_print_result(capsys): - """Test the should_print_result parameter.""" - execute_shell("echo 'test'", should_print_result=True) - captured = capsys.readouterr() - assert "test\n" in captured.out, "Output should be printed" - execute_shell("echo 'test'", should_print_result=False) - captured = capsys.readouterr() - assert "test\n" not in captured.out, "Output should not be printed" diff --git a/tests/unit/testing_constants.py b/tests/unit/testing_constants.py deleted file mode 100644 index 92f2741e..00000000 --- a/tests/unit/testing_constants.py +++ /dev/null @@ -1,8 +0,0 @@ -class Modules: - CONSTANTS: str = "app.constants" - LOGGER: str = "app.logger" - -class TestingConfigs: - LOG_FILE_NAME: str = "test" - VERBOSE_ENABLED: str = "." - VERBOSE_DISABLED: str = "" From 86d9acb41683644561e5545061ea95a807ac9082 Mon Sep 17 00:00:00 2001 From: openhands Date: Sun, 8 Mar 2026 15:51:04 +0000 Subject: [PATCH 02/10] Simplify README per PR feedback - Remove detailed bullet list (moved to source.md) - Remove redundant references section (in source.md) Co-authored-by: openhands --- README.md | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/README.md b/README.md index 0d3da9e9..35ef3c3b 100644 --- a/README.md +++ b/README.md @@ -13,22 +13,3 @@ The framework is inspired by the OSI model and uses six hierarchical layers to c For comprehensive documentation about the ACE Framework, please see: **[design/source.md](design/source.md)** - -This document includes: -- Overview of the ACE Framework -- Detailed explanation of all six layers: - - Aspirational Layer (L1) - - Global Strategy (L2) - - Agent Model (L3) - - Executive Function (L4) - - Cognitive Control (L5) - - Task Prosecution (L6) -- Bidirectional communication buses (Northbound and Southbound) -- System Integrity overlay -- Key design principles -- Implementation considerations - -## References - -- **Paper**: [arXiv:2310.06775](https://arxiv.org/abs/2310.06775) - "Conceptual Framework for Autonomous Cognitive Entities" -- **GitHub**: [daveshap/ACE_Framework](https://github.com/daveshap/ACE_Framework) (archived, read-only) From c9619f5784e37a2c2cae0e00e582ea52472bbe79 Mon Sep 17 00:00:00 2001 From: openhands Date: Sun, 8 Mar 2026 15:56:35 +0000 Subject: [PATCH 03/10] Further simplify README per feedback - Remove overview section and description Co-authored-by: openhands --- README.md | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/README.md b/README.md index 35ef3c3b..cdcbd684 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,5 @@ # ACE Framework Documentation -This repository contains documentation about the Autonomous Cognitive Entity (ACE) Framework. - -## Overview - -The ACE Framework is a conceptual cognitive architecture for building ethical autonomous agents. It was developed by David Shapiro et al. at Clemson University and presented in their paper "Conceptual Framework for Autonomous Cognitive Entities" (arXiv:2310.06775). - -The framework is inspired by the OSI model and uses six hierarchical layers to conceptualize artificial cognitive architectures, ranging from moral reasoning to task execution. - -## Documentation - For comprehensive documentation about the ACE Framework, please see: **[design/source.md](design/source.md)** From d1a220fdc6569ac7be2d603d3b998ed91ad5c87d Mon Sep 17 00:00:00 2001 From: openhands Date: Sun, 8 Mar 2026 15:57:36 +0000 Subject: [PATCH 04/10] Address PR review comments: Remove redundant lines from README --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cdcbd684..d3aca3db 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ # ACE Framework Documentation -For comprehensive documentation about the ACE Framework, please see: +The ACE Framework is a conceptual cognitive architecture for building ethical autonomous agents. It was developed by David Shapiro et al. at Clemson University and presented in their paper "Conceptual Framework for Autonomous Cognitive Entities" (arXiv:2310.06775). -**[design/source.md](design/source.md)** +The framework is inspired by the OSI model and uses six hierarchical layers to conceptualize artificial cognitive architectures, ranging from moral reasoning to task execution. + +## Documentation + +See **[design/source.md](design/source.md)** for comprehensive documentation. From 564bbba2e875041a88300956551e88088b656503 Mon Sep 17 00:00:00 2001 From: openhands Date: Sun, 8 Mar 2026 16:02:34 +0000 Subject: [PATCH 05/10] Update README: add Overview heading, change link to Source Co-authored-by: openhands --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d3aca3db..25a8ce73 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # ACE Framework Documentation +## Overview + The ACE Framework is a conceptual cognitive architecture for building ethical autonomous agents. It was developed by David Shapiro et al. at Clemson University and presented in their paper "Conceptual Framework for Autonomous Cognitive Entities" (arXiv:2310.06775). The framework is inspired by the OSI model and uses six hierarchical layers to conceptualize artificial cognitive architectures, ranging from moral reasoning to task execution. -## Documentation - -See **[design/source.md](design/source.md)** for comprehensive documentation. +[Source](design/source.md) From c197c0dfacf64e642d68fbd58a2f76000975e0ad Mon Sep 17 00:00:00 2001 From: openhands Date: Sun, 8 Mar 2026 16:05:28 +0000 Subject: [PATCH 06/10] Restore .gitignore from main Co-authored-by: openhands --- .gitignore | 170 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..1a4f604b --- /dev/null +++ b/.gitignore @@ -0,0 +1,170 @@ +# Local +.logs/ +.original/ +.storage/ +.user_deployment.yaml +.history + +# Mac +.DS_Store + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ From 41d10076db5dbeb40458bca7d1863c3c9c637e30 Mon Sep 17 00:00:00 2001 From: openhands Date: Sun, 8 Mar 2026 16:06:00 +0000 Subject: [PATCH 07/10] Restore .github, LICENSE, and .gitignore from main Co-authored-by: openhands --- .github/hooks/pre-commit | 13 ++++++ .github/workflows/dynamic-readme.yaml | 62 +++++++++++++++++++++++++++ .github/workflows/run_tests.yaml | 40 +++++++++++++++++ LICENSE | 21 +++++++++ 4 files changed, 136 insertions(+) create mode 100644 .github/hooks/pre-commit create mode 100644 .github/workflows/dynamic-readme.yaml create mode 100644 .github/workflows/run_tests.yaml create mode 100644 LICENSE diff --git a/.github/hooks/pre-commit b/.github/hooks/pre-commit new file mode 100644 index 00000000..9af2a430 --- /dev/null +++ b/.github/hooks/pre-commit @@ -0,0 +1,13 @@ +#!/bin/bash + +VERSION_FILE="app/version" + +CURRENT_DATE=$(date +"%Y-%m-%d %H:%M:%S") + +if jq --arg date "$CURRENT_DATE" '.last_update = $date' "$VERSION_FILE" > temp.json; then + mv temp.json "$VERSION_FILE" + git add "$VERSION_FILE" +else + echo "Error: Failed to update version file" + exit 1 +fi diff --git a/.github/workflows/dynamic-readme.yaml b/.github/workflows/dynamic-readme.yaml new file mode 100644 index 00000000..c7b992bd --- /dev/null +++ b/.github/workflows/dynamic-readme.yaml @@ -0,0 +1,62 @@ +name: Dynamic README + +on: + push: + paths: + - 'app/version' + branches-ignore: + - main + +permissions: + contents: write + +jobs: + update-readme: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Read version from JSON + id: version + run: | + if [ ! -f "app/version" ]; then + echo "Error: app/version file not found" + exit 1 + fi + + if ! VERSION=$(jq -r .version app/version); then + echo "Error: Failed to parse version from app/version" + exit 1 + fi + + if [ -z "$VERSION" ] || [ "$VERSION" = "null" ]; then + echo "Error: Version key not found in app/version" + exit 1 + fi + + echo "VERSION=$VERSION" >> $GITHUB_ENV + echo "Found version: $VERSION" + + - name: Update README + run: | + if [ ! -f "README.md" ]; then + echo "# Project" > README.md + echo "Creating new README.md file" + fi + + # Replace or add version badge + sed -i '/!\[Version\]/c\![Version](https://img.shields.io/badge/version-'"$VERSION"'-blue)' README.md + # If badge doesn't exist, add it at the top + if ! grep -q "!\[Version\]" README.md; then + sed -i '1i![Version](https://img.shields.io/badge/version-'"$VERSION"'-blue)\n' README.md + fi + + - name: Commit changes + run: | + git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + git add README.md + git commit -m "[DOCS] Updated version badge to $VERSION" || exit 0 + git push origin HEAD:${{ github.ref }} \ No newline at end of file diff --git a/.github/workflows/run_tests.yaml b/.github/workflows/run_tests.yaml new file mode 100644 index 00000000..aaaeed00 --- /dev/null +++ b/.github/workflows/run_tests.yaml @@ -0,0 +1,40 @@ +name: Run Tests +on: + pull_request: + branches: + - main # Run on PRs targeting main + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up Python 3.13 + uses: actions/setup-python@v5 + with: + python-version: '3.13' + + - name: Run tests + id: run_tests + run: | + set -e # Exit immediately if a command exits with a non-zero status + ./ace --test + continue-on-error: false + + - name: Upload test results + if: always() # Run even if tests fail + uses: actions/upload-artifact@v4 + with: + name: pytest-results + path: | + .pytest_cache/ + tests/**/test-*.xml + tests/**/test-*.html + + # Force the workflow to fail if tests failed + - name: Fail workflow if tests failed + if: failure() + run: | + echo "Tests failed - failing workflow" + exit 1 diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..c8ce1a22 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Jay Falls + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. From 4c7121852b78b2788aa3142c709b9bd0cacc5ddf Mon Sep 17 00:00:00 2001 From: openhands Date: Sun, 8 Mar 2026 16:08:32 +0000 Subject: [PATCH 08/10] Fix pre-commit hook to skip when app/version doesn't exist Co-authored-by: openhands --- .github/hooks/pre-commit | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/hooks/pre-commit b/.github/hooks/pre-commit index 9af2a430..02b844e8 100644 --- a/.github/hooks/pre-commit +++ b/.github/hooks/pre-commit @@ -2,6 +2,12 @@ VERSION_FILE="app/version" +# Skip if app/version doesn't exist (e.g., during documentation-only branches) +if [ ! -f "$VERSION_FILE" ]; then + echo "Skipping version update (app/version not found)" + exit 0 +fi + CURRENT_DATE=$(date +"%Y-%m-%d %H:%M:%S") if jq --arg date "$CURRENT_DATE" '.last_update = $date' "$VERSION_FILE" > temp.json; then From 58bb19ed4c3c596739f886ec5206f82458b223ff Mon Sep 17 00:00:00 2001 From: openhands Date: Sun, 8 Mar 2026 16:11:33 +0000 Subject: [PATCH 09/10] Remove workflow and git hooks for documentation-only branch Co-authored-by: openhands --- .github/hooks/pre-commit | 19 --------------- .github/workflows/run_tests.yaml | 40 -------------------------------- 2 files changed, 59 deletions(-) delete mode 100644 .github/hooks/pre-commit delete mode 100644 .github/workflows/run_tests.yaml diff --git a/.github/hooks/pre-commit b/.github/hooks/pre-commit deleted file mode 100644 index 02b844e8..00000000 --- a/.github/hooks/pre-commit +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -VERSION_FILE="app/version" - -# Skip if app/version doesn't exist (e.g., during documentation-only branches) -if [ ! -f "$VERSION_FILE" ]; then - echo "Skipping version update (app/version not found)" - exit 0 -fi - -CURRENT_DATE=$(date +"%Y-%m-%d %H:%M:%S") - -if jq --arg date "$CURRENT_DATE" '.last_update = $date' "$VERSION_FILE" > temp.json; then - mv temp.json "$VERSION_FILE" - git add "$VERSION_FILE" -else - echo "Error: Failed to update version file" - exit 1 -fi diff --git a/.github/workflows/run_tests.yaml b/.github/workflows/run_tests.yaml deleted file mode 100644 index aaaeed00..00000000 --- a/.github/workflows/run_tests.yaml +++ /dev/null @@ -1,40 +0,0 @@ -name: Run Tests -on: - pull_request: - branches: - - main # Run on PRs targeting main - -jobs: - test: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - - name: Set up Python 3.13 - uses: actions/setup-python@v5 - with: - python-version: '3.13' - - - name: Run tests - id: run_tests - run: | - set -e # Exit immediately if a command exits with a non-zero status - ./ace --test - continue-on-error: false - - - name: Upload test results - if: always() # Run even if tests fail - uses: actions/upload-artifact@v4 - with: - name: pytest-results - path: | - .pytest_cache/ - tests/**/test-*.xml - tests/**/test-*.html - - # Force the workflow to fail if tests failed - - name: Fail workflow if tests failed - if: failure() - run: | - echo "Tests failed - failing workflow" - exit 1 From 3e3427b1b9e036c29f39100e339b748e1bc262d0 Mon Sep 17 00:00:00 2001 From: openhands Date: Sun, 8 Mar 2026 16:14:23 +0000 Subject: [PATCH 10/10] Trigger workflow refresh