From 4f76079d77069d8e4ec3423bb300c9a413ddbf80 Mon Sep 17 00:00:00 2001 From: Dan Wahlin Date: Mon, 5 Oct 2026 14:26:38 -0700 Subject: [PATCH 1/4] Secure samples and modernize course --- .env.example | 4 + .github/workflows/deploy.yml | 11 +- .github/workflows/translation.yml | 16 +- .npmrc | 1 + .nvmrc | 1 + AGENTS.md | 82 +- README.fr.md | 27 +- README.md | 30 +- _sidebar.md | 1 + app/README.md | 65 +- app/app-sdk.js | 189 +- app/app.js | 118 +- app/chat-request.js | 40 + app/model-config.js | 39 + app/package-lock.json | 1782 +++++---- app/package.json | 18 +- app/public/index.html | 52 +- app/public/js/script.js | 21 +- app/test/chat.test.js | 253 ++ app/test/model-config.test.js | 88 + app/test/sdk-protocol.test.js | 132 + app/test/sdk-runtime.test.js | 68 + docs/additional-resources.md | 3 +- docs/images/create-codespace.png | Bin 43912 -> 0 bytes docs/images/playground-snippets.png | Bin 217324 -> 0 bytes docs/images/playground.png | Bin 120448 -> 0 bytes docs/setup/README.md | 345 +- docs/setup/getting-started-azure-openai.md | 168 +- index.html | 98 +- lessons/01-intro-to-genai/README.md | 119 +- .../translations/README.bn.md | 107 +- .../translations/README.fr.md | 115 +- .../translations/README.pt-br.md | 123 +- .../translations/README.zh-cn.md | 123 +- lessons/02-first-ai-app/README.md | 50 +- lessons/02-first-ai-app/sample-app/app.js | 18 +- .../sample-app/package-lock.json | 265 +- .../02-first-ai-app/sample-app/package.json | 6 +- lessons/02-first-ai-app/solution/solution.md | 15 +- .../02-first-ai-app/translations/README.bn.md | 48 +- .../02-first-ai-app/translations/README.fr.md | 36 +- .../translations/README.pt-br.md | 58 +- .../translations/README.zh-cn.md | 58 +- lessons/03-prompt-engineering/README.md | 18 +- .../03-prompt-engineering/sample-app/app.js | 73 +- .../sample-app/package-lock.json | 265 +- .../sample-app/package.json | 4 +- .../solution/solution.md | 161 +- .../translations/README.bn.md | 15 +- .../translations/README.fr.md | 6 +- .../translations/README.pt-br.md | 22 +- .../translations/README.zh-cn.md | 22 +- lessons/04-structured-output/README.md | 39 +- .../04-structured-output/assets/meeting.png | Bin 205408 -> 0 bytes .../04-structured-output/sample-app/app.js | 27 +- .../sample-app/package-lock.json | 269 +- .../sample-app/package.json | 6 +- .../sample-app/structured-json.js | 33 + .../04-structured-output/solution/solution.md | 94 +- .../translations/README.bn.md | 28 +- .../translations/README.fr.md | 25 +- .../translations/README.pt-br.md | 39 +- .../translations/README.zh-cn.md | 38 +- lessons/05-rag/README.md | 31 +- lessons/05-rag/assets/cern.jpg | Bin 617239 -> 0 bytes lessons/05-rag/assets/rag-example.png | Bin 199754 -> 0 bytes lessons/05-rag/example/rag-cars.js | 23 +- lessons/05-rag/package-lock.json | 52 + lessons/05-rag/package.json | 13 + lessons/05-rag/solution/rag-www.js | 34 +- lessons/05-rag/translations/README.bn.md | 30 +- lessons/05-rag/translations/README.fr.md | 23 +- lessons/05-rag/translations/README.pt-br.md | 39 +- lessons/05-rag/translations/README.zh-cn.md | 39 +- lessons/06-tool-calling/README.md | 166 +- lessons/06-tool-calling/code/app.js | 139 +- .../06-tool-calling/code/package-lock.json | 444 +-- lessons/06-tool-calling/code/package.json | 5 +- lessons/06-tool-calling/solution/README.md | 5 +- .../solution/package-lock.json | 444 +-- lessons/06-tool-calling/solution/package.json | 7 +- lessons/06-tool-calling/solution/solution.js | 195 +- .../06-tool-calling/translations/README.fr.md | 166 +- lessons/07-mcp/README.md | 34 +- lessons/07-mcp/code/build/client.js | 137 +- lessons/07-mcp/code/build/index-with-llm.js | 1 - lessons/07-mcp/code/build/index.js | 43 +- lessons/07-mcp/code/package-lock.json | 3433 +++++++++++++--- lessons/07-mcp/code/package.json | 23 +- lessons/07-mcp/code/src/client.ts | 227 +- lessons/07-mcp/code/src/index-with-llm.ts | 1 - lessons/07-mcp/code/src/index.ts | 56 +- lessons/07-mcp/code/tsconfig.json | 8 +- lessons/07-mcp/solution/build/client.js | 35 +- lessons/07-mcp/solution/build/index.js | 107 +- lessons/07-mcp/solution/package-lock.json | 3118 ++++++++++++++- lessons/07-mcp/solution/package.json | 29 +- lessons/07-mcp/solution/solution-quiz.md | 3 - lessons/07-mcp/solution/src/client.ts | 44 +- lessons/07-mcp/solution/src/index.ts | 140 +- lessons/07-mcp/solution/tsconfig.json | 5 +- lessons/07-mcp/translations/README.fr.md | 34 +- lessons/08-mcp-advanced/README.md | 128 +- lessons/08-mcp-advanced/solutions/README.md | 93 +- .../08-mcp-advanced/solutions/build/client.js | 150 +- .../08-mcp-advanced/solutions/build/index.js | 56 +- .../solutions/package-lock.json | 3441 ++++++++++++++--- .../08-mcp-advanced/solutions/package.json | 23 +- .../08-mcp-advanced/solutions/src/client.ts | 222 +- .../08-mcp-advanced/solutions/src/index.ts | 93 +- .../08-mcp-advanced/solutions/tsconfig.json | 8 +- .../08-mcp-advanced/translations/README.fr.md | 128 +- package-lock.json | 930 +++-- package.json | 11 +- scripts/build-docs.mjs | 25 + tests/docs.test.js | 81 + tests/fixtures/wiki-fetch.mjs | 10 + tests/samples.test.js | 223 ++ videos/.vscode/extensions.json | 6 - videos/.vscode/settings.json | 9 - videos/README.md | 74 - videos/demos/.env.example | 31 - videos/demos/01-llms/demo.js | 0 videos/demos/01-llms/readme.md | 19 - .../02-prompt-engineering/demo-complete.ts | 39 - videos/demos/02-prompt-engineering/demo.ts | 20 - videos/demos/02-prompt-engineering/readme.md | 105 - videos/demos/03-rag/readme.md | 23 - videos/demos/04-langchainjs/readme.md | 31 - videos/demos/05-local-models/ollama.http | 73 - videos/demos/05-local-models/openai.js | 19 - videos/demos/05-local-models/readme.md | 48 - videos/demos/06-playground/readme.md | 36 - videos/demos/07-ai-foundry/readme.md | 32 - videos/demos/08-cosmos-db/readme.md | 69 - videos/demos/10-chat-protocol/readme.md | 45 - videos/demos/README.md | 3 - videos/demos/package-lock.json | 1291 ------- videos/demos/package.json | 10 - videos/demos/tsconfig.json | 10 - videos/sessions/00-intro.md | 33 - videos/sessions/01-llms.md | 43 - videos/sessions/02-prompt-engineering.md | 55 - videos/sessions/03-rag.md | 39 - videos/sessions/04-langchainjs.md | 55 - videos/sessions/05-local-models.md | 47 - videos/sessions/06-playground.md | 39 - videos/sessions/07-ai-foundry.md | 53 - videos/sessions/08-cosmos-db.md | 70 - videos/sessions/09-azure-tools.md | 59 - videos/sessions/10-chat-protocol.md | 63 - videos/slides/00-intro.pptx | Bin 3120045 -> 0 bytes videos/slides/01-llms.pptx | Bin 3228927 -> 0 bytes videos/slides/02-prompt-engineering.pptx | Bin 2639035 -> 0 bytes videos/slides/03-rag.pptx | Bin 3343883 -> 0 bytes videos/slides/04-langchainjs.pptx | Bin 2931369 -> 0 bytes videos/slides/05-local-models.pptx | Bin 3211994 -> 0 bytes videos/slides/06-playground.pptx | Bin 2565914 -> 0 bytes videos/slides/07-ai-foundry.pptx | Bin 1378616 -> 0 bytes videos/slides/08-cosmos-db.pptx | Bin 3678459 -> 0 bytes videos/slides/09-azure-tools.pptx | Bin 3809887 -> 0 bytes videos/slides/10-chat-protocol.pptx | Bin 3455777 -> 0 bytes videos/slides/pdf/00-intro.pdf | Bin 148883 -> 0 bytes videos/slides/pdf/01-llms.pdf | Bin 570149 -> 0 bytes videos/slides/pdf/02-prompt-engineering.pdf | Bin 238591 -> 0 bytes videos/slides/pdf/03-rag.pdf | Bin 471981 -> 0 bytes videos/slides/pdf/04-langchainjs.pdf | Bin 456212 -> 0 bytes videos/slides/pdf/05-local-models.pdf | Bin 358428 -> 0 bytes videos/slides/pdf/06-playground.pdf | Bin 103848 -> 0 bytes videos/slides/pdf/07-ai-foundry.pdf | Bin 112312 -> 0 bytes videos/slides/pdf/08-cosmos-db.pdf | Bin 908974 -> 0 bytes videos/slides/pdf/09-azure-tools.pdf | Bin 581394 -> 0 bytes videos/slides/pdf/10-chat-protocol.pdf | Bin 795974 -> 0 bytes 173 files changed, 14085 insertions(+), 9396 deletions(-) create mode 100644 .env.example create mode 100644 .npmrc create mode 100644 .nvmrc create mode 100644 app/chat-request.js create mode 100644 app/model-config.js create mode 100644 app/test/chat.test.js create mode 100644 app/test/model-config.test.js create mode 100644 app/test/sdk-protocol.test.js create mode 100644 app/test/sdk-runtime.test.js delete mode 100644 docs/images/create-codespace.png delete mode 100644 docs/images/playground-snippets.png delete mode 100644 docs/images/playground.png delete mode 100644 lessons/04-structured-output/assets/meeting.png create mode 100644 lessons/04-structured-output/sample-app/structured-json.js delete mode 100644 lessons/05-rag/assets/cern.jpg delete mode 100644 lessons/05-rag/assets/rag-example.png create mode 100644 lessons/05-rag/package-lock.json create mode 100644 lessons/05-rag/package.json delete mode 100644 lessons/07-mcp/code/build/index-with-llm.js delete mode 100644 lessons/07-mcp/code/src/index-with-llm.ts create mode 100644 scripts/build-docs.mjs create mode 100644 tests/docs.test.js create mode 100644 tests/fixtures/wiki-fetch.mjs create mode 100644 tests/samples.test.js delete mode 100644 videos/.vscode/extensions.json delete mode 100644 videos/.vscode/settings.json delete mode 100644 videos/README.md delete mode 100644 videos/demos/.env.example delete mode 100644 videos/demos/01-llms/demo.js delete mode 100644 videos/demos/01-llms/readme.md delete mode 100644 videos/demos/02-prompt-engineering/demo-complete.ts delete mode 100644 videos/demos/02-prompt-engineering/demo.ts delete mode 100644 videos/demos/02-prompt-engineering/readme.md delete mode 100644 videos/demos/03-rag/readme.md delete mode 100644 videos/demos/04-langchainjs/readme.md delete mode 100644 videos/demos/05-local-models/ollama.http delete mode 100644 videos/demos/05-local-models/openai.js delete mode 100644 videos/demos/05-local-models/readme.md delete mode 100644 videos/demos/06-playground/readme.md delete mode 100644 videos/demos/07-ai-foundry/readme.md delete mode 100644 videos/demos/08-cosmos-db/readme.md delete mode 100644 videos/demos/10-chat-protocol/readme.md delete mode 100644 videos/demos/README.md delete mode 100644 videos/demos/package-lock.json delete mode 100644 videos/demos/package.json delete mode 100644 videos/demos/tsconfig.json delete mode 100644 videos/sessions/00-intro.md delete mode 100644 videos/sessions/01-llms.md delete mode 100644 videos/sessions/02-prompt-engineering.md delete mode 100644 videos/sessions/03-rag.md delete mode 100644 videos/sessions/04-langchainjs.md delete mode 100644 videos/sessions/05-local-models.md delete mode 100644 videos/sessions/06-playground.md delete mode 100644 videos/sessions/07-ai-foundry.md delete mode 100644 videos/sessions/08-cosmos-db.md delete mode 100644 videos/sessions/09-azure-tools.md delete mode 100644 videos/sessions/10-chat-protocol.md delete mode 100644 videos/slides/00-intro.pptx delete mode 100644 videos/slides/01-llms.pptx delete mode 100644 videos/slides/02-prompt-engineering.pptx delete mode 100644 videos/slides/03-rag.pptx delete mode 100644 videos/slides/04-langchainjs.pptx delete mode 100644 videos/slides/05-local-models.pptx delete mode 100644 videos/slides/06-playground.pptx delete mode 100644 videos/slides/07-ai-foundry.pptx delete mode 100644 videos/slides/08-cosmos-db.pptx delete mode 100644 videos/slides/09-azure-tools.pptx delete mode 100644 videos/slides/10-chat-protocol.pptx delete mode 100644 videos/slides/pdf/00-intro.pdf delete mode 100644 videos/slides/pdf/01-llms.pdf delete mode 100644 videos/slides/pdf/02-prompt-engineering.pdf delete mode 100644 videos/slides/pdf/03-rag.pdf delete mode 100644 videos/slides/pdf/04-langchainjs.pdf delete mode 100644 videos/slides/pdf/05-local-models.pdf delete mode 100644 videos/slides/pdf/06-playground.pdf delete mode 100644 videos/slides/pdf/07-ai-foundry.pdf delete mode 100644 videos/slides/pdf/08-cosmos-db.pdf delete mode 100644 videos/slides/pdf/09-azure-tools.pdf delete mode 100644 videos/slides/pdf/10-chat-protocol.pdf diff --git a/.env.example b/.env.example new file mode 100644 index 00000000..7a40d841 --- /dev/null +++ b/.env.example @@ -0,0 +1,4 @@ +# Microsoft Foundry or another OpenAI-compatible provider. +AI_API_KEY=your_microsoft_foundry_api_key +AI_ENDPOINT=https://your-resource.openai.azure.com/openai/v1 +AI_MODEL=gpt-5-mini diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 306ef1f7..fb140cb7 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -6,13 +6,20 @@ on: jobs: build: runs-on: ubuntu-latest + permissions: + contents: write steps: - name: Checkout code - uses: actions/checkout@a37ce9120846195fa4ece8f58b268e6043cb2f26 # v3.7.0 + uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 + + - name: Use Node.js LTS + uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6 + with: + node-version-file: .nvmrc - name: Install dependencies - run: npm install + run: npm ci - name: Build project run: npm run build diff --git a/.github/workflows/translation.yml b/.github/workflows/translation.yml index 11017122..048697f6 100644 --- a/.github/workflows/translation.yml +++ b/.github/workflows/translation.yml @@ -9,7 +9,6 @@ on: - lessons/*/README.md permissions: contents: write - models: read concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true @@ -24,9 +23,22 @@ jobs: key: continuous-translation-${{ github.run_id }} restore-keys: | continuous-translation- + - name: Validate Microsoft Foundry configuration + env: + AI_API_KEY: ${{ secrets.AI_API_KEY }} + AI_ENDPOINT: ${{ vars.AI_ENDPOINT }} + AI_MODEL: ${{ vars.AI_MODEL }} + run: | + test -n "$AI_API_KEY" || { echo "::error::Set the AI_API_KEY repository secret."; exit 1; } + test -n "$AI_ENDPOINT" || { echo "::error::Set the AI_ENDPOINT repository variable."; exit 1; } + test -n "$AI_MODEL" || { echo "::error::Set the AI_MODEL repository variable."; exit 1; } - uses: pelikhan/action-continuous-translation@923d1c9a88c47993a6d10c509c810f853c9205e6 # v0.2.11 with: - github_token: ${{ secrets.GITHUB_TOKEN }} + openai_api_key: ${{ secrets.AI_API_KEY }} + openai_api_base: ${{ vars.AI_ENDPOINT }} + model_alias: | + translation: openai:${{ vars.AI_MODEL }} + validation: openai:${{ vars.AI_MODEL }} lang: fr files: | - README.md diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000..b6f27f13 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +engine-strict=true diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000..b009dfb9 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +lts/* diff --git a/AGENTS.md b/AGENTS.md index 3f1639c6..f8b38824 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -10,14 +10,12 @@ This repository is a comprehensive learning course called "Generative AI for Beg - OpenAI SDK - Model Context Protocol (MCP) - Express.js (for web applications) -- GitHub Models (free AI model access) -- Azure OpenAI (optional alternative) +- Microsoft Foundry or another OpenAI-compatible model provider **Architecture:** - Multi-package learning repository (not a monorepo, but lesson-based structure) - Each lesson in `/lessons/` contains standalone sample applications - Main companion app in `/app/` directory for character interactions -- Video content and demos in `/videos/` - Documentation in `/docs/` ## Repository Structure @@ -35,16 +33,15 @@ This repository is a comprehensive learning course called "Generative AI for Beg │ ├── 07-mcp/ │ └── 08-mcp-advanced/ ├── docs/ # Setup guides and additional resources -├── videos/ # Video session content and demos └── .devcontainer/ # GitHub Codespaces configuration ``` ## Setup Commands **Prerequisites:** -- Node.js 20 or higher -- GitHub account (for GitHub Models access) -- Optional: Personal Access Token (PAT) if running locally +- Node.js Long Term Support (LTS) +- Microsoft Foundry model deployment or another OpenAI-compatible provider +- Provider endpoint, API key, and model deployment name **Initial Setup:** @@ -54,15 +51,10 @@ git clone https://github.com/microsoft/generative-ai-with-javascript.git cd generative-ai-with-javascript # Install root dependencies -npm install - -# For GitHub Codespaces users (recommended): -# The environment is pre-configured - no additional setup needed -# Use built-in GITHUB_TOKEN environment variable +npm ci -# For local development: -# 1. Create a GitHub Personal Access Token (PAT) at https://github.com/settings/tokens -# 2. Set it as an environment variable: export GITHUB_TOKEN=your_token_here +# Copy the environment template and add your provider settings +cp .env.example .env ``` **Running the Main Companion App:** @@ -91,25 +83,25 @@ npm start 1. Fork the repository 2. Create a Codespace from your fork 3. Pre-configured environment includes: - - Node.js 20 + - Node.js LTS - VSCode extensions (EditorConfig, Code Runner, REST Client) - Ollama with phi3 and all-minilm models - - `GITHUB_TOKEN` automatically available -4. Navigate to any lesson or app directory and run `npm install && npm start` +4. Configure the repository-root `.env` file. +5. Navigate to any lesson or app directory and run `npm ci && npm start` ### Local Development -1. Ensure Node.js 20+ is installed -2. Set `GITHUB_TOKEN` environment variable -3. Navigate to the directory you want to work with -4. Run `npm install` followed by `npm start` +1. Install Node.js LTS. +2. Copy `.env.example` to `.env`. +3. Set `AI_ENDPOINT`, `AI_API_KEY`, and `AI_MODEL`. +4. Navigate to the directory you want to work with. +5. Run `npm ci` followed by `npm start`. ### Environment Variables -- `GITHUB_TOKEN` - Required for GitHub Models API access - - Automatically available in GitHub Codespaces - - Must be set manually for local development -- No scopes/permissions needed for the token when using GitHub Models +- `AI_ENDPOINT` - OpenAI-compatible API base URL +- `AI_API_KEY` - API key for the configured provider +- `AI_MODEL` - Model deployment name used in requests ## Working with Lessons @@ -142,7 +134,13 @@ npm run inspect # Runs MCP inspector tool **Current Testing Setup:** -This is primarily an educational repository focused on tutorial content. There are no automated unit or integration tests for the code samples. +The repository has automated tests for the companion app, lesson samples, MCP builds, and documentation publication. + +Run all tests: + +```bash +npm test +``` **Manual Testing Approach:** @@ -170,8 +168,8 @@ This is primarily an educational repository focused on tutorial content. There a npx @modelcontextprotocol/inspector --cli node build/index.js --method tools/call --tool-name add --tool-arg a=1 --tool-arg b=3 ``` -4. **Verify GitHub Models integration:** - - Ensure `GITHUB_TOKEN` is set +4. **Verify model integration:** + - Ensure `AI_ENDPOINT`, `AI_API_KEY`, and `AI_MODEL` are set - Run any lesson sample that calls OpenAI APIs - Verify responses are generated successfully @@ -243,11 +241,11 @@ npm run build # Builds documentation site - `profanity.yml` - Filters inappropriate content in PRs - `spelling.yml` - Spell checks documentation -## GitHub Models Integration +## Model Provider Integration **Primary AI Service:** -This course uses GitHub Models for free access to AI capabilities. All code examples are configured to work with GitHub Models by default. +This course uses Microsoft Foundry by default. The samples can also use another OpenAI-compatible provider. **API Configuration:** @@ -255,16 +253,12 @@ This course uses GitHub Models for free access to AI capabilities. All code exam import { OpenAI } from 'openai'; const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL: process.env.AI_ENDPOINT, + apiKey: process.env.AI_API_KEY, }); ``` -**Available Models:** - -- `gpt-4o` - Primary model used in examples -- `gpt-4o-mini` - Lightweight alternative -- Access via GitHub Models marketplace: https://github.com/marketplace/models +Set `AI_MODEL` to the exact deployment name in Microsoft Foundry. ## Monorepo Navigation Tips @@ -358,14 +352,11 @@ cd lessons//sample-app npm install ``` -**GitHub Models authentication issues:** +**Model provider authentication issues:** ```bash -# Verify token is set -echo $GITHUB_TOKEN - -# For Codespaces: Token is automatically available -# For local: Create PAT at https://github.com/settings/tokens +# Verify the configuration names without printing the API key +printf '%s\n' "$AI_ENDPOINT" "$AI_MODEL" ``` **TypeScript compilation errors:** @@ -397,7 +388,6 @@ This repository contains fictional AI-generated content. Historical characters g - Each lesson builds progressively on previous concepts - Narrative-driven learning with time-travel story - Hands-on coding exercises with solutions provided -- Video content supplements written lessons **Contributing:** @@ -417,4 +407,4 @@ This repository contains fictional AI-generated content. Historical characters g - GitHub Codespaces requires 16GB RAM (configured in devcontainer.json) - Ollama models (phi3, all-minilm) pre-installed in Codespaces - Keep lesson samples lightweight and focused -- Use streaming for better UX in production apps (see lesson 10) +- Use streaming for a better user experience in production apps. diff --git a/README.fr.md b/README.fr.md index 72cbb085..ab9a4518 100644 --- a/README.fr.md +++ b/README.fr.md @@ -5,7 +5,6 @@ # Intelligence Artificielle Générative pour débutants avec JavaScript [![License](https://img.shields.io/badge/License-MIT-blue?style=flat-square)](https://github.com/microsoft/generative-ai-with-javascript/blob/main/LICENSE) -[![Watch the video series](https://img.shields.io/badge/Videos-d95652.svg?style=flat-square\&logo=youtube)](https://aka.ms/genai-js) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) [![Azure AI Discord](https://dcbadge.limes.pink/api/server/kzRShWzttr)](https://discord.gg/kzRShWzttr) @@ -64,20 +63,20 @@ Tout au long de ce cours, vous trouverez de nombreux exemples de code et exercic 2. Cliquez sur le bouton **Code** dans votre dépôt forké, accédez à l'onglet **Codespaces**, puis choisissez **Créer un codespace**. - Cela créera un environnement en ligne préconfiguré pour vous. Vous pourrez ensuite utiliser [GitHub Models](https://github.com/marketplace/models) pour exécuter les exemples de code et interagir avec des modèles d'IA gratuitement, sans configuration supplémentaire. + Cet environnement permet de travailler sur les exemples. Suivez le [guide de configuration](/docs/setup/README.md) pour déployer un modèle Microsoft Foundry et configurer `.env`. > [!NOTE] > > Bien que GitHub Codespaces offre un point de départ rapide et facile, vous pouvez également exécuter les exemples de code [localement](/docs/setup/README.md#option-2--running-the-app-locally). > -> En savoir plus sur les [concepts de GitHub Codespaces et GitHub Models ici](/docs/setup/README.md). +> Consultez le [guide de configuration](/docs/setup/README.md) pour les options locales, Codespaces et Microsoft Foundry. ### Description de la leçon 📦 Chaque leçon inclut : * Une **leçon écrite** avec un exercice et un quiz. -* Une courte **vidéo** pour approfondir votre apprentissage. + * **Solutions** pour chaque exercice et quiz. * **Personnages** avec lesquels vous pouvez interagir grâce à notre [application compagnon](/app/README.md), démontrant l'IA Générative. @@ -102,26 +101,6 @@ De nouvelles leçons seront ajoutées au cours au fil du temps, restez connecté 🙌 Une fois ce cours terminé, vous pouvez continuer à apprendre en explorant nos ressources additionnelles. -
-🎬Video Series - -| # | Session | Description | Diapositives | Démo | Script | Vidéo | -| -- | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------- | -------------------------------------------- | --------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | -| 0 | Introduction de la série | Introduction à la série et à son contenu. | [pptx](/videos/slides/00-intro.pptx) / [pdf](/videos/slides/pdf/00-intro.pdf) | - | [Script](/videos/sessions/00-intro.md) | [📺](https://www.youtube.com/watch?v=vLYtDgs_zx8\&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk\&index=1) | -| 1 | Ce qu'il faut savoir sur les LLM | Découvrez ce que sont les LLM, leur mode d'entraînement, leur fonctionnement et leurs limites. | [pptx](/videos/slides/01-llms.pptx) / [pdf](/videos/slides/pdf/01-llms.pdf) | [Démo](/videos/demos/01-llms/) | [Script](/videos/sessions/01-llms.md) | [📺](https://www.youtube.com/watch?v=GQ_2OjNZ9aA\&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk\&index=2) | -| 2 | Techniques essentielles de conception de prompts | Techniques pratiques pour concevoir des prompts et tirer le meilleur parti des modèles d'IA. | [pptx](/videos/slides/02-prompt-engineering.pptx) / [pdf](/videos/slides/pdf/02-prompt-engineering.pdf) | [Démo](/videos/demos/02-prompt-engineering/) | [Script](/videos/sessions/02-prompt-engineering.md) | [📺](https://www.youtube.com/watch?v=gQ6TlyxBmWs\&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk\&index=3) | -| 3 | Améliorez la précision et la fiabilité de l'IA avec RAG | Introduction à la "Génération Augmentée par la Récupération", pour utiliser l'IA avec vos propres données. | [pptx](/videos/slides/03-rag.pptx) / [pdf](/videos/slides/pdf/03-rag.pdf) | [Démo](/videos/demos/03-rag/) | [Script](/videos/sessions/03-rag.md) | [📺](https://www.youtube.com/watch?v=xkFOmx5yxIA\&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk\&index=4) | -| 4 | Accélérez votre développement d'IA avec LangChain.js | Présentation des concepts centraux du framework LangChain.js et comment l'utiliser pour accélérer vos développements IA. | [pptx](/videos/slides/04-langchainjs.pptx) / [pdf](/videos/slides/pdf/04-langchainjs.pdf) | [Démo](/videos/demos/04-langchainjs/) | [Script](/videos/sessions/04-langchainjs.md) | [📺](https://www.youtube.com/watch?v=02IDU8eCX8o\&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk\&index=5) | -| 5 | Exécutez des modèles d'IA sur votre machine locale avec Ollama | Découvrez comment intégrer des modèles d'IA locaux dans votre flux de travail de développement. | [pptx](/videos/slides/05-local-models.pptx) / [pdf](/videos/slides/pdf/05-local-models.pdf) | [Démo](/videos/demos/05-local-models/) | [Script](/videos/sessions/05-local-models.md) | [📺](https://www.youtube.com/watch?v=dLfNnoPv4AQ\&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk\&index=6) | -| 6 | Commencez avec l'IA gratuitement en utilisant Phi-3 | Expérimentez avec le modèle Ollama et Phi-3 directement depuis votre navigateur. | [pptx](/videos/slides/06-playground.pptx) / [pdf](/videos/slides/pdf/06-playground.pdf) | [Démo](/videos/demos/06-playground/) | [Script](/videos/sessions/06-playground.md) | [📺](https://www.youtube.com/watch?v=Ds32MS9SHzU\&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk\&index=7) | -| 7 | Introduction à Azure AI Foundry | Lancez votre voyage avec Azure AI Foundry. | [pptx](/videos/slides/07-ai-foundry.pptx) / [pdf](/videos/slides/pdf/07-ai-foundry.pdf) | [Démo](/videos/demos/07-ai-foundry/) | [Script](/videos/sessions/07-ai-foundry.md) | [📺](https://www.youtube.com/watch?v=9Mo-VOGk8ng\&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk\&index=8) | -| 8 | Création d'applications d'IA générative avec Azure Cosmos DB | Développez des applications d'IA générative avec Azure Cosmos DB et la recherche vectorielle. | [pptx](/videos/slides/08-cosmos-db.pptx) / [pdf](/videos/slides/pdf/08-cosmos-db.pdf) | [Démo](/videos/demos/08-cosmos-db/) | [Script](/videos/sessions/08-cosmos-db.md) | [📺](https://www.youtube.com/watch?v=-GQyaLbeqxQ\&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk\&index=9) | -| 9 | Outils et services Azure pour héberger et stocker des applications d'IA | Créez, déployez et évoluez des applications d'IA en utilisant les outils Azure. | [pptx](/videos/slides/09-azure-tools.pptx) / [pdf](/videos/slides/pdf/09-azure-tools.pdf) | - | [Script](/videos/sessions/09-azure-tools.md) | [📺](https://www.youtube.com/watch?v=WB6Fpzhwyug\&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk\&index=10) | -| 10 | Diffusion des résultats IA génératifs avec le protocole AI Chat | Intégrez facilement la diffusion dans vos apps grâce au Protocole AI Chat. | [pptx](/videos/slides/10-chat-protocol.pptx) / [pdf](/videos/slides/pdf/10-chat-protocol.pdf) | [Démo](/videos/demos/10-chat-protocol/) | [Script](/videos/sessions/10-chat-protocol.md) | [📺](https://www.youtube.com/watch?v=fzDCW-6hMtU\&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk\&index=11) | - -Pour voir la page complète des ressources, accédez à cette [page de présentation des vidéos](/videos/README.md). - -
🎒 Other Courses diff --git a/README.md b/README.md index 7257ab70..74b04897 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,6 @@ # Generative AI for beginners with JavaScript [![License](https://img.shields.io/badge/License-MIT-blue?style=flat-square)](https://github.com/microsoft/generative-ai-with-javascript/blob/main/LICENSE) -[![Watch the video series](https://img.shields.io/badge/Videos-d95652.svg?style=flat-square&logo=youtube)](https://aka.ms/genai-js) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) [![Azure AI Discord](https://dcbadge.limes.pink/api/server/kzRShWzttr)](https://discord.gg/kzRShWzttr) @@ -65,20 +64,22 @@ Throughout this course you'll find many code examples and exercises, so we encou 2. Click the **Code** button in your forked repository, go to the **Codespaces** tab, and then choose **Create codespace**. - This will create a preconfigured online environment for you. You'll then be able to use [GitHub Models](https://github.com/marketplace/models) to run the code examples and interact with AI models for free, without any additional setup. + This creates an online environment for the code examples. Continue with the [course setup guide](/docs/setup/README.md) to create a Microsoft Foundry project, deploy a chat model, and configure your endpoint and API key. > [!NOTE] > > While GitHub Codespaces provides a quick and easy starting point you can also run the code samples [locally](/docs/setup/README.md#option-2--running-the-app-locally). > -> Learn more about [GitHub Codespaces and GitHub Models concepts here](/docs/setup/README.md). +> Both local development and Codespaces require model configuration. The [course setup guide](/docs/setup/README.md) covers Microsoft Foundry, the repository-root `.env`, and a live companion app check. + +The packages in the repository root and the [companion app](/app/README.md) require Node.js LTS. Each lesson package has its own requirements. ### Lesson description 📦 Each lesson includes: - A **written lesson** with an assignment and quiz. -- A short **video** to help further your learning. + - **Solutions** for each assignment and quiz. - **Characters** you can interact with using our [companion app](/app/README.md), demonstrating Generative AI. @@ -103,27 +104,6 @@ New lessons will be added to the course over time, so stay tuned! 🙌 After completing this course, you can continue learning by exploring our additional resources. -
-🎬Video Series - -| # | Session | Description | Slides | Demo | Script | Video | -|---|---------|-------------|--------|------|--------|-------| -| 0 | Series introduction | Introduces the series and its content. | [pptx](/videos/slides/00-intro.pptx) / [pdf](/videos/slides/pdf/00-intro.pdf) | - | [Script](/videos/sessions/00-intro.md) | [📺](https://www.youtube.com/watch?v=vLYtDgs_zx8&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=1) | -| 1 | What you need to know about LLMs | Explores what LLMs are, how they're trained, how they work and their limits. | [pptx](/videos/slides/01-llms.pptx) / [pdf](/videos/slides/pdf/01-llms.pdf) | [Demo](/videos/demos/01-llms/) | [Script](/videos/sessions/01-llms.md) | [📺](https://www.youtube.com/watch?v=GQ_2OjNZ9aA&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=2) | -| 2 | Essential prompt engineering techniques | Practical prompt engineering techniques to get the best out of AI models. | [pptx](/videos/slides/02-prompt-engineering.pptx) / [pdf](/videos/slides/pdf/02-prompt-engineering.pdf) | [Demo](/videos/demos/02-prompt-engineering/) | [Script](/videos/sessions/02-prompt-engineering.md) | [📺](https://www.youtube.com/watch?v=gQ6TlyxBmWs&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=3) | -| 3 | Improve AI accuracy and reliability with RAG | Introduces Retrieval-Augmented Generation, to use AI with your own data. | [pptx](/videos/slides/03-rag.pptx) / [pdf](/videos/slides/pdf/03-rag.pdf) | [Demo](/videos/demos/03-rag/) | [Script](/videos/sessions/03-rag.md) | [📺](https://www.youtube.com/watch?v=xkFOmx5yxIA&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=4) | -| 4 | Speed up your AI development with LangChain.js | Covers LangChain.js framework core concepts, and how to use it to accelerate AI developments. | [pptx](/videos/slides/04-langchainjs.pptx) / [pdf](/videos/slides/pdf/04-langchainjs.pdf) | [Demo](/videos/demos/04-langchainjs/) | [Script](/videos/sessions/04-langchainjs.md) | [📺](https://www.youtube.com/watch?v=02IDU8eCX8o&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=5) | -| 5 | Run AI models on your local machine with Ollama | Shows how to integrate local AI models into your development workflow. | [pptx](/videos/slides/05-local-models.pptx) / [pdf](/videos/slides/pdf/05-local-models.pdf) | [Demo](/videos/demos/05-local-models/) | [Script](/videos/sessions/05-local-models.md) | [📺](https://www.youtube.com/watch?v=dLfNnoPv4AQ&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=6) | -| 6 | Get started with AI for free using Phi-3 | Experiments with Ollama and Phi-3 model directly from your browser. | [pptx](/videos/slides/06-playground.pptx) / [pdf](/videos/slides/pdf/06-playground.pdf) | [Demo](/videos/demos/06-playground/) | [Script](/videos/sessions/06-playground.md) | [📺](https://www.youtube.com/watch?v=Ds32MS9SHzU&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=7) | -| 7 | Introduction to Azure AI Foundry | Kickstart your journey with Azure AI Foundry. | [pptx](/videos/slides/07-ai-foundry.pptx) / [pdf](/videos/slides/pdf/07-ai-foundry.pdf) | [Demo](/videos/demos/07-ai-foundry/) | [Script](/videos/sessions/07-ai-foundry.md) | [📺](https://www.youtube.com/watch?v=9Mo-VOGk8ng&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=8) | -| 8 | Building Generative AI Apps with Azure Cosmos DB | Build generative AI apps with Azure Cosmos DB and vector search. | [pptx](/videos/slides/08-cosmos-db.pptx) / [pdf](/videos/slides/pdf/08-cosmos-db.pdf) | [Demo](/videos/demos/08-cosmos-db/) | [Script](/videos/sessions/08-cosmos-db.md) | [📺](https://www.youtube.com/watch?v=-GQyaLbeqxQ&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=9) | -| 9 | Azure tools & services for hosting and storing AI apps | Build, deploy, and scale AI applications using Azure tools. | [pptx](/videos/slides/09-azure-tools.pptx) / [pdf](/videos/slides/pdf/09-azure-tools.pdf) | - | [Script](/videos/sessions/09-azure-tools.md) | [📺](https://www.youtube.com/watch?v=WB6Fpzhwyug&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=10) | -| 10 | Streaming Generative AI output with the AI Chat Protocol | Integrate streaming easily into your apps with the AI Chat Protocol. | [pptx](/videos/slides/10-chat-protocol.pptx) / [pdf](/videos/slides/pdf/10-chat-protocol.pdf) | [Demo](/videos/demos/10-chat-protocol/) | [Script](/videos/sessions/10-chat-protocol.md) | [📺](https://www.youtube.com/watch?v=fzDCW-6hMtU&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=11) | - -To see the full page of resources, go to this [video overview page](/videos/README.md). - -
- You'll also find additional resources in the form of [tutorials, code samples and more](/docs/additional-resources.md). diff --git a/_sidebar.md b/_sidebar.md index b3ab5408..41883f83 100644 --- a/_sidebar.md +++ b/_sidebar.md @@ -1,3 +1,4 @@ +- [Course setup](/docs/setup/README.md) - Lessons - [01 - Intro to Gen AI](/lessons/01-intro-to-genai/README.md) - [02 - First AI App](/lessons/02-first-ai-app/README.md) diff --git a/app/README.md b/app/README.md index 57a1b748..0f4f75f0 100644 --- a/app/README.md +++ b/app/README.md @@ -2,15 +2,19 @@ This app allows you to speak to all character features in the curriculum. There are two ways to interact with AI: -- GitHub Models [Use GitHub Models](https://github.com/marketplace/models) +- A configured Azure OpenAI or OpenAI-compatible endpoint - Copilot SDK [Copilot SDK](https://github.com/github/copilot-sdk/blob/main/docs/getting-started.md). This one uses your GitHub Copilot. ## Installation +Follow the [course setup guide](../docs/setup/README.md) to create a Microsoft Foundry project, deploy a chat model, obtain its endpoint and key, and configure the repository-root `.env`. The same steps apply to local development and Codespaces. + +Use Node.js LTS for this app and the packages in the repository root. Lesson packages have their own requirements. + 1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. Navigate to _/app_ in the repo root. -3. Locate the console and run `npm install`. -4. Once it appears, select the "Open in Browser" button. +3. Locate the console and run `npm ci`. +4. Run one of the commands below. Then select the "Open in Browser" button. You should see something like: @@ -20,18 +24,69 @@ You should see something like: Run the app by either: -**GitHub Models** +**Azure OpenAI or an OpenAI-compatible endpoint** + +Copy `.env.example` to `.env` in the repository root. Set these variables there or in your environment: +```dotenv +AI_ENDPOINT=https://YOUR-RESOURCE.openai.azure.com/openai/v1/ +AI_API_KEY=your-api-key +AI_MODEL=your-model-deployment ``` + +For Azure OpenAI, `AI_MODEL` must be the deployment name. For OpenAI, use `https://api.openai.com/v1/` and a supported model name. The endpoint must use HTTPS; HTTP is allowed only for a loopback address used by a local provider. + +```bash npm start ``` +To use another environment file without copying its keys, set `ENV_FILE`: + +```bash +ENV_FILE="$HOME/.env" npm start +``` + +Existing environment variables take priority over values in the file. Missing settings or an unreadable explicit file stop the server with an error. Keep keys out of source control and browser code. + +The [course setup guide](../docs/setup/README.md#configure-environment-variables) explains these variables and the repository-root `.env` location. No embedding model is required for this chat app. + **Copilot SDK** ``` npm run start:sdk ``` +The SDK uses your GitHub Copilot subscription. Supply a Copilot-compatible token through `COPILOT_GITHUB_TOKEN`, `GH_TOKEN`, or `GITHUB_TOKEN`, or use GitHub CLI authentication. Do not put tokens in browser code. + +## Safe use + +Both servers listen on `127.0.0.1`. This sample does not authenticate HTTP callers. Keep Codespaces ports private. Do not expose the service to a public network. Remote deployment requires authentication, authorization, request limits, and an isolated service account. + +SDK chat uses client mode `empty`, no available tools, a permission handler that rejects every request, and a pre-tool hook that denies every tool call. It does not load project configuration, custom agents, or MCP servers. Character instructions are appended to the SDK system message; they do not replace its guardrails. The SDK removes host environment context in `empty` mode. + +The SDK uses a separate temporary directory for its state and working directory. Each request aborts, disconnects, and deletes its session. The temporary directory is removed on normal shutdown with `SIGINT` or `SIGTERM`. This directory is not an operating-system sandbox. Do not add tools or change the permission policy to support chat. + +The SDK version is pinned in both manifests. After an SDK update, check these controls against the new API and runtime before exposing the service. + +## Request format + +Both backends accept the same `POST /send` request: + +```json +{ + "message": "Tell me about your work.", + "character": { "name": "ada" } +} +``` + +The server reads the character description from `public/characters.json`. It rejects empty or non-string messages, unknown character names, and character properties other than `name`. Invalid requests return HTTP 400 without calling an AI service. + +## Tests + +Run `npm test` in `app/`. The tests use local fake AI services. They do not use credentials or execute model-selected host commands. + +The model client also has a 60-second request timeout. A missing or empty model answer returns HTTP 500 instead of a successful empty response. + ## Interact with a character You're faced with a text input field. Type your message and see the response from the character you are chatting with. @@ -42,7 +97,7 @@ Select the character image to change the character you are speaking to. ## Change the character's behavior -In `characters.json`, there's a `description` property that will be used as a system message. If you change this, the character's personality will change. +In `public/characters.json`, the `description` property supplies the server-owned character instructions. Edit this file to change the character's personality. Do not send a description from the browser. ## Please read diff --git a/app/app-sdk.js b/app/app-sdk.js index 575af91d..1175d379 100644 --- a/app/app-sdk.js +++ b/app/app-sdk.js @@ -1,75 +1,138 @@ -// npm install @github/copilot-sdk tsx - import { CopilotClient } from "@github/copilot-sdk"; - import express from 'express'; import path from 'path'; -import { fileURLToPath } from 'url'; -import dotenv from 'dotenv'; - -import json from './public/characters.json' with { type: "json" }; - -const client = new CopilotClient(); - - -let systemMessage = json[4].description; -let page = json[4].page; - -console.log("SERVER systemMessage: ", systemMessage); -console.log("SERVER page: ", page); - -dotenv.config(); - -const app = express(); -const port = process.env.PORT || 3000; +import { fileURLToPath } from 'url'; +import { mkdtemp, rm } from 'fs/promises'; +import { tmpdir } from 'os'; +import { ChatRequestError, getChatRequest, handleBodyError } from './chat-request.js'; +import { loadEnvironment } from './model-config.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); -app.use(express.json()); - -// Serve static files from the 'public' directory -app.use(express.static(path.join(__dirname, 'public'))); - -app.locals.delimiters = '{{ }}'; - -function getCharacterByName(name) { - return json.find(character => character.name === name) || null; +export function createClient(baseDirectory, connection) { + return new CopilotClient({ + mode: "empty", + baseDirectory, + workingDirectory: baseDirectory, + connection + }); } -// Route to send the prompt -app.post('/send', async (req, res) => { - const { message, character } = req.body; - - systemMessage = character.description; - const prompt = message; +async function closeSession(client, session) { + const errors = []; + for (const close of [ + () => session.abort(), + () => session.disconnect(), + () => client.deleteSession(session.sessionId) + ]) { + try { + await close(); + } catch (error) { + errors.push(error); + } + } + if (errors.length) { + throw new AggregateError(errors, 'The SDK session could not be closed.'); + } +} - try { - console.log("SYSTEM MESSAGE: ", systemMessage); - console.log(`SERVER sending prompt ${prompt}`) - - const session = await client.createSession({ - model: "gpt-4.1", - systemMessage: { - mode: "replace", - content: systemMessage - } - }); +export function createApp(client) { + const app = express(); + + app.use(express.json()); + app.use(express.static(path.join(__dirname, 'public'))); + app.locals.delimiters = '{{ }}'; + + app.post('/send', async (req, res) => { + try { + const { prompt, systemMessage } = getChatRequest(req.body); + const session = await client.createSession({ + model: "gpt-4.1", + systemMessage: { + mode: "append", + content: systemMessage + }, + // Custom tools and built-in tools have separate SDK controls. + tools: [], + availableTools: [], + onPermissionRequest: () => ({ kind: "reject" }), + hooks: { + onPreToolUse: () => ({ + permissionDecision: "deny", + permissionDecisionReason: "This application supports chat only." + }) + }, + infiniteSessions: { enabled: false }, + enableConfigDiscovery: false, + mcpServers: {}, + customAgents: [] + }); + + let response; + try { + response = await session.sendAndWait({ prompt }); + } finally { + await closeSession(client, session); + } + + const answer = response?.data?.content; + if (typeof answer !== 'string' || !answer.trim()) { + throw new Error('The SDK session did not return an answer.'); + } + + res.json({ prompt, answer }); + } catch (error) { + if (error instanceof ChatRequestError) { + res.status(400).json({ message: error.message }); + return; + } + console.error('Error:', error); + res.status(500).json({ message: 'An unexpected error occurred. Please try again later.' }); + } + }); + app.use(handleBodyError); + + return app; +} - const response = await session.sendAndWait({ prompt: prompt }); - const data = response?.data.content; - - console.log(`SERVER: ${data}`); - res.json({ - prompt: prompt, - answer: data - }); - } catch (error) { - console.error(`Error: ${error.message}`); // Log the error message for debugging - res.status(500).json({ message: 'An unexpected error occurred. Please try again later.' }); // Send a generic error message +if (process.argv[1] && path.resolve(process.argv[1]) === __filename) { + loadEnvironment(); + const port = process.env.PORT || 3000; + const baseDirectory = await mkdtemp(path.join(tmpdir(), 'character-chat-')); + const client = createClient(baseDirectory); + const app = createApp(client); + const server = app.listen(port, '127.0.0.1', () => { + console.log(`Server is running on http://localhost:${port}`); + }); + + let stopping = false; + async function stop() { + if (stopping) return; + stopping = true; + server.close(); + try { + const errors = await client.stop(); + if (errors.length) { + throw new AggregateError(errors, 'The SDK client could not be stopped.'); + } + } catch (error) { + console.error('Error:', error); + process.exitCode = 1; + } finally { + try { + await rm(baseDirectory, { recursive: true, force: true }); + } catch (error) { + console.error('Error:', error); + process.exitCode = 1; + } + } } -}); - -app.listen(port, () => { - console.log(`Server is running on http://localhost:${port}`); -}); + server.once('error', error => { + console.error('Error:', error); + process.exitCode = 1; + void stop(); + }); + process.once('SIGINT', stop); + process.once('SIGTERM', stop); +} diff --git a/app/app.js b/app/app.js index a659b0d7..7478f775 100644 --- a/app/app.js +++ b/app/app.js @@ -1,78 +1,64 @@ import express from 'express'; import { OpenAI } from 'openai'; import path from 'path'; -import { fileURLToPath } from 'url'; -import dotenv from 'dotenv'; - -import json from './public/characters.json' with { type: "json" }; - -let systemMessage = json[4].description; -let page = json[4].page; - -console.log("SERVER systemMessage: ", systemMessage); -console.log("SERVER page: ", page); - -dotenv.config(); - -const app = express(); -const port = process.env.PORT || 3000; +import { fileURLToPath } from 'url'; +import { ChatRequestError, getChatRequest, handleBodyError } from './chat-request.js'; +import { getModelConfig, loadEnvironment } from './model-config.js'; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); -app.use(express.json()); - -// Serve static files from the 'public' directory -app.use(express.static(path.join(__dirname, 'public'))); - -app.locals.delimiters = '{{ }}'; +export function createApp(openai, model) { + if (typeof model !== 'string' || !model.trim()) { + throw new Error('A model name is required to create the chat app.'); + } + const app = express(); + + app.use(express.json()); + app.use(express.static(path.join(__dirname, 'public'))); + app.locals.delimiters = '{{ }}'; + + app.post('/send', async (req, res) => { + try { + const { prompt, systemMessage } = getChatRequest(req.body); + const completion = await openai.chat.completions.create({ + model, + messages: [ + { role: "system", content: systemMessage }, + { role: "user", content: prompt } + ] + }); + + const answer = completion?.choices?.[0]?.message?.content; + if (typeof answer !== 'string' || !answer.trim()) { + throw new Error('The model did not return an answer.'); + } + res.json({ prompt, answer }); + } catch (error) { + if (error instanceof ChatRequestError) { + res.status(400).json({ message: error.message }); + return; + } + console.error(`Error: ${error.message}`); + res.status(500).json({ message: 'An unexpected error occurred. Please try again later.' }); + } + }); + app.use(handleBodyError); -function getCharacterByName(name) { - return json.find(character => character.name === name) || null; + return app; } -// Route to send the prompt -app.post('/send', async (req, res) => { - const { message, character } = req.body; - - systemMessage = character.description; - - const prompt = message; - - const messages = [ - { - "role": "system", - "content": systemMessage, - }, - { - "role": "user", - "content": prompt - } - ]; - +if (process.argv[1] && path.resolve(process.argv[1]) === __filename) { + loadEnvironment(); + const port = process.env.PORT || 3000; + const { baseURL, apiKey, model } = getModelConfig(); const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", // might need to change to this url in the future: https://models.github.ai/inference - apiKey: process.env.GITHUB_TOKEN, + baseURL, + apiKey, + timeout: 60000 }); - - try { - console.log(`SERVER sending prompt ${prompt}`) - const completion = await openai.chat.completions.create({ - model: 'gpt-4o-mini', - messages: messages, - }); - - console.log(`SERVER: ${completion.choices[0]?.message?.content}`); - res.json({ - prompt: prompt, - answer: completion.choices[0]?.message?.content - }); - } catch (error) { - console.error(`Error: ${error.message}`); // Log the error message for debugging - res.status(500).json({ message: 'An unexpected error occurred. Please try again later.' }); // Send a generic error message - } -}); - -app.listen(port, () => { - console.log(`Server is running on http://localhost:${port}`); -}); + const app = createApp(openai, model); + app.listen(port, '127.0.0.1', () => { + console.log(`Server is running on http://localhost:${port}`); + }); +} diff --git a/app/chat-request.js b/app/chat-request.js new file mode 100644 index 00000000..def6c274 --- /dev/null +++ b/app/chat-request.js @@ -0,0 +1,40 @@ +import characters from './public/characters.json' with { type: 'json' }; + +export class ChatRequestError extends Error {} + +export function handleBodyError(error, req, res, next) { + if (error.type === 'entity.parse.failed') { + res.status(400).json({ message: 'Send a valid JSON object.' }); + } else if (error.type === 'entity.too.large') { + res.status(413).json({ message: 'The request is too large.' }); + } else { + next(error); + } +} + +export function getChatRequest(body) { + if (!body || typeof body !== 'object' || Array.isArray(body)) { + throw new ChatRequestError('Send a message and a character name.'); + } + + const { message, character } = body; + if (typeof message !== 'string' || !message.trim()) { + throw new ChatRequestError('The message must be a non-empty string.'); + } + + if (!character || typeof character !== 'object' || Array.isArray(character) || + typeof character.name !== 'string') { + throw new ChatRequestError('Send a character name.'); + } + + if (Object.keys(character).some(key => key !== 'name')) { + throw new ChatRequestError('Send only the character name, not its description.'); + } + + const selectedCharacter = characters.find(item => item.name === character.name); + if (!selectedCharacter) { + throw new ChatRequestError('The character name is not valid.'); + } + + return { prompt: message, systemMessage: selectedCharacter.description }; +} diff --git a/app/model-config.js b/app/model-config.js new file mode 100644 index 00000000..7c34636d --- /dev/null +++ b/app/model-config.js @@ -0,0 +1,39 @@ +import dotenv from 'dotenv'; +import { fileURLToPath } from 'url'; + +export function loadEnvironment(env = process.env) { + const envFile = env.ENV_FILE; + const result = dotenv.config({ + path: envFile || fileURLToPath(new URL('../.env', import.meta.url)), + processEnv: env, + quiet: true + }); + if (result.error && (envFile || result.error.code !== 'ENOENT')) { + throw new Error('The environment file could not be read.', { cause: result.error }); + } +} + +export function getModelConfig(env = process.env) { + for (const name of ['AI_ENDPOINT', 'AI_API_KEY', 'AI_MODEL']) { + if (typeof env[name] !== 'string' || !env[name].trim()) { + throw new Error(`${name} is required. Set it in the environment or the repository's .env file.`); + } + } + + const baseURL = env.AI_ENDPOINT.trim(); + if (!URL.canParse(baseURL)) { + throw new Error('AI_ENDPOINT must be an absolute API base URL.'); + } + const url = new URL(baseURL); + const localHttp = url.protocol === 'http:' && + ['localhost', '127.0.0.1', '[::1]'].includes(url.hostname); + if ((url.protocol !== 'https:' && !localHttp) || url.username || url.password) { + throw new Error('AI_ENDPOINT must use HTTPS, or HTTP on a loopback address, without URL credentials.'); + } + + return { + baseURL, + apiKey: env.AI_API_KEY.trim(), + model: env.AI_MODEL.trim() + }; +} diff --git a/app/package-lock.json b/app/package-lock.json index 7796000c..d50a034c 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -9,18 +9,21 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "@github/copilot-sdk": "^0.1.23", - "dotenv": "^16.4.7", - "ejs": "^3.1.10", - "express": "^4.21.2", - "openai": "^4.85.0", - "tsx": "^4.21.0" + "@github/copilot-sdk": "1.0.16", + "dotenv": "^18.0.5", + "ejs": "^7.0.1", + "express": "^5.2.1", + "openai": "^7.28.0", + "tsx": "^4.23.15" + }, + "devDependencies": { + "vscode-jsonrpc": "^9.0.3" } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", - "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", "cpu": [ "ppc64" ], @@ -34,9 +37,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", - "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", "cpu": [ "arm" ], @@ -50,9 +53,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", - "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", "cpu": [ "arm64" ], @@ -66,9 +69,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", - "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", "cpu": [ "x64" ], @@ -82,9 +85,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", - "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", "cpu": [ "arm64" ], @@ -98,9 +101,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", - "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", "cpu": [ "x64" ], @@ -114,9 +117,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", - "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", "cpu": [ "arm64" ], @@ -130,9 +133,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", - "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", "cpu": [ "x64" ], @@ -146,9 +149,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", - "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", "cpu": [ "arm" ], @@ -162,9 +165,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", - "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", "cpu": [ "arm64" ], @@ -178,9 +181,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", - "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", "cpu": [ "ia32" ], @@ -194,9 +197,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", - "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", "cpu": [ "loong64" ], @@ -210,9 +213,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", - "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", "cpu": [ "mips64el" ], @@ -226,9 +229,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", - "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", "cpu": [ "ppc64" ], @@ -242,9 +245,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", - "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", "cpu": [ "riscv64" ], @@ -258,9 +261,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", - "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", "cpu": [ "s390x" ], @@ -274,9 +277,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", - "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", "cpu": [ "x64" ], @@ -290,9 +293,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", - "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", "cpu": [ "arm64" ], @@ -306,9 +309,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", - "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", "cpu": [ "x64" ], @@ -322,9 +325,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", - "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", "cpu": [ "arm64" ], @@ -338,9 +341,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", - "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", "cpu": [ "x64" ], @@ -354,9 +357,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", - "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", "cpu": [ "arm64" ], @@ -370,9 +373,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", - "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", "cpu": [ "x64" ], @@ -386,9 +389,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", - "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", "cpu": [ "arm64" ], @@ -402,9 +405,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", - "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", "cpu": [ "ia32" ], @@ -418,9 +421,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", - "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", "cpu": [ "x64" ], @@ -433,99 +436,141 @@ "node": ">=18" } }, - "node_modules/@github/copilot": { - "version": "0.0.403", - "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-0.0.403.tgz", - "integrity": "sha512-v5jUdtGJReLmE1rmff/LZf+50nzmYQYAaSRNtVNr9g0j0GkCd/noQExe31i1+PudvWU0ZJjltR0B8pUfDRdA9Q==", - "license": "SEE LICENSE IN LICENSE.md", - "bin": { - "copilot": "npm-loader.js" + "node_modules/@github/copilot-sdk": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@github/copilot-sdk/-/copilot-sdk-1.0.16.tgz", + "integrity": "sha512-m21UkMs8hkI6nRu2+EoP1kAGLJcEXFnNzAokEjwLcVmPojlO6fdLpfka1c1Nypxr39YZjyI3jHHAXwoe66SO2A==", + "license": "MIT", + "dependencies": { + "koffi": "3.2.1", + "vscode-jsonrpc": "8.2.1", + "zod": "4.3.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@github/copilot-darwin-arm64": "0.0.403", - "@github/copilot-darwin-x64": "0.0.403", - "@github/copilot-linux-arm64": "0.0.403", - "@github/copilot-linux-x64": "0.0.403", - "@github/copilot-win32-arm64": "0.0.403", - "@github/copilot-win32-x64": "0.0.403" - } - }, - "node_modules/@github/copilot-darwin-arm64": { - "version": "0.0.403", - "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-0.0.403.tgz", - "integrity": "sha512-dOw8IleA0d1soHnbr/6wc6vZiYWNTKMgfTe/NET1nCfMzyKDt/0F0I7PT5y+DLujJknTla/ZeEmmBUmliTW4Cg==", + "@github/copilot-sdk-darwin-arm64": "1.0.16", + "@github/copilot-sdk-darwin-x64": "1.0.16", + "@github/copilot-sdk-linux-arm64": "1.0.16", + "@github/copilot-sdk-linux-x64": "1.0.16", + "@github/copilot-sdk-linuxmusl-arm64": "1.0.16", + "@github/copilot-sdk-linuxmusl-x64": "1.0.16", + "@github/copilot-sdk-win32-arm64": "1.0.16", + "@github/copilot-sdk-win32-x64": "1.0.16" + } + }, + "node_modules/@github/copilot-sdk-darwin-arm64": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@github/copilot-sdk-darwin-arm64/-/copilot-sdk-darwin-arm64-1.0.16.tgz", + "integrity": "sha512-+ACscTN4OuSYDQL7/1yoi1FfDeI8qNlekip+dt2hvb9ZC4rz3YNVrhWkzrZsc7gX1ATD0YHGp71JDKqNAxHmBg==", "cpu": [ "arm64" ], - "license": "SEE LICENSE IN LICENSE.md", + "license": "MIT", "optional": true, "os": [ "darwin" - ], - "bin": { - "copilot-darwin-arm64": "copilot" - } + ] }, - "node_modules/@github/copilot-darwin-x64": { - "version": "0.0.403", - "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-0.0.403.tgz", - "integrity": "sha512-aK2jSNWgY8eiZ+TmrvGhssMCPDTKArc0ip6Ul5OaslpytKks8hyXoRbxGD0N9sKioSUSbvKUf+1AqavbDpJO+w==", + "node_modules/@github/copilot-sdk-darwin-x64": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@github/copilot-sdk-darwin-x64/-/copilot-sdk-darwin-x64-1.0.16.tgz", + "integrity": "sha512-M+R5xi4hqSrzbf+ICloMfiotuDch7URzPwL+5I4q1gy1VlY1EqpD39HW9LbqqB68iOqMRnW3anE+kzb5PYxFjA==", "cpu": [ "x64" ], - "license": "SEE LICENSE IN LICENSE.md", + "license": "MIT", "optional": true, "os": [ "darwin" - ], - "bin": { - "copilot-darwin-x64": "copilot" - } + ] }, - "node_modules/@github/copilot-linux-arm64": { - "version": "0.0.403", - "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-0.0.403.tgz", - "integrity": "sha512-KhoR2iR70O6vCkzf0h8/K+p82qAgOvMTgAPm9bVEHvbdGFR7Py9qL5v03bMbPxsA45oNaZAkzDhfTAqWhIAZsQ==", + "node_modules/@github/copilot-sdk-linux-arm64": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@github/copilot-sdk-linux-arm64/-/copilot-sdk-linux-arm64-1.0.16.tgz", + "integrity": "sha512-AjtL7pnhc0OajCO9NV963gwqFHiwIKIZEwpRd5tmGgB/Yc+Rr6QdRsc5ZMNe75ptagnVqViVqiTr9g/EnRspXw==", "cpu": [ "arm64" ], - "license": "SEE LICENSE IN LICENSE.md", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@github/copilot-sdk-linux-x64": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@github/copilot-sdk-linux-x64/-/copilot-sdk-linux-x64-1.0.16.tgz", + "integrity": "sha512-YLxPU1IdwH4cNvIJhawzyb6nMCbXB6ZfeebUs0kQEJbu6pzsMkyl1uSWCCv1vpAHPuhub1BgMokoY1kX9chElg==", + "cpu": [ + "x64" + ], + "license": "MIT", "optional": true, "os": [ "linux" + ] + }, + "node_modules/@github/copilot-sdk-linuxmusl-arm64": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@github/copilot-sdk-linuxmusl-arm64/-/copilot-sdk-linuxmusl-arm64-1.0.16.tgz", + "integrity": "sha512-hkHq6WSj5ug5JdDKrLxMbDyjp5wx6zbsn3swZcC6fy6lFSJMX2kCG7PivcOq1Uj7o/POiN/DhhJqvQxOGuX1IA==", + "cpu": [ + "arm64" ], - "bin": { - "copilot-linux-arm64": "copilot" - } + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@github/copilot-linux-x64": { - "version": "0.0.403", - "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-0.0.403.tgz", - "integrity": "sha512-eoswUc9vo4TB+/9PgFJLVtzI4dPjkpJXdCsAioVuoqPdNxHxlIHFe9HaVcqMRZxUNY1YHEBZozy+IpUEGjgdfQ==", + "node_modules/@github/copilot-sdk-linuxmusl-x64": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@github/copilot-sdk-linuxmusl-x64/-/copilot-sdk-linuxmusl-x64-1.0.16.tgz", + "integrity": "sha512-JWjzUi366WXGqdY9xIJvmJRTB+sCsW8qasVwLXj12X05GxYWMdfHK+7t8CiYTs2L1NKu1NiOYd5rS7D+ChSZyw==", "cpu": [ "x64" ], - "license": "SEE LICENSE IN LICENSE.md", + "license": "MIT", "optional": true, "os": [ "linux" + ] + }, + "node_modules/@github/copilot-sdk-win32-arm64": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@github/copilot-sdk-win32-arm64/-/copilot-sdk-win32-arm64-1.0.16.tgz", + "integrity": "sha512-nQ//JXHfPfn4sfxtZ3rcLR993Mn8YQkC/RXHW9zu0W4Qtb1kyKec7XSi+VRMsKWPyzL7B7X+SHjTRSmn9AqZnQ==", + "cpu": [ + "arm64" ], - "bin": { - "copilot-linux-x64": "copilot" - } + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@github/copilot-sdk": { - "version": "0.1.23", - "resolved": "https://registry.npmjs.org/@github/copilot-sdk/-/copilot-sdk-0.1.23.tgz", - "integrity": "sha512-0by81bsBQlDKE5VbcegZfUMvPyPm1aXwSGS2rGaMAFxv3ps+dACf1Voruxik7hQTae0ziVFJjuVrlxZoRaXBLw==", + "node_modules/@github/copilot-sdk-win32-x64": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@github/copilot-sdk-win32-x64/-/copilot-sdk-win32-x64-1.0.16.tgz", + "integrity": "sha512-x9JyZks9NqmMNWkAI1wNcbvuPiMUUOvaU6tWq+nzp/TFdowW/kgaMX3jebnxeNUq/gqi2rPabRHp/cCMCma8eA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@github/copilot-sdk/node_modules/vscode-jsonrpc": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.1.tgz", + "integrity": "sha512-kdjOSJ2lLIn7r1rtrMbbNCHjyMPfRnowdKjBQ+mGq6NAW5QY2bEZC/khaC5OR8svbbjvLEaIXkOq45e2X9BIbQ==", "license": "MIT", - "dependencies": { - "@github/copilot": "^0.0.403", - "vscode-jsonrpc": "^8.2.1", - "zod": "^4.3.6" - }, "engines": { - "node": ">=24.0.0" + "node": ">=14.0.0" } }, "node_modules/@github/copilot-sdk/node_modules/zod": { @@ -537,269 +582,395 @@ "url": "https://github.com/sponsors/colinhacks" } }, - "node_modules/@github/copilot-win32-arm64": { - "version": "0.0.403", - "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-0.0.403.tgz", - "integrity": "sha512-djWjzCsp2xPNafMyOZ/ivU328/WvWhdroGie/DugiJBTgQL2SP0quWW1fhTlDwE81a3g9CxfJonaRgOpFTJTcg==", + "node_modules/@koromix/koffi-android-arm64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-android-arm64/-/koffi-android-arm64-3.2.1.tgz", + "integrity": "sha512-1pJQ4jnZlUJduK9u9DC5CGy3aOgDUPvIXpNb6syV3+Dh5Q/ugezAIGCqvY+w+1mgXsve0pd0NVvJRjdZNHQ6MA==", "cpu": [ "arm64" ], - "license": "SEE LICENSE IN LICENSE.md", + "license": "MIT", "optional": true, "os": [ - "win32" + "android" ], - "bin": { - "copilot-win32-arm64": "copilot.exe" + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/@github/copilot-win32-x64": { - "version": "0.0.403", - "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-0.0.403.tgz", - "integrity": "sha512-lju8cHy2E6Ux7R7tWyLZeksYC2MVZu9i9ocjiBX/qfG2/pNJs7S5OlkwKJ0BSXSbZEHQYq7iHfEWp201bVfk9A==", + "node_modules/@koromix/koffi-android-x64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-android-x64/-/koffi-android-x64-3.2.1.tgz", + "integrity": "sha512-HH40xGh3gVQifjOBnhwT2tECC0lL1lYe+nxHvWNSzxDIyQNcVPXg38ta7vuONRFpD+uIrw7fqGYLzbZIagkVcg==", "cpu": [ "x64" ], - "license": "SEE LICENSE IN LICENSE.md", + "license": "MIT", "optional": true, "os": [ - "win32" + "android" ], - "bin": { - "copilot-win32-x64": "copilot.exe" + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/@types/node": { - "version": "18.19.76", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.76.tgz", - "integrity": "sha512-yvR7Q9LdPz2vGpmpJX5LolrgRdWvB67MJKDPSgIIzpFbaf9a1j/f5DnLp5VDyHGMR0QZHlTr1afsD87QCXFHKw==", + "node_modules/@koromix/koffi-darwin-arm64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-darwin-arm64/-/koffi-darwin-arm64-3.2.1.tgz", + "integrity": "sha512-Vj4h+xcjc5+Cn0DhPHjgRX4omKAv96Kehtcd+1YgYuY2W7FvQn9vS+3SmzVwhC5Qmg9bIwUZObYQ8T/4hBqQqA==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/@types/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", + "node_modules/@koromix/koffi-darwin-x64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-darwin-x64/-/koffi-darwin-x64-3.2.1.tgz", + "integrity": "sha512-gFCWxNBTZIvxo1p+PURWfsy2Ctj5FGnVVs1f03lTLhBvmxEto70pdIiFztdFLDFkAJ1pmtQmruRKapeK+E8YPA==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/@koromix/koffi-freebsd-arm64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-freebsd-arm64/-/koffi-freebsd-arm64-3.2.1.tgz", + "integrity": "sha512-qj+f1s2e6vULaUG1cdlTcCXmunCq2t+rjxku1+esaMIqVnHpOwj0QzPuInG0AFdXjwBNQhyVR/HpDj8daEwwsQ==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" + "optional": true, + "os": [ + "freebsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "node_modules/@koromix/koffi-freebsd-ia32": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-freebsd-ia32/-/koffi-freebsd-ia32-3.2.1.tgz", + "integrity": "sha512-6olHb1Qfgai0jjs6ddlDDD0ZfsCxy7SPi8rMRpuYQWH0qhgtyQu82hw5b1p7z+TJ0zZP3ZeQQ6l+U/MlM1ICHQ==", + "cpu": [ + "ia32" + ], "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" + "optional": true, + "os": [ + "freebsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "node_modules/@koromix/koffi-freebsd-x64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-freebsd-x64/-/koffi-freebsd-x64-3.2.1.tgz", + "integrity": "sha512-Dikhw1ySYNVMkmeFvFVjnU5Wdk6mffNoOjJxm9bTG96vg7OlemylxqdEven47R1YJ3yzNVJn/MlQ207ORWfi2w==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" + "optional": true, + "os": [ + "freebsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@koromix/koffi-linux-arm": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-arm/-/koffi-linux-arm-3.2.1.tgz", + "integrity": "sha512-OfwUwZylidq95wQKp6ClInULrfB2giu7dqM6Rhe0zAe6lES5I2SXNw15T9+GnRHk3/9hKT2XZ37OZLaKSyWNLA==", + "cpu": [ + "arm" + ], "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, + "optional": true, + "os": [ + "linux" + ], "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://liberapay.com/Koromix" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/async": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", - "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "node_modules/@koromix/koffi-linux-arm64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-arm64/-/koffi-linux-arm64-3.2.1.tgz", + "integrity": "sha512-K+cGUL5iBcDqxmsocrjmlASqDf24gc7artbVW3PewG2c9AqwC63lezgwvB85Nx4lZAQjB6zIFHh9A7t1yGbwhw==", + "cpu": [ + "arm64" + ], "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" + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@koromix/koffi-linux-ia32": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-ia32/-/koffi-linux-ia32-3.2.1.tgz", + "integrity": "sha512-rxj6UYjU1qd98gxNQOSCdLpc5cPRi5Giq9rNd3jnGuSNIyMkwa6Dxw4cUjmhIBCYESMJtmNt5NWnJp5u9wTfYQ==", + "cpu": [ + "ia32" + ], "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/@koromix/koffi-linux-loong64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-loong64/-/koffi-linux-loong64-3.2.1.tgz", + "integrity": "sha512-aHhnHzkPRmT/IHDlGvESJ/Bs32m8N6UE6Ab6kMeJzgk74IN8af2m/81/wZJtybR1M2UxCV4NmlVNUYQQvSAO3Q==", + "cpu": [ + "loong64" + ], "license": "MIT", - "engines": { - "node": ">= 0.8" + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "node_modules/@koromix/koffi-linux-riscv64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-riscv64/-/koffi-linux-riscv64-3.2.1.tgz", + "integrity": "sha512-qtQBsjbm3LiirLJvajWmKkNb7ARk7fvJVXdftJ7NtAnF3Xw8EbDvrtvmvtNI1yLPlYcBmlzCCD71hwhWYk0SIA==", + "cpu": [ + "riscv64" + ], "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "node_modules/@koromix/koffi-linux-x64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-x64/-/koffi-linux-x64-3.2.1.tgz", + "integrity": "sha512-c7hw7Qs/r5gnFRTQLcbifBwRU7wiocj+2pVuDQ5Ahb3r36SZmupmgYbTWcLvTW+hul1jd7SKRV0d14ZJq/tvSw==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, + "optional": true, + "os": [ + "linux" + ], "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://liberapay.com/Koromix" } }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@koromix/koffi-openbsd-ia32": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-openbsd-ia32/-/koffi-openbsd-ia32-3.2.1.tgz", + "integrity": "sha512-mmY8fY8LQ/CB52+h3yrMYmVyoxzW3x08S0yI6VNfHWdfU6yJtZkKCbhjmQCYMrWbYKC4gMvwZwCywIGPAkLyeA==", + "cpu": [ + "ia32" + ], "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, + "optional": true, + "os": [ + "openbsd" + ], "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://liberapay.com/Koromix" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/@koromix/koffi-openbsd-x64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-openbsd-x64/-/koffi-openbsd-x64-3.2.1.tgz", + "integrity": "sha512-k4ig6aAPbFSRATOIIOfdf/KtlOGH4SVls6L9fy0QnTxRJYvY2oSltTsQtBDANgEQldlq8Kl5WnpRa1VSibP4Lw==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "optional": true, + "os": [ + "openbsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/@koromix/koffi-win32-arm64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-win32-arm64/-/koffi-win32-arm64-3.2.1.tgz", + "integrity": "sha512-cTWBJGK//pDMeKQJE/79Aq9MiOAF4H8QyLZHSQ9IWm8czOfwjG4J1AhsQ9DjI9KFOykH77hhnpmQTGVMIubGig==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" + "optional": true, + "os": [ + "win32" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "node_modules/@koromix/koffi-win32-ia32": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-win32-ia32/-/koffi-win32-ia32-3.2.1.tgz", + "integrity": "sha512-Z50EM6TAZ7CFyMmyX6thv8eNpJchqe9eenhibSIy2Eq/FQYF76gU2VK/LEoaF46L8hfC7TpTp9b10MvReHEyFA==", + "cpu": [ + "ia32" + ], "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, + "optional": true, + "os": [ + "win32" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/@koromix/koffi-win32-x64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-win32-x64/-/koffi-win32-x64-3.2.1.tgz", + "integrity": "sha512-ZmZNiBO6bkOSh3QNzgfvb1cMY0yMobn6ZQrSMqbAce21qyYL8niIbyipz9N/PIRDciGhsV0wUxnZsxIO+yWsHQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, "engines": { "node": ">= 0.6" } }, + "node_modules/body-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^2.0.0", + "debug": "^4.4.3", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", + "on-finished": "^2.4.1", + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, "node_modules/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", @@ -819,27 +990,29 @@ } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", "license": "MIT", - "dependencies": { - "ms": "2.0.0" + "engines": { + "node": ">=6.6.0" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, "engines": { - "node": ">=0.4.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/depd": { @@ -851,21 +1024,14 @@ "node": ">= 0.8" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/dotenv": { - "version": "16.4.7", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", - "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "version": "18.0.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-18.0.5.tgz", + "integrity": "sha512-aBrGvt6KhjxbEnatqMWOMidftwsrCiCvqh1yNIGB9QyF0J+VcWkKDMsvYOEm7ZS82oiV+BT1sTOtIlAmUlTpwQ==", "license": "BSD-2-Clause", + "bin": { + "dotenv": "dist/index.cjs" + }, "engines": { "node": ">=12" }, @@ -894,18 +1060,15 @@ "license": "MIT" }, "node_modules/ejs": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", - "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-7.0.1.tgz", + "integrity": "sha512-TrAb1fY4jNY6aQrNjMJsoWQxGUK47A38JxuUvnt75vDcAA9Ln7ur6FHo+irVa5Bwd3w9rdUT3xLSl5MRgHIugg==", "license": "Apache-2.0", - "dependencies": { - "jake": "^10.8.5" - }, "bin": { "ejs": "bin/cli.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=0.12.18" } }, "node_modules/encodeurl": { @@ -936,9 +1099,9 @@ } }, "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -947,25 +1110,10 @@ "node": ">= 0.4" } }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/esbuild": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", - "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -975,32 +1123,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.3", - "@esbuild/android-arm": "0.27.3", - "@esbuild/android-arm64": "0.27.3", - "@esbuild/android-x64": "0.27.3", - "@esbuild/darwin-arm64": "0.27.3", - "@esbuild/darwin-x64": "0.27.3", - "@esbuild/freebsd-arm64": "0.27.3", - "@esbuild/freebsd-x64": "0.27.3", - "@esbuild/linux-arm": "0.27.3", - "@esbuild/linux-arm64": "0.27.3", - "@esbuild/linux-ia32": "0.27.3", - "@esbuild/linux-loong64": "0.27.3", - "@esbuild/linux-mips64el": "0.27.3", - "@esbuild/linux-ppc64": "0.27.3", - "@esbuild/linux-riscv64": "0.27.3", - "@esbuild/linux-s390x": "0.27.3", - "@esbuild/linux-x64": "0.27.3", - "@esbuild/netbsd-arm64": "0.27.3", - "@esbuild/netbsd-x64": "0.27.3", - "@esbuild/openbsd-arm64": "0.27.3", - "@esbuild/openbsd-x64": "0.27.3", - "@esbuild/openharmony-arm64": "0.27.3", - "@esbuild/sunos-x64": "0.27.3", - "@esbuild/win32-arm64": "0.27.3", - "@esbuild/win32-ia32": "0.27.3", - "@esbuild/win32-x64": "0.27.3" + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" } }, "node_modules/escape-html": { @@ -1018,141 +1166,68 @@ "node": ">= 0.6" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "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" + "accepts": "^2.0.0", + "body-parser": "^2.2.1", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.0", + "depd": "^2.0.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "finalhandler": "^2.1.0", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "merge-descriptors": "^2.0.0", + "mime-types": "^3.0.0", + "on-finished": "^2.4.1", + "once": "^1.4.0", + "parseurl": "^1.3.3", + "proxy-addr": "^2.0.7", + "qs": "^6.14.0", + "range-parser": "^1.2.1", + "router": "^2.2.0", + "send": "^1.1.0", + "serve-static": "^2.2.0", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/express" } }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", - "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/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.12" + "debug": "^4.4.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", - "license": "MIT" - }, - "node_modules/formdata-node": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", - "license": "MIT", - "dependencies": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.3" + "node": ">= 18.0.0" }, - "engines": { - "node": ">= 12.20" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/forwarded": { @@ -1165,12 +1240,12 @@ } }, "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" } }, "node_modules/fsevents": { @@ -1197,17 +1272,17 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", - "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.1", + "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "get-proto": "^1.0.0", + "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", @@ -1233,18 +1308,6 @@ "node": ">= 0.4" } }, - "node_modules/get-tsconfig": { - "version": "4.13.6", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.6.tgz", - "integrity": "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw==", - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, "node_modules/gopd": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", @@ -1257,15 +1320,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -1278,25 +1332,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "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", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -1306,40 +1345,39 @@ } }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/inherits": { @@ -1357,22 +1395,40 @@ "node": ">= 0.10" } }, - "node_modules/jake": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", - "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/koffi": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/koffi/-/koffi-3.2.1.tgz", + "integrity": "sha512-0qE3lZ8jllRqPN4Ob6Ajl7c2bJSJDhQWuKLGP5hIEpHLllJWv1ydHFMhHmHc5p/W9GticKVDbYzZd7TBoQ4CZg==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "url": "https://liberapay.com/Koromix" }, - "engines": { - "node": ">=10" + "optionalDependencies": { + "@koromix/koffi-android-arm64": "3.2.1", + "@koromix/koffi-android-x64": "3.2.1", + "@koromix/koffi-darwin-arm64": "3.2.1", + "@koromix/koffi-darwin-x64": "3.2.1", + "@koromix/koffi-freebsd-arm64": "3.2.1", + "@koromix/koffi-freebsd-ia32": "3.2.1", + "@koromix/koffi-freebsd-x64": "3.2.1", + "@koromix/koffi-linux-arm": "3.2.1", + "@koromix/koffi-linux-arm64": "3.2.1", + "@koromix/koffi-linux-ia32": "3.2.1", + "@koromix/koffi-linux-loong64": "3.2.1", + "@koromix/koffi-linux-riscv64": "3.2.1", + "@koromix/koffi-linux-x64": "3.2.1", + "@koromix/koffi-openbsd-ia32": "3.2.1", + "@koromix/koffi-openbsd-x64": "3.2.1", + "@koromix/koffi-win32-arm64": "3.2.1", + "@koromix/koffi-win32-ia32": "3.2.1", + "@koromix/koffi-win32-x64": "3.2.1" } }, "node_modules/math-intrinsics": { @@ -1385,129 +1441,88 @@ } }, "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", + "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", "license": "MIT", "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", - "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", - "license": "MIT", + "node": ">= 0.8" + }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "node_modules/merge-descriptors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz", + "integrity": "sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==", "license": "MIT", "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" + "node": ">=18" }, - "engines": { - "node": ">=4" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" + "node": ">=18" }, - "engines": { - "node": "*" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz", + "integrity": "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==", "license": "MIT", + "dependencies": { + "content-type": "^2.1.0" + }, "engines": { - "node": ">=10.5.0" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "node_modules/negotiator/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "node": ">=18" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/object-inspect": { @@ -1534,28 +1549,44 @@ "node": ">= 0.8" } }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, "node_modules/openai": { - "version": "4.85.3", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.85.3.tgz", - "integrity": "sha512-KTMXAK6FPd2IvsPtglMt0J1GyVrjMxCYzu/mVbCPabzzquSJoZlYpHtE0p0ScZPyt11XTc757xSO4j39j5g+Xw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-7.28.0.tgz", + "integrity": "sha512-HSY4fFLflQGYe2kvO0atm6/GzhD61gpyiOZZUvO4nptMUhuB1to2K3wwFpFqc5gfEK0SxyIIFiu1yE2MtygWcA==", "license": "Apache-2.0", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" - }, - "bin": { - "openai": "bin/cli" + "engines": { + "node": ">=22.0.0" }, "peerDependencies": { - "ws": "^8.18.0", - "zod": "^3.23.8" + "@aws-sdk/credential-provider-node": ">=3.972.0 <4", + "@smithy/hash-node": ">=4.3.0 <5", + "@smithy/signature-v4": ">=5.4.0 <6", + "undici": ">=5 <9", + "ws": "^8.21.0", + "zod": "^3.25 || ^4.0" }, "peerDependenciesMeta": { + "@aws-sdk/credential-provider-node": { + "optional": true + }, + "@smithy/hash-node": { + "optional": true + }, + "@smithy/signature-v4": { + "optional": true + }, + "undici": { + "optional": true + }, "ws": { "optional": true }, @@ -1574,10 +1605,14 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", - "license": "MIT" + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } }, "node_modules/proxy-addr": { "version": "2.0.7", @@ -1593,12 +1628,13 @@ } }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.0.tgz", + "integrity": "sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.6" + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" }, "engines": { "node": ">=0.6" @@ -1608,58 +1644,49 @@ } }, "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", "license": "MIT", "engines": { "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.10" } }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "node_modules/router": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/router/-/router-2.2.0.tgz", + "integrity": "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==", "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + "dependencies": { + "debug": "^4.4.0", + "depd": "^2.0.0", + "is-promise": "^4.0.0", + "parseurl": "^1.3.3", + "path-to-regexp": "^8.0.0" + }, + "engines": { + "node": ">= 18" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "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/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -1667,57 +1694,48 @@ "license": "MIT" }, "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "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" + "debug": "^4.4.3", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.2" }, "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "license": "MIT", "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/setprototypeof": { @@ -1727,14 +1745,14 @@ "license": "ISC" }, "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" }, @@ -1746,13 +1764,13 @@ } }, "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" @@ -1799,26 +1817,14 @@ } }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", "engines": { "node": ">= 0.8" } }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -1828,20 +1834,13 @@ "node": ">=0.6" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, "node_modules/tsx": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", - "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "version": "4.23.15", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.15.tgz", + "integrity": "sha512-Yiex1Ovn8z2xPpOWckIiysV1SSyRMY9BkLF++q0yKiDxCqRhosKfMg3janKkiLBwZ5c/YryloKwGZcrEmtwxKw==", "license": "MIT", "dependencies": { - "esbuild": "~0.27.0", - "get-tsconfig": "^4.7.5" + "esbuild": "~0.28.0" }, "bin": { "tsx": "dist/cli.mjs" @@ -1854,23 +1853,35 @@ } }, "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "license": "MIT" + "node_modules/type-is/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } }, "node_modules/unpipe": { "version": "1.0.0", @@ -1881,15 +1892,6 @@ "node": ">= 0.8" } }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -1900,38 +1902,20 @@ } }, "node_modules/vscode-jsonrpc": { - "version": "8.2.1", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.1.tgz", - "integrity": "sha512-kdjOSJ2lLIn7r1rtrMbbNCHjyMPfRnowdKjBQ+mGq6NAW5QY2bEZC/khaC5OR8svbbjvLEaIXkOq45e2X9BIbQ==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-9.0.3.tgz", + "integrity": "sha512-qETYf9PCl1lVfwR+oBmMfc4vP2nqLNA35ABxorw3j06+xlKRgDVxbLgKm4Y/xPL0YWdeDjLoI4ImICIT3nB0zQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=14.0.0" } }, - "node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" } } } diff --git a/app/package.json b/app/package.json index 03385e24..49c87146 100644 --- a/app/package.json +++ b/app/package.json @@ -5,18 +5,22 @@ "type": "module", "scripts": { "start": "node app.js", - "start:sdk": "node app-sdk.js" + "start:sdk": "node app-sdk.js", + "test": "node --test" }, "keywords": [], "author": "Microsoft Corporation", "license": "MIT", "description": "", + "devDependencies": { + "vscode-jsonrpc": "^9.0.3" + }, "dependencies": { - "@github/copilot-sdk": "^0.1.23", - "dotenv": "^16.4.7", - "ejs": "^3.1.10", - "express": "^4.21.2", - "openai": "^4.85.0", - "tsx": "^4.21.0" + "@github/copilot-sdk": "1.0.16", + "dotenv": "^18.0.5", + "ejs": "^7.0.1", + "express": "^5.2.1", + "openai": "^7.28.0", + "tsx": "^4.23.15" } } diff --git a/app/public/index.html b/app/public/index.html index 6c7f492b..748b7025 100644 --- a/app/public/index.html +++ b/app/public/index.html @@ -80,11 +80,13 @@

const sendBtn = document.querySelector("#sendBtn"); const chatInput = document.querySelector("#chatInput"); const conversationTpl = document.querySelector('#conversationTpl'); + const responseWindow = document.querySelector('#responseWindow'); let currentCharacter = characters[0]; const maxVolume = 0.5; let utterance = null; + let sending = false; card.addEventListener("mousemove", (e) => { const { clientX, clientY } = e; @@ -129,22 +131,22 @@

sendBtn.addEventListener("click", send); chatInput.addEventListener("input", (e) => { - if (e.target.value) { - sendBtn.disabled = false; - } else { - sendBtn.disabled = true; - } + sendBtn.disabled = sending || !e.target.value; }); - chatInput.addEventListener("keypress", (e) => { + chatInput.addEventListener("keydown", (e) => { if (e.key === "Enter") { + e.preventDefault(); send(); } }); function send() { const message = chatInput.value; - if (!message) return; + if (!message || sending) return; + const requestedCharacter = currentCharacter; + sending = true; + sendBtn.disabled = true; appendConversation({ @@ -163,26 +165,38 @@

headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ message, character: currentCharacter }) + body: JSON.stringify({ message, character: { name: requestedCharacter.name } }) }) - .then(response => response.json()) + .then(async response => { + const data = await response.json(); + if (!response.ok) { + throw new Error(data.message || 'The request failed.'); + } + return data; + }) .then(data => { appendConversation({ type: 'AGENT', message: data.answer, - character: currentCharacter + character: requestedCharacter }); if (speakToggle.checked) { console.log("speaking"); - say(data.answer); + say(data.answer, requestedCharacter); } }) .catch(error => { - console.error('Error:', error.error); + console.error('Error:', error.message); + appendConversation({ + type: 'AGENT', + message: error.message, + character: requestedCharacter + }); }) .finally(() => { + sending = false; chatInput.value = ''; chatInput.disabled = false; chatInput.focus(); @@ -191,9 +205,9 @@

} - function say(text) { + function say(text, character = currentCharacter) { utterance = new SpeechSynthesisUtterance(text); - utterance.voice = speechSynthesis.getVoices()[currentCharacter.voice || 0]; + utterance.voice = speechSynthesis.getVoices()[character.voice || 0] || null; utterance.rate = 1; utterance.pitch = 1; utterance.volume = 1; @@ -270,14 +284,8 @@

function loadCharacterFromUrl() { const urlParams = new URLSearchParams(window.location.search); const characterName = urlParams.get('character'); - if (characterName) { - const character = characters.find(c => c.name === characterName); - if (character) { - setCharacter(character, true); - } - }else { - setCharacter(currentCharacter, true); - } + const character = characters.find(c => c.name === characterName) || currentCharacter; + setCharacter(character, true); } loadCharacterFromUrl(); diff --git a/app/public/js/script.js b/app/public/js/script.js index 19c641e9..6f528468 100644 --- a/app/public/js/script.js +++ b/app/public/js/script.js @@ -12,6 +12,7 @@ let currentCharacter = currentUrl.searchParams.get('character') || ""; let currentVoice = "<%= voice %>"; const maxVolume = 0.5 +let sending = false; backgroundEl.volume = maxVolume; @@ -78,15 +79,24 @@ buttonChange.addEventListener("click", () => { button.addEventListener('click', () => { const message = chatWindow.value; + if (!message || sending) return; + sending = true; + button.disabled = true; responseWindow.value = `You: ${message}`; fetch('/send', { method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ message }) + body: JSON.stringify({ message, character: { name: listEl.value } }) }) - .then(response => response.json()) + .then(async response => { + const data = await response.json(); + if (!response.ok) { + throw new Error(data.message || 'The request failed.'); + } + return data; + }) .then(data => { responseWindow.value += `\n<%= title %>: ${data.answer}`; console.log("speak enabled", speakEl.checked); @@ -97,7 +107,12 @@ button.addEventListener('click', () => { }) .catch(error => { - console.error('Error:', error.error); + console.error('Error:', error.message); + responseWindow.value += `\n${error.message}`; + }) + .finally(() => { + sending = false; + button.disabled = false; }); chatWindow.value = ''; }); diff --git a/app/test/chat.test.js b/app/test/chat.test.js new file mode 100644 index 00000000..b4f61fec --- /dev/null +++ b/app/test/chat.test.js @@ -0,0 +1,253 @@ +import assert from 'node:assert/strict'; +import { once } from 'node:events'; +import { createServer } from 'node:http'; +import { test } from 'node:test'; +import { OpenAI } from 'openai'; +import { createApp as createSdkApp, createClient } from '../app-sdk.js'; +import { createApp as createModelsApp } from '../app.js'; +import characters from '../public/characters.json' with { type: 'json' }; + +async function startApp(t, app) { + const server = app.listen(0, '127.0.0.1'); + await once(server, 'listening'); + t.after(() => new Promise((resolve, reject) => { + server.close(error => error ? reject(error) : resolve()); + server.closeAllConnections(); + })); + const url = `http://127.0.0.1:${server.address().port}`; + return { + url, + async send(body) { + const response = await fetch(`${url}/send`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(body) + }); + return { status: response.status, body: await response.json() }; + } + }; +} + +function fakeSdk({ sendError, closeError, response } = {}) { + const configs = []; + const prompts = []; + const lifecycle = []; + const client = { + async createSession(config) { + configs.push(config); + const sessionId = `session-${configs.length}`; + return { + sessionId, + async sendAndWait(options) { + prompts.push(options); + if (sendError) throw sendError; + return response ?? { data: { content: config.systemMessage.content } }; + }, + async abort() { + lifecycle.push(['abort', sessionId]); + if (closeError) throw closeError; + }, + async disconnect() { + lifecycle.push(['disconnect', sessionId]); + } + }; + }, + async deleteSession(sessionId) { + lifecycle.push(['delete', sessionId]); + } + }; + return { app: createSdkApp(client), configs, prompts, lifecycle }; +} + +function fakeModels() { + const configs = []; + const openai = { + chat: { + completions: { + async create(config) { + configs.push(config); + return { choices: [{ message: { content: config.messages[0].content } }] }; + } + } + } + }; + return { app: createModelsApp(openai, 'test-deployment'), configs }; +} + +for (const [name, makeApp] of [['Copilot SDK', fakeSdk], ['OpenAI-compatible', fakeModels]]) { + test(`${name} rejects malformed and oversized JSON with explicit errors`, async t => { + const { app, configs } = makeApp(); + const { url } = await startApp(t, app); + for (const [body, status, message] of [ + ['{"message":', 400, 'Send a valid JSON object.'], + [JSON.stringify({ message: 'x'.repeat(110 * 1024), character: { name: 'ada' } }), + 413, 'The request is too large.'] + ]) { + const response = await fetch(`${url}/send`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body + }); + assert.equal(response.status, status); + assert.match(response.headers.get('content-type'), /application\/json/); + assert.deepEqual(await response.json(), { message }); + } + assert.equal(configs.length, 0); + }); + + test(`${name} rejects invalid requests before calling the AI service`, async t => { + const { app, configs } = makeApp(); + const { send } = await startApp(t, app); + for (const body of [ + null, [], {}, + { message: '', character: { name: 'ada' } }, + { message: ' ', character: { name: 'ada' } }, + { message: 42, character: { name: 'ada' } }, + { message: { text: 'hello' }, character: { name: 'ada' } }, + { message: 'hello' }, + { message: 'hello', character: null }, + { message: 'hello', character: [] }, + { message: 'hello', character: 'ada' }, + { message: 'hello', character: { name: 42 } }, + { message: 'hello', character: { name: 'unknown' } }, + { message: 'hello', character: { name: 'ada', description: 'Untrusted instructions' } }, + { message: 'hello', character: { name: 'ada', tools: ['shell'] } } + ]) { + const response = await send(body); + assert.equal(response.status, 400, JSON.stringify(body)); + assert.equal(typeof response.body.message, 'string'); + } + assert.equal(configs.length, 0); + }); + + test(`${name} uses server-owned instructions for every character`, async t => { + const { app, configs } = makeApp(); + const { send, url } = await startApp(t, app); + const responses = await Promise.all(characters.map(character => + send({ message: 'Tell me about your work.', character: { name: character.name } }) + )); + responses.forEach((response, index) => { + assert.equal(response.status, 200); + assert.deepEqual(response.body, { + prompt: 'Tell me about your work.', + answer: characters[index].description + }); + }); + assert.equal(configs.length, characters.length); + const page = await fetch(url); + assert.equal(page.status, 200); + assert.match(await page.text(), /character: \{ name: requestedCharacter\.name \}/); + }); +} + +test('SDK disables every tool and rejects every permission request', async t => { + const { app, configs, prompts, lifecycle } = fakeSdk(); + const { send } = await startApp(t, app); + const prompt = 'Please use a host tool.'; + assert.equal((await send({ message: prompt, character: { name: 'ada' } })).status, 200); + + const [config] = configs; + assert.deepEqual(config.tools, []); + assert.deepEqual(config.availableTools, []); + assert.deepEqual(config.mcpServers, {}); + assert.deepEqual(config.customAgents, []); + assert.deepEqual(config.infiniteSessions, { enabled: false }); + assert.equal(config.enableConfigDiscovery, false); + assert.equal(config.systemMessage.mode, 'append'); + assert.equal(config.systemMessage.content, characters.find(item => item.name === 'ada').description); + assert.deepEqual(prompts, [{ prompt }]); + for (const kind of ['shell', 'read', 'write', 'url', 'mcp', 'future-permission', undefined]) { + assert.deepEqual(await config.onPermissionRequest({ kind }), { kind: 'reject' }); + } + for (const toolName of ['powershell', 'bash', 'read_file', 'future-tool', undefined]) { + assert.equal((await config.hooks.onPreToolUse({ toolName })).permissionDecision, 'deny'); + } + assert.deepEqual(lifecycle, [ + ['abort', 'session-1'], ['disconnect', 'session-1'], ['delete', 'session-1'] + ]); +}); + +for (const [name, options] of [ + ['model error', { sendError: new Error('Private SDK error details') }], + ['timeout', { sendError: new Error('Timeout waiting for session.idle') }], + ['missing answer', { response: {} }], + ['empty answer', { response: { data: { content: '' } } }], + ['cleanup error', { closeError: new Error('Abort failed') }] +]) { + test(`SDK reports ${name} and still attempts all session cleanup`, async t => { + const log = t.mock.method(console, 'error', () => {}); + const { app, lifecycle } = fakeSdk(options); + const { send } = await startApp(t, app); + const response = await send({ message: 'hello', character: { name: 'ada' } }); + assert.equal(response.status, 500); + assert.deepEqual(response.body, { + message: 'An unexpected error occurred. Please try again later.' + }); + assert.equal(log.mock.callCount(), 1); + assert.deepEqual(lifecycle, [ + ['abort', 'session-1'], ['disconnect', 'session-1'], ['delete', 'session-1'] + ]); + }); +} + +test('SDK client requires an explicit state directory for empty mode', () => { + assert.throws(() => createClient(), /mode: 'empty'.*baseDirectory/); +}); + +test('the OpenAI-compatible app requires an explicit model', () => { + assert.throws(() => createModelsApp({}), /model name is required/); +}); + +for (const [name, completion] of [ + ['missing completion', undefined], + ['missing choices', {}], + ['empty choices', { choices: [] }], + ['empty answer', { choices: [{ message: { content: '' } }] }], + ['non-string answer', { choices: [{ message: { content: 42 } }] }] +]) { + test(`the OpenAI-compatible app reports ${name} without a successful empty response`, async t => { + const log = t.mock.method(console, 'error', () => {}); + const app = createModelsApp({ + chat: { completions: { create: async () => completion } } + }, 'test-deployment'); + const { send } = await startApp(t, app); + const response = await send({ message: 'Hello', character: { name: 'ada' } }); + assert.equal(response.status, 500); + assert.deepEqual(response.body, { + message: 'An unexpected error occurred. Please try again later.' + }); + assert.equal(log.mock.callCount(), 1); + }); +} + +test('the updated OpenAI SDK preserves the chat-completion request and response', async t => { + let request; + const provider = createServer(async (req, res) => { + assert.equal(req.url, '/chat/completions'); + let body = ''; + for await (const chunk of req) body += chunk; + request = JSON.parse(body); + res.setHeader('Content-Type', 'application/json'); + res.end(JSON.stringify({ choices: [{ message: { content: 'Hello from Ada.' } }] })); + }); + provider.listen(0, '127.0.0.1'); + await once(provider, 'listening'); + t.after(() => new Promise(resolve => { + provider.close(resolve); + provider.closeAllConnections(); + })); + const openai = new OpenAI({ + baseURL: `http://127.0.0.1:${provider.address().port}`, + apiKey: 'local-test-only', + maxRetries: 0 + }); + const { send } = await startApp(t, createModelsApp(openai, 'test-deployment')); + const response = await send({ message: 'Hello', character: { name: 'ada' } }); + assert.equal(response.status, 200); + assert.deepEqual(response.body, { prompt: 'Hello', answer: 'Hello from Ada.' }); + assert.equal(request.model, 'test-deployment'); + assert.deepEqual(request.messages, [ + { role: 'system', content: characters.find(item => item.name === 'ada').description }, + { role: 'user', content: 'Hello' } + ]); +}); diff --git a/app/test/model-config.test.js b/app/test/model-config.test.js new file mode 100644 index 00000000..fa323723 --- /dev/null +++ b/app/test/model-config.test.js @@ -0,0 +1,88 @@ +import assert from 'node:assert/strict'; +import { mkdtemp, rm, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import path from 'node:path'; +import { test } from 'node:test'; +import { fileURLToPath } from 'node:url'; +import dotenv from 'dotenv'; +import { getModelConfig, loadEnvironment } from '../model-config.js'; + +const settings = { + AI_ENDPOINT: 'https://example.test/openai/v1/', + AI_API_KEY: 'fixture-key', + AI_MODEL: 'fixture-deployment' +}; + +test('model configuration uses the course environment variable names', () => { + assert.deepEqual(getModelConfig(settings), { + baseURL: settings.AI_ENDPOINT, + apiKey: settings.AI_API_KEY, + model: settings.AI_MODEL + }); +}); + +test('model configuration rejects missing, blank, or non-string values', () => { + for (const name of Object.keys(settings)) { + for (const value of [undefined, '', ' ', 42]) { + assert.throws(() => getModelConfig({ ...settings, [name]: value }), new RegExp(name)); + } + } +}); + +test('model configuration rejects invalid or unsafe endpoint URLs', () => { + for (const endpoint of [ + 'not a URL', + '/relative/path', + 'file:///tmp/model', + 'http://example.test/v1/', + 'https://user:password@example.test/v1/' + ]) { + assert.throws(() => getModelConfig({ ...settings, AI_ENDPOINT: endpoint }), /AI_ENDPOINT/); + } +}); + +test('model configuration permits loopback HTTP providers and trims settings', () => { + for (const endpoint of ['http://localhost:3000/v1', 'http://127.0.0.1:3000/v1', 'http://[::1]:3000/v1']) { + assert.equal(getModelConfig({ ...settings, AI_ENDPOINT: endpoint }).baseURL, endpoint); + } + assert.deepEqual(getModelConfig({ + AI_ENDPOINT: ` ${settings.AI_ENDPOINT} `, + AI_API_KEY: ' fixture-key ', + AI_MODEL: ' fixture-deployment ' + }), { baseURL: settings.AI_ENDPOINT, apiKey: 'fixture-key', model: 'fixture-deployment' }); +}); + +test('environment loading uses the repository-root .env file by default', t => { + const config = t.mock.method(dotenv, 'config', () => ({ parsed: {} })); + const env = {}; + loadEnvironment(env); + assert.equal(config.mock.calls[0].arguments[0].path, fileURLToPath(new URL('../../.env', import.meta.url))); + assert.equal(config.mock.calls[0].arguments[0].processEnv, env); +}); + +test('an explicit environment file loads settings without overriding existing values', async t => { + const directory = await mkdtemp(path.join(tmpdir(), 'character-chat-env-')); + t.after(() => rm(directory, { recursive: true, force: true })); + const file = path.join(directory, '.env'); + await writeFile(file, 'AI_ENDPOINT=https://example.test/v1/\nAI_API_KEY=fixture-key\nAI_MODEL=fixture-model\nPORT=12345\n'); + const env = { ENV_FILE: file, AI_MODEL: 'existing-model' }; + loadEnvironment(env); + assert.equal(env.AI_MODEL, 'existing-model'); + assert.equal(env.AI_API_KEY, 'fixture-key'); + assert.equal(env.PORT, '12345'); +}); + +test('an unreadable explicit environment file fails at startup', () => { + assert.throws(() => loadEnvironment({ ENV_FILE: fileURLToPath(new URL('./missing.env', import.meta.url)) }), + /environment file could not be read/); +}); + +test('only a missing optional default environment file is ignored', t => { + const error = Object.assign(new Error('Missing file'), { code: 'ENOENT' }); + const config = t.mock.method(dotenv, 'config', () => ({ error })); + assert.doesNotThrow(() => loadEnvironment({})); + config.mock.mockImplementation(() => ({ + error: Object.assign(new Error('Access denied'), { code: 'EACCES' }) + })); + assert.throws(() => loadEnvironment({}), /environment file could not be read/); +}); diff --git a/app/test/sdk-protocol.test.js b/app/test/sdk-protocol.test.js new file mode 100644 index 00000000..3243c76d --- /dev/null +++ b/app/test/sdk-protocol.test.js @@ -0,0 +1,132 @@ +import assert from 'node:assert/strict'; +import { once } from 'node:events'; +import { createServer } from 'node:net'; +import { tmpdir } from 'node:os'; +import path from 'node:path'; +import { test } from 'node:test'; +import { + createMessageConnection, StreamMessageReader, StreamMessageWriter +} from 'vscode-jsonrpc/node'; +import { RuntimeConnection } from '@github/copilot-sdk'; +import { createApp, createClient } from '../app-sdk.js'; + +test('the installed SDK sends chat-only controls and preserves SDK guardrails', { timeout: 10000 }, async t => { + const requests = []; + let rpc; + let hookResult; + let resolvePermission; + const permissionAnswered = new Promise(resolve => { resolvePermission = resolve; }); + const runtime = createServer(socket => { + rpc = createMessageConnection( + new StreamMessageReader(socket), new StreamMessageWriter(socket) + ); + rpc.onRequest(async (method, params) => { + requests.push({ method, params }); + switch (method) { + case 'connect': + return { protocolVersion: 3 }; + case 'session.create': + return { sessionId: params.sessionId, capabilities: {} }; + case 'session.options.update': + return { success: true }; + case 'session.send': + await rpc.sendNotification('session.event', { + sessionId: params.sessionId, + event: { + type: 'permission.requested', + data: { + requestId: 'permission-1', + permissionRequest: { kind: 'shell', commands: [] } + } + } + }); + await permissionAnswered; + hookResult = await rpc.sendRequest('hooks.invoke', { + sessionId: params.sessionId, + hookType: 'preToolUse', + input: { toolName: 'future-tool', toolArgs: {} } + }); + await rpc.sendNotification('session.event', { + sessionId: params.sessionId, + event: { type: 'assistant.message', data: { content: 'Hello from Ada.' } } + }); + await rpc.sendNotification('session.event', { + sessionId: params.sessionId, + event: { type: 'session.idle', data: { mode: 'interactive' } } + }); + return { messageId: 'message-1' }; + case 'session.permissions.handlePendingPermissionRequest': + resolvePermission(); + return { applied: true }; + case 'session.abort': + return {}; + case 'session.detach': + case 'session.delete': + return { success: true }; + default: + throw new Error(`Unexpected SDK RPC: ${method}`); + } + }); + rpc.listen(); + }); + runtime.listen(0, '127.0.0.1'); + await once(runtime, 'listening'); + const directory = path.join(tmpdir(), 'character-chat-protocol-test'); + const client = createClient(directory, RuntimeConnection.forUri( + `127.0.0.1:${runtime.address().port}` + )); + const server = createApp(client).listen(0, '127.0.0.1'); + await once(server, 'listening'); + t.after(async () => { + const errors = await client.stop(); + rpc?.dispose(); + await Promise.all([ + new Promise(resolve => runtime.close(resolve)), + new Promise(resolve => { + server.close(resolve); + server.closeAllConnections(); + }) + ]); + assert.deepEqual(errors, []); + }); + + await assert.rejects(client.createSession({ model: 'gpt-4.1' }), /availableTools/); + assert.equal(requests.some(item => item.method === 'session.create'), false); + const response = await fetch(`http://127.0.0.1:${server.address().port}/send`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ message: 'Hello', character: { name: 'ada' } }) + }); + assert.equal(response.status, 200); + assert.deepEqual(await response.json(), { prompt: 'Hello', answer: 'Hello from Ada.' }); + + const config = requests.find(item => item.method === 'session.create').params; + assert.deepEqual(config.availableTools, []); + assert.deepEqual(config.tools, []); + assert.equal(config.requestPermission, true); + const permission = requests.find(item => + item.method === 'session.permissions.handlePendingPermissionRequest' + ).params; + assert.equal(permission.requestId, 'permission-1'); + assert.deepEqual(permission.result, { kind: 'reject' }); + assert.equal(config.hooks, true); + assert.equal(config.toolFilterPrecedence, 'excluded'); + assert.equal(config.enableConfigDiscovery, false); + assert.equal(config.enableFileHooks, false); + assert.equal(config.enableHostGitOperations, false); + assert.equal(config.enableSkills, false); + assert.equal(config.enableSessionStore, false); + assert.equal(config.enableSessionTelemetry, false); + assert.deepEqual(config.memory, { enabled: false }); + assert.equal(config.systemMessage.mode, 'customize'); + assert.deepEqual(config.systemMessage.sections.environment_context, { action: 'remove' }); + assert.match(config.systemMessage.content, /Ada Lovelace/); + assert.equal(hookResult.output.permissionDecision, 'deny'); + const patch = requests.find(item => item.method === 'session.options.update').params; + assert.equal(patch.skipCustomInstructions, true); + assert.deepEqual(patch.installedPlugins, []); + assert.deepEqual(patch.includedBuiltinSkills, []); + assert.deepEqual(requests.filter(item => + ['session.abort', 'session.detach', 'session.delete'].includes(item.method) + ).map(item => item.method), ['session.abort', 'session.detach', 'session.delete']); +}); diff --git a/app/test/sdk-runtime.test.js b/app/test/sdk-runtime.test.js new file mode 100644 index 00000000..b8ab57dd --- /dev/null +++ b/app/test/sdk-runtime.test.js @@ -0,0 +1,68 @@ +import assert from 'node:assert/strict'; +import { once } from 'node:events'; +import { mkdtemp, rm } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import path from 'node:path'; +import { test } from 'node:test'; +import { RuntimeConnection } from '@github/copilot-sdk'; +import { createApp, createClient } from '../app-sdk.js'; + +test('the packaged runtime advertises no tools and deletes chat sessions', { timeout: 30000 }, async t => { + const directory = await mkdtemp(path.join(tmpdir(), 'character-chat-test-')); + const env = { + PATH: process.env.PATH, + HOME: directory, + TMPDIR: directory, + COPILOT_TELEMETRY_DISABLED: '1' + }; + for (const name of ['SystemRoot', 'WINDIR', 'TEMP', 'TMP']) { + if (process.env[name]) env[name] = process.env[name]; + } + const client = createClient(directory, RuntimeConnection.forStdio({ + env, args: ['--no-auto-login'] + })); + let inventory; + const app = createApp({ + async createSession(config) { + const session = await client.createSession({ + ...config, + provider: { + type: 'openai', + baseUrl: 'http://127.0.0.1:1', + apiKey: 'local-test-only', + wireApi: 'completions' + } + }); + inventory = await session.rpc.tools.getCurrentMetadata(); + return { + sessionId: session.sessionId, + sendAndWait: async () => ({ data: { content: 'A local chat response.' } }), + abort: () => session.abort(), + disconnect: () => session.disconnect() + }; + }, + deleteSession: sessionId => client.deleteSession(sessionId) + }); + const server = app.listen(0, '127.0.0.1'); + t.after(async () => { + try { + await new Promise(resolve => { + server.close(resolve); + server.closeAllConnections(); + }); + assert.deepEqual(await client.stop(), []); + } finally { + await rm(directory, { recursive: true, force: true }); + } + }); + await once(server, 'listening'); + const response = await fetch(`http://127.0.0.1:${server.address().port}/send`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ message: 'Hello', character: { name: 'ada' } }) + }); + assert.equal(response.status, 200); + assert.deepEqual(await response.json(), { prompt: 'Hello', answer: 'A local chat response.' }); + assert.deepEqual(inventory.tools, []); + assert.deepEqual(await client.listSessions(), []); +}); diff --git a/docs/additional-resources.md b/docs/additional-resources.md index cd058b88..dbc1985c 100644 --- a/docs/additional-resources.md +++ b/docs/additional-resources.md @@ -14,8 +14,7 @@ You can find here hands-on tutorials to put your AI skills into practice, with s | Name | Description | Duration | Level | Links | | ---- | ----------- | -------- | ----- | ----- | -| Azure OpenAI RAG workshop - Qdrant version | Explore the fundamentals of custom ChatGPT experiences based on a corpus of documents. We will create a vector database and fill-in with data from PDF documents, and then build a chat website and API to be able to ask questions about information contained in these documents. | 3h | Beginner | [Tutorial](https://moaw.dev/workshop/gh:azure-samples/azure-openai-rag-workshop/docs/workshop-qdrant.md) / [Repo](https://github.com/Azure-Samples/azure-openai-rag-workshop) | -| Azure OpenAI RAG workshop - AI Search version | Explore the fundamentals of custom ChatGPT experiences based on a corpus of documents. We will create a vector database and fill-in with data from PDF documents, and then build a chat website and API to be able to ask questions about information contained in these documents. | 3h | Beginner | [Tutorial](https://moaw.dev/workshop/?src=gh:azure-samples/azure-openai-rag-workshop/docs/) / [Repo](https://github.com/Azure-Samples/azure-openai-rag-workshop) | +| Azure OpenAI RAG workshop | Build a chat application that retrieves information from a document collection. Use the workshop's current setup and exercises for its supported search services. | 3h | Beginner | [Workshop docs](https://github.com/Azure-Samples/azure-openai-rag-workshop/tree/main/docs) / [Repo](https://github.com/Azure-Samples/azure-openai-rag-workshop) | | Integrate OpenAI, Communication, and Organizational Data Features into a Line of Business App | This tutorial demonstrates how Azure OpenAI, Azure Communication Services, and Microsoft Graph/Microsoft Graph Toolkit can be integrated into a Line of Business (LOB) application to enhance user productivity, elevate the user experience, and take LOB apps to the next level | 3h | Beginner | [Tutorial](https://learn.microsoft.com/microsoft-cloud/dev/tutorials/openai-acs-msgraph) / [Repo](https://github.com/microsoft/MicrosoftCloud) | ## Code samples diff --git a/docs/images/create-codespace.png b/docs/images/create-codespace.png deleted file mode 100644 index d7072a782bd4b3e599d34ae89d6d4c2f149a3a81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43912 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

{Xo3rWAvFn0&(t&l4 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

qu zI7a%M7(fkCimI<4qn@+>(qPlr#T$!U3;d+SU|$aZ$5rhQecTcNA15us;ZMRA-p&+H zMHQB6DQnG27Kw{9)m14;v)N9DY(~p03NPxOD<6 zk+q?!TpX$^wWyi%27~D8NMMyH=aXJ_MM-r+u&*gYO+&Vr;+}h>gBz<=gzXY4&$sKO z<8xn4=*oARg`rFZQ2)+^WfG_2QF+%3dzch7TRRAOOp+l=d{SDglz z@j$G)hT)DA2OvxH8Akpr#>AXw1?@18POnPQFfZ*ZeWYrO(KN~VURC@)TV~!Th&Il){EQUCpy*!v#$2ePJ|hu* zz0FdzCykJbZzA%kiS^Iw3^gL>k}v3~iMEXa96^GWF|?IVrkOnPw3TuJlAsPCm)s-O zk6W>KW9@{{g6Ghx0;xnjwI#d*L9uuz!QYbW3l}BB_ zr6{4%@!1Cos`&azUbh=Zy*e@I+l95i51n4^CyBunvv=nUIS<+7jMl}g*m-GFUcNK> zYbmCRaXW|A%R8MmDNc)5>~qRA-s%5rI{y1(;BfOrpZ84l*`P6IIlnBia_bWUzv#kJ zS=HtR65NPgC*6w)@LQ6{qN~8~nq!63N>LW?ZY!X@cv*07`KIp{92O{MJ#F>zVKtyI z-sN5KUd3(*S2R{=EWWL;NYLR_Yqe8<`X06Y>EQ4e7(#HL^-V)eVU&!f$W49h%JFSq0v05}EXoUyQJ#_D~ zJraq=XNC1g<8KYmvWR`r?Io_I^b{;UEuRn)SqY2qXL)&;v9+!}@^PjJ|95P3lO2*_Ql(5(}Dv2Ai)e!xgQ5 z``mb!Esvc)&glox1hnqxbocb^x;6}FlHAgC_|7Ya`5%(7g2CJNo zCT72w;-lSxQ7qr}1**TMDhmZM;JM9^M2VzIh+0ZVS_Poec&d5yAiX2I{;~y+RN;~R zl#ASy7*IwqG#KD7ypLLL)+6r2@ILo|GSsVm1ma;`Sv0%;G{MM#`IHz^Fy<4UOh;OK zw>GL}!_4s1o-=doJCZXUlI&$GnBtd2a@LbHI^W_RCNfTE2ne&iwro;lZko#8_ zvIQz(3(NtJRk4r#`ANkXNkk_j)XOz_j)`}|E{_^gE!zeHSySD~w&s^hfI5@11tRGP z8}QbcNW$s$TO9LMmfN@%ECac-W%Q5q2AtX3OUyGW)-!oJpC9&a4g1&DU!mZa>xZ!L zDj%k#q?|o?$mv}R(&@`o?N?s^b`k2RYRduZSGuk|`A7K}s&dzu-c8XC`HAvwtA`7n z5a^a?|Fy^{&^ayJ2bLCj9`9m4Pg89#i`>k0{*{r^)dl6L+r1SgW7m1m9l$~H6=Ev)3x*B#ep_w3ddOQi|UNYY4!rpR0!O=VK)O%qAf|1)yNg@ zMEvkfvLAc$8_Q+ut9Q)?ug}~oAWc<CMb;AZL`J#j@$RH?uD{T|}fS)Ur* z$`yq=`t$k8y~l1rA?dIO8^ZV=m|?{5q0Z;wDEt0mg)0%(S{DDA{_&k8=oa6`e_^-f zaIY%e*MiB%VI74a<6&}2n`@#4u!WU+GNpKZcbJuWvYN!3{a%{mn*)=Fmc>3tqMGq? z^ym@h=xZYL+l7w3r{|LkxP!8~Cwy3BZ1k?Hd*ErOIeviphWToMBPpF)XvIt*yL@(C zVs4{0IPb!>@u@amf>Nj_uFEuYbdx*3OifhNc`s?*jrlJ6Y=!=zjs}bF2-G3Y!qKGM z?=`}6P|f^Gz^=`!=dH`aK?^a=Fzq}1se#LZhKObZAt5gUIZYi3i(R3j_`U5TQC({6HRucH(FykYv!dSEcDhj)lSKv8Cgm>#3{UG|#( zS|H||`Vfmcpuo9j#=vob1V|1t+>`e;F%`FtfNePNmp*niL|Uzd`1HTytoEZ7 zw3$wWQBX=AU%5rrhc@5$*f{ORU2~Qyi9_o@47?uCB&G0*hCNQ^#N;!NbqxT%{Rn@% za)o9Zaq+|Z+q2(}!wp<7-H&K$-LNW4_tsZNE38a@t=bx#dg3!F-bL<;I=s=w#Q0_VFuh>Z3u)VvIhDNsHSua}nqi+wV0b3iDL{ z;`!_=+D1P%3V#T45kTh5vP}8_1U>COIpT`1KA?LWO)v*Az9VgVP3j?-RQ#CKC3708 zqqy-iK?@f(4!RQMx6H((;igR0)%#T(!iv7kf-6LQGD=TVco zdUKkn_0eY0zdwOqN6(LNtn+~+1OP*N)sX8MMR&*TA?iW7?=}z2bMWoEVE2=*7vT;3 zsZ2t*0S9GdV2Gw8TgcSlx=9RdOPxJ z3U$QY5$etjYy|AKagn#g^%iHtq{-U87R`wqedXoLA>p;%iZ1q;+Hr>R*~SgS&BEf9 zv8w1ceivUduvoNTlo z8n@&hXF1myEK7SRIPtF6>wJB&@ZQ>?O3ZS=r}?-)JTz0P_JAHWU}dziqHUp(F3qH_ z0HB1y+Oh3#Z)xVUyk2&*zb5e7w8j0UzmkXj)BYRuA*xzaECDhH0rp&i<&$wEfy}wv z3Gw@S*Ei>)hJ$AcU_XRs+@Ms!D&Y)SCJp}^pZFF{M%Kzk+Jh5PE4n1NdG|oFxopQh zu2W05vZ?F|UM{L11qsN4jdgze?v2NFsT1gQRu^!#p|m}?MLO>Ae628=OKTxGESlT1 ztkh|Ci+Rn(;no^&yqA=M`eM_bOkCBDe%?aJJ@X4X36hofuqeRKcIruA3iUiiH~=Fi zhl})GwQm{B!qU5sD4u*s*iT_!N3kfxin+=e4Km&L;6~zCaeh`{XHvR-v_Qb?`|g); zoS5=rS}eKtOj12!kGZ0;mMZx*zd@qH;w(D2>!*M#<%7sr?pD_Cl3G;NR`<5nZm}V_ z0BT_O>9+P0rPKo_oBWJgJe*sFPH~?+{MrTIYw3KFv}P0xQ1}8h;FNuVEgORf$?%qv zXpnowy*Sxq!5k#T!8A|t@iprCncVe6p*_M@q2@eYt4#ofumM$XF^Zpqg93d*Thn(a zu^2=Ik|8iyi;jl&e)S;Utd{c&&N)cy=RF(2*F@_D9>%YrcmV^Vci~6Ekdhk~hSV;H zcJM>g4yg$au_&8|2>7hREIrNANXRdVZep&s@ElWdK&FUU51=K8GZ{+gWd->@sIZ6IYIL z1ga!5*QR-LWheZ{s&#&p)q;qvQ)QHiHuC0t=c*0RlVitrwlWk7Q0?hM{y~aiR=)0` ziLhbajq2O=rO7~{LYgnLGbChbivHq7vBu>4Md1_sK3FZo!Zj0W)A71;>bbv_2Fah| z`jz1?Q5}qK`eqAom$B|Qpky}8>GJpP&0P6=LUmg0l6~phF@$)sWxLN(4Ego#z*-K- z+L^QL@Gt|5V3Jev3bTQoV$Ql$ouV*v(2GFjL;-Gg#so5xrM(r33VigVE|$5rvQ)fc zzkz}+y7Y@3ruL^J_-BYO=WdS9R>;=%PZL`!~VJS_hn8b8eml8r!v+@$f zbT0kE5mPHFf{~2RmqM&EjfC6>hTGSE;w zVK#k&^JqiI?&6{KoF9scqFR!rTtkVT^R-XChW>!rKNe4U?Z`G2!!m$RN#nWtB zZgbd$QiW0n5(nNN>@0b?B*DZTFA7)qd1Sw!MbS2z;}A1&dhK03TQp1+gJs3dC4Vq& z5u6ZWl(5ZU&&+88xQc+0Lw?_0dmV5E;Hbzf3+(XaQT(G2zp72tV@~X>D?1Uil-VAN zjk>dcB3m538VE2t3`{BSu)vZ)I5e>oD9CYPW~U3u9^+q{6Mf`_VIkgNFIVupEh6H5 zZTNLx=KJjH-2C$(8;RFeLV(HKt3Fu2Fedhnx2v=MJ-Sl4(#?wV%$YuKb=l zZFF)t@>QeHABihtk?@%1jI*?@7%I8RD{v|n=Ms%N=?f}MYcjS3;s;ry^lS+P7#6#L zbD;Ha!a`}+G@MUOzl8ZT+h{eLC5r@IyaYXpcGoAbGtSGLCNiUW*rC~!CHK3oMRLLX zCmP+2Y-{HE6$Q#irD0&Pm*CR(X^mI5RnuKno)-5+{UVP(7R@I?ZWkVf?!29O2#?QHpuz$@66KMl?h1ay$^zV|8o6;4m!dqCl{@ z)?_Du*iTNaTMs1&eL=(&&tv3ddGBBse15zt7hwb(+fEwrS||0%9iqMF{K$-eO2~fH z?=G!%|R-J!R66N3@cC5Nk;*DB~-H9Gd^O3Bv~_C=uI3hy+k67 zO4oH4wBhn=TbRk88a4!UXK(l} zJ(1i$rl$DE_3z!nZC>$is@8c2B`F=#1Km_)`I1etxAUm!p5`U?u>_I1rm5<)eMqo# z3#2~=1$Qifue|f7-%rs$=7r94z$*{ z7^im>kDB?fIbx#~yLTfuHcCZWQ=rjiEr6WEYL1*t1m?nPx!e`Wr8^sp6c+R_{ThRX zs0t(;9k zOWF7;VA(Ht-wvc^9eAhc-7J@8guf^phQ5>ROT=xg(EDAf=tMROS#F3&_m?#`{Q|v@ z$BTWBi!B=x6PK3T9Nydfd>5IWf5jn`sZ6AM-}r+PekKHacdb>MNgZ!M{*<+RP4$lJ2{R=JEddvqy#b9sgz)6T+4 zA}Dg2oXinLb`RSl%%aW;Ry0rp!0*{FAg``E$K$PhSup}h0cA)$)wmhq8df&R6HXto zrD$02bA!|@g@rml;ADYHT<#2iVcCNG(7}i=oZxdj1(vu){9?K5*bW z@O$MhrDMkd8R0aamg%!$S=fdfqd*u!DyX{O*`Mp%?kL5m1yDF)vO`L#_1bZauz)H$ zZEIm@LH#{US6z<+nj=@^xWr)~bk*0l3wp_7+@ox=_}05I>&*QOA_N;kDbVSm_i5sQ zq|c4dn6;Kx@iCQuX0&8Ijv!9ZyHT7uiWdVK<@7rJu8Y}x%y6Xi z3zHV_kCwI=hrq(USbYJ8V_)SD-?rU#dYg|A@2x(f_!%v(zPip980B}W)cVIs1?DZh zEkw8p&)KBBR@iW=&xD6M%w0EYtu)8IrOAx@@m}=#s4ZN!R$vG1&LNYD6m5DFZN$Z9 z;Ws#l$~Usd5@Ay+BK)jGCR_ee&s!mp{>7Sn4o{dL_Dj#GvTB4u=;~VAjPyg+H~~)O zy0~-2nI}CMVFNY8H zUsfwZe0a1;?Ha4cIIh%bmeUES8VM?WbspbbwKAHJl{MGeOtfO}{8ECBo4A{d=y4 zL?R0;)`H@s)ExOlH%Z1SgFFmRxT$o#vW^)mvU55m(v}WTw zWj$L_VYF*1BYmfGimLdJ?ZRJ`VlJSD=dV(%>+>C{Pl~_Y5}q&Do*Rr__WkGAhg8+= zBKJ4VJJZe08Jz2zHT5+8WRe%$sO-ao+7A9xT$w-i+SMV`Wrt>cOb*go5<0Zsxd% z?2QNOMNOj0DV3mlMj1f1_AG$Mt$>*0Pm<+`n4Z6y< zG<{{XU1_N86_&(V@|!+oYxB{Q;K7`D3u|lg=oh}m8lMJoe}mm#XBH@g+d+4!Y>>o~ zfx#734ct&^DlM@4oomCj*}lMU+e$mxI^*NJW_+0^3p-)`1zYbb(v`NhwAF`W^9z@$ z1>562TAQ6Q<0HBhW*5Q@V8gCKxc=NU{{T7oz3Lf<54I&$Y8{{mdE`=*v!^WRTipPK zvVm3T}H`$ALS5!HQK2*(6rh6hQ)yBsa+P*fY-JSo-a(HUta4UOk865%|>v z0*Yg|YnoWp7XQkm0Dhna2@V_F4Dd1S<<=f_*!sC*WQ}~ez$zzi&zUZ10ZJamC#mxI zu%X7;N^03ynDjz37yI#qTg+JbT=K_nMTtWY9vjd=xXm2FjsZrRn77GaoBD3kp5XQ> zLAIImGuly=vAfI)E%V@<0Ez{sK@cA><;zJs+x(JqX8$&`( z@LE8_b;M*j7pDE16Yz^q-_(ojP!|eGCuimO9(9zy7QW-Ol(w|VGw1F-!;c*V1EPFR z*|4OGF$YVhB@mjOa|=5LR==vE6)`v=re^gH9u~DHsN#8fJ@@U4iN#{Qz1c{UYh;`p zKy#zl8kIQJ1gBxYsgY-~e*L@Ubw_)MWb~dTd*z6R8Mz6QFsU_;jy6WlL&S23hm^;A zXqb$=P}kYjuYzX9zDW=5q`gkk=_|I_svq~^EAYtKk?QqIa4x}Fd&3I#x9|qvsN&8B zmJ|u+TK%r{TNpE{?HYA|99b7KomM~Scy-H_7GrN6b355A$-IQZdBl1AVG`HX3X8&Z zMbK|pv|jPeYv~BxCpixQMF2Brj^I^uOKLzn*l8~f_;w#paf8bet|x8r*P@@NGBToq zPiQ@aT%LHd#&$-HSAh%Y-#u643TzvE=c8oJPF@f2voY4E$MzigOkh0P+SQ+ye@}EV zs%bbqKz~&@De%6=IJMS^-^>>=Velb9#`24hgKR3 z6R|c*rkWy~*dTlEA^byrBRwF3o0XRrZB)`#g{8*AhyaLuJ@7VDBcH&{cak6I6})Y! zUi3zQd^qF12gXrapnz+D?>nr<%imiihtlRkt1H}vnD_mgnsi>SHR#r>g^7XvV)oY1 zRk^OpnRc6H#Uc+76IBB$P8SOm~`{6e%4>lMw^@v~7W`|9$rp-%jnfx@K};71?Q)8Di% zt~*WpU4|+_?#daWGDrE2j*=?)#HSlrr;A5P4f7cmDIFB$L4#+SChw%GwnOo3!pj44 zg;4_|!Ft{U&!EX4R#kaYMhp=_8lUQq4wpaJ6JrN3Y^1;!C0nnK zJFQ2o>A&#NbC%{MtJ!~MVi#xN3!&LoE>`D-v7(i&CB~aRO2y5mCMQE)0h>#6lhsts zOJYsRk~h79XLYY7-vqp28Wodvr2i^8PGfiYk=amLG_M{%i_g-a;|&XuC$!%_z6y&Ol$sldRPFuXO6FZ3n+Bq7+?5Me zBHn}oPq~4cx8cH13`{$*Z%R^qE`uBl%;$Mi{oT9Bo1y6l63F4B@R+Fjx9H@iE7YMD zrF=6g>i7NAAkfH}_z}0UjA?q^o>~rNj_U}dp5%Ra!ShsW&H!l_B0n{hJW9Zqyh4*# z1%4KlPn`Lph&OR*gt{L;ri6NK-YFU{D;&KDK%e#h#Rs5pHpt)&x>hSs8V;SjikD%| z<_?0vv_29e^d`=qv*vi364cSH9q9-j4#ypd$&Jpw^0yM|I3(Pp^9J_elF?wHy~a042~7f}ZIlzB8WiTlNT?H-HcWjbzGziLRZ?zgdUz zvoDkjyS~jEV6k6@ym-~f`+p}?cyc{T{s|$}NH2~DAG0zCS;CBUAnoEaLF~+EF9@ke*(rSE`g92eWM!{` zBZ2znJ|YW(atNZ-i=QAblkNFkW${HvAZ8RzYUk{*wTJW(>XSH7$}okt^yde3^RO4K zDJP!8>-H%HUpuT>!o&`F0IzXg7A|Qz4(2=`3J7}8MenM@SBU6T{MKRHu4LHlpd}eH zY`d=%B;4vao07uMl*jkP!daTa$CQ$sOq`-HG{nHll;2zr+??d_?b*X6+RO1Ml5{0I z34*Q%eZR2S(c*0B$;WN7g6Z z?bZILO^R6WJqAh4j$9CC3;g4kT%+`=C?w+(!{R9PIN(c3XLZ)?OONK^vu9je;Zix~ z(+~Yu*L3H-G{Vj4;$-!BwI|8LrCy?~;_P2ph;9HD#BNX7%i|E8#Kg)%kEgG(WH30_ z+bGFb+nq!HC+PXy_de2gC8X>iB!A$N6mmq|w@jWYCToP8c;p*IJUqG3X-Bu@QIynZ z`|ekh8x@#CI-~B&O%f~P$Ur5kx`2J;=?m?-#ba6tC&;9)DCI3(i}-64-KT-`ryBcH zfqYT-h!??|Ri?{{+2yxKYO7gXVZV|dhhy0^&!h&FtWr z-h3`-GRHTwB^833$`yVq7+~J_ot9arK2)O2-@K2BcVb#7_s?1TTzF#H z$y%sO7q%g&vk2%by$(;Z{5+liKBeXL0LdGG3*Gxp!ZGlD^n!!J=EASz_dbv4@2;af zGTJTrA>wm%4p1JAW!JWp94wo~N}z*NYe;f9S*TB!w{9XwwluhY z?6Hqj4zrn!9z-(T+5BcSleb`@uK|q%a5CZA>34~tu}~F<;c$M1E*FJPDN4Ohx-^H? zm#e4I!I@?VxL(EtZ_hN%In5tHAW~)z1g`gLSl(;nAq7`8(>&tz62$@%0Ln)?!GMo@ zWE9QT^lE8OJM0fH#FQPWK3qMdnAJTb4eYwXQ^OWA<7*&t<_Gkl)z9l?TjN({DkAGX zYcR|=MM96gL$_z`0_*AEYbd&80RX)HLT|2fL{~$2rHCg0o&bkIX4{^rE zmWl1{F!72X{jtv4TjZW7o7Lo^(X2@>urm;=(s-}uA!CnqnhIL6EyTO-o&%#!(X%j{ z7dIM3K(e8DqUouJ*+csZGmdVF{KTW;0mY|%r(E#>>hbc|n(5&0gp`{lg-3Q{QSEp; z#akbZ@Zy%}CIm~k_SeBPUs3~c zopZH^!%NzJEe9m44mXQieZaZ3@|hR*;!QoyYQtmUGb-Uz9n8b0)BUi8N9prm?5xKW zGpK$1s;_y;g$07FZI<0l6yfC?UpZEIaU%29mN6-1G}%d=(NWs5T#J|o{E{9u&*ZrXk^ zRHq@BerSFKd@WgPTH%+UE4O+d;kJ-Oh1IRd29iU>0Z%}57HC3g-ormQaqEQn8ouNlGYnSPa zh0Y7H6dchdF-=LP3{_RGbRJOx?M?8^K6)(IE7B#7|`zn$|o zNFh*3PXUMbIh<-eiNt26*jovC__sg}a$qJ*#Ip%sj9CTK0)Co?JU;~<_L$xI^bp@v zq1fIE&pos;jM74&C_)~ZqB#OPQ~L~ew=Ch8WW6pfs`FN&m|+rIk2$hKz%(LvsI*8U z*FTPp!7#c2FP`nNFVA?&Wa1jtD}H3l?7<^*{(H}2@e7LL3PK#udO#d(a@^%%6(+6qH2hX)P)&(zf!n=-n&kr((2F>G?} z2eF>GQj4={+*Jv$d{agyf=#8|usWs^C?6NXFNCiMiZ`opfiN$xNU5-N)8tWFSQ&+_ z|Ll1UuVPD12q;G$;d#9OYB>Dvgt%O#ORZzHxN=?Nv+w#5!-!g-9VwqAO*je=Thve# z-TNWy=kM^FTfP%FzLQHt!w4)9%#%~6b>tg9GPtj|+V*Mxz{$)`TXqQ)AkzZKbt%nt zURGDq%Oil=)p5wml&Bd0Nx66VW2W7oQ0P3};L#S+9xOI2omo=<$v1puX|lY)p50tV zQFDp?Rg}@81DXL_sDsX9p*nlR)A7!kxMUQ|Pa3R>Yd&N(=rFROzpgwDCMc85;-1_|v#`V@&2wKh|n|JE=xG78;TOC<} z8(sE23JxAq8G%D?V+AxXDCr-RT5p!y2G@O; z;ZIIZQ_~4=3zlhtxf5f4WIZ(g%w40w$NmV%;LMvYIm^bvX8lr00NR+-3()cfQ;~mT zFgY2nv&8Z2MS~q8**2P{yF_^gS0%vIPxDmW4kaP*%CIFs0&G+Ud`RQS+C$&c(((s( zoD2fwXNh=3NDcv048a$xr}#KwsPqghZ+Pc2g#Jy4sahz7D~c+$Lz!G$WB>G}v&M`isqB`WoBoI7 zgBH|7{eoyXTnvSZb1H)heeE6xrOm&fe!2YfW@W621~&sw>G$StdO~gw%?}JNn!+_2 zGER1e8=D7)8kmT%*-6_uTLAR!KYHj-$+^*NO!#+ZE!{g_RE&7qo~7FDm@z zZups=DfJ1$jIR{kD2@K_rm3Nyj(8&m^%G>^kkOz~YgL;;iO|dV z*=b>m$N*bxeywJjLgh|mt=Wg-G&dD5EtE=$pSBJ{OftW^bZ#& zLL^{xQYBR4(r&~P@s;-4fVQ^A+$plzfUuicF_YXj{y(uAa#6;Fbj-HK~^ZCSfGub-YMHlZh7KlFJ z-W2IYWL1y@i>PK={=UmE!yJW$uc`or?di`k@6pBJSY{QKhLdwQ%7ePRg8I;r5%JPU z_!uFc&-&za)2os*#QsCVvw>~WU8OjlH_sYh_47{8tuhyva5W`&8=mpEvI8c2`rxVf z7@a}fA9L!fp22q%c=_|uZ}+N*^ZSn%yK(Q>km2qK*#e7bbY?Z@=8kL4%w>Yd}P?9 zq|lWA+B%`2)c1f%o|YDj%jN(0c=ZmBus#pJ6|v|%&c<}16cJ%eqWgbA%1hypdlVEY zL^xQxh8M1>fV?Bu{O5khuIVr|G_-o&DB$azmfvyzYKjr#&t48l*aQT|4!H37%OU;P zWe2vp`~DgS56{d2m!EFLWrFl?L~*3Fx;lyEF9BDgK%I$+8`Nj>S#VVP|Hr`y@{ufwlEVXNUHm9TCQS0|b5P zle)X7a{GJlR*4A+?Ehf=M_k5r|92M<=RqE9@U0Q1qvPMTD(e5wJ^>o8*{$%3A~>-h ze6AP&vsD2x8JWDa^p6hht#Y&%FKGGr=J)^gG&0^;RV~kCVbJ08Z~l7XDDdUnRy($S zG3zCS1gRR@v|>;}V(fPu8yTrgB>`?tNKl3|@A|8MZ3M9Kf46(cmpX$Z_s7TIcX!jk zX}>i%;X5QNcc>4iQz`dT;QwLoEu-RUvVUPLkO09gxI=;k2sBP0K#<_UrEx-VcS{H^ z!5xBIaCZU(r#ra2YXcp;p>LC!XXcsz+z;=E`{lmtp4DshIo;>fsoJ%rYS-SsLfW6P zmtBf5L7HuJ$Hl-sY;+g4oxTKp`$p^Id&kPjncLR3xUA8O$f5N`^dloXJ2q(b@3Kno zL?8WYphbiHSwwinn>+NU2!=zV92%fyVTpjjMC8LG__`1&v{TVNYhB=#?A2Ag?r!>r zzIpBGDd_FDplH#De9LTT?hhFOgNwd>3&_ot92$}z(<{or2|-09dcK4w?=f`SQ%-lK|(`_D9XJkTTJ3=xPYAO4(GK;F=fQzrx`yH>*Me+wv*(9Qa9 zmGRFr;?wF%ynhSuKh6X-F#ne0|4&EP4C~(%&Oe_v%=_OU^+f&mYu5SxUx5!~{C_n3 z!#IW;52Io`peOwU#7Qx+oa_fy2?@RvD71ggVHRO%{__}kwEbULIRANv>{Jh{>X>Ws z%D0>{l%Zu&?}1@(-uLfBDjNTV?o?tzR&XrMtxu#*6Nx9UWY>W5Uqa!8O>>Lcih!J{ zpdG60v}0faynR4%`Ol-|m*XFV7Q{R0$RrZha|ygj|ML#SRq{r#Dgy9j)j?pk)iUPO zf4@l*0o8(nYK^DEh8d8tX!Adk))9>y;6@l2smX9OBS@BLK+iJ!|CC^-NQBv<%gI67 z+}io0P5$jjdpLXX9)aV+T8xflZeH+U3IFqm#Y9-5Qz#T*XBGap=*fTFRFZ}$87D;Y zziaJ;sMCLT0OBfx{r@;@)_>&V4|9nxq_;8C(tiC_rSi#onvwP;9uO!_i4)SEp22`X zCkhGF-Ysfc8QNg#R6SGkj$b!Jkl7qvHAXO9;l(14NMGx(!cDd5PfPmMzd3lc~P6aKU zoN5LK27V7oa~81(v!suFekMfn@6K_O7;nmY53uw;l$i<84{dYI%shW7FD1q3dNAc& z&>KxHDz9pckH9NRNK8^&i;u0{&P^dpK7*b;=i;ihr7Id< zJE0R`Oqs7gz?*rQWihIUqJm?y(h%i~u+e~6-d^OZtDAKQMESK565q#3B!;I~xA%8u z=2Q*#|E?3g({fGB!4?AgM@8keswy3VB@(QSltC~5%VwDZTF^Ho9SSRIYsqE85TgON zBOwH|(?fMQIO^Two%1Dnf_wY>KjTa4wBBHxIXNFKZDM0RdAd~-#HOE!LcHRExm>|H5yBf*NjIs`p8HYfY+Mh1Rcx|V|>FMd2!1hAZR-cIQO+2$Al6Lc< zuqM1IE*F7&1Q5gu4-cPhw`TeB=ut1<2Prc%MrmnjO!Q3D2S6wi5;a3jB_ktR#OMm) zJ5o_mF@n7KH?^FWtD+Cg&CO%~RIY>sk z2n?E_MM_JuV!L)PG&HpN*1xf02I=<=uLlIHt-awIwY$x&t+>R*N0vqp>=Zh&XJ~23 z6iJ{VOditnV=V72u~bPgc^{zH_}yq8t^D~J;$=1qH&{3u0)x%Yn*;a=b_?%Wqb+r- zdl)AEb!@g7{UN_Ko?&TyTbuqF6xuH4mS_FC_sFH9mX})QVHhLAP8k4e^YO0DFhwv{ zzFlSu(szTq&j|bsWN6c5xw_VrDu^4($1cJS%a8Z}H~HwNGF|n#SXdU8+0~9xc1jxi z>|CCPQXago{8RE%tVgSe`2|80=hL?+%M6P6$uv~YoDvVqq7mFQhY*1(N-jYF0-Q?F z>o=>m;lf{)Mtp-vw^ur#P$*voi~r+-f`ZK*;m&u5Q4cIb-!C+Ea2Oe)`pH^|O^}F~ zWG+3QJT%mS`4%Bj^N4fqm>AEt%|&kD@W>4Rzm;Ju^viW4mMq7}>{t>=i)-tHn9@`*83A|Eq!#;h0B?^ixTm z9bTpny(arpX-i0W!)B1 zO?~G>uMiET+`iubM-z#K6aO?3F)Kpax$#{!_U``tjwak?Mei1{bq&WY_)%gGS0)LwPDg&Nw#IRin z%q`RJ)Fx}~I0>*M_Xv8YxOcW|{EY{sHV@_BW&JFDNbhvxR)>Vv10q7-dp`{8w-CVz zM?(5IT}eQ{20&&42?rPQ>g8SMLOLis#X7{%KHHA5A(ZX~V^@90i7aR8!gQ6<1(6~A zBNv%*LhO^Ae81^by?z}xC+gNxJpj_Ok8e%;-iWn$< zxkJNKYEwI^ezgUQ<%_d@eRKfofW@Bp{=^Qkcg()=ZaXg0$x}IZE<$C>tQ&!-QX)-TR9189q)$P!*u)E4AuHV9RcFhCQSdwjgZ&~N>>$t(k+EKRn+J5xuS8%KNVs8h8*~uL|Y(-}N2Pp=h z$S`?3v+`S%dHs9Bf<9NX_AJTV4}MFm%Nf_Waff$^Dc(O0P9(pv^1azxrDNYK2`|qB ztiz{Xye?AWEe0lN=tw@W$0bV%;!k~3B%a_mJbkemKR{gm329)VZJtW%iPC0L$nj<{ zn!6EF7gvoKm3>DHetUY0Ru-S1R2{{@o4gS2)zYNN2p0@hB-kg(P`mN0j-LLP>wOnN z+5k~o2`NBpnjtF9W{$UguU^QBi^c*JQ(Tvc-b>DM|p8Bvw=HHg2*A7SEj!o@2GjctV6##Y*Fpo zt9TAJl7)0-Rp*;%GVr7hu=;oU44I965^uiX8y2wX1qJRHfP0xC^pm65&j!fP9{Z7X zsQ+apKSZMF;GT2TK!PZMM6O4!Zt*g$!ZhW6&054qoj&To3tjc4e`l15h!(Z75mJup zhL!iZfyn6(Ofmlrx|Z473>5<9HkWLCslaaF4s?-5B-H5zXyT})ASQ8Oxa@%0}<7Z}*P!4`h10p29hwq*CJrkjwO%T-I zKOoM=Z>1r&z}bSw`sQ7SVe^;rPDC!y&y)HLb1PtTWr5vN)7g+-6Qn%Rj6~8XkK&nV z#b;lvzqCLs)Ub6Ka9R{}BZZ;Y>FG}HqdRe#B(?uYpiDErGNmV7z3^;p#(RJb^@QPm zeqq~+Z&EbiJ;aEsn;jS8mgYtYjZ*yUC__tY{o zu2n92o2pBW#74x4T)^AHn1KG^Qbq6CY;!c~fKWF8kI6}*A$C5a(^0ur+%LvYc<|a= zXBuT!(aK^(C|uulY@;u4iHaz=jQMUinJ5ZMFbgh?DdILCV((Zo#(s@9Sv1p?WhfG} z3Hv%g$hG`7xkbk4+pFZ?uEVMDpC~gmHU=-A30gLMR~qW=9OL5-ya=1&Ic(o}A20Cy z?wOAz7Xepv%j^E<;4j+fou@*VEI(U5KYPnF*K8+<$nBIG0+*Oka#Ns$9tj5T*)QJr z(jhThjNpvb^r1N1JN_GXQ0rYO1?!bkL z`!5#WNDrt5-G`g;kMnzZuA)wVM*;lqzY`gHdQd*Uupk`W$Js+A~sfc;MFEiNXMwJ2KMCLAk{p2r3pBe>y`$kGwJQ{nqOSz zQ!j(>N1Z*KFWk>KiDkcjM z`Td57-sy+@JHN2os1p5ep}&6;lFe@E+I9T7&3N|cZg7p&fEQkiB)qDGb= z$vs1oNQ%CE$Pv|M#@;H;u#0z zs)A&PE^7UzsAHzv64Pb*P@dr{>KgqP(fmDC$J33xM?qpL_4LCy^KvnoYS;Eu17z=5 zdo+oC!|iin9n?njjpVL}tv7uneneb3G?m9alg(vaQ*s(S;dyy*m%^vEZ!i|`p~qDc znG9mvpD2jp7L>bTPI|_oSub4q(JePoFsap^uxtbiDS$nx9N>SCmsU5e!$?9JLSV5h z){+cN^5TzpzhtoJZ`)QzFW)!r@7z zKKAq=R(a0nmEyhXq$k#)46kbJnh}VetvJc3Ra?o~M~W;3(!&Z!SH5rvV)0=eRHD$- zXn>T;2A77!X3wR^SR+P%+&pv%lVBm|gE)NHP9TL`DDQUSi&1k(3)tfhsIF}!9A-*j zw*eBiU)@(Qd0f87IhWXM%VaNp$yhrw6w;_@vG#^4G9Juq|1`cuyes75+;Uc9sRj9D z`yl>E(GcKqfn#`V6{O0qSYR;D>b4-9DSK<&CUR_7VYLw2veqXh&h*F(-Vs5wEe1~U zANlT)eH6ldUcjwCQNy`yG1uwaUsoi9cYmpfZHNAKbliWk2+Wq1&VP7`O?dBzVL%Z= zXx4j%#nV{j(&tDG!6x&9pd$G+nuWFR9m?K^(%9RewTf+=-NS1dyH^Lo~ygY8(k|7}18|on5j%&H#UH1IptJqwz0?E$5EUx76Myg03fUyYUYqUh+ z3O_ZDd%N*+S)V6}KX4&s%KtIg`zWf=#PvWByfNYH`!A1`EE!DMi_d9UDHHyRrsclM zh3Ru#r5pOw8vawz=5>OhBcX5ndZv0(LgLp(2q_5+!rP!-XfNp23Lfa(l(E~NiqkeN zjgQN~p7!UBesKwY-t7yGC|2mi&#MlrbQk@1hFMja|2Ce-8hG-e4Vv+t=t z53m{*gy$KZhQ+-mx^V?kx)Wx0Ortl1r}7rsdv?_*E=@h^gnzCG1WO!!`o@^p4A1J@ z<`HS+kTXB-EUcbuFetl^8Eb3?7Ib1%md(ZI zd#ci%BnUnmw0I$K;e6t=Ph77ztzkA}(x-ge@yWLAhv(Krf?>~1tja>nC#ncf-1lSXz7#@b^CK_aaz;s_lCf_m0Hmnz-6>7Bl&?N zI>E7-4FsVK%dcA9RwTQp+E&NRKfQx3C)>IyxUdF8?J*oj?5hj z$`!UW$}TC~vnraB5^f}Aoj!?77F)T_Ba|}>wf(pLAN)-&KHl`9=JQJ9P=k(Q{wwKz}Dk+KbLv6_(M&nMGI2GBwfQ`6}9rQhRuVUOhC6kxU zKLgCDk7qLZxpUBT`=ogMvieQk+cz^xH^OwjA8hz+4Jvwu1+Fx#ZmqR{phPy~+-c5Y zc;aEojY}~_{AY*^CAC;+IJm;5rWVfVNd8H%Zw*`aTj^SSzTr9Mn#08FZA(K=aTy&e z6mtR4(iF`7NYB7q@g*pM1h8$8*M|^H`T8UilIGkN-I%!Z>?@)&#Now&1S z#we&PLiV^~+vM$;B@xv0+$cN0#i26JQ1zr460WN}1Iry9^MrJ{4@5|taW_4Kk5om1 z?mx$5w@2j*Ngpn?M@*thuTsdr>$VlShl$Ic?D|lcvP7f3_H;+c5|4%6zBCo@}R6?xTc3z}u%i2r9JbiVDvCbKE#o62%wS6hP^s^rlbqe+#_ zJWbYE?s$*7xI#~6N%WoJdf#u1F=w;^D7&IxG=PfvKySpqv~52$B0bDWl4&fDhpn@K zAa{Gw0lv{i#K`*_>&}KR-=ze(E}$vk>HcJ-3a#^u`~v(N>~m3kh=c1et7HUk=FV-! zJIp)DFvzB-Vtcy<#h2Ib(spM9gU?F2fBpi8e_5dNBu^uk`&{wf&2QEWowIbslUS8yobO28E}A10#X$hf zcZY&M29i*3O)DpRwJsyX?}Yv^_sWxN@+3o@m&Vf@J5W1HS~T)EC`}#Uz+LM9R+iTC znNo*KQJJzVzefBIWza?i)gth`5tI z`O|efPLaVlPKenj${Q0o%2!$L!1lY8nOaU$F|(W6#tEinDybhLaJIQVqKjSy5pLE& zVyPdq6_+V9sr%$;my_PFbFKaLru}4vp10L3VpmATUhTB9w<}NdO53~?2Tas{CK6EWm(jiklgENmP4Y>1P4g3$&7)xMPH&80`;nY)c` zFW+BpU6TD>Sb}}*#?Xk<6s2ds+qVkfkHrE4E$a+tBmEVra z0Za5od~n_OwG@VzsF@4w42VtTK+y#|`{{_cc+J8UHpS!_j^X_k&Tz2%$?35Buf^F4 z+Pk-fqFc+y?z+F)YP9lh#Vz+mZ69L{EO&q3r1(HeGNf^-xb>Dn@O|SgnW5N4Jm^v3 zvpZ&=?)E1+Dos(3xF{*mhL;+HapUdR&W`)|rrS_aZdmA&Y=MJh2UY-ff z`(4@TKVLt8jdW^jU&}vU_J%<+u)WhS>OfTYuQ>~d#<+aXHI+uVBmH4w%40q+KR)Vs z6ma8mxcS}0A@XYy>^WWN-2o|dEurLHDo+G>#zi>RH%doMi2?1}{giP0{^DnwwWxYxIpDy-a<@(o3u(MW1= zJd~)^Q-9wbvr0>uZ4nM-Xk$VP-Q}tp=WXSJT^Mx2XOVHQ)DNpLQ>r!fc(Z=hfv zzr_iW%UtNk5U-uV|J{fUxbVxaj_t#20t4{MFHdj-# z6&B6}kcQ*OWPXAik+dp(EzLhcV3V|eAX-Y_e|{NcI33YTo@$cJc3k83jdOduN` z`W~U$qD0NM0olj7_1|qjH{b?J!Pi)iBMXL?Hm-g4*qLMY)E$uy899WEJZn$N1zwO$ zZ!;YOO7n>dK^xWHV#O!zzbNiyXLN{HYT!m^JRCFuN)p@h%uAP?)7_GKD_)dG@_7LJ$39ML=6V6l8gOJcTHwdS&G-C z28b53^~y$@zK7Yj-_B?QBd>}7+B$y}Ajad^o6*%C)^*T|^P z)hr$}LMk?a*hf&L_>P*NQhur3XPMFs)*ms;{2zUgf~Ir$ZdBxWQWDwe_Driij)J`A z(lW)Uup@YMXnwHBmlXAvM%ZjyQPO#d%p|Ol90=I*DKO#fBrSD=$*7%+b+3#fGvQ2oxllpMw;u*vzbsv*Sy1ymc@_o=XW@3MI0uc{pM!Wo(zww=A zC69Z1*}<2+nV)Su2wzEuC8fPz{5oaVohLPTi8m^0JItW58oyL_reQ{Q7{$Mr^|!50Gn4 z204#dSHGRYwz)*V^jGwz@mXs(JALsz=T7pwq@n=W)K!XgW*p1xr@z z*+Q6XJZQDWJEMUn=|29~cS(J&R@}v;wo&ZimV7D6+D&5~Mdfp8)Oq?(i#YDuV}HYL zG4c=V(K;m8_jqVi_g30^dio{}i(a(nuhXV#xcIb{VJfN0?C+Tqm#)S*Wo8~Tsfb>q zk&{l948pG2#Of=}o>EL?k~)5~k8F=k30fe#+pKN7S$^vSyVmmQG<#BcA<&SW5pJwM zH*)n&vnDnbx5LLK!0dj*r+u*LXyz+FLnZ)nJh^x-o=QC zb-R~6^U;H1tW-}Gn-NW3VIKZifTr0a1@du3aG6zP4f(c*a1W-a)zXjJQ})fWu$*m2 z#-!Yy6Li4+9=SIligTHsHb8pyk$0q?(?ZsI{kh3Ont%1F7Huh=7SQ-rpTV2Fh=7qL zb_BHOzanfhl;y`|<*F55JV1k*VDL$1sEaHl=GS~I@a2gk7*B?;lgoyMie;9PPrctz zstZSFHGVsES@8>$I*~;}N<;BDtcfv@`6AKswFCm%Iop_Y-&0yasKHgU`uSXS1?I%_ z%nE03L*xWlOW4$OcC8JSu>MLbyK#To&n&ucz{^$)E8j)1?~EbT=Ly|f(hnCaO|V9R zOn?UOwTG2+%c5YgB}-?|p$-D;6_LHBMomAK5u9)FxZ=~BBr8ElJ!YL3Y1)Omatdp{ zyb;|ZVp)&=0Lb`v_WjoR14FA>p7GXRD>441Bp1Iu#kj?pc4yf$gkeZ3(0%i~+Jy!h zy)!BHhQP}BoxfVsF=}wTI{_d5IRB~1R0O5Rd;@IOc0$Yuq+9DF&8lj7@TvN0Erdq9 zw(yJ#uTr-@y#8Q%UMoUTN%Ik1&UiU{x=HpuQ>In6olE6_L@zP>%)xsw6}&jQ319Yy;|!iY6A1fMDZ zO=h3ok?~t0>y7NcMp7+T_8ux-jy1l}=$~!&pcanG*ZQz-AmT_Kqov^=bZ{twm1h>` zjaIA^;o)qxka#m^L{9noks;APd9|?JE-BAy48_N=kdjl-pKthDB7Q?zomAp`=A`sWJSy4X+YWI#!3Sb&m98W{;&(u^Qs$jRJv_SD3s+Xt48pL@Ag z_&%M{AxFT?if8|v+-%)l;Eg3A?I)xnc>N8C|AnO(JxEnzJutm;JGlRQA}Pv;MN4eL zRw2mK3J7(aGW>{R=BRXFsdFo#2s$vjthd$x#ceGjE}`1c5#6@AzP~N7nRT$4%SNzs z&BrPE+kNOb2zxj|SVIV>y6*c9XY*I@Z=Yu75!hKYyb8!C(&!a=hQfW%#>t7^*g6~N zbBO_4(_E<|m`=7Z`a3AMzMg*ZT{^`sQgC+WQg!j{zVJXyFMHTX8_gY<)D1IRT-25+ zhP#$Cp9vTv3v;O3GA)Z{-724+>P|bq&2q+Jzxd!h_^khPwvDSYhZ{se#JEi?LvHF$ z2s*Ujab6wVo{Gf%s`G~_XC|-3uT7S{8J>i0)bwkYGt}ShZM<4;2Qo2YjgAMn4OViT zAF^u}1S_B7DJ?AHdhrj_{4&&3_KwrbzKWcbe5^>;H*q<;!AeDT3ws&IiAn3eL$FK@ z2pZ;sj3h2SBor^C)c3?O@)!7yR`|Y_Wgw_Py~48PM8B}vbTxv^w9aDn0^nFkmkm~E z4-Om43(V}^&KJhz=_c33MHY^5>dA_5ri-pzkl*(<|>Va_- z;wSuSM#oB5Lrpuzu<@SlXQ?sf<*I^A^Q$~>t8zNE8;8H?1D{y2Hi}D&0H~# zjghfhl#9c8d+SPcP~*c|tO5DX_wCs1p}&P^5c zi`g)(hrvz4leX(?X0_VL>_L{$SvM`--|*u+z0X)VO7dK}Z0wv4!s^+F$`N=0`fi-r zgKUGQWYa8&)w!fS3!6n^5`_0=79$`B0S8i`C+E2!GDzUL{_}R1fDnl&w%QKaUWsfN zwUOnQST!#KFAoBh8YgY*t)h_OT_HvbEf@uQdAgMbzxZC^n8a?_mNJ??TJqFrBRGov z?pQcRY^T<0VbSzwP84BG=6D~c9o}h0PJ@fu(Ib`87c4V^R8u-6!i8A2QLks8T=N$V zpGe*6R?hL5vIB6v2Jgt#YWWOq7KAjU7s&_=G~&nSuB5l@jrIupn~D@LBa0yMm6?HE zqt&HQSGVpM7k_r^tKXJ8(p2%Uf+Q?qtIO}ypenTSQHCs0{zvuBxDdM&hb0dCJ7j>|~USmc+I1XUAc_Qv+HFV(IEVWdmp4vg^)P zaSuE1n1QNaL&;4PDeKMWU$$=jPtUsBUnAL~iw(9@&n)rP*-;`DEL^#CnYP`}@mn*D z850{YSf`vr4Qa!#*o3=8Z9i;c>1k1PZqX!tO?xtF-_x%D1{#5~I$)>iZ?+QiS9Fj5 z$%|VokN6vXvqkp7K_^91b(LM}s|(&jJqIkhU7JK%&V?Q^C~iXi!C3FT^VKV+X;|Fx zk2`8qs07u*L@zFF#3-A8bzO?uoc}6% zQtqLLd^eBAVz0vO#xj=|w@L?8njG=LsSEw*j>=25?$2VD_>#0N*p24E zNY!XrE;t_qW6E8D$bozrmSaim?o4r2A1np7^;Wx$n6*C4$*SVO%j{Moy}`gD^wVHj*4n19~SruI6D&UBxtO_*Y8by zUO#H?-H6z_KlNQwcd*qPVe1!V-h0<-$sRG%^;(MlvNPcwsa_>-PK%-CMGU#WM_D|) zf1jN;AN5iRhSA@euMFhP3)16E1?sq7!SljZp^zZ_1OV;d~}@FE@a$at`EfxEMfa;$^qjdz`k=Gw{X+g>KrXHJTu zdF4S=EB>abx%8h!oLP(=>*^lS=L$EtD1-fkIGdoDxx)3#(-^D^;G4wlYf}wG6xHw1 z!eE47E1CN5%^Js8^R$c#)h5iE z1QJi5l8lNTD^sp3oR>x@>MYAjCSQPF%IkB(>jsyYF+#u(>Y9g6QJp z*Y#Jc$GA`_Llj0z)YRs9CZ_$85|fjmcb5t}9X6@$d$8mSf=YJRPKBR_;#qs}U5y{F z>_(ei*UJ{OKNvo3&WG7&c$Ype``YlE%x>ik0r=wM(RXaLLzsCIR7N)(inWY%`lQ0D z02CVCvo}7{l-U>$fwu-+1K(G{+ymKUW%TL&+Yv#^>ZdVsZNi1P9ES&vN@K3(3YVlC z5lY(yVilw@psRqK@+j+)mxcqk3XHw?Awuol0l|jTdPrYv@?2Y`XQ`^3tL+<7t7ZX*vUQDzZ z{WiE6DYAJ*Q|ahmcyD9}i0l`Cx7Ny1k(=AidO}_4V@gu>u{R20yIwYEy6Zln@hbo6 z3^rxohP@A{baJcBX5p;6F0Qk)Iqn_pt2LaywB*DCeS4X4qhSp)_ovFrZBhJ*iTgKB zVbCbn3f}g8jMwv;Vs-i7#Pu7Z^d-ZZ3!ia!RYa+m>-}p3VX{vjTn|2DH{~+n$DW54 z&!lmphKvno5HMI1DrmNrX&$a5ZDUGFxgUZ#jxraftlb#=Z}m*RsK=x%PH{|T5BonxgCaJqJ@M{^gqgOelh~3`&oDPZUR;OXt29Xq0q1jU+e4%U5f@v)W~Ny2jCQ{kU!BNOvLrA)#_@j`q21#cHt$g6WZWQe(N+kv0|y?`Q}%(k8Y*W`*K&5woVH#K;{vbxk*Ph4=Q{h#kI} zIpKZ?1umj&uXV)`&k;c?U=K>~g4s%g76MOy-(70G%NEGctAt2H4!pTvUGrIhvwDr3 z)$L2>(sF1(>vO`HG0q2}Pe!OA_sve~+ouU{6I1oW<)hN+IGXI<`FjDyGfKEb&5jri z>kc7=Dd`_GD1ydwS3JakuVVJ>->uI51KhPk=YlTAkjgqp?jf?0z32N*bqLb@@-=d8 z|I)*&$Gp27m_g(aF)pZD%58$@m(h(oa|@QuAKPJNQC!h0kIzp@PfE@C1th45aCtW zp%IhHy%y4IN=(4~tP?2Z`l{g>Aj`5}aeZkHSiO&Md)23&V!lrqteJVh0=ckdt9GHp z?Z{g9vsGw|NzN9iWqMUwh6oQs@h%eWGT`!2{78*A9%_jD&f<88$)~edy94-RQ49Vf zbBP@P$bRLAVk$vGnQghOBHYqiMI#GXSkl`Sd1`Om@%5wMH^e z@u544W?$PEu0PyA7Fs^#5pQ{skF@4$wY*1u^Yl=;Gb?#Qq~Vjt00scMnoo1xjz$~W zas(e?0C)bJ1T3$g3Ud}218~%;Wp`gDYNKHxRgfr`G>jA_pHm*9e}>OU(XBYFUpTO>>TU> zzo##HNo-7fr618@r~4~8<9MOsC;ztC4K>DYTBrXMFk2D!s^rPl75-9A9y;E2_^Yees@e*87C(s6cweeALXf!?%^UB;>gw6EOcN2CQ1Ln5uqe~J+MvV;e)gNG~3JRkwzLi z)McHpKE8rqo;@r zW8UhsPHpn&Wrhqt$t+`{oj{sjv(5rr_c343FR;&V;-J(~eI1$feDGV)=zevA?FIO} z3A4@Kq&(^DAZ_<%9-rmoOc+jjrVQ;8sdX0OiuOx1?@SL&__M`L3_0rJ z8?M$1I=_H|Ch7{{;N{GIEuH0SxPNRsaSa|yP!$BknCD?~1723TqyW=d!x~z(g5(p%BU*D?5uK8NmKk6m~Bl zC(ta1*NrTB<|Rh$iC1yZ0(M%N@de2pyNk_iH+<{sViP0E{HnQv?Nk9nVnN~(E@qbuD?6Q< z^2X|1_?|`i>Ng@-_JV0YuwC6E}w_ zcsr7@xjH&D`CHbJ@`{PYG12`E3%J_p?W6kGQ&^wwN4AUVt@F1YtAxPq9ee{WaR*f1 z&J#T7%yAyQQ~JE_iw4f^#+9bPwwODL0(=7`F8@7w3%?CH{zJPbNl25LRa=Sv8;E%R1P*dNo@!AMr{>~l{6;CC! zyB+^5asd{(igD^Yp0aedE1fWp!-N!pzxkF2BJD;ZK24J?!x8uB&YsoX*-HAbf{r z&bwwyf?o_&3G_+s!S5uo6LAT3GP*n{^Vs=t)qwL|2h=xkq?GG*?hmbmw+D^hT3gw) zL;7@a+S(D%4_9iph_9bsX3jUbj0B$BkKefe%ADuU&W4+a4L8z=`7Ml=-)^s@G!{Tt zGO|RYD77!x{9uTU3;fPGacFG)eaK^|E$r9QMJ^&juFlKS=OxLHC_SS>{E25R&qF+S zwpPw){DodycGic;@QdBCa&-{S(qIVb9u#|zur2F$?J3z3BXSMkwAw2Y^{yh9vi>wM%Yy+aII_b!au=gr7o;J zg#H5XOIvR=un|FJAWRR#xe%kcvZ$gS1w*CY9?Sp!(%xZX1!hl6)DT&DH}wX#cjQ#6 z+Yit{?Cl3XTk6!AcKgv{+IoE+&T(|#xz=oC^byc`H3_&ns&Oy*sKfuc(5tkeeL&pz zx^i}Dtit~gc>R-bSQ~C9sPT58^W&sOvU<(Fj^E7}@21whwIk;(M1?gvXh~hgbZ!E3b~8%qY7-C+uNt{_~oy zu&Y;7>aMgNR5D}rk=cH3%*@knq^g-KAk+K1JN!;g@@rPW1Jc*B(2WV3L z{Fuk@w#)Jg_9Q3F95!Kad2$)Uk!J?%b;KwxEBdHRhuHIR<>VlAd&2D?WDslT$LcPL z=AHL9@!e|k{?8VJS`Ixx^c&@Ve|RvkvnqVlyR@46coG=4Up)vj#A(UPb3*KYFjEvd2iQ6jUok-D}O z?J-)F6qXB;k*nyVW30}=Piu{mTT;Qkr))^kbb^{}0Q<-Tv28IzYGl%e_o!c%bvu zI#AJww(52&`|N~*g-tyt>)UzDa)kj)KG~#!&(8DdWiM_djk5d1gARwY7ewtpPuAAT zV3uA-h2B}HxF;iejd5>0o@HelUTU%EpuZLJR=N~9s7_S)9wFH*|8}c7sEZtIO%U_FIayxzb@6yBR9TTO zmMPX{e-9<46yE+6v!szN#_e-~b?Jod;X9UV)CkHE>sqBtr4)9HJ4WW+Pzu&+p3DNq_V|c+RTO)>$jd#eifQdgdTp^lCk>u5sj9a2-B^E;zMy6#y6l- zC!&92r#B|N+Fb7II+E%;8va>Y+@yM)!A!(yOBN?(Ih2ol#!dtyKiYLmMEJls;ig3h zX?=bDlfgcEG-Wxu(XVemesH=nl=l~%d+foid^xOrZR7t*xssv}cT4U*K9W@m`whA~ z)~_m-JaA;G4u(A4rh5=sveb`g#puLl3+z@;)-aJ|%z%`KYJhPsAKjQ_Q1ln;_6H2Mgf$82s1Vz0S&*>_OHG@Co1o}J)Wt|o;i1sc>G23_rVNq zuFFxM^J^hhEpTluwMrv~}(>m&8U&v8j z;r3*_MR>>bOjY<0=Kg_lJ6hsDX&^`XY2d)Cq{QlnUCDw~X3P+Ap!mK%^!+6u>V)#&{PJe#^tUt_D#VZO1$&o$!*3gh-8boM@s6vn=9XSPspxdFgLow*{ ze(8&7Dq$HfFChj_aycjY7h7AmzQ&@saq4O*B3nXz{ze2ykd9lYd{w2{!`GjryHn;73uW!i5WJztnNqMDut!j zK0YX@7#3gmPX+B?u(1g^e9O4GX)#I$RU;U6=#u6{TlSy5=EYQbP|_+m^Uy()6w(_a z!d%7)nux;Im|osoFp1Fxs<1Y2XcR)Z#KZy<5{Patjua#%>8q=AR`I0eOic-0UF#`D zy%I`GOL>J#rd<1@sq#unViEcxno?9=qo7~%FZO7wD1zn-8z7idMcK6hR0}1S`K!?n zO;-aG5Ze6Jfq!VxGW0)m>HpNN|F>WN-8TGS{!8aQFv4E`_elD`{g7YmxiZ9hF#R3d z?Qg#_%2Czu{L8vM(D}d2&;RWt`u{=wm6lFQ7Ei;J9cP|4_ddF%H&ebPa$n*JoHPpg zr_4We>HaBp-fn_<%n+T_|6=beqvGnCbRh%_?k+)syE_RUToQs?aCfJX1eaiqy9IZ* z;O-XOAy{x}8o8bK{ocrYb7$79`}59P`N3JIbN1eK>eQ}!>Z#gTd0L_72rh7M)RYLU z{@GN2{6cA%wDb1d3}>{fs{B$l_R)CmOZmEe1mDGL&3tOr9*a1aP*E^f>YZ` zXo^|(#a>LIwm?zzk*)BUs^ZAz2noiF%0EwqJYFSghK5?`{2gRFyX$@eHCw7daM+|D ze%rswRy{_)GXjVgx?}}8qOo~mR~%8d-5;n2bj>8Kt2P>GqFU+os}8xqdoEI;3>#T> zJaw4dgf=T;G+r*6i90OKr{jJ1bN(?@&iiMTn+-O%m&gR{9}*LlD!_4^JUo@*xw&r+Z_zcynkD2 zvbQ+HX$=U-69BV+zg-0NA63&e^c#Epwlsbmqci61vZ&Rr@vN>UVsYr;5X5LMEBuUx z-PrJ^tr-1ljj5b2+ED+t#w}FnNLFcu&3hU#A)k7s+^JB zc0fF|mce;#ga2WSIlxJv{uDv;Lm*Lrys3PYZaxiU8VY*tmDNcc%mHFV>Far&`}(dy zRR!Lm#TuPhVY2=@zsY6K+w0m>gbJIeEck3paXU)L+UKGrdV5sZ6smKoBbyO!&I)JF3g;-)89C z&l<`POqKeMzGg<32M$R4?Vbz?M|d_W%J2{+3Gamh2E6|tH`7=lH<2kk#W8d(O%o$ZnuUVYZLRH7SOeMADnr+8NXscipv>5xgN z;OPjv5YNfCr#}}9M90E|vpEbopOIqv*v@AW zbJeZ&I~*+wk*{Qb$sm^*w9%?(aC3suVUkRk@~+i``aI*FQoJ!)hST;yO@lz<2>EaM z*i^p6{!IYcw3hwjb;pk&_|;9wH2dn0+oO&J?EqTnc{C8gZ5jqf3(zAb57DlukR1N> zfFT2$l4E;%nWq=+7rA%~g&1Iy%(bNO03Hz(1s~X{FFO=|8zcAH6kp=kT&ZM~jsDB) zLLx|LV*wVX=F8Jr-3tzjum%gCagWvg+p9|W?L&)En7RhsC_&cH_Soj)9o=>n(N5|8 z#aI8FfKJ5D7XTVK1&gHox%Ey*VB^{#aHmyvc3yVmSO2*osqj>Nt5tV5+QYm$UR88- zbc7fSE{L%JJo*5cG=>ktaABLr2ov^xcXasS6`YgOkxtKoks!#!fN|3rq( zVgH>BSAC9z+2K%;xig~AVBl{OG6b=$gvc_H7Ro+rZXV`lk=dERG60Vt3?c`J+3tQSvkbUuk|m&RI;To&B{O zH`ea3$t`@9OcWXqS6o8XSzf`7>bhsgM62%p&0 zZiy2?2{}}u{rmg)*CpW&v*L~HuLbUDSa)~qFAhG&EAyA3PZcF+m|Rqx2!Yzob% zm16C@ci$}N#2&eF=-pm%20mF# zZ;c8{kaD@QDIL0Ss)>`Ijq^<8W`F9rvKBHIy11a&bSHmsh6zbJX#y?zR5+tRM9KYh ziKAZ+kz)+~dI_(rHG0obOq-~bP^X01;!E@$rCgZSLwcy09?f;~3zA2W(z7b)5{e5H zD2f4s&y&q~Tf%C~S+c3zvf8cbBChzCSYC#7^|$Z8J`2pnz>{?|&+YP@*Q^PxuU8+( zCI%#T_I-xDlO0ELTiiL_RLRecso4n`1t;HFpPA??D!dNPKSN>ka%T#nxb~F8)Bvd_ zvYH?iB0h&o-lumvPOB|hQ5uX^h*YNKN(h+?HxlPqPGC3J(WPB`Kg3J2y1UM&#%lazeoy9uVdkD0L5ezKmYt%!T{SJg zaFl>{KFtg9TZzs7v7zT2OrV>VV&UP@Z0Zts8i$phSjVnqY-GQDSG==nqGn3lLTkD2 zD6Sm#2*e8~$SgQ->n}gVRQC@M$=bNU-D7SdLUYclHr5B%GH@%sC2|+Q@IPNy8w=}x zxfR(S+JbSvheyW0=W-OOYK*C|nXkh7A}sfvSy6fBVd+Q4WtY3gFG(Xo5Lp}O7;$4E zy4Umy-QS;H9x)$7_7Z2JU8ix|TtT-u7<$x%h5kJc!ge=zj@ihS0$ z6YF}9?4Y8VuG7o=?2IDPrjxa-?NT8>f@l^OQbI|c8yzo_##gUET^w-#N!W&&EXfgt zkAUeVcISFf!_8*By?^ADn4I8!;FkT-VPm*FT6jA-6~{?c;SxWX(19J|X!F#FJ$gP9an;LG)kO=#k*N;$?=L}0oov&k$hBZK3n9Dj1IpX*UO!4Q2 z%?t#j_+&si&0g}}RWF*Uv#uXg@FMJ@8CzcnqnLFUpd84JNc~bWKQ%z&aJPg&ZSqOL z*#`Sq>gOxrZ-0d-Gk^w11RaQsq8GfRH9MjAMQ_cpOn)$l#XvMea&WeFu-Cf-x>ddN z(@;MNv0~T5h}E(d-UQZ|1PF^D8Cf2@VsbyaiIMR@*~dW-dWH>OqVGTCea88AZh`lf|K7EtP@s7RDHrK=xcct{xVlfzT#m2l&3&X{QQfKzFR; zveg-U_m>Hkw{5pHEALKmKS~g}Uz5K_9?7*et)Md$W_6&Vc%<0zghH=UZ*A(kQNsCXDaCI$Ad zls5A%7%&wCH%j6(Ka+LK(Bv%GwUg=gnpemOJI7Cjnh}^&U67Foojs@E6H03^;)-iK zB`#;wkT5uf#thv36pbz=d1t^4gtSwTG)wEdJY-qv_VnY6W4$qio3%DtP6^X!wBUkN z_nB_yTgTBL8@-pL$bvTKv{@YV3k0Ijr${$520c_3UeK-Dy~;~&NJX>TuE74<9GRzu z>d>OE06_pFP4(7OO5D!nXG?U3dOIVm=2gXdCAwrHkNPq{z_gI?1vPo-Qtdi!Mu2j= zMZ5e)O0+L1hTfK0FEYmgMQ7^Lj&xNuqg40Dwc%cH+rRH~(DghWD`8$5oVd^q%itR!?P^$JMlM!roKd%(2VmzxYKIt}M__>j%*$Op7nuDp7rF{8}pXq_cFbD66gZ;Xne7C7l zj`#_udIjj{8(bWHSo-cf&+E>iR?a!4Iu97*5m7m~y)-ouUekToYKMm>&s^V3J>`6Z zS6#=eefiv5Dd_UKf-2_yE%daVexFTbjqZ_+O?H0Eht3`(y8W#UmjupZljQ~Wbqy-HQs!dsGQ2~yy&6$yndBpV&mGq$*^IxbmeF)wv$WU(K?nI4Q3o%qS`LPeAcie zG5tgdV#Ic4_g=Vo@gx9+2rgp&rPDX(4XKD*SFl%Q`W**7#1`}Ug=MKRbGwy0P~$ua zOV2x)SfEC5uv>4aY;DlSo?Ez9=T~eK?~C|Oe>ri?bLe`at62q{JR>C3jHQg2i7VCa z+_CUQhC>ZsGUVx5wD3jml7dV49Adg9v3{OqrNveXim$)~3SYBZ*2O7nEH;TMV4-ZM zxF40C_#hY~qaFs8rQvC)%aIGgB}04;N0!pe3#Fm^TC4hFaV=PlYC{9YsMd(=R;$Da>`>Fy zwt8IXhHGmz`lj`+@6R!x1q}I*-ZLvqpQZL7l>OR7 zS+(h1W1@Ns=`ZS}i)^%Yg03VcW59}j{$R1<9uG_Oq+BA1q4SNJpxSkLFfxucjZ8N()4UkG3e3ZVf;+W-N{)$4bl0#8J(^0BQk?)tt@+L zqmjJzTuyVI*40L$H^S ziY$5*tpKMqn$-pMd_#*NC-+4VgSHykmgq?tf4roJY%i6i11}WLU2;5`4VObDVzM>9IU%y+YzW$^UG-};b0R=_Jl`mts znyX*%Gb(fH*!vcvI~M28p?8x)gpY$3G%Gw(p1w>>oQ3dXJLxupc*VyVrXwpJ-%>_q z$dX^Wyt2z3edoxRqUVuns;Bw#bmbW#LUdfT{6pOQ(rGlomJ2R2@6fACQzfJgCoxGH zwchc09L1{|fg~YpgTJ=vm+c>> z5>*R4b-U4P_o;VPt##xpewrhhrnS^F>VBk!{zk7o*(rPsw4k^5K!B$M^{hCbM8r0B z`xSdivG0w6wzoC2eFq!OQ~`}PsW6WPs+Gw|@wwa1>7(&OF~e79Y-#-7Zp$-1vRX`f zhAtdsOt8z_c&dPl2PiJJ`ZB($B^9}RJB( zvKz%!Sh($;YzFngToTi2_TQ~aecyG*PTPX5GU#hQw6xJEqJjICBIW{T_c<{J3wRPr zvkS8+9f7E>t_j-M6vT0tOK@%xSIbouX3?c&7OPbji zq`V=yJTmuiMi|)JmBsUrl5v;yDR7NEP1}+0V1*tr2suzrf9cEB@+HbTAwHY6Wo?ag z|M~*a+1^~+Ws5mK?!)zmzWF0g`}fBtKxX<4gfG4?-#-mXg^53ImBKWdSxLWR=mGp_|$2EVGKe(FdZ5=b{)p3M|=Q1RVqJ)9>x3`cOsaP*R4 z{HXzjL;`6Het4;Ih#9-Z8A+lZa+IF9_dFs=$CH9Ob(TyYx1nUVbSK*Q2iLpS9S~&j z6vde>m}aW<}%6 zc~&r@f7lNR(YlzjKK$^5#Z8dy%-{v0>Q=MQq#O28yn|vnYVz8oU$o?@jtkjY|}XAnyrM$W+OL+YS|7_h7gA8dBkwRYc6b7H(t%|A&acD zT%~+wq|bjL5;a_e!supWJ;YAH+0qzTm66YUzM7QFV50b7U-fQC~!LN3<0e|QA% zx_vd~KFxI4M-lM_Xyqdd46rK|G#+a@@g^v$9y|yXesSct&ye~i;>X7mm7@m_UcVs8 zD5v>m^^kg~4T)T(t%H5M#Yn~gP!LD9PGhTgS_vyd{4VmN;LJdbK;h;NyQP(81%YpV zk;T4hj10elNXuB|(V;tr;w+bAl8e15k{0alIGDIVA$7p(n_SllPRq@LNu(3DB;TG- z_}M}3Pm_)f+cDH5ByGi0=rs{=s5jI!TZ9)qqr5Mxal1iu$PYQpBQk$*8N2NY8EN*Y zAl9;YSJ#_Pc9$jBP8}8{dMGAUow~%!9Ja@k;d7x#o3D(jH&;+yss1{dK+~EJDv9Qh zzX;s51{O+?t7?rE>A627eA=hb^$<1`=HyYXc7+Lh))nXB-Ae!jz!MQi7k zykEpuV+3Q%>{hB1ELuwM<~czW7pFco?oq`xr`l*~JtT~VTyUxVPTbxdMZR>Av(Ad+ zQ3khN3+pSnnMleiT~IewjG+bX{DM6?Y^Fn(7jD_Syz%0lO?FmOY7EZUdC>0MqBI;md}X07&hvV^gYEwf_hhP zVqEbXf(=QNefqCq)Bgyg{_nN7$|Oe=ED?0CA|sUka&mk}8IqLTGs?2`q10j)V8p@(+LzHe(B^x{sYRhZ>S{z>`)QZ@9 z(f0XoKhNbDukNBv+ar=i$gK3s=@9_lFJ6z{&nPymS*WyWpRy z4Edv}iHS7*Ngqbu(W0|yUr)q77y@Dbp=z!g=J^Y?typ4?^CAT84dJjeFb zBUwgzI?3VhK>sAcH`sV(ik_H6A36|O>cF8)KuAt>>Db*TDRp&N_}`yYh~xq3|0ZdH zhEuhZM0P$jhxVj0yzL5(LjC0TC#uX{RSKPjNbedNDR{GY_y4sIXM&_B1b500 ztVD9zu7HhO1y7TUxhvKhYt`VAapX_m>u?2Gvd9D$83NmG;EXRj*nWNaPWzDTPa13? z^G(-`f@KS>R!k6J4_ICVy-5)L427n(oquJ~!7C-= zO+dq4w%X@asZ(I9Q(b)aI>Mzli%GYyTjU#@YL_F0q7;9lU&di?`Z9Zvwlcig`bExW zz|o|JT|@9kMUhUdD3O(B;I|3b&*@b-V<*#)*l*gAc>+Qr{n!898@^0u9mL64ue*E4 zTa%Jz0;520v*l#6%o*v|YU=Xa_mfMz7aNoA&iEC9)yEJT>Mxd$j+Ap+#PTogsb=W@fj=vp1NGQq%5X0hw zogzp{d#S=W{;sQyY3N;>0VHFDv3Qa3B{ijQ!gh>E@Klp-&!}vDzp_h49^s`UR=nqI zm4gfhJVo6=`W0OnsjmD4(mCHJo-j)m15FBn>3s5Zj z+O2S0}xzTp6{>=x1y~fXDk)P^y&t`Wy}Y`VxC3qpNw`!VIo!4 zSploT@TZeI=-)FUE@N~NmGuyr8S^lZ>Gh9Z2$m%a`jt$(y@zrM+70;km%`+__?ZApOvoNr*?P+BS!m7@SdGJ^vlVkrgl@gFa0K%RN&ZL7LJBfpU4b1xIZcE zI2E1zwkJmvFG&j*JVFkz5_X>(Bd4Km@uoE*hIN7hRtDL@TY~! zY9rW^OP1)6IFfYLc|;se=8C@y`}@w#`$;LCu97HivDuGT^f9dA#kQ@n=9_^e86u*z z&m&6i_J$js=`|3K>dc~hzu0p$Y>TP0wE%eEJwbm>(tAU+%UTDp6U>cD89F?m`GmtK zESxmVHkIUf{&Z4c-nBr0Oy#$f1k{IM*-`S{qQ>Dg!IJymyaXrQkC-trWXRl4kO>Ie z+#2hxTq_Pb*>_lOmV&CKd24`DkDeIueQ@j^gHHo#I;!i82-=FY3sU=ls5jI0#az zZ2tF{{ile$APTbWy~5?8*?;90Sko~I$14CFTGz9%QbEqfB2X|iOZ_-W_MC@09i5Qe zgvXI4H?GZl**#qgLok+BWBjtUgfy!1LdPaQBoispQk7lmZM1%il>sos#X~9DUakk8 z?F`13Xf*>Pek23*1vT(csGc(i)by5GEv|m`X+~H#IuQmx|Loj8eVpSqq^n?GtP0_e zI9Cslp~FbYYJm1L+>Cm(uyL)omIFSqamKcV>>`Ja(mt@^x z;S1+)2r9801i*$MrsgP8fSXP#8e#y8iT*P8Y-?j;eDT|AgDwwln*~YtPSzi9gz%H( zW?d<<8E>1sgn769DnVCI4o65qsLn^~RKt71Umw@L5)B|>RjgZXZ8T~p`W234x>smg zM;?=tic~1x*^*^Sp;e^mT7$-L+l!RkYF49vfOT2m@4z~VS_-7oLG6cKT}@dHXI>|j zYE#%S9w5vozQYf-Qkm{N2eZHlH63}T^`zB*pz{V#Z4Z&OdkCMpAyl@f3=?&xmif!1 zxR^0P&rpWxcBD&J^Y;@?T;_M;>sJmInh+X82xarzlbsz4s7ZKKn|66u2;5~96bRwF zaUtOI(dlCE!SJsvst6H;X^P58Wiz-a|WSrO$`=sztG)PDDN_w zX}hJhjp)ri-^jh4KEUnp3)-;p!dHU}ORePXC36d=*s0wc6`p0C{c*+^UkI}c+f~iR z_)#G4Eeu=0z#(~ya-9XlnjRGm@hTy8=SDAZpF$8Xe0`q0#Rd76iYE4}H_(*<1Yecc z_BnUOb_o|FRS(!-{hG5v%* z0eoc5L5sF+At6Rp-|)7p`QwtizM4BWUPgL0K+*vg;A99DgLvWSQWjNYXMr+}XW#`DlmT!{jUP(d^{U|mggPmcD= zN;rtn!a}nx!mrw0@u(+O=t#jtoG2E#q1Sjb z(e9TtNngLwAn+Lu@fIlFk9p|<@Fgr#be2g?M27o7Lt0z9+q?dZ9{TG@3I_PFyBvaY z5xX1du>OfKuRQ$Vj1c|uv?k|gI3P62P@hJQM9)Qpu@Be1II3aPKV zuMT_+n|0QDZT939B{Mb6^RGzAt>MZ8qDBOsg8^wIVMNY|8f>C7Hdn;f)=Wlvd|%K5 zQEhny_y5WPDd`L+J2&%9;!hA@DSBlDKmNiyCi%u8^A#Z5rTIa+6S%vz1=g3aRUgd* z>w-v4O;5NzYTc^J8e{ojyMlB4H`Fr>4Ay-Xq%cMc#8o(A5Nd~4lwQH{&5amupl90i z5UrFU*o=4OMgzL6o}C3nukbwFIIyyv=I-hai~9CDpni~bOwGI#D#f%y=JicT=)dShlhx!dRqvq((IytawUg^mNUqsKb zT56)&i*Dzm#5tq4ygtl$sbYyh^CJC1HlM>%1$SJ0J}?_-K?}uYwfGk9Lw~vl&0ORF z1y|Ok^v7V?5em~gWD}j(Bo;N>i@9d}6Vkt9{+E!e{g*Uhi=m@zxA}`(g|Z zAg=Sg3Qbn)PrT^hNkZQtxKsAh%JWK?RG0Md_-L}f)f^WKzDI1?X11l~(?)gWaNpm~ z^50%1CG!T%zhWLW)r(i%>@WUiP_5^=@lR^MJheo6S6$y$O6R#y(BQ#KOqbku=Zquz z7dME}CKvc<*3XF~IDEl{ns zIyyy0E%C(n8h^l#n4vClj=9X)y7ERs@y*;PJCJiIAZ@&-6RMmZUO|%8M0G{AGy?p(TKlcL&u^}Eq7YriLCx8$iliDKYIKm46B zEEE~9JgxBGmO$_vD7CX0^@sb39b*&xC_DYfL=`4{BZ*h8YwfNF+*?$rr#+jnbrX&i zW{oU~gT%$P#&IPYT}>q0oLumIuJ6&YY*Qp`3<(%A+>>H%_1k|vMrJ>x1j10~oY2-% zlsB3>&A;`aw>(&j^QZlCBIt1YYATWGUsL;{T-6=aLSyhAtHHEr_dhF~1!Jq=IBa z&0oK!z+M!eZ-Ny(zaxs{>Q>QvgSAxB`deYb@636Rs(+&rL*U@ERZH76a0%?2>-M06|ztjv{^8HPIqri zB3q(8$M+pey+@Jo?|8(SSh;!8gjNUBs8dMnevmk-+kHL8MjSb>9>*7g}x%cF#ccTTK@@l@`d-wyj-AD0&oCXLL z+h-EkUMd{i81fB2F+qyo?pqoK>QjMVd{-Hj^6}AaVzBk-Z-|_UR!D z(=MZ-4^-TaH0OgPq7<1H|0MFaiXRt+PcBJY_q+_n6&`&Ae-|MT4@q`&=-ook4vb-f zQ~q67M?9R2vC}9AHWS?so=*OQA%g!{%tSMN&bN|(t##S(PwjOGRCY4?zg88rh7Vo* za_VBJ=q&!Ep67mM`-2Vtzt{g!9{+AY3+wUi=swo__#S@nc)jWsQhC4-K$(lA>$2*1 zw^qcE1dNr`gq%{=cV(Q*{FRiiCJ53K8{FyIP$i>`oWZ?e(Om~Uv@h|A679%tp& zsAgp1dpKA2x%u0RIXJ`!7b>a-=-b$GN!%ed=;*IE&&rc)gsT;g#g z?5)Tbo}z*w9g(!n6t?K+kZwuW535e}0JgM2J?%cv$4_HZsv85SsBOMpXPabZ?!r@r zEh4ez9nhs`)${ZGWmDy{Aa}cFj*9@x7aT93Kd*GCDhhXe)f1MqI8cu&3w?3|PhT8h z-4jQKTDSKe$fPSTfi`8h>~6zE?$H`XEQ?Q@%CazI^Og2 zgHyS6==-W>Ciq$cg;g-N{g8~!8U{J&7t3m*8yT4Vf)Wq;F9SF!(f>9 zrF*)nK|9W3Hyh4I3QgjQ0$ez$pI-9akZSq=EVq}Lge?jRQijBl1MTZ|m2~6UJ$2hG zrzcU5A;&8KGDtCwaGUqzwVSXT>|6ezsy^LeMUhk)iV-!dA5+m<|F zxvxFwZHZs^G>Nbox(kW4?a&Kzo1mK`J~t~e(3`M$c!(eooFQ%yBX2%d@?rO;m_w1J zWu&D!ZbxQau2kUDU62|(hC9JJ8Mr41r`LnC+v-^QC{8!rFh%-Rd|_O2CC0UIL(>$URFTPXg9`QZQzd`o(8frI=`{f zsEfB1QtcT!>b)|4KtoCdHbqGtFLyhtN3Fq=jhe_wGLFkxgM@b;%M!w%o0 zMG~hIn8uhk26GzKR=AL_tPDoc2Hz1A6Q7*h%I!i3?gnufXk;iZQZfgXWhSRsW9+;7 z6(XJHBU#eVg#q*NUPc=T?5Z1G^3F4d4D;RPKwE1-xaL^v(GY$!d&sV--b)v~&&zeG zp1KR8iKiUy`e&k;QMIXhJ*9MkWzBaP^(WhwQ<*oeUZ*T=&%TsA&JQs)Dpg)Id!45| zk}f@s5$TL;2Wy$gk5W_8Eln$_c8qcX*7lB<6=l|(xxGAbN^bku1U2u)gwH=l*?~?t zH(rTedY0UG1>9W&9AR=>X*>Q?QVqX zTCP~`cKXojVWk%CE-@cAjT$@NzV;FM5cI(Gl`zY>xl0xV8X+?_qUp;t(%VuWI^OJ} z%)AL1JMAdH=i?Rq=|1jrd)VPq0|zp|QYKLr?+;=h6Qt&DO&PEiW;@Q9YN=%#HhV~p{E>JfQaf#h zIb&)Ro>{3`xkrq(H5GV&&c1AW4Lolh9CFk5vUtx@(_HR|FG(OAz5#X|*dkZ-wuH$L zA|{5q7=xV6WYnJ@lK{BEC0oY9kStsp*$7CIBbx7+R1K;>Eww$`GCd+R0)f<#Zni!L z8)0U-cw$`NnE|@nEKzcZjb)Wd=0SUXQMM@og4b(s-w}1!Y!|P{#~>qIs})pl(Wu)= zSPeZ2c$8s`zQy0(trqT}k%H3_z(n|*I!kPU!QoqA+w7OZF0isXO|rIas<)8?ulca* z@%`xQ;2?AkowNQfRwgAI{cG7>T5)o(w3BxaL zmUVF5kb73Uds_oBn&`ukho7zYVRf7oXYI$A{1X-HtDt>7?|Scd`Nalt9H(othj&9m zU8_7cTk7*1AYHrgpZ?jjypw}WI}PpHh7|<*mVi@MSnjwCzu7j*t@Em7PB` z`2NQ0N<`1d8|IS-Uwt^Da?>|7Iqy7bU-tLtdWbe|%DllU%2lbh_j5+M4`+yNZB8t; zqK2bXr2XOeDV(7hOZceSYH^Iao@gR3_gTn{4go?#TX^IvX|Nj3g)OEy^YVN?a=eSLxtf94y8UKj2%Y_x27`9 zh<1wFB>T{1gtvJ6uIJEwYfjjG*hTbtv-C8V{b)a$>ifG<(?>@Ftz^Fjzi=Y-r4y@W zKdpx{>R=U}VSm8GQ-FXmf?g^}nbgCL&iGRF?48ZyW1E<^o$6Zlz+8+ZEH&Vcc{P>q z1IuV@#>YHo(IL!=(z|$(!|SHYZv!Bfrqs z4QDpOARe@nG%~?%NX;$!>SKq<*-<$leJ^JeG_#b>ke}QmTX&|W$`uq0Jl z6*U**($jmu6j^)+)9u)Eqbw)jbKchj1~iwtmK72J_0|JFGJJg>H9+2M{r=gt zJSo(4)!FqyQuXKbOQ?tu!KTk~1d2!bxczMuu>uQqAxia8QhQ$6QsJbDOK9wToYSo*AyB1 zB_;;6w73x|a*@2ZeWQQZ=&-oz;EnnP71zg^eoW}v!VQ$XpBHy`n{&4bD9MKl9%@fQ z+kMKDUz$81Ci37)U*va>c7Cx7=-cri=Sx8I`gYS_!{YN{D7GtJ4$@zOrLvM!8ycco z?Pp87ZQY$ZqGwe3PP`gfSvRhNHxr5#MNaTa{W}1!MCTyr$$r8`pTpjEmNl&mFfCF# z7-pLZ$A|DW0OIaH%mF_Q=rcdVdnV9MdPfOZ(14#-zPk|7!ueI(yR12elJi0Hfm_6z zvEKXrlN=7!U`y{hwn{1!?auHq?=(e4?oXIF%{-@@E_lZ&@7f(Gqa?YVa}6ocm_($_ zGu?eOZi?&{d}lXf2c7Y#Kiaz9&t46k)ZDBrE_P)l3_oAOK77jC6pjhCA~6SmOIk2ePp;Gah2! zNglMIsE*8O)BuV+z)E)ljO^*1m7-~3Ft&+q41!vfkGZ#&KzLD@a0~hV!xw@G+;tp*`8ftrsI*w&D|EUB=XRDfF9VfLiN|K|913r z`}#b`Vo~$q=78+{-gf!#LjQ*gd*G4PQ$qshb14G6CDDTNthUl8lJ8K0VCJS2`!mpIZ1FT+urB}3z zy*o}q$8^xArtV7Euj!ge=-b`Bmd!mvTxPkdqWs4DmHvS?5j(5bTN0t^s;v>kNO<85 zMMmIMNFK2@-9rrb8YPo;#*5-S&0z^LodE#jqG#t^Liy1NvaPa|k=tB)cIDPGnDcss zW!tn|YGur|;p`QP{I3XWcOKS5;)au0bLiOTp4YOjRmyruVk_|85;O%69GjIS=Z+1N ze9EIzudFrp8i7T1im3=oTv5w7`sOQYarB2vYELLpA)KH9@8eA~Bi_`m#?r%+2$>|R zCpgDIcz=9|Md8yH-t}Uhab(Wz>w`;ScB?c6EpJHo>;sQ6LqvwIotIFCZ!>m5DN%Z| zqrOiyLvemhj$dr|FlLp{wIYVlHx7F;z#D1=p6?y(C-G2*OD6%n0cjL~s_K*q#s;gW zR;2nPFdK^opO;)4am$Pg?C%X}p_sF7{4wxqH*&NJiISsV7M8brhpS^W(irWSsLWqQ z9UvG!>7f^Yd{*j-7rn4I_o5Awa4RTv4k49JQL}pm3j}d!D%2sl7pAM86pJzC@h#AU zQ_b$aoQMl+FV7e!kCwJ>ujkp{=A)sy)ZQ>u!9h>kU&JYXnYCW~wmwVk6{-G?4s?&+ z#+!FuZtHWtx@c1(K+ zyRLS5BJS9DdC+QAA`WyIX#h5uMrWs+SNA{?PfbFG`HFf(1pA%_<)vwxfC@5gHhSXD zudU5fdCCe}vRr8&Zf^9)k{I~=ffl}UHuoal1E^P6Lu1GNFR=6vbbY4r509l8MG~=f zH*>Qu&=qUB@!nLmVn~nZFZB1HD$h2FkAa(f6ZZLVj6J*jK6m7Rw!Y}od~%?hLxJb* z2TtDV+t%0EJG!~2H!P(zQj2^=vd?%x*aX8|YR%ugs;D=zCu>d`0>fZe*IHL~_8uKW zvu>P`VQP2NCZClJQzNdO(5HiT?&IR>;0%4Yp7Oix@QZFty4u)rFPh_@M-C4-moZbydjJ(5?TKclAm)tv!Z}zn=G;h1Z+Ih4)k3AnC zs9tmDs=1)Fv+5!QJ0RL4Ny;QFd;vKGLK(?!;=Rv#ma-QmT}!^C%Mz52&pmM)`wP-! z28|XIMOm(Rj(Rs+H;tt3p)!;8{`dJ3m*IsQS=;N2iYXV+xIX-8ignl@8V!}6wS)Gl zg!$NUKW}ZDqB)k zEQUr6#$No2fIS#&pBCG0?t){#;wtH<7D#hWO3u`Gm)pkiQ1A7kXUu0lA?aRn>#o9n z8m`eYWpB6s{^4e;Vu{Vk8SyU~z0v`m6eGDG_V#D)Mq67=!x#X#zXXLP@b0QWNPq;G@_$5G@OuHD-> zj*k<^(~7R|w&9c5DWHA3G03)%RvVdkfA&g~+2{VFUuP2+Lx2umWTK!6;GRS7yImS- z<}FG39iZJ%3?5Ixv$$NYEuPG4?f$ja;rfJLTWx<&0DTmUA8TDs7Cjm00bfLaG z9(66ZjOw`X^zt<;>Rb02MIXZ6IghFJekg~opSwyO6K528w1Cbap3&Hj*PIopO)dtv;8<3o8EN^f@&Cu{oW<7VdRnHv|K4MM`vuK{~`KR%hQ>pGB9|+j*?;H7~5# zZj{glspy{!%NDj!W7XkB-{#zlK0^WsM*HV_ycNEM<9PeDx8B0@F23citN!L&nX0=2 z6xi(|JOLw=^DjIDpJKQh$BA_Sl$a(Q!>04N0mVj_rtP z_t{|NSh*wZ_niXwla#p_j8VU|OoORow-ZM_YW7v01HhGotc|#ssMsFT-O#RxEF`Mu z-7HTyS?hC9R3XSq+=Uz!`|4m{_oX%$c2TQFI5K7xZ9NNMX+8|1yT0Gq+;Vce zol#a!6V-IkPf>MKfFjl%9J76(B?>swab6yC-#lH!pSXQ=B{l7?DX%B{#Ts?SQZ79o zKjO6A0g*i>_UW-~D~StdW$lnJ>H?B8?#9Un-RC@>x4n_4)>_f*oqOEvhMY+~_I7l) zdaT@ZsN;5XksAW_cvD6Rp9WzC(3%$6z>|63ap|t;%0Tv24njiEnPS5EFA6xK~akn_WRrdh0dv_i%J>_i*VIh-9|DZ^F zPknlDNxnmJ8R2jPRi+79m;h2X6r{(x4z(z~y7r>MvrN;^^P}-mqq~Lj@P(f(`B!wk zKV8b|ZB$3Uj6)LdLL%GlXuo#_#;c8^pT-fQ;#TjwUOVcM2RpD^FM8cU)*}jPm)~xK z2lN%KdC#aRwVBh6-EZEvU^c!~kMoKLfNr}=n2IxxE^LZ&TDIP#-z-@9G?xY7Wu0$d zvYa37QUWnTzta5lYgAmPsv%f1c>i@C;>X%I7$Gis=ybQ5#ldQf_spwzJMHkz&ioH& zGNGiYujnfrS0H7A$5m?xKR1~|t#6Q&5f!ACQfCyt{mf{`+W@l=%9#i>6@`-hGYwG) zW{2b)R9r6;6jf@#)TE&1=A^`UDCgtTU9x-XRZkvXrJpm}7e>yJj+tJbd85>FXiwT; z{Uqb|nxsSbw;_K3_K=6^xyFcC;Zr&=Zw9#fq&;eo5&vTAJB$1qEcw4#=$|MDBt!T= z&bt36nKI|2b#xeeSpq-}`;(F`%d}YSo&x=A1uSmj-@OAb0rXe}l1NT$=wk z^mNb^ue3IfodM!=*ZZ=PRrdrEi8B5VWkW98ybN8A3ETFAOh`_&ZH18i`+t=`5Hw5L z%N)EA8KrWU8d zx@e5=&r#IH{teld;!X9E!=t=tMq_1J{Lc%StNigPl-)=u>hAboN7O3b=H%+S!)}-U z`Zq>KjLRJOiCKE&jUc}%Gn97%&`|B)Rb#m|g%DLQ{3>@%-lrimoHjq^1&03#7RZ>; z9R45t`F}eMamhTq_)o@%%jy4PWc>T1{Qn;-|9kxY&)AvKLCF{*o_2bB;u~bH&yY{H zupV7*lT-8IABsNQP=Y|$)=B3Jk{-X7#^~mfOiWgBQXW&Au$Hewcs8xwK8KHmHsf<) zzR87;`f2DEDk)D;OFnYYU%e~D7Vzb&xFADjGWs9IY&e^ukh1>cm&vn#je-KTv^ z`R%$oa4QP;f#;MzjI$kyMEmEf=xoms0}XVGle}i|QC9BS=&d=RXpTn}qI4Kn^x$4t zkL`&SutlYi0o8bTo0H}@S0y1|n(2zQqabP3-0JebOy40FBgqnYa*Y~2WqJ_YRP4nk zhA|G@hW#Nf9B#g>IPH1$`9N%Jrv@Q@dIj{}s;FcsG^Oor+n0$!gwBf76-Pt4$q;f3x@@`;ad+x><$;Lymi}cY zhKlBvk?DOFOya>Pr8MblpyLYP{G?xUTJGIGFWtOx=Z8*tVWQ9iC<&%!WA^5D>^w#K zY|+uXV}eY6`=AB!6}m}B@q<69dI0_Aqag`s6!tV}KO0|vDfKG{6MAAppb4&;z5=)w z-r3#p%mM+@KW_)Jca$F~h43Ie0#^2?`7&>aon{Lo{Q+juOLY5&F)8o|+IVX;+E`;W zntXdYVh+5@>l)|KC&D0|LW+wfpN(SlkMlOB;GtC_lpFV4x@DJ7!Il|~KT7%|K$o}A z&EEz2xGwZ6Rk{KwkLfAsth`{Rp}n zc7ns9zk$>Dhc;X`qtE>P#lN&#+^A>eI$1yxm-|OaNvlyw#l$xB0$9gwhQzk}5^iqr z7yZSwp4J>KCGu_E3f4l`9iHY1GeucQvrR}N1HL*{e=#EzKnuDu5#U&be8M26lMc1!XXYyn-O&d?f7#rZYoX3L)(3&i2eB*Ruv~Y z&lGs?2oz^eeRmcn1#BuvMD1=q{4_z!w$eew2KZ8i|N1jwuPCTO19PaIW_OMnou)+l z^jOk|nMj9|lyIZF$WTdmrHv(G>+63el@k5DMw+bjhqcE(@z1yoQ+d@AfKVRq&g-@Z z3lDcdQT5KY@72ujQs(?k#-E!^_p#Xq2#K;U*wb|qg@V#={?7X!h2|RK_?}z_j}NOO zczgkI4imieoC()Tn2jeDFOhsq5fS@}<_{70B4)@$UIihron!JYri4Y-hqO8u$O-~C zZxsa05!aowzK#=)_&-5RK%bKLA;PL6!izdJ2)S+;Ua!~n-ck|5oHx)P&f41uhz$v) zE_!9YEEq989r2msdpyyTMa^M)C#=RH5s-UK1P|XYD%^eZXv`1OV(0aZ;=N<1-Rc0Vl@L&|)psazjmWbZ{j1m-m}{N*7V30g4vIG%e9D zxb}Tr@#nG^f70JBGEaxd4y;lF8Ute+-E^sC%yi>K)RBo6tJ1cdKCq-73wH`DHk~GS zoXI69!hhxvW2$}C8~)?rnhNV+v1*N_28|y}GZ66<#snsSsP*qAKEhK$fwALCJ<`qn z*IDgJUJcTH9m#$y4;AqMHvYJH=8}{_WU*!vKQQtC#T|Ojb$&oPW`cEAb&eopro@cK zvd8B0$aE>mUz_miv+w8z-;DkBPW3b?0d^T;5?8IFTVF)CoR&Xx(ZEJ0#6u*0u#-q> z3*p%hWpsUK5s{R83q7H#(dm6wY6||T94UH$u&d~V!{cc@I69VTV8l-r(C78(7N^Rs z7k=m)rI^InMmcSFrWGtwx(?wTT>yLE8f)THoYgOV3&e%mNFg}WVG;<-cJ7t9z3l(y z(wAHOZ2SF(Byi_b`PeuW2hUR)L_|hIr`z?5VVC`lxcOhd1AEUAxh4pKMi!n0 zuXf)awhYaR$~0%&33ppX$nylbk3qDt#XaTP7wMo;VHPRm5kN;zYY0fqpwqjTP_rfL z`%p*P+dPoNA|#?&YlNP)L5jW{@qAq8dqZ0x7iEvUPDk=C9xH)8Uv~^#DLqA|Lc-uu zj(9Hh5v?`K4K;%M_h;%(&xX1n%0P#hu3B61P4V z5U__>JLs82q)K-t(f_xDVb_$aDfI|&dTP-5K=OKwQu4o4Z}KRwa9R+f0)#ca(V>Ry zbKaT%S|0UeJd8vz=KURDl0y}1wo!2CY02)ZwS3Nh3HK;&-{Vh<9$3E)r+R;b z4Y=bkZ{PmJN?UNg2(la%={jiduWfT9{!6G1ys89qr*B?a1Ech0NWLCK8lE}+=7QU{#ZPf5!#&o0EaU>ojY$d4mFQbrBIf+-<2yi{=9dSDC8HR8 zK|9uMr{LcNq=Jd^6P-sxmcab9;rsWV21lPDBN;fTu^YR{^=1^Tda6CTW!g*4-ymxz)t*UuZ6sOpsmHgmFP42xlw>mp<~d$!!K{clzq%(IR;^`gP4g^Mj~< zYqs&}|LBO(P+HauJ7cywUbr2F(vE@k!=PULkd_@PyY^2=LmF(az2uQ^5NfTSkLL%? z%L3utSt+;>tsqR>WNd0xK!lIo88TqB43o8xR==Z$?iN8DewX{5RBX{i0Vu zb;v5#aIj;nsZg2v91I1|y!Wd!uuW5Z2aN*VVnM~~{ci66P;%3)3L)82niyht}J zclYI!8#nughShwj*o7nuNmQgB@LU~gP}ydpE3Y2g)NhlO+puQ#nJsh+f1u9b>4izz8> z9&`V4G>RcJx{yG|Zj@c-MDdc4sDMTsVe4d7j?f?uagL2UIHEzriTtC|-GI0{mIp#M zlxXrGjpk@~FKw|ewSk2xVyPIRhl^Sjt3$5_l`NvkPMOK7wkcIb2y-rr|1J!xQA7ax z)d>0Jm5fIwx7>jbOVXfLElp+(EiVKw7vJHdm>h%{@wZ3!Czx5sxnkBoW^A#{+IMXb zhhX&N=84d(M6jn_K#4nrC!lYX-K>=f00q8bbSql35NX;t9AW2&5s|!u9}Go_k?*dnxKV57?-( zPs(=hvS#8Fl4U$Sni!a$?Xr@(`;}`0Ifj1?NL`?a3R|*aDpxWsb^PpI0+$OSe%!@T zx!IQ{nhqY0W#NRA7=%w4pW#+$o+b;-jbq;{^CkbF&XN){pw()(W8S-FjUtUtEX>`=F@Jd9JtH$(u zVth`LsY;!P7b?rY!>9qx;(EVpgI%FfjF7!=Z4Hh?dL9``k45xwAi+2NFvRVm+nD=A z!Rfd&#SPEbq}5S}v&0y5G=kp@brl|}Rg4he%)#yg?TAW50UxEOC9BcComU>9O! zNc{_=^JHiA^@)Pv5W%IVve5@;E%C?wAtI`3gOeIiFD%{IB_vr8SE3owYs{f%F>meI zw9D@`2TPW%Lyda&tZgvemlOgBexFYKKuH(Ws7bfDhZ+e$xfM@~$FGr1t5_ax1A6ml zs&q#;QxFM($W6^q5tS}-dtDr6UY%o3Rs^PDPOsQW?5WSS1rx$seWr|8bZz+iepq+x zQbo=X-?WwgRyLuC)<0bL2)w;{T+`4W3t)NE)^6IBk{<53K@M(N%XYf;i%f4DVt+)& z$YJOKXKc*$9*IbZ@sXH-S4ly&rdSm{OHSG3NB{kr(qybIc)&8@tqxd!%S7z6OU?qg*6eoBo*~X!wdhXA2^%C3 zGk?ZsPv;@YkYbd{WiT3@B9aYa)GltQ0a`(BM}ph099L!znH~|}q(6Pz!y1pn%!bO- z-OTWp0wrZ}M3BEvL|-F}Q|xH2Lc^D3l6pI9s-h0@Y?hR^nl)DJ?MxF_boCsrb)d>% zUa!xcCsd8d-63BV3AMV*%zL> z9}RZ?IQ4bLOQn6y+RSWRzBdjE&_6aosMt5M(&WH0y`6b-?#+&}i|A_`UXf1JxX=;m z2624`^fUWsP&>jq*I+hnUlv7YY*O2f!I)|CyQCN5^R_=6s{6M&VU+q!a9TBg?@lzw zDE%lAbmW3<53Gw#p`hLmA0^|WOt2^k9hOLWPVZsc)ND$4GQry~G@a)=JMR>Jb^1z1 zOCA5xr*g*;*t{fHEv?x?6I&?EWgEP1YQD>8g-W_NP=#5$#sc6uaQq5#U$re8dk~Jg zYauncAK`Xra6AXt9&}A z)Aw0Q>E0^90(@L0jkMue{4a+wB~lI)YGUIJyJB$Uyo1)kp<^!Rz6q4W!d9ihZEU2K z+hw=hitgV^)DaeOFcZG}$pczLmvnR>e>qm_ba}J^?~ie0oc}wtgCOzr?G98UCnyvslAr8fxBNC8u|Cu zQ-9ohu?622ZA)Vt9OKf@UB;JnGNwV>Vj8B7W2C~(A3!wI72h5S9BVG6qN4hz^%a(B z$T&0y8LFd03?8DwQcJ4X28KhZ7x6mTr?G=j4N@uP!}|BzBv)H1s<(p(B6%LA0P!MU zRLK$3%?QSWmFSvUm~(Ms;@<}k`uZ2KGSF7iqao7FW&vQ+j@#0nj) zapl|Dfvj@(w!UDUyKTNlm?>{=l&%nAkx{feKnoty95)3lF~{-31LtgTltUjt+)kam z@4M*Bj*VfXmO|!6pxQ_{#fOuh#)LVn&a)+F6Z`&a)LCWNUm#0P<7&9K?)m8cQlS4f zb$iKX8j_LoyZZr9`{=sQF0J$xMw62jTKmgO`-Skt8awoRA#WV@%p;TM#sY&`=aKJH z4EfB%Z-Z=!=+~uG3Urd;eI`TtT++3gJ!kl+Um4ZCr4AmEZHW@guu% zR&I-!Dkic}`tHQK#Ez~?gXf$Mwd24A0>FqF_D^t~DSJX1UkJq9&Al?b@YnolPKpT} zq48^olb$09SQq4;b(pFe7QI*M)KTX=5gI5JS{x64tH^$R=Kzd9oFC>{SPAWa%msk7 zsmEYdsd$h4ZzM{zSod-4e7oQn7ID7L`BU88v^Ts+pQ@f&++aBZsDWmp__V+*Q%UUgf9 z;5u;Th_RV5>Tzu1`vfEt{c0v&e`(^d9Be<$t(vgnLhPTK;ylDNG;+-(xj9dZnM(SE z*Wuih@XMCZ@=!U_6|giON(V)o`ykZjN7qZFFHpB@Q&HTxctBu9*SIF5Y4DU<=N}foI zGQ{vYiuG9%@voE3is zts}c&ZVpSrSbLYSbI|9RkINj(W*t|Hs$%dcW?Dp0a_cS+cdCBVrZ4|2mS^JOMZmoe zCKbiA*=9iln5&WZU3TQOKD)e+Z*?yn*@Y!rIkH zLmGQ_xQjab$n|+S7@NK5)E2C(?%o5FK*YKgutt?qn~-W}4`Tf+O{Lu+`an=zsG`v7 z*u+*!`-_6iIe$uNhu1ZUs*E3~`I)}Si!c?avz>@T^R?Uq6B=1%nXM4@-W=@yrlOU7@a(<&ypI*YiM>^t6 zY!GckQRBlhw?AbJtj&@IH^H3%|0u_db^7o}R<_Xq1dwBy4+3$7oOF{Mp!5UZFcj45 zwUnr^sv!Sr14rx(&4xB+1PI2BwAbWMR8KinV+P3TY|OM=)R-B;=@t;g5zgwX4QsK8J-EH~@@LbNxiHV^QWv_b=w+~o=##O2>4jJh=Kl(OsKHCpS<1e0tYPPgdhxbWRnXW?! z?J=v#mBkO4n!a=U9Z18wtStm7$BZjwRp5oL^_mNx`T9DOl0vs%s5PUlRpHlXIN@Iy zVo`K>9ag1k4EWckOKV3ln^hG+l#~F>7zyN&Mx`Y|q9&X0o4RB{SUKAv?~ z$qw%nN%_~L|JJA9@O`EKp47lMt(Qj$Ijv;#hyN3a(7Ia;UC`$#B9iAzE>Cv%aGDpl zgxDwn`2#51sr~KwTu>4sRz@cMzIPeZ0!q64+4P3E?BV3OS5N+?<`c~ki9gjjVz_A= zp})%K4#2Y#B#6f(X$&JCLSqVqI%5?Q-}p}91qekDy>Z*7j84hcmDE3-IDG$Z%%V!A z(Fium_8otNDO^gJ_|fn0v&#~ICQZOx^i%1u%k5^vo(F+eviL*!^%rSQ9;$$kTbR&Z z2Z%`sUNO&uY^TRwBH_2gTKQjDpiFAci=si`!2&MD--UuSL_v*eVEc1k=D_dVP#Wif z5_*Yosa8rXBCtu4((0Gvc{1A>(AHDaWG=q_3ZE3x%tkM~hxh|m@M)zboJ0(PEC;r- zG+xc|gmf2XdCtow6l}dB>)5z`BSdGTp&w%~0t8i(>W62@x?|ex$ApfCLAnW3H z&b85%=g8Kfbx)}8^TMUdiO}YM)I%gFPT$m9s`>ba5O!=94@8r_(g@75v`ITlFt|Hl zUZ~)RsR$hc`FDqnYizt8+pJGE6!D+H1SOATE6@2J<8zkljXt%?ZgG?kbwj!#5xpp8 z%2x^1dsPJsSPtpzhvkGHW}Kp94vCQ`Jik5#LHpEbUF#8<14@O^ex#6o#uvTSSHmn9 zW;VyJF?wdRS*i_GL%JN4Yz*WY-oj{Izt=v$$)4uh=r);3k{Xsg?NVFV>TtG0J5z0d z6EcS+!~R(bNB|$M6OqSOn}oaP1i2#(Hvgaa@T;{xmGMEv!}I&eH3Q561$k1QUF#qx zBv3g_6{ih)ngd10#D}^!XY}4G9Ug?PKzJQX$ZcU%j$gD|8%1EQO%)Pv>Jh@8eo|qr0u}_THP>6Hd<} zx#+?T$?;G03@# zgP|vRP4%IItbgq8_VfK66v65)Z~M^?fgmmC*?3!7BY+YfFV6bTTt*R$Yd9O_j`g zTd<1!)v#v=vBvMMQhzXl1^ye^fpR@_hLW~viE)IbcQ0I^ zL$~)?tIx6*Gme3doNZC|`r}@aVLAAbL73a}0BR%Oc3h^lweHsg8=$eAFjRi5r^=Ay zNU%Qeei~LHPS%Rh_)lXHGmg>0Q0^@!;bcTkf$sjN2CqX$fectO5JE;^!YBR5Zk(Gr zzJun&P77&r3VZYt67OHtaMHd!2idK#Z(Xk@bb-N~TzEAJmlLf@396IMk#S~mDu;P0awC^k~Ci&p?KtAU|O0aUhVD+vbHI6dj z#tKa_CC0Yw&m8HIv-#!9CZ@RNOM^zHXLMU~hQS>?*{76?2qN1=Z{f`7J@|bR4x}g&zKCA^x@Cq3MMnpx9`R;5S#^bZ5WZ z^aU0F=bxkU?7w;Yh51R+`qfl&6jTW@19!QwR%zHQ2$_>V(9vNs);ip{VA=+mIoVjg zH|~3L{e!>aqO77sho=EjMY3NOu9s9>-hB`_*~`2YUh_Dq#v;z~Wpi@cFC}%6)~gI4 z3QCP+E4ywCRyQ}_aH4bN)6dog=8k=wqiwznVrEva*_>5jeK}l|I+z-W}oFZ zW%i)Z74v4JQ^3W*0%N)}s-PgWx!AV#CV2ha$rC$**pB(*CXH4mf8G%XnXT;m$(wsD z%>ZFshR6D1+3meIXUN}-5rxnqxP;!|9rt-!P%j%i z6EnShCG?ImFoB{-XpP6BE3ubnT(`05F+!cw&&{Q=TmpT$nmewe`b1}Sfd59O(@K2= z)u}AMpbQAT(&ly?sR%#*rrw;Xy*2rSlzk#g8wcwtVIP_`F(U0gb0#Zy{X63{{s8iOaI4aKZ;pLn$ZB1pcV%^$|i(ZOlFVQBU zy*G=e;}Mp*q_KV#O3ouW1H&rvotY{=q(D#>*)7o#XRO+>FRrWmQ+mJWsv`8jXY0fO zDm-pwYtS_w@UB8Da1-Wy!{TsnuQsTa;s62>m!C@pNx?Ad+kkXseAV}kiA)oY z#F8UseTC~3-+Z`sTe%ddyWq~eTIO2Gm4ng}pxRsq4|Y{uQEW9}GW572X505udC0Af zi`;$J83eqI3gk`>57g}#`%(u}(gTicFo|8J-NxV!YLcR}=?N#@wX|fo$-hVj4{~*y zhH{R%!^l$8NdQm8kMeW6VetkBoh{N+M_Pz_VAF3BHk*Ol*{s%)lo7~kS`lLmruRf; zgl|=Nh@WcNCtOgH1cUi7rz%I8yIrYA2~^~dY>ii7*HYy5CLtihi(x0XeLzInkrUHz zNgG{Gt?A9DWGZ-g9d7SVZ|AO-6=eklO_U9WL3g|D8k=n)Qm>`abR-u&1mpvgLQ?&D zoT~}oAs2<=%HL)lS`gsdqS?Ofj-eXdF4LnO=WFDsy{e+WJe^fWE3cS_-^4afI1jy6 z^3e1&FoKAGMmpp57dAX*{vd$|AR$Ts9nS`&`*^+_8;{!Q(VW74HwJB58B7asX;-rJ zTE-J#t!_n1g=`0KWCA)zA%qIL=yN03r^gjJFsJLtiucp@0ei#&eEJKqcYaImWldg+ zD9-aalF$_F5e0C(^bZL+lYz$1N%zg~?362re!_^i?J|&(~>*n*;!S4{= z+d?TFn7vaJusuPUa29K_Bo$(?9eL11TgMPEPASau@(EJ%W?DBxW4dl&eW#enIB7G+PUzKz)!uHP+Zo*bJ;^ zYW?hK%3!Mv`}_?tt1MznYpA&(4xa?~(~%+4-$L-F&-vcVnb$3*CJ1UV&hNqTbmY9u zl0eL+Pnl#@v9J_jb$O)98Cv39E7v;wvIT$nbMB&~S7h=V5P?PWJ5ke`N*hWD2&P&D zPcgTW7gwgpnCTrkJH@%?D!~DsI?`hmX97iaSh zM`)w)lHILBSz7=JX7NHE} z;q#fczNC+=X1Fy*dWc`wosXKnAytkrk}>sm|G+W*loM%2%_u?@dB4~L3j{`c>+;08 zB>7#?rRV+)ncN_oWSeLOhe244^kEV*iS=s~QZuD{BkGP@b@oUgAvE0DIF zD$P9+J`u=jI^!xmOtKQ?ynfU}4yEn(>@@r+SdcUof1ecCX8h>*FxwA_+25j_K~dF} z9|)}>l`jfBrg}fU>E5>^fXm%{KQAPFAId$(RSxNi*4#o1->_b)SDzZo1dUIy;9n;o z89d;#Cb!EM#Rd<3zilYPb0nUY&T;373x^}5)iWe5zeN_`Dgf2^h#9VyGNBy|patYP za9HEuMkj9>NDzd|5B4X#+sG;r@rK9I>s!@tT0uOkP)!oT>4@q>hrAU^3MBr^_4E66PA|iN zuIXffBXEQ?4A(dKt29AnL<{RfQ11aMT|dEr&$Ob+L8$L%?6)drTfE}}vGCm)KCt0* zNcxPC50TuA`SHIC;=r^nbsIqsz0uO}MmJkoTFgSOW*^t@dm?JT;`^m&G%;utsY0R@ zF`g`v-y6Ot^em39uaheJ0z};c?#}rcT)Y{Vr-U?z-a0xrQcR|75?>KntUdjJBI4C7 zTXTsGG3slsxWttyDB?mUZ0$jKy)drlcofQ}9-#d?{f>`a%saHi`au{V>}WS$9^R7NDmbq60XQuksJY+L+AOl!_wV`y~S1HXxaAN8B^_?zgx zO|%J=X>=b8S#90lLvkyad_aBK-5VJv@iw&2PAo@rIOsy;#6RH_BwTqHv@To_g@4{7 zPd<=L@=(UbF8~3H6ma=U=gx1K9eRI|O@=E0+(aN(Xb|Q@;g}+WR4d@&xT1l&x@xW! z%YyB9npe?qLjkQva;j~*yC)x|j9>a#iK?JT()j%P_1inW+MM}5MXcw(B_sB^S9%t_ z+ckCddprI;ky3U+-Nt0lLZL65n@Y6payL=J2fX9JGa)ZzJxK#d4YJd|u`|=Cxs7JY zD8=9`pYk9tUmsl4Tg4L46nzR=&!r&#={LX6J|3)(C|2rOs!2=XqI|o=`K=Ttvm%0J zQS)U%TAV5Cf7w+D~V(<06X?&$+ydF=59)}IXZF#8ekoj!B*jj2BfXK_05M>QI z-s?zR0Nky}Cs_P;#?$L4j%Dm*z)i}aMd}N*^&CS-@k?5#-Qjw%x%Q$mD@S{a-?qKA z>l_*x+gJZ{L>&3~CoDXd>G|DUzj48oRxV^L-ov=T5wsk?gajSty|>!yp5sRx6c>(t zAv2rCvm&r3j~><%u)f8FB3=+M(nDj~;VE-eZuxXnwRm_6?_Rzn0w3H07uFjaM(h1? z0EB!q<<1az$E`+^QG3G^?(~%*v(^Q=XerpLAe!vQQ?NQ4(}M6}?R0$b^=@$0(&(Q8 zssj17d2an~841D%k?_nks!V-on2{lWQ{w!5=vKDvQd`$NB&LZ$L$fTIg*|rW9Y{u5{lb8kx!^lWKB=mHEK60%@u*bTd%IS|5Gx4+sbeIoYeFhiS>P(Uue zU83hthWL+)m1ER+h@Zett1ybwxH zyvt7MK%Fo06V*7SC`2yPQyV?J^DJA<>Ja)hukT5(=0*1a@5;DEmCi&p))(YrYN0oL z?)oVp!M@JoC`J_Cu(9N?CQN-^J9#e(#uGF2j*y#5A3b`p3mKFg(s2qC)?;UfaH zmD=MaX)t~}Sf;{#T3x5Jp36FpHbjEO!HjyB&&s0Z_(ooj;A;?I26%yijX-d42-fkk zn20!XB8)&-+XF6LxO7ArD4eJd-4+Qlb-`;Fdz{R^I~;SF;&N&0n6Ak61>?U0S0NYa zD&Gb)`hbiT2ZdbYQx`A&D00S67v)w7bqWQs@3cCRA$x(ET4RHu@3Hxxfi8d|Q~Uc! zblf$vmLpKR$jMB>Us5dLi1gjxU+JUr*PrCbc>=2 zqer_kdBEVLTFVdH!*!wk{DQm$pnYquZ_d3g}8F{kQjW#qo4pO-8fbJ_Q}zQzlkWsimda1&aXF5 zskD9C?HxSKn6jqSMD9y=iBxBGNE*V@Z{SheS^znReR>Kli#p>swtn|tCxS|Vb1jkg zJu`_}kQsa!{JV+AyHsj0Cx`^TyvYIl=*t!qdWVI8G+(YFKq&-Sk<*{vS3_dZfp4+S zl{x}YzIo-mDyJZW60c*BeOWsEmL(rPE=4(25ai33Y z5tX6I8Z_+}F_=sErWyc1*++3sfLW~Cu2g}z3qCz!JA1dHf&jKXQ6`0=#-2oYzRQb zeJV`p6^RZxkY8-kuWWkrqXcDU@G}+}RT|}dxh#cWRyyzOXDlcMdpcr`IDf*N?3q+Z zA2FoJ{G1%&mV+fAdIav)_%>s8m&z2NG1Q8c`3&W4Hy=pzlYMW!fIi5xP2No4y^)o4 zS3(KBtLuwqgw=<40l{s~xIo_p@o*>4KZVL$mMjzIUwCE%eJsn!LALB9q_%P}LjUz| zk&D3K!{!y54;?&?dzvOyZ68G|{Wa1+xS}suGD=<=1(ID<4))8&JkWM+gmnlQCDMPiyz6Ic?C7gYM~cW zG|Y$QBmNcf28*pP>tSBfV*KY_S+3@vWF4;|j&QR=d_4C^K zgvu?|ZXLky43UgV_8+8?y@>0L6QDfPN8!lU6IM1{F5v+Ei>w@#4IO9o$NrvS$qmZ*9B&?h)Zdeovz=wM+UZj*!0`S- zjA?2*3(MrN!+#$oRSZjC+Ihnv7j(WkEtl!ivWcAA-@32sAMP0B71F%S-R#ciEx+c{ zfcU-9)3e!ulij)Zw`2@u0!tV^-#y+VamD0*;`?u!OoXYI36;Swi*nE%5Z%J{GFGM zvC+v&fA8vleTep~^w9kSZ2lSezhU*yM@W%4e9r&+-QOQWLZUnWiNAmQ>pw@xjUdzP z-@oF&&kn)E4=4YRFaNJ2_An!?+Wqo`%Z=d-AeaY?h=a3or zrl>E3vLR&ao6i&jRk(@8~O*-CME3gcjJsg90l>)}b;1A~pgOqtiM zIBRs11@SQGV@JHW8?Y{zv%xDPRSx66WH>3&%xGf^dd;&XodnFd)hEOFH`Sc9!!}H_hqk48?;(~(el25Yq&Kc4*R35k3Yzyw_s~7 z@2L64%{8`H|BEb3+tKLfA&!8NaPq!U&gDpSw6X2&Gn+~05!=ByalgSF{+p`!g_-5= zNz8}~IHmbE)9~+NXP0}*I(Y4gO(Fba*&EUj^1g&_fHMX&OrI!%yIE1g`uCU4mB729+6D4w@n!vr%itL%3M;?l7AuE^r_vl6k`mY`*&}}$ zXW2HXU7*#i3hd_;=#EwJ|3;nh@+OsJy`vZo6;jIs?O_~wxXtnnBb)KtpUM~^FI{O8 zBp-q9z6e51mhni_@D%p8^U2L^5|{U7YtUzyF%*In3nlD5@}-7TgQLSeMy$nLAv(gk z&`3xzP+Y`dY#ZNAuGYKOGwi)m8pt;9e*X4IV2v3*i$>kh*mbI)krz`2Y-PmXw@|mT&f~LSo zKf?*R{!l8nOed;@?1|4I?L)kEGH>KC`&mdWxIRLRLMrWMyyg#jG`Yxfp+i@ z%i4}LlkR%nkIkV*Ol0{V%=6Zt3%IOc%Xj-5e|W_X`=-5K0LITHH`y`bg9AI?i`o2& zFeQEc^txT;GYd_gbl1wyiVSJ3r(XyrK|u8?d?`RfU{pC>)(2|D8iNUwa487vMQfcf zIAG0!A1>NY6|JTCWwDR-vh46gP-?+EuLG?AP!2t99(`02^*u@QAXyW7$-0n#rr2fV zm!s2ky*(R~&?}+7-?MshOjYX727`@W2tsV8m2H05tgFyV*S^_{tN)v}?MGuY#-*by znxi_r2xsJ?S>u{$5Wf@WSNO3LCHRH5%6lBmZz2{cTc(yq4?LnDSG>U8qt0?pI*CZ3 z>yXq&R?Vy2+TNN=;h3^#bZ?G0+=yl`v;fzLqa%L%?DFW$Ke+vVZ~iXz?CH0GMy-?W z`_eG3i+yBppiwUSB`CMUkT9a(dzLV0!g*wYUhIg5L9**DvTkXf(-BhZF|j51a?e(k z#A%9cLy441RJ8WwhH&vVIB}tEyl7>EE03ijSJRt!&V;WibSNMI)|TW$EKzEo1=egh z`b&-Y^{hRj$7`>SBfu2haj#Kxmvnx$VU~Rmvd)P%Dqmey{p6+-sRcsmU^U8fOi;mo z{xM-|m6#WL0D8Z*N45KBIZXO>tvmmYtVi@u8|Z=>oC*cmOZUyjM5h%vKehWC)44mL ztwU9c|NS6jXL;N7i-m^!u-;JJ63@VP?;`O!wKxCj2%S30gYqCxI*F)ssWA>2_L`Wf z;Hg8bkK_1bLmYLY>9j`skFwxq76{7jp#+WZC=O{UOgjY(t*#yD!s1npX!XRv5GK4a zUDAQ@zieIAj``M#Je}v0euoOQzYk{kai@8v+BCmvU0F}TJbeadU5t!vbaREP`44w0ALD0yG`NH%Cg=~js_;(l*`4C%a zYR#B!-}Zi4GbKc%D^?bX!2VS^2q)^87u(J}?XwLc|F&`KqOIN`s&*7A)peU)+?!qBV&yFR7#*qq#B$^0vHRxO6%LG_4u;_tWvT)WBVz`BQPPnRO5)zG$^{dmGb3|!kGk)|^ zw&24gbW75nkn0=fiRrP>CA305K6M^~oU}LS(j;8kL?Z^;J;>HDlkoO_`%Y7pub)2y zK#!>mYVBX=lLLg%J0LQc>aLFuk#@$`a@2RkgoW`yVT6EtzlQ4ZrUNm0fWc?4YD5YW zc*X`r6*V!HD0ORyf}tVchx3W%_BYvxVlC>QMt7}m@J`NtswIfeJ?pwp?w0OuWWn?P zT~qiLaPPo1iGt4ZpV?bSa*U**Y$4N0 zl$Ta;)$e{KY)i*j=3ElV12sM?pC)muH1DDGnDiStBlzd#=#1ynSV;vvusxQ_b@j}2 z?32+~N9Y5bSY_N6?*ne%fI~EnB}%m>SAv*ICLJ+Hd5lT;b6wk~3PC8hKk4dDQ$YM_-o_GFY9x>9jAj8O?WCWWAgQp2YN>O=1TfMv(g4KdzAI zuWa_DG{jN<;E_gV+0O#$qRgs+T`cnZ2l&hN3M?f5NqD#yTU@E-T|Mz4$Wkd&rK=`I zcZb!sTk+FB3onYlD}(fL>LVTuNAuN*cHKncV%#~F70Zmp!+<~Ws&;Ucbbkw}a`wpz zxzcB9t&4rmj_C3ZYhsh3b=QWOBA0xbmaTAD!dnNWEq8~-GeFPdNDFB7mW$X1vb3gi z_GvJd&nUlmG5iVmFZTS*{~vpA`Bi22^>2#^h?IoVpd#J5=?-ZDrMtVkLrON?-QC?K z-QBV2?rwf3Ue_Jp`yY7TJZ~98+>E`>b*?q%=QyT*{V3(d1Ksj0Wtv$DbLF0wHiLG% zoj%IuPsy)?)aza@;{n}51IyG0#stMJcm_)2d4$4^@+fuY7p#hPgS76g^THi16nn!) zLc0{}yW4bM!&b>OkMM9OsPrx7$*t@JhRpY-QW-Je411CU>>j?m&k)-DnpeL;$S+1> z-g+zBT@5C?<_p0uPyOf<|3ifS{QOZT-<*bNT2^j>>C19*(NoH3sb~|wG3}rF5E<-B z)tj?}UIf=UEXSyPIN0n$Q;*%(iPB}#e34YFXJJ=nqGelMokk_ZQ(G6n@pz}LswRoY z^<6-xr?HG@tV1Eg42Wup3Hp>$9_6 z?6KgK6gZqTrrN0yS%AsJGZzU*r@DVB(D1L_CuJ_oI@hHpxx~tHQZC^VHtZNL_S_S) zSL>99t@T;1MTJ{U&X#xd>U5*K_~QBajdvT$Y@!ThI8w%ib0K+B4v7dO3PQ2E+CbT4awseb zMSYsh)lHTR=qnbj#%K8ck8EXk6i`vwp4J~Z`|m#3Pd&Y|kKw6FxOIwGbPXorje-}K zqNn7R6@GHO`_fI+J$x2wuDN;;m7d6t1r{V-hr+O%{ois(tv6q336zWs68I$WtN!Y(vA z3>)22@I48`#~36e!F&&sfnG1NY3+V)Suw4UWBmYG^>v_O_ArKo0XrZdY7Y#$?=8qU zSoIuM86J?|G>KAq9IOY#kM`tOQLAm!hJE_W0{dhV1k3+JhL`N) z^33;b1F61I7lG0bUIXz$+fgU80T(Q2$w`v!kGM{zM)raeG(V>6^-L9OF1}qRtdV5`$}4xU&O@L(OzoO^c3!XbnU_Ip0?a;Y$r;k+8V4v zc|>U5*D<@uo3%rDN3)=AJ=wAXsx$(BOC4Iq${@T>+_pH?&Ofe|&i=h+WM&5KwypN$ zG?CtLGxW6IfO}A&5k|>uZvsrsD%Ky(&WK9S@oHr~mL_&$8*}=6dR}m_?|IM6?%sN0 zbo<0O)36sAuQ8NO5$_CkLiHWy$>!%^)_$fW2a!=+m)pGnJs~K)j#zi`v&bKCZvvbB z_8Mik3I=|u11o_*P1MWb)$C-H;3^R=bP08ovo$jcCQ1+9DkF-94YFElh&+w$csLcVk=6;g>S;KQfyT4zIEH0kG)+ah0QWaGZN;4%zgl|SIa9CV{ z(d?lCX6tHy$i5}ghEhAMG+&)YK^JjQDa=h>f68@~n1a)U`0jSWqulS z67}WX8G>V);BIT1W~Xx9uLssv0o!f=@B0{T-dHs|RRXm2$rRO0CeI&T}A4;C6@eV74ojpNU$4UMe+R@nOw(#jHW zA|n(a?)!yMtE{84Gj16CUL%rkk(u##^_a!X=cwOgjd&`O*5^d5a?dKJuY~Os2 zOo&&s+FLGXyBscT-{6~-^y3a!8ujFoe`@`YYpxGQq%Q}})OZF?jrp+3;KLxRA(!A! zxtY=XX(v6Z+Ias7^JDit<50^7Roa*$Y(?$$cU!sh!t0JL@cE@ISw${t8x#*gT z(rkdTj(0lQ6utNbH;}jXoX+5Z&|5TRAfu6yu9{HqxDOfj*%n4;k5gX}js7bCeB@gT z1Y}w6g?_mAIhb9|{A@r);Tw5H_&3^1i>5Z0`^WR-yV`^@$TJzt1fu1X=w+itg#pAL zYV!-tv{+5OkIphDvio+;Hlj$979x;0^XjMw13J``-)`WpYZ=$+L~IlyI7> zwFz8rqXhwBNc^V8%-=ZA4`CSMs>1JP5~W91VWrm)xAaM^dp70TpGm@444@dP2-u}3 z5g$v;b2YHB3Svt~WoLd}ott&sezsEP6b9DlvRgDh;iTo@ob+B19$E&P=n2!r4$n`K zVOe?1Y;6F4I(-B=S^z5}1P@rn=<$qlf%P51Ha*9V`@C4UP@Vvge0?veFfN=AoaSP( zCt-@3Kt6^JxNwlU?xPpt+aXSeG@;&d>YMcsP_D9DKGse1FxK|UHxN0|bL|mgo_|PQ zYwq#AkO7^EAB@g3@YGQ1ofxVxF&^x8cIIgB72yw;0^K>ZcaA&huhEd`M#p$Bhihlm z)H=fNh?0yCfsRKP5n1%Q3$kUKS&x+8eF8fdIooJDh`nj9vLvf5W!qspr! zY7(>IsOA+!V|6`I9JiBCJQI zJs+YaevH8TNfn#7?@wpumNE=+`*a#2SUr-m+KrV8Nvm`wWV6M=s#X24FmRb#ZnOQ? z`-$TUuSex^T^M4}6_LW>BM5|CGdUcumne)wl8E}ZJ~6YzMD47`Q9sO5CQP!yNL<^m zsG5|bJm71cO=SlfVRt_C(Nc$`5E?FX`?r(_BWe6^tOqEH9sTz z*Rbc&j>Y)5DFeX=3%4wU2lrtO0Cn$RuTwr(CYZnQJ-Hk+tX>y7s8W({Cu4I3nS#BH;||3~g{0_3@)^$?f9kjGmh;boAUYYM^lDoHjE>C=%kCi?@iuhT zGi4sf1jw$Ao(;;xhf$malB&+8nglq%SF3fTAP$7X$9Fm*-xm-@=cfH|Yyn)DuPRfo5C3vIdK+OUSYTNwH-`V1+X zmC(;oTfgvcoK;a9O2^r}v)EDQV)xD3FEBylGNa~|hc}7cc#l*!e55looP5Bc2s{ot zN%fW=Y`neBhtE5VFpTfPDJ-z~mjYPju~H2S^Y8E3*0#C-_&5d9%}P$ByaPUXtn#tb zp=cRB5jlIAhh%9H+B8l7SL0F1g;j?+rF!weuF&MP%aGkc(a;Gh#?RRTtU#328kHf^ zhxnS~+fAf~hEg#Izk#c>$Jy|j7JcVHfMoKC;Gy5Qp~=zc!UL{}@Q)k0TKUXd9km(f zg{>V7Su{1K=6g8%OZ~`LRDWV31RD+L4<3uYl%Uj$IMyfIzGIMo5+Q%FoL{RBSvlq_ zKhuxJDLqUAD|UzFTgVdez_zNn0@Sc#j}Z(3??>~+W6r;f{K@fl9*?kz2SrVhAlL^8 z{ygg0v-rv7*40bAVEy!ocWg_J>dYp(EZ0;cM02A9fo^bq6MQ3&P-uX%NcMFM{6}@IF7?k{X`gH8m4Dpo{OR#qB2yDd?vLDI8@Q?L ziHX?4-O~Zi04@aEbERCprmvuhM7RS#pH>=Z!8AxsPoytn{Yug4)+d?f*zeqwDy}#0 zZhw_BQ2oPnK~yeQR<2I!aJ%z^Cx)z?8%K_etpmwQhLr)E9d&d61hx;sow9LWo^dCP z?x6kq8&wnZMs<%wpPq%C`mMsi|4lfnxxBF;lMRaJz^|L<-Q-}dx^(8*ccwM-@1L_9 zhw+m*sO)gtyZR!Pi$JHHSWMs>>&XRzIa%S{1nI@~wKqNdYOBKSOhgVopn&w;@_owo zd`Q0tdG&JS1kEW=eVefZAp8lfW95KprZ2auZExA;vNAb8TbFQI%I)F7o$@Lq+T@)% zIH!K>kHbC)Y$m6uj{8GJgji!$=1MA=eAH%LUI~Ty-i)%1yWjBbeiKp=IdH_xC(Gp{ zs`*`mxgG#Le=YOWa-H-#zF2lwc`v83ga&MAe$6MQEb3}`R@d0L2w6mokDU8;FXSxXaRK#B?%(O?a6WlI+9E?xSd#=me zQk^Th>99TBNnL7@WBH_ep!PM-#8h>UD;O1V+n?`R1-pNlzrka7_ej)DJDS6yje>y(EBb$=*DnKKxH;2*dMsjq#ok=t_#9>pT ze5KTdk@M<^#J;&6ZhO??3@EjV*2=>L0cEoEfD9#)v{=7db?uqcn)F?>=!*qWz2t_( zUI|xD&!7;-4zuFYmcqiKG;Xv*y`*3~N?uB44jjKd3~3M2U=Cz5lz=SVNMAU}fo$+SCrE>UexO99GEsS&euBCqXp-o*^L< zHW0o21)26kvyn)^vq*ORS0Qk4ueMS@9eB=LFYL-F`pD(HV@B)BUl$^SYf=C91ua|s za?Bf5o6lN65Rk!mHEsiLwbFq2TP$vBkIzf)KI2-~`~5yko@91dJ5#%Vqgn{uCb&-G z!WNXHyoArA+}m3+7aR{CVTbR}4$=~V*p>ay>AOo*-!X1~BJiEo7vG8Lkk(Y9#4p62 zJxcYyds|Yl55p!iA2d|n(=gr&iK*|fH%0f~)d2h_kXjnx6F%{aNB%q}M{^M%{;B;{ z9qp*~utKimM0&knzb8Zb=z>4z?jzTF3+)H@1DMaMGdOKPmm|R*#Z95fX=tVWc9okQ zwsBWRLG4#OA#iT7?NpyQ+z^CnzC0+tDkLqfvbI#3&We9PE{UYCY_z zHNyKn^Do;khMy9TZJ#;pd0sURtAal}b!s013U0tLI&181{d^7Atw!@_=0!8$xAzu> zs|TVlT?t1Q8NEK^k7v$_EtZ64+^Xe(DWM8!{+mY z%hM6ub1%g08rSu#&v(%%_(avX_HRQAoaATq!#M;SXtv%?r%dARtC?&(f=qVKU>IH@ zf(isC?3Jv01E8G~4aae=$Cpc}1|lNz5&5xDAPy}8mo3OKMG}L&8t0-zcAX=st#63T zXLlH@n!d&0CwiELYbwwLl(LNP5XMW6$j8X;8K?149^T3wH;Mc}22N|bKW=(uFXHPzr3U-L3o?0JpNMXEW zGUn>GJpDSX-WDe1r>|qs$zBVFdlwNk)@osd0!&Kll|3_8vFQl7Ty7t_J#Y35pR_Gb z94emt!JHq0fX3;cZ{`6bWv6^mLvC`5?dpS%0r1Lz6d};w^a-i)bK)Xi_BvgK-IgP9 zc)SrTCu^ulHprHVg&az5@1hrWe?3A}o}HJJG}QPfg*i@QG{Sou;|8?0%PR^9X#M~x zWJp(1`W1L%<1WTHKz8q;UENuP6F*IQ!Jp_{U}STYF@@fl-7juYYIVsf2hWttWJ)y#4HTGjBPl?4m&T?TMVCD&AtK%~lzaG@(9V9v* z!^&gmqw}!&T#h>nXCcAUzo;a`<@G=N(o0XW%ur)TB8#tEDB>b5W_s#x<2K%f_q0$ zDY%GKIPxV{#_I8BL5U8zWjAz6Zt<>CKa27-gYkyj*jb16eDH5qHy;JfBzRI%#2=SV zhjy;*4;wjp6-FCb23RiFCIi6g_cp%>=aXI{l&kK%cXl5|bwM)9Ts72mJ2Wb32XQ-7 zt&@wdsux}}|B%U*^0%6bMBUlOy4WOJM>-C~^#JnmD!AH%^h&PK9csDA6Inl7{V2Tu z-DWN{dVZ!N*JH%-Slk!a#VHubGz(40{EXiz z$d=#!mQ;Qw(7A`fRj%-BK{B=XAx9?WXsToBTL(5u7_Yhc%44KNA{rdrRxqxuhvwqu z7YPO9x$KZ;&kzL6R{_#E1YgjAr(O2%(_UAukfr@S*-YYXcJHf zDNKn*Zeex^NTX==3vVg{@qGZQ^;vljIc60fp@i&&&0w8s`iz5)Hkbi>(i0(87-p^L zhyJ@f)2o*7gTo7PGR>hESp{lo#0rtL&V(hEdz4)$54z)E#prYaVKA|h5ifA)E;wEK za<6p3GCEnZNLPE$#gEP-UOy_!^QbL#Qi49c-Hct7o+%DrB$?A2+=+EC(~!6*xOoor z@V6-k&BNECWh`==a^WZUJM^dz;1+_V z(cW9!Kfx}q+9bT6ofCYDnNsY@r9S|qycn@Kb}-&8yG;{-f=>upl*ujFiNeQaXm{7X z`Tn(wn9L-~n)>E?|H3{gQKEk(GR1uJd3{I>4%{cK|J%QXk_If035onB_Uf();9`E! zeYYl?9ir88m-0qa#RV(ch%2(Hz(3I@P5h=HRrsctUz>7WkYI`A%~lxqVLw%CA_u8| zJ_6nu_h_uns*oedD@7pD>GT#-cKJOI)14y5Hp*%sb_eT_JOcOALCuwP%J&LNHxWqA zSrr1JK0}b0(sjAPY@NJPtpa%}D$6phLA+nrtFWOzxxzIcq`8~DUPE}dKEd8GQ>a6z zA>x~)%wEa>e&z-< zb>t`{(|`F&J775yL#+PQr$Fxrn5=}f+*PyXYi{NuA!*A^fh|Tyr_%(Sv;)ica|eD9X3#B)%SSE^EmHjuxJiOnR@xAziD)cEafL z_jrC*2Gf?aO7v?FH|p85la1)=DjY}dAz8Y_$c?r}4~#sw8!^TYACFCZjjuk7d!sE} zsN-m;pI{2J|Du?*hWeZXEe6?L{tazg_Zd*y|M5@No&b6}lA`o1h11Mw!`vIVV-UvW zd)d`)^QF?!x&qZnm3nwv*)P-Rk&<{ja=#0fk6B_qhI-ENeN#IykqP_=15e z!Rna=6Cb}HdLaI~qv1$e#g-W#Rc4j&O$l&+9o zT+q%_o8y3QXoxM=kf%ihW#u&i|C_bGu(hc7_sxGon)w6y0$p*@^Ubr#`@8Cwp8HxK zPD*bRE!-uY-0n+nb3N{9?KK!9-;Ua)pjKME(-SM>7`1M*L;4#b*7$?p3mo6Z*};wRW?tWAe{em#gt2FUL!kG^2j(le_e6HqyYIr{ygvYm z^RGH($#-|+?@c;lU_0XjVRk}RG^5@lCM}A%p=f^l1N4W`M!7B#O=9NCu{6{4P~dF2 zeJzQQs(zf#6V{Z~E{o3mL=l!l!*&W%yquMbqV8=n+T-~CWn=Vwc_Z$jW?FI~CDzdi zfEf(ft<*q3qbyLT-FVu~6#6{ZM0G{NPn1(664zxZr=GGY(HN12&2Bx654%b4ojykRW4I@Aj9HTh0&v!oU(2m zF2F3s$$N1jRCH=jVeV|o>^mXZk4E8Q;$vU5XwTFyln0#p8?;N`Vp%ASyA%_|yuV{Z zB*!Rm^BxDXa`33`e@=ztI&17@eU)kAnw|)_E^07W;nP(ScXL__Vp90ZHcItx$>h5H zR2_CX^&f=QA<`jzrl9O+lu!R-f-uF=m>ZA2<~JKL|8dXxLDF7@UaBpsn`^s;2B{_HZNAMMHBZVnm0Yu6pz!^NFAeR zUnUI52l}(NbfhQU@3M1y7L@OTNq&e|QxM%ayX^;rk{gfXdTGwv-)A2q(3V{mb1^xK zRKcE6k3pZp;0lA&7VAbi>`zFP3wj*Pb=JLuEw73xw=)zfNjn8*(ygy*>e{1*BBl_& zO__T6(^!gIKsavW==(O|Y0k07*lH^`X5(1%_gexlD~b$;}qm{jj*Qt z`bG#?!hI^D<;KCw`Jcbxt|#(aRW&*INJyw~ut-az+x-M?bttW?n`aa_9E<&)1rad) za`BO7J9yO<3Yo!J?q)f|7Wk@MBpg=_#a~_aPo6%3mPm`GPKWweGK6dnQOx3PBJjy|%qo^aH(G)nKb{qEC$8uw1K z8?M71k5e%106c}_;-D6|@RumtztVwpYdM7RZm?dFHL7>mxlhR~rRzGi_+80V2L?Zn zNR=Bm%*Pjj*yxlNi z87r2tHeM0x=+bAJmAJD{4sQj_O-@Zlx;YT$-&Bu)s)DiCT(nj9nJc(b18U?a(i}e0 z2VGSJZjG6TfD{aYH=9FlWSVULN2lr7l4=QJzZXZYns<Qm!z*V^z8+W|LgpT&D9pj}jrkMH87 z!0*2BKQ3etPHWNRzNiLGC^lFSzJckvh_H zutYMqX>pFKxwVsv*jWGf!q(J+*o zj+5*o9VuAOlL+4$O|TwZDt&k|j5JQ51pq~bNS>o}I-#4G9qfr<^@5&tq<(N5lezcJ z`6kCYxUtM+$T;G^Y!fhniEY7^duDpVZ^faqO@hjeF@g~=qj|zoxbCV9N(M0H76OGLJ!U!50W@7g&iKNbT*jkjHfXs# z(70e>RBUy&(VM|kWjT;x8*<(($Y_VZVF2cL4>HRHu@FBT6 z%1+wNTas_S1()O(mhJ4#y8l?b<)HlDNy}ACImb|sO75$#nBVViNFC2kqccakw}1e| z=P0NQ61ZE&>YO_K{7L~M3o4^MY&D5lF?sD!BuDf=0nL6Pl^<3{+07R@FRDRhCI-!D zxf0?6g~YIWW&M9HM@}{-M#{{~$Jz3Ywzyc=(vCN{?SGnMAB{S$!t_&`7$G=p_{NaW zb%XWmRBfv%D))@ahpBbe<$(K6&p_{tF+vmn2+EyyDe#!aT&Mw4gQDC+z*NTqaEHtX z>~n0c>sW2?b(5WIaW@r0i~Ng)aN|-x+@#F^>c)$lokk7?V2-C8d_D(0_)p8^$@uTSBpw)J()aHvi<5Az+<4$g8kd@u?w_gH zbUUFgtP2|aYAC%FwsJn9eDz)`W#vqG;1rb~!1)0a(4B-O@OREguW4)$=``slzPoGm8 zCuQm&7H*Ag+BuUXQ8(gl6OSd)eB3wstkt;eH~5&tNIh)msM3DARqnLS<*~@C)%5ch zcs4c+xsi4=INWEq7Uw+Ea{*iIxiwFijTVdeZRCR-g+AR(;PzcM62a{&85=1hdn%aF zvXZZ<;LcU8-0oQn({nL$m4f;N-M6lo8sr$jUd2c$o+c5}d zP{+>_p;*6vaGwy>V5=4N^V{^!Gy(nqLcdP!Q*n@v#Jj6|5S<4*;LV-S z^tu#awR^|AwWuwtHF=ukM#;yd^%c|l>=S82yzP+`!o@r zY5T`k?dvR;#DH2*IVn!Gv*8uPZ*K`5qYydarOxfa&lB3+2O6akVfl02H=WwaDNGm1 zuls!|YTz}?9x}^fu$eMliS|q!0Y3CTELKtZImzz&sTO3`yAS^~(Hv*trRmyegG`C_Uz? znwo}$ZK_!aHae+XKVM!sueSlhm*qRho%v%xqU;Thg0C+YG8&O0cLRPgi)=$1w<-t= z+$lX`aQpj9E075LyCXVF*#6xS*9#(JX#Dn%$SmfE{;{wS$)>)p8ed$)Hory#i#>7~ z5bqOQjX-<-5%+)pS9~2BPaIWD*3HdDo|ZZo7Z=PWa+_2Vg3y6$d;NKT_t|IzP!KXlr4zNWtPK7MDQ1;%Wi!MQeW0491#9$a+q$MTy!n6(jR=9sR1b$#VbO; zkM-dqg||ua(CB$%1zI(Q%Q(O&?kDPawJl9?4K-=IL|6x92BsMk1$@DNou=;yDY{T| z2kVq34r(ppPIbxnkFLjYU3TBA<7OTL{GH!5+i%|gg>!U+ds>DxsHPPcokzO@K~Is8 zqi`h|rp>4_BVYUkN=LTYCyg4MXK7#aG2O~)TmllNk z3^XV2>P^f>G$N!+EK}zW4HMWOKvwk3H+%>)IC$fm$_{sI58q zer)iWE_Lz2Won5H8Q0Ham)mjcPK$SQmhNwJa!<{c^UV?NvJAH>3>3o)C$&=Gix{c@ znosB$4w)5$gyGTP0C~aEV98b+YIO?}essYw?wwSoY^uPEo?Bw zRzrUiQeb8x+#InFj4N)-7bc;IXIL)59?P_y8;b4GH z_f3&zw;{AhX!GC(&%>{AK1AE8rp~KOtr!cQ%x;7hhD@jB4?q||eLaM*yTBi|(P&X- zxc#b)lS#fFt69oxFngp-JEpdn>o2%&WP&tDHTUCpFbRc53C?yfyN2na=#t4ocXf%) z)_ATWy@{?mKC4PsNs6}ohp*tlNSzIip;?4BWnQD**Rmq+cwoZ;tVX0sW0S`$8b|MO zP7O5xYrtFAoDzwRK;5_o2;+YO^eb{E&e|bbpR4E__C)bt0uA(?8=6zXt+xO0Ho{xb zsbS{=0p+p63kQ@P9UdHtcfRT|7pjH(C8Pp}+uvw%4#Gd_*_Xw(n80`T&9Fif6a)Opk#$PjU7EqjU>^86p*a!YM7t7*6AXDH+4KEM`K%) zxLTil|LpAn^7NvlK@8LfD{p?;sF5d!zC|h4S18o0_6J)Is080pN5BY857{w{zq5BzynskhRYtUHTBD{6XPym5 zS&bwHdCvT~<80C^9Oh=9&b0PD4q+1@9xkrzu{Uk|$UehP`~Cjuqx;j+aW8LFn#Als zW>Qy9%;+6X;oNqqy=6zQv!&`PHTzphlnt#FWsuqBPg4lK{)*4BjXF?ZB2sI1pYTL# zuu?P6JZ)QOQovQrznC=7UQ07>u3dhqOst147>@?rzkd0tYwF&)_ijP@!<030%3hYm z&UxFq{TSdPZ+ED*u`NPD476}U^^{VUf~$WIvtyw>Ls!-)O+FpHhu+kOeO z#u{0-ZVRNv{iUiY`Le?y9KF5%M4^P_B*m3^EE7@<^NibfyzgojHNB2Iaak)P&+wUn zkB?HCi6x9ZIn%Bnz;zl>`Sc-68QUxij|#VqeI&Ke~4Qk{g)mk6(;3L zy$HVn8sGW$O`c=(tUJX5}L_(`(aod$;Bi~csI=Ep9*UU8XG@)yk0pW zyYHK}YVr!mQ1({XctLg+ zU{lZ+5ewY)zdqHPOuv|6^;YJ2xBdDfWObDK@T?CdD8^A@0lEKdtBAe0FOJIKS*LN0m^dwL!_MHfel6kGuY7N z(RT7MXZJVU$*6-dsJdNy#hnzXWj|owTy;hj$}Vdx%G2&jw*N~*(iDcNjx)~eJs&l7 zax>qAN}(#E707z$L}>H;4oK;C$iQZ#0nb`M^ToK#-+d}GGj-h>X#u!IPX;g7y6!eT zZVpYV%N_z7hzh}X9=aX1nWs<=BODX#kiZZ&lFH)CaR9C{Ow0Z~qh6eL1TIiJR_M35 zjQ3n3t^GG&ZyOb)3Cof1qLWwwE+tPSF8pcNnldXsLeKr=MEz_39^Ou1erTcoc|>xc zg!+Jec~^nZrSy>kRJr*m>@DB-xwcvi+i>;?ZSx+7wRA5CP^x4(8x-&Pg|}R>6|o4% z!iO~50w?OE!nI2W6E=^jdr=>A=V3CVZLseA<#eUn0s-L0F?x~S#PloFexLd96{$nQ z|FpJRD=O%F@|`1XRruHOU)T4r>~zbLbH+ZyTk;A8;B(bA4Z_OV<1fF1wh zw-j)uiY?in50g}PAN}BBH$CAfItN*|CqK;5P{z`U=%u2_me9$$3f$g0C@0Adbsk+H zJb;Yo)1juWX|5_C5+mA~7-1Fcb5ToXZXt19!;!QGkMUh5ay|CDZJZ4O|M^?S6hyBQ zU^*Re;{AheMF|-&qKFq8 z%U(;^%Hwf7gPXCTZH~aizNogUhOQE z5>@c2?m3cu=1V*Voj)KkxMhD{W#FWU8k*XLtkn1-@lnv}W+dVHQ+8K8mdIcX7rZN@ zrct_Z$7eKbH`e{se@HfvE|KY89q4?? zi{ZJSoYcDE#xrjVExd>Dxznr@L@A&^B)NWA#>m#2YV>PgGU+=P8?A8UFKUJOmg|Rd zoGB#cS14}VG|r`@!B~&efta*%-Ku$|iW)=_ zyiq65y-1?m8uVH(zT+leEBmdXfo`<*S~PgQtSwHOr z5sBR2L$+Qh_x?;8g2B|stD4?4H9*3GZe~n7!N_))bMXuhjL2aI@ET1?FNQ+J??*v+ z1!TGD;>}v#F9Yvden~_+3w)Z{eb;|owMW3J9bX$>@p|*K$Sc6J{&MuzZ?^g)DG{?9 zFAJvM`qlcg6`qcZ64&#p=54Vg@vpkTze9)KI^H$1dDvodTqUjiRt|&8ImeMPT4HjveW`T zFfbD#!odKRqy*p!1Z$le>x%!6G zVrTKHvI}(X{2jegWMD7@+F_!s>1YS92Bujs++1~Kf_(7L3DTro1Oov^1;oIwO4@-8 zSoDtfK3xCd?XgT)iQBcY$^zy_NkXzokejbr{6`=;pfCSxh@40YLQA=>KE{7abpEls zpwbHzO8zw*{fF%ZP`;qj{QqX0|1Adk|6C!|DM=bq%%dne(n_ss;^mz9Uc16|D?2mE z%skFs>L5; z{?ooB=*fXrjO`%{Jh>K6{I8Jli{vdD(lcxbbcZ^`<9R5<4WW~q4^1BKpfA;*26d@j zeoInrhsC^yY4hAiGq`H)i8-9IMJl+)tSv~5<{GN3AAMYv*LNMwT*jl_^Mq$oMWo@LFyy>z zQ1#%CexigMK`R22G z>?7QWRL9LHO(0hlU z$KsK>;R!ceXgxxZ29CZGvk5zmEJ+%4G(OBcKX4)yXr>_s16AEQGQJ*fb`RTgdTADq}!ucNN(|nSk*qAc+ zWp?Ws&)St1_%r!LdqwLFo5%Has+>hKr;$fj?$iFZtFhVY31Fg=Ln9X=+$>ek%P?&c zFZl5Ao7R1hkLi)=arN9CTILVPW^TKiZI)zoO5Co%p<$OZ+gbd-|B4p@%6tCJEv(-% zHy9pQW7_&EnQ8Z5KeWzwC|z>nj8D7zi5Q5qrv;%eJVmzNPXn443%5`Yr}B^zzJOun zesq)bDSzOt^&ZvXO1Ab4rIpypFXre}bs}zVeVz06xuv5&2`epic%J9Xqve5BLzyLc zghr)zru9KUeNjflpiNL(W0f#ga=UVQX2jl!r}Fe#;MmPR{<(<2>mH6r*liK%WwGJj z(exkF^5nSAWDyhUWjjBI?MV8=DLqG8SZc7Zuy;IZc=$fIn6js;UA^~s-dC%te^u#o z32}2j@cIM~JnlTI;v}QZ`~DBd9&QTFJz+UKZ`^0n6~eF$RGS~eT9PV4hkjVRTYIh0 z9B*qVO3<3^a&q(Zf8Gn}hg(=+Ye(AZZCcBd(AJGco(EzMY4vu8XBx5&Spp?)fWw&s zJ^4b8%va_=(K-4C`9BAFIPZRi_Ox4l#K;f*;2A!`dZhInnYeR%Fmd7fWaP~KD1)Q0 z)K|Mcd7p8><3Jz$3?b2jjPOW~_LUcHAp?CyMH zv-i=UoLupUNjd6~=W^r3fD3?5h4Kq@tmlpwo}7Tbh-a3|3=-kCOSBVc53OgKuqbOA z5;b#;>4;8NtGUyhK7(TFD(c2+DeVsX)1xsA;dyWASR>Zv$^!qveE9^-y{<($m~%?n z52-s*#Yq&#Ghboc$7g!dyghNa>vO%bkkGAmo=Jz;Ve&xB)5f|Lv=(n1kVe}y8pQ`Uc+`2^s6Oi9 zq+*9pzY#t5Wpd|^+#a92hixF`2`(NP+Wymeb2joQmZGTnCubSE4R4^7+k@7?W9?CW z*@g+wY~Hv(SHyLX7@QqaUAAxo#oPQ74yv2jb=SLS`<5GH4h`3?zDk~j?t?BI(4<1k zpUTpj^RCo~H;!RR+Xaqy*{ka*Ph%tHIX8r5N%cH(H6B-lE$glABi6s&OAgMT}8qb9eY(5MKfy5%sBVTWNJq)7pR}epV)Q4$2LLe@1I8#>7CsMBqC1lrhH^Q?u_1OO^!iu~pQAvjPn4aQF_1&U= zS$Q36qM>J=>Dl>f5abGR!clKsoB-+e9L#D~^dv1yq z!s&utVoFy{DjywM*j#t}TpYK>9jv64@yc6Lb-`cAsS__#)g{&=t%xT0e9Y`g7Pxmm z5y6%u7i`B9s%>nh_sl|N+{`I_JYQ#?(^Y(cCF}eeaoy(Xeyy6&?TO(j_|ff&!2NpA z^i0;Z2RlHrPj>=1%sS{G7Q`j2)t^5%20`4|Lz^&KITMq*?|5kSO~QzoBZ^KrulsHv z_SP%Qh#e99=znK%Alx+4O6&MO56f6Jo$$h3zu{r!v~(zn1hgOUHo-dje+v2AO^ z4Fm`fAPMdX65NA3BzUl(K^lSuZQP+D1PH+$f&~li!KH&k;}G1nafinH?Y+-A*?Zsn zeZSsu$9R9-G3rNEkJVMH=A3KVvuaK&A4q{N5B7=2fmJC%F^n{w+9xO(-{%?DNFOm(&qGKdX1q@%E}RuI>Uy*!m(H+On@FAW zW8=Wy>)kI3#zm+cu`!0h4S1OKe5X|ME}u!FAbcmeQdzXaO&KU()xjIzaGS(MZF(#T3iFQWkp<;x59m@dz1$r2`w#Zc88Nb>u!r1_SJ9E z`=?ZO}}lp^VI zZ|NsN44>-y-HS3n7NJpY=~-gN{%Af{j-gdxFlNF=dF27gu<6xRnCLwelkyP#y@p=P z2}cI5sB%ntzZlktuTR~H5ag0hLM*#P=!poNBjfG<{rs(WUs!+*`_0v2Ik5A@`Oxz2 z-q1+GE%ZPN(URJ52!p!U-QIfo&6PCI-K|V!!Gn!979$!B%ohaQ-(P(^xtTOQXuWvw)T-3D~{jNZ5_-d{Z9%xuJX6{8+IED^!ysPvA!+~+yI z{v#Iw%FUEagLS(Jj$#R(BumTGZ;&u(5?t*hC|&pd#JBbG#A*mGV{4CsID1lB^;pg* zAYuBRWAXm{hS1N1kwHQ%vYN)2oOQCZ2>;Grdklr~Id98hrXd7Qvi%VE1ZaI%w)5 zO~nBx^8MOxMDJ;Onm5{^I}tN<(4f-JwmPMfPSl0`$kQCK53o-JxX`5o_D)+%Lgf*9 z+;u4a_FH_|Y5rB7JE9%r_mdOf#W8~EWOA5F=tF@AhU&Vk6oSDB5oM_8ciFCjBn+D0 znGq|j{6k4c7K~JE71DN>X%IQ_P)GGXM#9JOxx`Jci{J4)zUQHtKy>Fv)%&#V;~g}V zu)v0G?lYiAl1^)Vbf)k6^9(Tj(H$VApV?@q?hvQx134fYr_a0n(6>BU4yO<0!@}zY zzw=3~+8wC_WsI#&`78V$iN~k4>hjR*%%d*w35QKJJZew#kY`1_FI;&8IMjhCSrjxw z^zi~-sWuUmKGz(z0j}84I6vOEUq1(l4#gOqQ^!=E4x-h|!xnoGiY*HN6mHs8`{lj+N0vT!#Wu|H{x*XNnv`#4wdivP$;6M`k~{=d*HiqBSb$e_@QGR^ z+<&*xQAXXWqu=F=8Q(?==p5MOeU0TGwsW#yVsnt^^!R7T9EpnKQvZ!39_qIHv2FK} z$$g`QPu#{KKWirM)~bHfj-YtKK>hnv;`;Kz>_@aa_V$}{97_=(d=StcmO=&6Am=*y zP{eyAK~och{2)w3dAq#nvQ)qdAK2WU@8{${HH@NLkH~s8QRz1}HjQ{=&L!>MVIqD$ zUiJh{{aH*odj^I<&NY6BUfuYhiT`fkty_NFSdxAN#`Hm-aon|<|NZIh1!jon?ayZ_ z%MLOWkdn6;3-soZCkx+s4nZe*L8k^Jc?icZrvRbxmx+QWJEC26t-fih6RcLpC;W^z zUI4b~la?EL%cB%@N55^~2#u-SJ@6n=LpsN(;FOjLgl(evhZTxJF;8ILx>hESkb za`wW^tS>w5_qCgc=TxJhePzmM+hO|#XOp<|W(1xe9PTxA>wtZe5e4pO%UqZSptU~g74Pm(|rQyAcz;>(Nyv<-)cH2F-tCu$ramcu17}9br<0jbVv(%#p(g8Iex5Ax- zEN=qtWsPn};eS@E{+lE_#xXXSQMgR|&jw}JU{LP+<3J^7glA@( z(huM<*i`piXv4z2drYoSKf0^B)m+eCv5#;AaCUUBuY)=c@Za^>J$emzU(G%n_=-)t zsC9?xvj*G**;?~wdfz$&Kn&(-m+3_(2sgUGi>&xC^l;VZkQAud3XRUpz;TLo@vwi* z&s){wMMG(m@X}I-mm6B zox}t>(S_X$mMAjGY#?pEeOzic-hMaTuVB@N%~wWLXai=WnZ5=s$K5wks@1M!sdMyb~eyncivgvTB;r%{seIC+^%wwU`eKU>6yu*_?^9U(Iq&85 z$~If~p$L%TIbL(46T3%4eZc@5fz3s6$O${txFW+I&yd>B`{nCx=+CBHbR52+T}7`+ z%#_%Ih6K*$c}0O}v(!P$jHb-S%z^xa@f4pq;#{i{XXRdTg?B|KoO83*$N=Hy^VB%J z5M%Pe7R)R2xDxzlFX4kT{iob#B!)yq?UUS(tFs`G=yJrl#9PM_ig1PbyFGl53zKt{IEHlP^i1E2 zmcf?|&l|UfFAsr!YAr$q-z5sh=Web+K=ng%<7Gr^Ta1x>!{OQkWhnjMvuwz`qe)Do zx8O$ob%IFuWING-YCwQ9U-MB8&FLodk}Z?Eay5%UxHo6UnaBx0$@|EPuP?kMqf*OT zZ{!sHAgR!|Nn6xhPets6agro@hwpu;h-QlNnzS_Q94;-C^!YQ^V3q*c_BBC-*b77?Ab?*E;YsEB2b7*#H zhg6@EU)i1_{al-VtJ@zz6FX=w)C6Crqj$58ZZjJ1py7laO6NZD&CM>~QgcKQLdJ&* z&d{bGI10K4Z$X3(!3R*96KJMHXV^JFVczfp_gsabBxa}|P?;=8MnmK~rEJb+3=*)M zpzwyYBkqqm8bjOeD>F|EYoH~P1h7ocjTYYM3V$N7_-N*zeSLmMLZ9bmau-ihl`Zvs zcP%8R0(36>RDs`&QohNU==P=y0dziy6?0Ft+3j31FvP^Jw(w?zuOt~RzKY!e8o#Pl%{$F_w+u`KN3P?L=VD zu^ooLXtB4Rpg{5BIJqoWW#!dkt54FQ=Ci_=w`wSwpFR*8tZV%?u$pxz+)Xmkv#652 znqrSquL7xRjNpKr4S7j7GkY}1hoLQ>m_wXaL{uGLM5H+UpgL3&FTRni>ApJizLRfx z5tFn_4!k{gqy&O9+d5_IubCmG5bT0YlloDq=o1|W*5SGU3vcKNUfGT< z)nS8}j9e0rZI7*j4k*nSG~)K;Suh#gnw<=tE6&`VIZ(VY72gAs6rJ2-&GG&?f%j2# zr!UYqqY4%2L`__Q4#$>*Z!uf5esKOPTe;V%nr8M|LrR_CALdn8fwysngP;g%E_3Ih-mi{dgC-HboFZ&)*wsh8O64qz(-y^@e4lULsgMmL92t*v)=!(GEZu}48KZJ%RQ3^+8D`>;P*c8MC!6-OG~IGF{H|)EmD*0N={00U+tNi2p0~MRy8~ z2C~zj=J31E-WAa=znLQ-<2j4&RcH6S6X$n;T(+C}PxxxdgiRbwf!xaOvG6D7vfq|P z2Swc=NAf5?(Iahf#eaT3 z1%u-RC~n%;jqmV*D+k9Bm=pQ%R88sw%sHn?OtOcbGXF_7Ouo3dg$(n^v>5(o5+@O$O#O>QH*Z~%xTp#mIW?txf*+q{Gt{qsxDWCfo<01*a&ZrEb!&B7Wy*2LfD z&H1gS7%h_-v61KAlcIyc)rJR1b-l>{)#Kp6fCqrVp-y4unE-V&uT7h7P%0q3&WM34 z<-;#rCvE*|xnm}zFwg6+wnL!qitijai86njln7WIR_b|d*x=}5x zSs6#JHk`X37mr!}bd5X|?N`;h3CYbH)aO{$J?`_KZsbWMQU_pU7`_Z_yp%I~i!rtKE&S3t$s5jb5fnAtXjLM~-4fT-Wu zVVr&!1RB4ZUa1YTHf_ zC|r7wEC7BE2*J}X7FYn_pY+j`kll2z74F{-BEL+#MBrYDUQbAvR!)HPO>}nZj!u{M z$+&Hx`$LIdBt%gQO0v;6X$v&==G~Znr|8MZY}Y!^$w%DAdY4b27MJAA>o z+g#9vqRFCvdLCK21nk8wC41+ka#{)!zVibSO58xDGt#NdYKe!5kmcr|?V?g&Mw#y7 z6IZo6B|tNEs>>GPeuNU<_T0mpvM4$Qw?RAg1%kDH0=@8)9dWh6aG-ZmGTAky;61W; z=3LpV=b+(P$*}+C^|I1WWuXoTbMiqW{uR<;^O!@tSprcx-pj@$cHe`DKfnb1hu-?^ zg3~whceL8GS3Ne$56xX=qf^vhwg#4tbe9bek(>A7x*7#=`Z_&d0zURR8m-y%%D5Ws z@^?WNfUkg<^@o;oODx_%d@--4M5a#ZCXB?n!P;HbyOa-<#6PU>N5yl!4CsdHcwBHM znW{q$U16%TdSXg?*Ot5BB7W2(oq0qPNX={yX1#|PUTo>vHh>{$z-%4QEGV56Ejnq1 zwD4vgGq`A2O%R*w2+QdcQ<-hB&d}S?DJa+^(Wla;=RUkE$#PPZfmT4DhuBmN2<{(7 z?UFkW_Jpr(+}1DIPuW>6hU^}-if0b*l@5>ZQmM9WUc(83!shu+?dd=vCRSO{UXKDKJLCiJCl;XfR%c1DkDdbx2| zVCuSLv%ws9xYQgM!1?O#E-FCg9p<;6H3XhJqc7sWJP-(UyL*|Qgcx~F`7X46^W4<{ z$XCG+;KLku*7ar~`82ZEDtfi0v^P7I((>IC>d0mWQTgBor1pK;$fNXhP;O{#vLyPQ zu~CUxI^DMOHPw$Qtu+z^%^GL`uZOb#R56xb;m?E0yQhG^Q{nw#U9-T4#~`1K?!*G0 z_OcNS;%2efHVk#Ago{(2qE_*sI^t5gA9Ph4k0dwwCplAs_d&PFejIze$dz3n=$P!yhI{CGpsZG5AlAzZJ9 zf=RYog^!eYaf5NJC7s{5b-6(mt-QukfGm}t_i&tZn@^nevs3U)b?QiWjWYEe`kRkZ z@pLtgbhus{PL#GvmMi%bF^LJom740ev>Z>~9w zosMdF+@D@^NA#JtZuV`Z-uxUn4kP77Fiz&nW%7FWP5+2VK|&flNosvD1AP|)Mjp;s z+f4xr&l8)4=!c&nzk;xNLnh`yd8!lgxwT|(=wan?(~OVk9uhHOl(T#YXuUp<@cg`-d{x0a>_XGd7{>qj zi+H$O@br%@yWsh!53?zMmQg+TQ%r#tgnaE5{p=*@_QtN~ZPXqj#m&xWP$!N$-?Ax9 zDjx0KY(x@cnK4Q9^g1`SXTfWSSK%cV-I%8{Pi(~lHbtky@U!dQh)!p!{!1=M#`BJZfm*;Ca8ZV$1nDT)h>;kpDsWAJ-SG+g*8V$mVSF(8;(uw zWzPej#0T*wR-XA{kiUxgx3q1?Tadm+${k~;7(uJa;0@xN+>KX!Xh?Xb_(p^G&65_> zsDF=C5I(Pe6P3&RdG3tKt*VYNl=%J7TM~y|)&L7C#=vc%e6fVUK}x{Mdy|Om^2jyg;8y`sWkNn*__^$&6ABTl<~Qs8 z&3Ws`f6VERBX>MFLH$32|M-EBS6lW!lmBCc#sKO6UjL0i|D7JUMY^F?2poP?1KslH z03c^F$)0c)cG}#>NgYGQmeVil&uB_~>KJoi7;@-@w|wVi_HRzF`{F;NY5R4?m8;-K z{+ktlK4eT?n2#lAomI9Aqi(bi#(U;j!52~VDUb=1ST5@ed;LM#;@P${z8%HukAJZB z_aSV7N4_n{{HrxW1l0JMg<=3)KW5VX zKYYEZ)1?@H2dsFq-0p>oa_QC9Y&?ZE@=*ot-CKrf${#0m89uJptw4$ezUW;%Vde-p zH8`fB&EoHGLB;>)lK=e^vxQ2`pX=*4RfLIj$^Nsr{(L)b(?1o!?*adN{eMr7F{`!B zs)^)@0}TH8xqvgwDjH_3Ksr?&^zEhF;3L?<$mjdxHopyan!7_A`RlMj1sb)W`>w#d z9{GMLpGI4Z;hINoW(unrQwSQM^7bH6TbXIW`yLY?E(C>kZmId;Yz|h#0aVeSg@2XoI_#%td#*uFJPOBx21U%>8X#Pcm30wguBmnah=mQ78Hl^~gO}k6N zMs_}Cuh0+_kFYRLmp3P5Ywgn_FImQRVvP~pBTkPqTYV_B2x1G|wW!tO!seV_x6rc~ z`OwHP&dYTfBPt!>55y@)65nkQFcXsO#s8iR-a$N04xwNj`qaWis`wq|$(etEi!~wT zlW5KqF9Ffs%kLbZf}_7;rS0rnBM(gwE{!@PhnD;Lh9U zP~E4&mJ;M84*l(`dxrjTIJ|S+NiSYB?>}Ls-cgSp}DsE8~oK7jZ)zx`*;~EGmGW zb4uk;PUSruFtDP^bEhVa!E6kpYe5+=Ik3o)>$|X>p(9eV& z)?r|Fj?on8A$v2SgCQAS-=fDwnAD*2snR+4Z z;LUw~wNkFV>togzj}AKGqTsn81o)`$>jEJD!>_O1mgq1A;SEA|McSWb>6GJ-0tj*3 z@mKLldO8k>n#Y?&Jb%6FGZ|E>JE{|U{_T;D=q+|nnYiNf&uF@XU!>Z^f6rliB^2TIuq`U z$B%gA=B&Z)W%Mp^rwb>TPAO$hUg_>j7O=!(eX$@QsJQYHjw?TenZ+sbt#5uX_qFTW zdh9R|=#>-7!@*4HF3;_ii=w2s#S=(QzdQeB$~Ol?@h2bhVPX# z!Q4p_rHhpaOVr-Xp9THo<3&#IJr)49b`~pB%*_?+u!0)a-hy4w=B9JNuVMM*d(&TW zW>Hr#TmffabX|!lkZ-4x zVr`6Jy~AQ!HjeHs)-ye$WmF{ydo0uYmNdT@D)slYCsYLQq{}OD$jJAW7rFfjYD}QRAlLV>A4Qg`Olhe51eq4n$Gt zXJhCkz%G>~MwY9Rt{NECz9J1+JsGWe{aX0`J6j*a7d0k4V@|T|Ir%&A(ulbe22PF< zwy|#1W<$w>SGQC#&VA=@C1TmXIejV>|ND|$>7_F9qoRQbFfQKbpc_(1i9iH_Hdm{(v)6+r zhX2TLu8f1VrmP8fT=1j!8c=u2$pebH?>sL^U!hzcDr$qU_*s;ug6&9M4Hu5yY?jc` zw=(s)e&yMkY;=hbw{~NLsg8r`(d3&exI2a-cXFN~Y>Du)&5)u2D|x0E-x-^b?6iwJ z|2E&i?HeuF1UhL24J(cPKuo$+q+x2|-kheLKr2P)?{mehi7cyO=!#aYpC(iMGmR~@ zOKE&tz8#zeKZ7;{H0eE zb8oY71*Vu%TI>O@l{D%UY`nBXshi^v`h-~8n&MGX4e95{2?hEn(@l}XBp@7@7Y=X;uU^6Pwco%?|>t3KVwR}eB#8cLx&g6qvZ4U`8!yWEJMw^5x->$pfkhyr9 zVr*QbM4C}Wc9uUSb@kSY#et!ns299@Y6vPLM-E))e06R!lmq@1U*`TRA8`&-Z*kE^ z28r{Z9_-ZGcmBXsjHcwf-y&R##oRd=o-2O!k?9k#Sku$~;9VFv5%1CP*nv2Q82)t2 zC-@Du>|^xh5Wm~IFkDH|^RffgE@Q}VCGQg3yI*^@%?U(TWJKM2VJcT~I*@44iqf*n z_;Zmecj(fepRPNW%SUwo#Snulg<3OlOKMvBTJS*+>n4}Ugi3FcWVQB;NrHCGS0`We zXQy&6d}_Z$L=~f$xp|>sKpb9GJ^tN2C+=#+Nk?$ zy(AS+{M2izOyBY3+6mfP>l>x3`5I-qI^xG`W>JBI{a&xAyzMRg=6bBbBy5vht9@yEC*c-o zQBlV+Z z&hWfk)Xs!&DuV?=O+0##6U^@B6ZHMY;b$vtWWW4;IOs@1=t6_6GkQ*8vJse#q9oKw zN6U|%1|u9E+9c&YoUlp!rnX5ePJJg-Lz5;oo>jQw`i*|@9SODyV7YtOS{>t=t2iC_ z;RW^lB|NbL<(q{mHMZODG>rmdC@)XA#$HueK`j1sZMbKf7{$;B^eg8;YeLj93y54G zh@aP)^Cz|VVnr+lD6fK=NwY;5zMfnc$3f%Q-7K%0XPFaAPg2|#_68bMN9YOXZKQm5 zMsR(C_SL68HmeD6!R0jS(p@r*M)>{Ob4H-n`&Y4&6N<4NcDjT?pR-8&TtM#rtSr2N zhTEkN@7pt1&XQQ~ggBp{n+#`Oro`#sMH%v=$tv_)kq2tA>s!nHj=wf?+zZ9Lh3;w( zK9>lv%~z((E#2@mi>U_0{$kE>R&kQ9zkT&#qR4j_;C<<_D{PP0Ln|{#F%>-GrSYvp z>s4LAVL?a5cztD96Z?~z*sq!e&K|%6HXEpq`T&3Hu|RBZIMkcBg3S_YnKU3&tIKX* zXvB59pz4!~5jM&F;)IywKt6vdTkmBu1e}o85y$&7o{PQeTl6m*X(KQ=mVOX0yb!XZ(&) zn@stAh8Nb)Za%h$7fQclrjV@xoE*)@2=8}^C~noaIquVk8Fyr*l&(W4moc78W(&6w zRi;!+!TzY0Zy7xxo`=IOeqgMumS_(XXN$U)_0vQI13z-_$Qx? z%L1M%S+uC3CNU7d7_NaTLO|L<#pLnqNjKVJb2>aO?b5-U1>~_R?=}I;c7|9BB)%CXKQtebb#)WxaxPO16$^ z_A}(V3hp|rBc)tJaJq8%gy!-sbXljC>%dB?zeiz8|`zuxtnGg z{i>4Ak^M@1n#cW-=_bwA_Z6}N4=m^gnqWxk;jZL0TALiwHNs#tSGw_hjs{W2#E#Q_ zsnJHC^sO%|IfYCioRE275I~rBsRt05{yHUgm?=<=_f1mD$v3sht%9S%7gt?B?WOLM zJt377qVMkMvL*Fv7GusO-lj#EJ+k3fUcz*5-6dPw=>?k8Ox%~C!TS0~3h7QR1G^SC zoc&kuch8oDUW!1LTQ?&oIC{+GuJg)Dx@#Ho#NTN#CBDm@5;lBaA&44`k->V!uV!bg?~T0_nS~8Z_lW{lnc{VNS2YvM>EGJ7gi^mLQmfT%>$pT# zdGx)Wdr2h_lENxLFq@Dm&Cowup@0*-FcGZEVixiy8`fO)o(j+hDI=YMG6kd-Cw*$! zz4USPNKMFb>&;ww>Hf4_=6%5UvDp_>-6$n8mpe~QPOT&Q79;w!w8Py5{Q|u#)TG6+ zD0dARwJH_?x832=HpkzKYV5giC@860Esw%;Ilw}b?V-NLeH#wJrpcRl16#Zx*03Ww z)8LTep!Iu?B>ok{_f8+Q&Yiq~x`arTv{ID*7#P}AUKD?mD1VEt+Dt5wFurjl$0Wl&yB~`^>{5G7?yhkGBgE@K{mhif28}(=Uf@**${PX z&4vhx1z%}IcQ}LK1;A&_y*m@;(y|5S@{_=bEhXv|q60WfzyjP#y~$xamJ%>DWZ?%gr$2w%(QXt=#?k-&~5C1&JJ)@9m~ z)ya(O)q0h)(+{eMoOdC9hrB1H08z+mgan=qB+{RO0t>Uj^4dK7o z$i#tTQzz|P?BSt!nVlPqNl~7t&BNVq0HO4T(}L5UpAT~0llecUXvMkcYL}IsLwTyu zYm>?KAJ3nD`^O$ORrTQ6uT2#rQ(;gw>#)BIaO z8`aR;A1p?Z>Jc24Z^ClZ#*rSf;+!l!iGTPnq4`$w>B?A%JIIkUgMiIoe5_FZ-rHvZ z$Us&@;KZi7(>ZzU!ik(1U0R8>n%4V6IRk4SK;F8uptxv+4*6a<@n+K-c3baSp6$J{ z-26C=&T3JHljP6r(gwQB)fmlLa$|bNC#K<+ZOd>?GJGxidfPCc+2+9dmDAA56D;NC z6>AGaA3U)y7Ufh|IAb~53{cd)*@5g*p%?q(oUXWJk~278orcSCI%*S?ji@MH3AOWi zKorsClv7KyUsa0|bG6pFpx3s{=X436$R?^>dn`u3*j*!K1TEldTelD;^R|}Q+_WJG zI$F{(8BsEet`@0XTD&hZiQK2(LWI=EAbV&5Ps|z<(63S3u9HzmC;Rc^clF5!Hy^nf z>!NBcK7r+#`fwv~f``-F9nU`aQiowq=9o|``TCSvT)R^M3OxMuSumRLUpIAYz5%$E zn`|q!sr<#J^`qkV4A6Vd>4y#`Ex`bv7GtA|-3K3}@=;0)pW5QRyLzJ9DlB%Q#4CIO zNwmhq#lLNzU%B%Dy{WiU)`~WnnwRWR#4LDFWsQe*SUwB4nNk9MLj=8k?o1>jH=H%q znmUF4@4(x5_o-I|uy>@S_0L=aK#PfIiraJ5#U6jd_F%RG_wKYY0OHPAIKGtE_9b0t zuG)z8$0s9G5}ucqhXGxTF;3oZi(uO6v=w-Axn_ow^BQ5D^O56Xa}W2K6yJ~94N%gw z@M)mF75_kL()#w}KuJ;`-CpNRm}5TI=t0@nXC@E^A0Ox&ANNas()P;Yzo`Q4Pk z}2!BH&tMV3W<-0>V-5%oi87& zg~nr&J6F&Ww@oREHyxm$36d=huUz2k93QtP(g8y{G1<+DXSQRmN`_QmRMo6f z+{ydF!19IGDTbXIEK!|TyX3h*Ah9+(!%9O$fXebDxMKN=m8rvev0-1pNt)=$Q!to zlKet5uXj^)i+As(Id36wC~NA+9>rj3k&((FP8h0)o*=vMXVi+gIf=X2bMJuFnyrQP zy*pOl2gMwF@{H&GLM~um#53%lBc5-!ZWr6r4(*0jq>B@|ENJ&poL;gzl`cy?Grv4F>znVsHb*8YXPcTSX5KL5yJVyZ|I1iDsVN^W>lF?cnHIJ+ z-4fWPl>k|oSldg*=fwSm-u7Qn(`A+d6%SCt*WRB>3#;l$&(@Z}YeK?tSv_rT=U!gA z$r&Gw3Vn4Y6+ZNB9M`G0PpwJH1{eRp?o?zFrWC7D^2`okjY^zM7BlLMNRbgAYfOAMogLx01jq z-!ml8@rI&Hn4zi_ccg|lLyiNMQh%G$cpPLB-KzX4Grr5Sy8wMMHyOj&wSYmTE%;1S zE_#Tfu(%&-Tj|20@#`1#FAw@sIT6nVX;;O&@mnK`j-$mbpFt4g`E4lN@b;rRy%?-c zM#u9wg3I^&?-Et&IR%w}J2ucb6T)rfD!TMvo|&VbNC*A^*G*Bl?7J%ruG%vEb+9;v z7islDoi|7*0F7ev(YkwGxbd5c8{Oo|^d)zSw)~}_-f60TB;5Zya+LJ@wU8(Atp61j zdh`b}{Cin3Tm0|!Kk4D8Rq|>Eflh(KQ8M+|zno+M$1PnAeaKE~x0oYu(X)#w8voxJ z>>Sz?qMTKbeeNL0TCMRFCHe`9xBF>-_u(bn`;dFB3Ac^xZ%jDXu%6b^mNd_$ z2AdGg?Jl|dt8xB6sMSkGEX%B1sZmo1pF5bJ%cbAD3qt3GJjDC^J;t6~YgIlqN08V) zsIM@R0kj%%aZbCU{tHyW;>Rq#{mckVZ#|rnb;n(AY<{tS7nDZ;T#qQ{$MpXD(_B6c zl|Y%i-Q%9j4xAuUNX;OLz<&Vt+-_eq{|g?zJWv!)`!}-WnnM4F5%K?N#Qp!l`@4Mq zU>JBtl6nZ2x1ypS4br;B$RT)D~%=wI>*kzX|U6 z@}s6iuPHH)-~i`utLr^f1ga6v#|jLLcN2*5)5;MYmEJv1ej1l)=`AXX*KxOi@b1CpipR%+X0m1bL%x|D!e1$`9 z7I>L*sd;UF=^lUNNM0Y<8wBj+(UL4Lh+y4W;+l4sWlcr39p^_%fo!!plk2 zHWPp!WdK{Vh0pJHNwD}~KdhOthV35J$|8YwESj+&$m1I)iRXNUMo9+I5d6 zCPjYg`!CEkyW7&%a2Nv18`-$A3pmD7-X00I2$kTmxU^I*QwzI)W24q$CS{CImO90= z(ZRXZ?5Y~6XL8j5`-pK?pc7NoMN35Gwr_mru0(ozxN$a@!N;-7m;HT{;oouGwBM)L zVP;tbMe*3))N6(CVaz=S)A1Mg$YQ;!e(`PX%b$Gl98)tU`Q#z3wiV|;ooVgu4Pr7% zSuJ!rdgoPUs}4zpy?E)|F)`$f7+->^i4c`Z>Tmfo`5WN`#7z(JBJ^ug z&kb}it9dF;cA{Sa&dYW!JZ9vfO9J?-a!D8gZLFdk`-*)PIZyr(N2MTMgx$}Jqi8>Y| zD*-mAG0K95#Hq81I64bdNJdzCgeo(lmW=xLftW9TDO(Jp!D8zFTvS=$n;n-DAj^qx z6IQ8#6eMPstbq>pgRR5sWxi?N(S@3+HE^KdJC+%nkz~q~2GB&@{!tyWZP6;i^fp4F z;`ptXfd}SVAexga&05m=cgJ?@Zk-P*QO0$D$$fYldBQ)pb`i>9q1Fa8f5EK*$3co2GS$WQ#%^KGABd6(5`Quz z)oo@9{EB#>4mf#RVD?mCX*LZ^jQ1%2Sw~qzsMKJw8Kyb_oAA4B1jgA1BWAB7tkEJ* zEem*2&p96ft-t~b62{cD`f3QKcE{|dQ8fgW_Y_=cIobC=1%6t`+2tw#@fe;Ke2no> zLAN*ubq?~;AraqtY5J-1{xEkUIw7ummjvBfek5obkZSV>tQpm^9>xjldSQ78L8d)p z#wy=<`1ssA=(ipn`}#If$QP2Ii`g!8Yx{ph7cx#`Y<(Pbf-+ZExg-CP>F1!1)8p z&PSABV&7fs+D?oodXqDvRG2B2%RI{d%e7`4Lb`-P*b^dS7uoF<8>}yyPwgsn7}cCK zOuc|!{C{lvVHSl){RxS-_k%|776>)!9uy@I{u?mGmtGpqTiQChoGowe@8tx)K$9<7 zOkP~^u0?rWXtZXFZGJz{6W9IL`%?FBSS5iI9;beiJ`2&O0axXWOX4>nQ4A)3jL2wr zuGXpY^FCX+a+wXsg)<_N*mBOgpj4f~nW@^tC&fif2`opegGBNVcqa3?EiPfd{E%CA zz_)30Ks{(PO%96*WkgisYddzHsFdwClpCeiTN$)K>0x7AvvMacaX=SrkxLQz%2VIMU? zqc24qY6Lp3_a$SpG4XQJw31f=bG44SIztw)Ps7FM61FB56};~^PaZ$_fBL$fYdR%O zxq9{SyM}P1sF0|fgG~DuXiS=U=5dd(?Y9VK0?e(t10I5p<@=;xRbQc(62?DeE?@8T~UepSl1)Kr#QZ-E~0Sj?nvk z`)qA1WBAieNUiWR>u+0{?xJ$YrPvx)pSN&DxJE*(>=DK%cUgYp%0{?xC7aML6+CVSs8L0~b^7=`cr%v#qo`Hj1rbM>4Jm+|Iq)K~DINcrb4#oWNVgV+0o# z6!^eOso@Uc_pN`dWo19q?a=&WilU(kq1gCZG}&=u1-JjxX_up0h-*$b|)rcDipY5Z7}3ATcv@1l5yL`q}7Ki#k#cT@3T>#>!nS;0kK`cP>Ww* zjrs1AAm31qw!Lp{ro+e_BT4%+@iEA}hAL5-J_#G~;~a+eDJRk1l1kFR;PM<*`V=;5 zcH|ZO9c|Bi9YV})ab^GQ@dPJZtk_ZZmmk8I)3w1_!?~kk>^^O(e;}n>LCsYzjB2q; z?_OzzhQ?M}GuI)O$glUk(+@A*g(bP6=_HitQ4&A{;^{X#V~szF_*k#MfjK!iKP!F3hRX7?I@8y3rL&bho|4#3ryZGxnZ7m|2zhsMtA_em*CMn4z=7)86FxLLJ1sWO#M^r7q`tq1}0gOZ3e7tX6sIY!m1FqwKja6C$l)A3a$2~r4upz5W=f|F(UiAmvHaRvH(iZM9TeIc<~ zrCvtslM@VME^=sKzo}g!P0InukR)v0J|X{fS72bH-bUs69CJ4Q1E&by+V#j@Rn>~a zEL?(@r_pqK^GI8>=Y4Soo#tncFEmGKe*wzx56>Rutczss+BbZDYCr6J0wpPHbl6&D za!KQTMpOP(rc38L*Jl4j$xE26<&>cK5)GQJMLONx_@-?pgr%uUK8qI9Bd#Va z7)@Ektx9~_oomjWhjSOU=H}Zg*YkD7H&z3(@U&p|1cw(qO?F!9^%RE$n}35{qYpNw ze|@ZC{ZLVRquc(jflpB7FWv^@IfNV$YOl~1B>|XZTf8$@wo%Y>sNKg3UU}#yP|(_m zfpXq2GrNS_%~CFE(sY75up4`5Jd5W(61i@^~6Ix+tCsz8-BiQ2cPQ&azky|;|2s$KtuK?J0gt_4bmfOLm~Al(9zN`rLg0%@dE8fm1P zMJ-CYLAsIdT=aUU&wie*`|7%;}1lX>6sy08BIF7%});c`d9k~yTG z`POMnkhiqk`gJmwc^9)aL7u8Nwm^T4T;dERyD_)eOQy8gn?<4|59(Z3bo?Bxa!$He zIaUwfELZM^uDiv;JA2%1atr2!rd^7StjzJGR+>J^NKvbpXRW@Z9Nd1A>OqcqcWjD) z8ymAlyf@Il@mSmU)$7mp4rBZ@*7_X-83tQ8qA}5B5;L~9F+ zJ2qXQ_POVg>LVZj9Ct2kXNr-3)jJC)_I{s)h_rFeu*warbTE)N+_-iPheY2bGB1T! zV|n^{skY|M3QrN2r@^a`vv0!_!c(@JV** zw@MpNd*2w$#wIM?A|n6h?E#&mwXX{kB0i<(+U2V!?=YEEzr4Mvh4&~Har`jTBs9P& znhdBDKqG~)R`N;*G+-8~a#(m5?-^|+u1qng-B6jpD}kUf&vF1I?s%uFn7~vv2!Zf!b%S{dX_e-Fsnynotmfa)9U*Bbw#p7!Cl; zem;xRTSIE=&HmJj>~mHgsJ3kK=r|JLwb^7Lt7|r1xpoSis?(FvVlhm zDCqcE?lpWnlHOKt3m>Yc7sz&GiCyD_T`>R@V7VN*t8Q5)Asj3sL=RUl@5P`4Ih`_pgo z{BJpG1ePtXOm6j0gD;syS9>+`QMHkVHXG7cO5FcWSKkR(1EuN@bA;7QDN@F9BS3*u zw`ZgvuM}%;1nPZ2AU)j}JF$H@X7GKepzC3tqnUV>#G7BGN9L>s1fZbi-tS=WBb9va zi=&kz(jD7SH~#tidnOTVXR%A}xw@}f#|9n;8QVRb>;;xy2mDZ_a_SF&ve1!C zEJ%1SoIGBkq9$%V2F{#XGrw6}iXQOg3p_WI=$4755wm{FG6>O?`KxHileqcd@3c^P zT2hC@(qjHhJhy9+m6pAB_(U(K*<;Wj(!Ax9y3L9JW&2&y=PfPI_w@QlL`yS?Mru^WucvS{9D7xdnx;2-?(ff^ zmNH;jE*XOP4DIrN2fRA9uj8x{b@djwUlJD~D1jeK$ zLi|Q%*X6uj1QaC$Gz?I8YhQcMH>L*^Re4;OXyTQMJ@ohPC3VE-vCer}1_?`oMgw@& zbkVsn>9ne-q2>nwKC<^VVB$)4d(jdo&5F&gawVVXxBkrC=GSL-p#Mra{zYiRGJSw{ zz_B1%S5H94X|p@LDMkw5b+x)4{?!<|UYXanNPUb#z3C6l2@OA7oBT6<5X1iqN*Oam zj9MJ$5GYVaf9QE8wUdTyNw?UR3%&*LB1C`S497y=8{`&Y{#%Xm3pPkr1;Yqz$HHt(QkD=|VtcpHT#R)THAadO`UR49L! zLLv}5fCPLR?pw~21lBM(E1nEbUN>3UQP6Uf4^bd=FjVfTNJvpeYAccDR3%W}Yxn6u zmAfs@)@Do(aUz7;l1BisKe|b|rWj;Ky)i6yq%U=ICcG0xD;}H(nLv;D!AM;(?jdw@ zB_QdUE|aLxwp$*TxVL){Je)U54j|$O8d#h7cW7?4pZ)#$`aT0+F27VhX)ofo-m5=Q zjDByLU2xh_Er!B9QbcuZ3rvjosdFhjce7J1utk7x+KCjB(a*+&^l`aAL>vg<-eeia z&f+7q+?}!ce_9ZDX`S`Hxo3ZI_1xT5w_G$ZbWw403dPnd_FEhi`QAifv0c?Q%?9cT zy-LxHe48~R&hFJ=L{H?L_$~RCu~ZL~;BTpNMCV^`X8=m7ZB8!dd5ZAA%71C3$Wju& zN})K9BKz+~Q+An9=%wlFEc|d(wsWr}1Qgy$B}!Kn5dKKzX1lDvIs9C|x~S0kI((4l z3s3CisIdxDcspF;>Ss))H=Inh-@*KI^gE)de9zuXp-Cne0=81c^^*{MzEtV_zK>2!Kf`U z7@suwr^{el%@%;90u|#AesfzBrzF=x)5((Rp~}m^_=+)UHj%HGL^|9)3Vx_~lzTz} zAD5c=MsPoj_ldt?hEX|3d(q{+W|z>^!cR%DQ`kU2BpTHsFe*dD~$f^*TW zP$FZDaJk)qN_@V@?eaAESaAH^{c4)D2A(|AK=5=Ot>VO_@XdYwKjmHpWS~-RyaG2Iy~cX(>OtcL z=ZGO$x@#X=Cf@dW_3@TsH5q#|G*K18R{46+E8Em=RK3Q}&zENP9cJFB!{@C_$%_OY znEab{mto9&iNfW}=hFCB`RV0?53b$5wIx!erLS+#_^tMbVWw~D7XiqPs)1vFdxtd zU~}b*Oa5Kr>rtu(p<~TO2L!WMr$j0wz>Rkqkcc0_IzC2 zWcNcNJ-pb|*Rp$TGyBN&YPZOb@ilHudUE$jkGs&V(&ttq2Bk6_ms{%iuNhJ$9dTNY zEp@7k86{itT;A@00t&gd7V!wf_>77wSu}XH0KAgL#PO*#6OQQd3pYKA2&MFl?KTB` zY;2KNQ%w|nJik<2s+JBOdA;JK9R-Ezw>wRDfJ-6)wSGf6p$hwS@URX$Bma1>9#+rM z&7VTMd6WHXZQLFQBas`Ukh}YCoS$~A@=327Yk}U@S*L=*D;$NK&A93#J7GZQiYVs7 zWwXtc*y@Iz>UVAZLwUYV`r&Q!v)j(g>q;aZxRJX=?`j;4o_<|!&DN+NHLND%h`i4* zDmxDz9^ZmTR&WhDE!gYzJ9s@T>(-je5*qR=b})esCpv+^7v4`pPC)brjS=C%sHOWd z?0oyush>1`E|`>}HxU8DD%+e!ViaqU3M&bI+vN47w@#~Evo(#3QKwrjlld-6m zaxwr&vW<27F#*JpFs)&s6WJIyx!F1@t8lI&)0a4qXvE5?4-4geEGo62Oc!7iR z(B_D!-kD1Aj=LQDYE4?MRI$-CZ}e)msWjG@VaeO|^0pvaxK3=8hE#|zRq)fUhQkZt zrJi*iCarkpMyTYl&I6_QK`q!f_{|yG^ex>T`zcBgqlx1L(P$N?(%c1>n;@h}PY||Z z$zt}_SPNQwKWaqds&T;&X9Ohu9S5J&HBB`K=V$~U|N2hc)~nHXrEAg??i<3_^JF647bRA05`DZ| z62rU~I9B8k8Vli?U|+?W{FloOD)pXLrF#?UJEI+uXS3+|EhY$clhR>2RsAFN`v}(i zb0P1d9iU=Kbn}yUdE^cWLZmZvdpHXhHO=s#qope;N-xH4&A(livEF@rwCp!h%+VO6 zYP8-{C>x4fUBR{M#21^1n$_I%8qfvXENgSba<6gp4d^M6-tH(zQ|{pYJ~8Ke5p4wY zA9G2BJ<}li^a7IM7xJ}TW+aUKIU4Z7=znqTeiBCMVAaT1- zICHmnl<|DF^}?`5S2^D{0B_8M^GeC(ow==OA`NAGtw{W?YSEU3h+6?Iz#mOBw)}1O z=x*+;*^Yb(@4ob#Q2?3+_U0mX4WpdvLgnOF%Ny&kjAmb5v6bX~NVe+P;Pu7)Y@KjC z1`-(|=hY0hP^Ha&*Rj{+A?FNkfq4+8SZxTR9@|3iF_}cvW~ix+%d=0oi41fTI#Jr2|SGkFVwv=Ot{6+DLco)egHBEy)7@&u{{!u3NfTw$DErHJ>Ja zwd>wGjK3>gzoBpm!_bGhlp5G)43RH~I$m1LcQ%LPzTZV(1m}Tt$#`=PI|-t9FXMGU zHQvbHys1Njeg2UF(q3-WPLrnYDTj54v?(K3N!=fC5tv5I@nN;k#Ssms#6!KS;k6^5g-LMK~}Jctu!FHcXNwUAEOFD-Sc#7EHZ|Kr;U z5Tug4k7Fuvb8l@u%3k6WnrRlStF8~mHSNmRNYG`zyzCVi@G>NCL?nc*pRSD0JW~4V zJS0QUIm>=rnm2HF^SBmFgl2Z@!n19o)7`BfXpMN>ASt@?KH+nQ^NzJR zGm*g;BN)MZkFhHyLZEkaJE_RGT=5mc6b5UvMKeTw|f#C1ZA1kg)!ZwMuMO4z(Hfh%`EwtWdnz5(k-35fe zrru9~<`3MAJHZ{N;{C!q=otdeeTe##He>^eronf0F%BiScl~;TRm12MJa_GH5^1vf z>HBRH?d}Zki^Fx)OY=2!9%O4reMeXg4Z*{E&iMR8cY`H?JsGm@FsU-bflqQz(@(WU z5_F?8Rq06+QJq;$Zb2+=;1kF8tJv=!lWRZ8LwzPmfzt+P~)axR8m^0}}L1u4NZd zy_voy%ktwXL?1dNGc8VX32C=HTBM9C*~?}`!Gv(S^`tyZPYzRp;B5UM z@w%TOfoBaxphHFP6!~aa4YL(FCj}|))nZ@N#ETc(_1j%hmSiUEGREcuYc9IlE?c{Fhn`!u|KOd- ze{nSa6P1{6i}uxAuxB1B@w63_C}MzRU8dcc17-BZyt~(B11Nb85ELgmTKm*0JAtK^ znWSefjy+Fegt9Cx6VjN!TSh;K&xan* zB%a1>v!=Lkm^oWf%=a}`W;RG(t3_z!OXZgg4un1>j?1#9({jP0J_)r#_eY{r4Z17e z7&YKlq(s#pqnp(gDTeNxE}flb6TN2OEilK)TYAr%y!kSRK%59k`xGa~r0NLP*bTd- z?6d-XItq@roSW;|#bMi`7^r%X6j^4C%n$1uXI}{Sgeu-D9<=^M<`+GZc5wK(`|o&u{iW7>?tHT0pbsu(;u~LApR>Pdle8% zURistH3-!goURoql6K?Y9K6((&F2uALVuoCpiWEPbLISQ=?L07{GOYUGS}ZGFrlpP zb@b%Bns)8`Jx!rBk~#aKp7C}00v-J6wqsSA`PgP} zUOR7&70cVtkfzAo)2rc0G1>y^AItBC*u*bgy^objVN%XkgO!HIYKw4@24ketE+Own zW&gA<2!K)--^W4NPJXTlXHzI1owb5rnBSvtTs)w)aL}HU^{aA}M5}P17o$RpF0rWW zF5MuLz3F=`@_2b=7=hI5O z++l2ZoacTMd70hFROr`*6cf%05Al{{Z!=yAMWRMns(S`+HMM6FTr(Wsiwa29z6+I1uPWr`JNCCs>>`{S_KUt)UoObIec>S9!_0 z7G>ShDt}`T3)a7n?S=_BIbBLxw7tR);i8R4&(J3W^J%`I>q9o~fL}vh@fv_AH~5ZX zzmPoDq4O1#;gavOy zE79@{Ru72q23%dMA+Rl#Fc55?oo-ESi~Fs%Rdnn7x<`&40N(gb?~0d{7P^k$7r|tj zcExcwH|Vl{m{A}Vfr5SCEUu;gc}9P1dmBwm{YLg3bm~i~TSt$jmF^%6wHd{sb87Or zpv%L^gU2cMSor^-{S~D0U5JfE8+)fKzaYa&JIV9|c?}tC6*vg|Ivi2ZkCzI-CuHEw z=K@Zaig!5@q4>cRE|13rUsQ}E$)$>9z&{Qex!g<0z#Gs?8svT+K*On?NztaiqW_60 z_g5~ZpFL~IjL<5eUPayvb|xXCO}jNwL5*M9QZejkGOwB@l};+vSBbSZjf5;iXE$1d zbJ__dw6nP(vu-b1I?2UWLAC(!A5y|zM+lHNJfg!f-cpc7)&f*Lx|o{+;V9?$80 z@NCRGyW3T3k-@02#KC9Pk4M?RIocCEHJjSA{kEJMimrUbr%R7PQ6DEM2fDWeL7jX6 zReTM^LO@U<+oihfN_mQ^ygVBsbl2XYqm_>t65!Vyl(}I*vAyWu3Fy)Je59bbUcQ9( z0I7(`j(gU~gIT73v}hHmPMeHAC0^7Dn`c|j@vXWH{o~U1BZs$Z9Xj@})mME7u&R$1Ow8ur3ehipiWohmHW{sP2NR={0&S(y{c^*iLCm7D`L!#v24W z=BF`Jh69}Zb>)(DW9yY)3sk!7nf=YS%i>g{7&+h7Hb8YcfD z#=Y4Jk*OEm5#|fTP8uKzNb$2s5zdG*?>_%q=oY1@80;a?=kg{DD2Tl)!?vENEPngIt$#Ly7;AvHDtSLuLJZ}456 zx`3l}C&;;+8i!Jn>2vv~UWjMLOyo}3^$WhM7sk5KP#Rpu0q4hn`iuYDkqqJF4O5Ac ztf4+XsI$5dP0wgs1uyv<`N)6Pg1i`WHOFI0M}EATg0}xAg-lmfB;>N=N~1lc>p0`R zeA0>WWtSnu!NGd!6gUqEnXk?f`DbyA`V)>E;!8b^S>c%iA@+l$Q3&Pc+}fWOUiMQO zn8;iT;}_1QV|?(^xH-_cT)n9&zViNy94+0wvK<2%gYw#$xDh7d&5%mm;_IFhDk6D` z(J@?Z(z|6~(`xZbwek3bGOv;}(*QS~4JV>^%zuL|hXY8^U5h%1qOv`VQ(t-bE3F+= z|NW89L@8P>wu5$tI1HD0DiHk5{`*l+0?}xUnYTC+uCMMA+s5vj-IJcHL`_uI7BKlgJjg8Ou)NmAQK-J8+cCswXx1)Uc1AL@Uo98~HRi49tsYj94dG-m4si3?E- z*(k-gBWSB$PGv`)dc9Ly&&)a|cUDdmSKBEy|92Ij@#NcvBi<%`5cu8QdsI5bbcOmM zUCotGH*ocV1c?&Un~^3Ve-n5>;*!vt*E#Y@{%lvr_`P;wG|Ib4uzETZ)ZUM8;SZJK zEnGk|lq=%ejRm_JZL?e+X9#N-{FRowAu7lBXwTnh_a|4|TxKp2v|0ZXsoOc51pG>8 zOT-fbv!(^7)I}Fl{iJM;DV9$C zvl9oZ_~i4iJz5AgAvXM9`U8ivbQgrEkf9lpK~VXhpLo(3RG#eys^Hp%qbOzDyAE|_ zWcjg_-!SOTr6yTzHy=-YIdQrl2pu=nMe(1T#;c`s}FHj#CrN{ zw??LBbDjdvTvhOvZ8mWjgv-rrv)uvzexeJ+o(-I}Ka|~wV0dk32p@WlNN$ zl9f(8htS7fc<0^+#C5@}ia5(zC|V9aV=VPsU$5g(ryy zsAjELVq`GqY0}~zl>)gDlItKnZne1g>Y2MHPbZ-qFhy0$Jdqc=+OcK*_C#a~gJx-% zo2|LKgnP~R@#*5wB9+-W{pSt>w4vr0U~o@HXO>d^D1rd=igZe2a5wM5Y~%UR!@iOF zC8`6jqxXIEQbTQ7@(kcRgacReCtm3-qI}1XFgI2htG4Fv*oVrdjPwz{irIT4*Oh{> zM{cW=*ZJx9Rg2c-CzvSi`70DWW^1q___&L`nFBI>9&ih?AN^3~ns%`kTOmy|8}S0n zvfNr(Ev8vYvV2(`O3LNRdOKuGi6< z!6i443M(tzQ=}`rLZ?$|9enZ!%JBl3o_->!`pG@qC+xG$$$k2B8=#Fhp0>|nJkmx} zp>~*_XSq5>vg=Wmso{c%F=iv#IP0Gu%YKt5S^?59SRGg0m;Q zQ|65LIqRM!z$q+o?=P|HP262>tvts)&;Oa#>YF6ap!x2{#l5kJaQNU1 z`7e*97R?4Du93iVzSevKYm<&flrxlv`{dDg1Z|aT4xaKF#hSKVGbcS)*-XZ=^)0G< zU$^-M4m8cdeDKE}-Wv`SKXcAPuX=Ymy)jeH3)sGWN&DE%TFrdydD(qpMCOMgZ{H`~ zb9avEvq31|JG6B%J)e!-jXamUEoCYu1~_cU;{pC`H4moEw;=j5{`p~$>h(yyQMqvC zkN%o{O#rPuxw~n+31qguf$&T>Ftd%k^5%_C?owPhjso^94Y9Gh#=vhr_ds2jTEl{N zUx?81F=(&n6OEppaD2QjCTmU?sy2}JZOmh@SGCdpM`8to4&Tr+o-mj;p?(#NC2G5 z18^~rj2*H$`})#)$z0;X1FQcU6E)#3sRL!)LE#2TZTnI5iJYvY{Gc$t<7gDufmPJ` z42RaqD~=BP1*&a>GQ5OSPS85UvHS{1uqA(2g%-K{gg$Mn5p3EVR{6`rk|KP&!ybdXyY=@7iEKUV z$#ugW^Eac0I&lO?bL<()8hTRJiCOQ4bH;MDD3(Sh9}9-ktMFY4px(;Oe9B-Po|>)r z6h~lerbM5(D?aH$;faGf@ySw8RO!)y7}yZoYyYX|UBmf#x0#+uyDd4? z$IME7l2>WgJ~sfjM%pIPqJ{YiC*{~^4s4c*v`&))aEO^=&z&bCn)SZ>TH3`3N!l7O zTwd`?M(UB5%Hf`E=qK@ciNI%)rA^M7&agZ=y&jdV<4Pd*c$P3`qedFu?>em z+(Ym{5+S~ajmJ|5Z0wsij~laEijX`)!1GsphitQAW~SwbBYU$?R&Qq3i0x%N!~kkJ z+Ab`TU;ep&7OZGGwm0w4l=G@^_XJ?E%W3MYMqZJ5lw#7-2|a1@LpyrGLKeqA0EA$3 z*G82;{rny(NAy`F2-$(W^wWo6DV$aMn?Aec$t1A(UQvKdO==Pb;q0sfNW(XE7fu#G znau%Zn0-V^dEJ4$5@n4@;iSFkrsT3b?3M2?gIusTtRKNI|K;OTUr*1Fd>GFv40C5V z1jr3E%EAn#b3!G|M)?+dSX^yGr_Wxgx{Gi}#I-`|ETw|w`+=NtQg;%e@XDk8*|p0evk-r$5@?dlp0}fyinx<*(A3SGLF# zOeHNq$HdbT7LAr;DU?L0L#x^9g0Eh9zn%W>?j_T7 zVxmSsVHb!<(b35@|wE z@I@yn`CQv!I8(Y94f`KsmG=0*7^{DB%fFtJqoehIIi>&J(7*QO7l*b0VRB^F0@>~s z2V=N17~qd9!Yi=M56pp1r*fx-K5YDB1KACL%TZ)>X8r905LOvo>@Z{=qB6LA|IA)7 z_r3T^8!Hg`=8wzs{Z(1RRF>xnbzC%TuFoiY#*t9Q3YBdo4t}w^@7^B~M~Ylw0xdMd zUhZNxrA5T#jG$%~{Q(nQ6fwHpmeiqyWuNCRLs|VfPL3o(eA7rjP{vK#1sdeuNd?gl zMeQ&V$kmh_FsgZ?G%rp?_D-n_ddUJDT zA;xbQ@U0h`nL85>^G=UXamtNV&n|Dw&tM`GihyTS$7^IfuB>z1$SloDp-5itv5S6x zw}Iq&zOuR{J>p3Pf=~PVr%lr3`|4lv(E=-l06mB(hrrA`iEE~zw-Gs8-1MZgqjxT^yic0tdqAKo&zuzB<1Ml`wr12Z$OysAQE#?Mc}L$*bHxmYrbp36+k;bIcYBoO%FqNqc&yRH6n>cY zCVRtor9#Q-MM-IijL@?U==`(8r!qBdI>H|jG$wigL)}SK)@KZBkxUWPmcU9MWjY!j?2q&CE&H4OXkx1J_>rrgTMV?R ziU4H-`Kl$J56)A#)qVW5E_MNzrjdJ3`@SHyJ(VHvXyE>!w2M9icsQ3I)Sy`u@I7UL z$SKBGxy;`<8np-afJcnRa9M)cvsptZ{z)7CH;sn;9O`B&(Z-k(9%_)+Dz3Sv0 z6otd*n_X?SHDToCVXR~h5oSLw9tgZ;e3Yd9A@D45d=Ak(6Z(O2FobClv&UgWE8e7L`(Aav)&(v7sDRdF< zN^FNE;%;l7?_O7)mySFS)C$r(;-jfmg2xsp^1SV)V@`GTAeF)_Tw!mK5C;Z&N~x^rlohA;nJ> z@iHKZdSmP?`>3g!vTo$+^n9gs?E4leIqN@e2OyF4O z<(BMKzpMmr5Ux{^%ELE`X?+cF6c3HljKlU^d6|q9PJ=4zoju#&jV2Ve&)B0}^$AS5 z?JEhdZGP$!8V{*Xsd7Rd5U@1`LHPsjLuwyKpUFC{_ipmP}PgO z+ZuVw&Ug0Me;R`KG}_gI18_87_D8BX@ct5CbLmbOpv zWIc}#SKCU%^^emXc2S z{*e(YJb}H)S^R!%{?--%!n?On>)HGkD*?{5miKXk+j|HMZ^LlgM0}c4W^OUW-iJa| zht2oivqG|%j>R?tXXM;!L4eMigAu3LKTOF@RgWJ-LrD4v=bv`NzrVqCKy8wrWn~y$ zW}ls(q2hbs6D}GA%(a$TBF`{}O4V7n6&l?;2=u!k66~l7qt)-cV}0YZ(4T)QzbJT? z>d&E>h^-X0>Xrtr`K*F%(5*0udV?@6p9uBt9Vqz)=e~PmZau^j6;qR|aE){34(K5_ zk%UoNK8@dQ&5#%%E9+2Zt!Ct4AgP-SnSamvE+9w3$C2lre!6hHD_6e2l~63$hOV00 z>R_*6h-MW-^3FZ@Um5kY_2PHLd%`mPl*?;48d1_hy;gza1+P_XA8NN~4_ZI{YLAEe zDGl`$m_2=FMHeLzzEqR1lRb-%*rI>rYWvfhRFpd@*Bt0oJ%4z>&o)g)-AJ|mnL+G$ z)whMbwrZ>U=&iOBST*@A0I3C^qOa@&6B|wB$~pTF_Nz%M<0k&nrfecH{SGYhraypx zhd;>li$mn!%XfXX*Yg@wWE@VP)WCOn^Qbu*<9Y;9<0L(CQsh24uzhn*C&kCg{_AsZYo3F4D>o1*a)jY47xD( zWcA1(_>k$S|8hZQ?Yx7bFz%|)SU99kacnXclTUk1YhTks+U86DxRvI76%H2BX zb7arT2t~^Tp`c>dwW5ny&&924K^Ol@|GkQsLN$9?(^fXR)8slWkiy$oZMX)`ZloXk zDjPdrm-*mn=Pgv-^dQVYP|RZoD)2=zw;gJAn?+_L!pq9XkjVmuyAx}~VZ&?Rza!eY zd#_@vBvoy8% z%?az?%}Wa%@h^D1yN7cyZRsP`Yo44L#BVhZGi-o?501svU_k`#Sgq4mH<~=SSXuWt zadOokr%S=yEfK^A+Ph1Dpe?DzVR{y1q)4|-MtFKvg!6*uu|!Do_H)V;wzmflLU~uZy#0Egjg zRDdbkH~V>_T9_N%V5M@k#c9KvW#`7;fZ_15dwy^4^m7xdIMuEk$gI#vwp96?Ewpy= zH_gMQ0ostj`%~ryaCO4@HorIxgyeb{*^#0yW{xW^R|LtAtm#+>mj4bk=Zc3K5 zi{9N{1l(QyfzCd+Ca)0`A$)N1Fi!Uv8_IVfsj!3jo-ttKGg2|h)Tp!~7BKK}A?rV(f2iDg z!oi1Nku*U=rHY8xC6>8Fxk7H)2A<}*HuvF_vE*!pxM@BCOdyEazoV5WBp;f z+LZX>h;u-aRZ6_*1Kl6vx}lfkZmOT|0UBY}+k zGV0TD4aiFMe;hdh6=Q0WfOR?WDtjKAUPp_;)Cyl6b&2JJxrEcj_Wd@!coH@{co+c! zP4$5+%)sS|E@b7zq*DTs`<=tuNNF3wAClte-}iO-YB+nB!m46-qHKo< zgif8x|1c^vpu!Aw4w>(7_st1SfhDPL3<(?U51{c-R)5h?fAaB<)kt?w4>OR^Cdtlf z6RdZ}_Z+?SGEaLff6)y#9m#ciQ!pNUFpRSH#|w{z?3u=fsT|)ra|zCTW1ug!G+TT; z4T*!gKq3=GF)rZsd+=g3oB6y4n4th!ZM{n`1s+x zDGb<$M0hO;yRw+t^Kg%a!KnY-T`FT5l3d|tDUm+EtH_864A{htuEdSgKGNDNb!Ap_ z5KgNLhRHjEb$Yt@uIS;}K7-7z%q-K|Y8#WOpKP*l`EIUz^!`|iV-6rMeJe$yUk&S- z`hf8l9VKnn@#g!)V_(@3k}$eX?aLd9!JrrExq{TB7gC;oYNd#2wr^cOZf$_6h^Zzl zh?kDrSq6!Y_(EN&P8!Oh9*7;o4WCRuEqs6Dx(wRTS^5$h^a90T0(E!G8>QTVF`HDU zOWzOik1w}fe)p3(yCAGyBsv)ZQqDWAk%}F8>{-^OMiZ2aheDx7CG%>xi1=(?hgF#R z>@F`-kK@T7^AdAZOgKU#swCdQh}$gdYUxm>PX}@DDKOClO4!&UTSBi#qnekMt=*ne z6DxNX;7lHm7Dd|a(w>JPR*J#}{q8SSUi>Bk1_(o+#VR|_&mZj&8I|4;u|-}}4}L@Z zxSGuviPG`l9j8URZgnY&$7E9{i$)kdC$UP*JbC3**>VZ=Y;*PVfuTaV{vS&Nu>%jg z4TzP{Yut3v0XCJ>4AI6b=H*55Hs>XwjT2di4(5^8XfI{#O z>rS(68y{{IXRj`8HkpJ0PLXS_FLK~248QrPH5&!)qoCQ{plFc zY`=($%d`6+-4bfqm_{Ze(fh8$15bpClUP*(#M&ej7hK79ibNMq+;<0?{|@~0`zbbc z0kM-(DX#piQ_ct5f-*uamBj%q)Yp*d&3Ih zhuJij$OzHv_8F&wM|(G{cTc|+|HnQU#6=s$bsXC)ro;}3WWCuEin_76M;gTarc%)b zslHnio}bQQ+LPZ*n-W3C{yn4;P>%1f(de^V(`mtmXP+~U7OV?2d6P=-0&U?wMfK(H z)oaV{f~BeNyV^l*%6|&6fR5<45x&pftoAMqZIwA6BbT9~~B zlMA+7uKEJQg%=EsO;{kc!lwBB4dT-aOo1hLoHRx5XMd;`n!@T^|5)Xi?b#|?yLE%5 zSr_8F30cn;E5Rie*FY)Byo!%xN~KIC?s~7AmzDn9J5WM~HHSsvy(jKPbZ z7SLx`rw!-~lI=-h>UmMm@9_!1jiAzB*Z+`F1K4B)Ymo(g_ZIfBYyW)WcJQrZta6Kv z_y(enfR3vd6PCqWEEfsoiVZi%7NI0QAJEd#x=VoMKMk_K1Y-NeU6zH;ARL7ZamaiU z*GDmt72O$xy1y-4Nqr6wl2|US+;5r$K|`p%_KR5ymA!k)(C%CE-1CBc@sf^r`j1c} zCa2?Qyd>-uYZ52L+A$jC(N)*}UPuq`Oq~bwlGh1hECuJEI+>=BEB=3(a?6C_-Tt3* zqaBNr{{PceNdtC)2ng^qX^EF=f1Q>85sL5h^EW$gIN8UCeEC|k2qL--4AZpIW9+yc zpLGT8wf52XwBYO=`QTpFwy4VGJsOUiG|7*d{Fc2`xODsI)r9#RY>O_~iFe-~c(iEu z9zEIZ-w+~awi@4Z(ne=5-dHHL(j?fM3V8+>B1mXzh%!j`VjK&;rF9|KFe4~cI3uxsBgA|pki^co-@7*+Kq5-29hj=? zhv7|-9;8oeJ37O1^ik6#}`yV$FzC81}G1cixtW=KJCx#j-YA z?Z)-!;x5ygOFDuUJvh`{Ar`~$jwu%V#+{D?jkmdP4pv9kB563Qn@YTgZ3c|B8@B7P zImK1}TiX`yF*x)xtnb$5pE`*X3#=+rkY6!0Ya>%XU`ly*qez&JW}#I;VB zmAhoWN-=1Sy!7Ox^dw3TI^=MJof@|%Al|!7D*RE;@1z*Akz)`f!^0cj zt82+lck2q1VwNEPI-U~iDJc|>b44R>ICJvc-gkbF_BlYAP{y%cUKT_>vcjHDIgw0k zuX$$=Ziu{z#uY5|GM{=u+VkwRL<+JoCP1S}@V7!#A+h_kP{RE3e~s1D`zQyZGm`t# z#BG*iep;wud1aFKy;iPp$1U-|{5iCgMne2lTA;$n;rtBzn9~{k*x2cFx=O|8A}LRa zfkB55m(LX2#3_o`8KfL7mMmTRYlOlAI{U6Bm+BLdfqTf2_Je5-pAcW)(fPXi49s9Q z97u0?5@P-x`Q_kEwdFXHgL^gXtm+&JiHMMaz|W>#$_T~qQ(sy?fv`5N26k;(>R`?j zaR@xUu^znDA?I!b^1v3;DT04>cx9XU>s!XBPe#H+WO04=kcHg7UsA%sBe8=_mI*&BDHz0*C8@H?qMXggJ=nd zvC^?%b|DSgY_u)Ww{5%@;ui=X^gZwg;C5Ya)n`t7WrZ$x=zaA-vhs@j@u;&~|%7izIpvjp{RYRD(_5J;sGc z`})8Oqn6A|h0B{QqvXjNWZWL_{++5buzN;dxH$j^wL}%>rpD}u&$JbS;nlvbZ>};R zxiV1*7m!M&z+O>1*1l@3Q{zAQ(h$1Ya=CSxNnvO%S*>Qj9zP!0SlpTX$>zZMkVy!y zC76kxo@EQ&Z0ac8vPb+C@3JN@2%xmSplp2lgNR#4E$Y)t1vRHp&SzQZznToNZy^Bw zGx+Z8JJu$Tg+{iF!HP1oJJ)Zy;3%6X@`tnHzQ9wni9Ayiy39AnW2TeK^!wnoHN!~M z)J)Ad*3~$34Mw64;iS?s!uyT7il&F@m99=RnwZ5i4#ST7^kl_lyvf}6ZK>+$HsjUM zht-wfKaYrKF6z2z3}m& zcNoJgWe1Pfk{8a@S?mwZ1hDQ!kR**A*10$sZi!#;UWB~R0=3fA%6fm~n*loUXM@Yq z8xn6~>rSPq$8|fs?yYF$5v_{zu9aUJj9u?kE9*4q&1AEC4-JmKh8F*dUZ5+_|@M*yYgd zG@X0}wYe@&YwLbiCR$eB*_lmOp3Bp&ac5z%)7=r?or~4s%YtX*DCa|{_&f(smul0g zDx!=QM=ap{{<9S?f`PlKUw77c5~Y{tY03pEg@bJL$Bp}7Ap>igEN^`2XlEqaGWI}J z$_?(FfE{By!;>#Qo81L8iYy+v2W)K!l5n}wH`gkCD0pwJ1+5VT(Z4F%^f^Ayo)jhB zrrv;}+f1;tfSjKR+Ke|nW{Q! zTv%%}0XN8oj|7C0MozB>^;pttD)2~;|D*ZH!_tBly1E?mg)i`?aVx&+SC+g%bS{2X z2}#2i!&HP}6V~o_`LR`W&C{rz%tv6$TR>6cUc2Y7+#Ny%vnxl=)lQP6yWl(g`T{p& zDfPb1dsxixE_Bwr7Y_F&^8Uo9SIm#~J?qn612OQzRkl0i0}PE~l@|HSbQ>eH8d9LL zA8V4!c2)f~67;=>)N}SU8S!RrW(GF4^VsU-N`}I}f*hp5_T)$(om2_*rqXMX1BUrS zSz)yVSt;&Cg?N8zrEu_<$4M6+Z@YoLcxp%y;CFS~xW;o*yf zU8wn1Q^iS)E)mw{WFrlF=;=cMAM29$?3n=|_c5LQ8W98xB$J^py!`nFvI>!*vsQrLhquDI*_mnF_`WnhQ3AK4enL4n<2bvrYEg_VmyIo+Gd%iS3oMG2T~Eu9HZKz6vhR z{0t^6u)oL77JcVSP-Y9&WPF2vRW;LWL(*n@EZSyI{_5il?X`uM5kc7!d>6Xb|#0rEi+S0DPZ6g(6GpP zkfFSd->Li(R4zq6TJekwa;4qltdq|LWx;}>%dM2PmxP`Vv>4@n>ov1`w zgufqmW-Ryu|0Os?I)5%&Q^&)Z2jiPRr`s-UF02(x41sIMr;3tg5DnWa(S)dwJ#dmB%LG*i1v zH!+jn1np@@i(%4m&!0M}|Mops!dJhFJeTi@6wIzoD6TugaA5xNi#u)M&0FobrA{GY zEXj~Ee8)BBqCbqi>XH?iTV+NTXnO=8=w{X})d6 zWkK{a@9%_#{J@Ms3 zd2u&}xtk`>f!Fux73t^){sFnh5mg3k(}* z964e`I`u-TU&D$(m+8(G<%+tJC&cYXFBjpTUe@}2{4|lA2AbOQ`xc&B6B)4_R`LNW zcIJu0aIt&H6=!m{zNrUAXW(f4dsLYSW&pWSocwk*8J|&mTs2A0B2~8 z?V=x4af6B`$guuG6M$~oCYE)s6^j4D23gk;oAaA+Z^@D5kv{r}L+JV{LH>EuIG!$n z2hN}$?U{Hnv(8TpY{q_mmR*O-eq*9E-F0-9r|+maY#?Q@$%)NgvY^BXr`ADQHHK4( z=}YW+?q~psU@R;CfGyF|L@O%~?^s{8e|^sB4c2K6*BIK7Z-`O7V&g+;*~ipFX5}8I z+PjYE^feT{*g`d%W+Aw-eo8eXfkZ>sD%NxSbEal>grMl;d9`?}hR)dRr;4AWwFCV5 zX&|=yGzF`9J|*{Rzk#+$CgF)BYAj1OVgeDspD7nP7< z8yyd(HkbXX|9A#Efg6$sp44Ygffb6?p z<4qdl%j%1-+s&$Lb#XeMJ$KyOeYt!|`coBqR{@j_F=w*ClIP&H)({98glMznLxXE{ z_heqHYF~59x~8K2(T8N?)S0o(Fc3e>eXcCbjMa1|!J@Q8i!GjX^{cI-Wd@c=4T8Et z`KxwW2B0&{cFUaMNLF9f@uPx1cqRw&V^Hak!Pr^G=M~9Ht5FU;+RIc!i!~31x-LoN zWfDsbdy>p_d9J{cv^Qgl^Es+4YN)~cDk-nR52{dysj~Y6aAo7bcIcu76VMy3!>{^XIFQT8Y>^BRe*zVLnp6dy zRG0#}k_nmFH0By{oYsC*V%d03PeUtvbIik$hGUI7yO|7~QFFcV*2n}wxX^Z2msRDk zMssZ_O(?@$yI}Z*`n;jcJemN%3xSpE>w>(A-P2AC*w2nN>>6B;i1|;no;tex=f?{v zo-OD+w3+L9I3u^4`sgPXjvnZTs+3z0%BSZ_H!NP!xET{lS$`iuAS!PKD@>YN>)>$b z7-{rd=N|gMo4%20S=MYr^~_U?@Cpr_^UtROmMTc=AIcRX++~#yoYg%JF;e}4(YX(k zc~kneGYF(a@2?n@*7SPMTPb}Z9zfGoI<3~G9EGjEAEvTUldn>3nXHC+HcQtJLSE}= z@JyaT1!~9ebQ4$U?mBN-ne@k8WilVoijHpM&^&J-beZ=8@jRH1!wOUxo~$%MvB~Y@ z#+UhRo;bG8)~;OLNsM{VD_FbAWe5v*6;ycwO)&-4ek*NPK=wEWUjkMPutGwMmMZK` z<$l8WJ{$K_sv|lJ(3TJP*@)P~H!q(PnX2-wKC1wFTFR4!ZKr_sTKBn6dH(ZVSYD<}*I7+*04pIdR80mtDd5 zK2_^8@kbPp>xcHhzDzqI(4nvyn*iYk%=i-k^(6^aAwjE?5eMy_lX!0>W53>8{IUeR zU+qr+@<#;~+OgRscNow~(_D9^G$E;~GVaV3CS69UQR(%roQcDFrg1^0>Us0FVKCf6 zVz2P!(%p9)WmCXrHL5@jeeI2b@R_Za7$~YslA6=XUc~z;gt_R%LPrI5V0A=T+`I4F zSzv|3M!;G9^vmLS<9XXgq0!FD8>R>BN{YAw5-BqS_YV$Cf*$CwG+uo*S!Zy?7il*b zs+QzLQ(Anc?h{Wr#yNh+Q9-N@3Z(52p4Qdj#6|10$)E$n8a4L4+*L@`7t$AD~+~v2R`op@?A!j8Om-WRe(b9TPd~RS1ydC zUzS8}quZFSTIgLzu{>D|NlD8QfkcTV=HyhqX?av`RFePiJ{ofh47gD*o zdlws0UC->gx{~t0$G%TQ-|nue5m7xnq>NL^tM1JXX>TT!ErvNVV>3|@=EA*AE#@eY zEZ7(@+SuYZPxvFcGswrb8@I+ZXwLxTS*#U&e+HFAo^uq2z$_ES!29hm z?ti*iPF;_K)Vb03=%$|4guz?tWlW%YVZojN3ew%quK@?EZB(dRk*%SAk-r8JIUrQ_ z2C!#Ls|4+zAR>l5!c~}+S>r<5y)B)#26wpYfw3%>b965JAy-jr1uv&vHu5&Kn}9Jw zuF4A-g&H_4KJLA$g}Bgl@;#nq@O^>K-4=8Z%k4cAm#8=T#Kt>l$A4S z_O`ZUtM^HdLddG>g&H*Z$$?R$BX`4lzc{PHt_ zkyi61(o6jCBX(69DnHDSGOe9-Nwc%L23oLi0=+yMCza|SZ55_A=;{a$7zaSoh*;Ju`Z&c9eRZ5~@@Q+D`Nn7Of{N>ISIFZj4=+y+)?!o4qZUoP3GGH?u#oC`^qw;UD#J*C687| ziEtm$&)a_5{p`i-dGQRjBGX)COZ&zQaU(ZBR^#&2lNb=y2wXf)5J(A1kn|}F9 zdl!SqjwOxHVu>lG>(Q{H(}n$nwJjGeIVA{2QX+N)nd1AYZYBDxfM<#u22jMZ(xOfm z0fUA-aNY{OBr{9*ZK~NUX8S1o5RKBKK?5n@TcIVTyN--jKw6t4H6cdW^v2VqBkg%jLkQh@|P2=_#%7B%n|9BWG;j19M2zcZSnaq}; zv)@Gc)bP@8Me5ixEw}5AX*2s^KE$7ntrDF*S_?~a`rt2}8a?{lUHv$eCU zUAUTT2y2T-;_cE07PG%Orrqna4ypGU9JTWinR^v1YdwT2*izFf4+W$-3?yc^ooT8I z(^s2%DeZP_vM;D0;8aX`v{6YJOp52Z#AEWP8Vikmvp}z!$h4QLNCq;lA`)&CzO3Ec zw5q3vB@{`%^oA%{&kpXZSz3q9Ar$9s?Uu?k)Xfti|EZ2O3@MJ#$Q-rGIM`#Mcz{P? z#eqGj9L3yysA#0I7CG&~iKaz={HZ@!Kd45Uy!6Q%K_O(pem+{+>hm00b)k5-vIyw1 zdSSvvovY#~$T?xE*)@CyZjAt4v)E{AY!35zP?uZ2`2w3CFITPo3aJP# z0RBBRXOh%8N~Zx$V`em$?`4C3Q1PjRqfrK)e6>5j9Al!T-7+w)a%KL=z=Qn`c)0J6D zXsWRTwfJh>h7nb#I!OPH(oFwtcD|qJM&Ni6V@#?@hsiT;Z-F;&-sug%weWM+_vgP; z2xHvY7skJe9Y%$CkZoqRicp2JL)Kr+O&eEI#$}Lj`5LmKwIUsunPMfxh0gE6#aNOZ z)A`pD>0CEf&|k=N2zV_Vmn4<@Xt@mCp^u3 zM!ldJPkzrAQO*R3mfH!RDXGJC$os)t2E)sOPjIAObB&}S(c#DY{jQ3#+uN1Mbs_`Z9zld#IA7-t?!$ZFa=c0? zs`>+u6jOUZ{B({V5f?*d&(1R={xqjb+gF+SuME6T)nq@np;DS$`&lf*qA89Ad>3)U zeY2Aha;IG)D%C?}3V5<0-4{d`l2HE>-6^x3jI=G%I8wgkvT&*SIh$;K>jWd|Vj~AE z&SKb|XjMyTmH=J$$Mdf*-v!c^{06bis$FOlSYyB*=&05mPI!B!ZqF)3` zfDOrD&2#gCt|nlBlKBkhHy+=Nk`(rOnr#Xrv(iX6e~OxW;cV#E@20`p|Ly{hg^cH& z&aon_Em68*2dv=4+| zh)s=QR5oVxv3>YiK)?JZaChnLKUIR=?gi599Q~3Hb?hxG!4r9AXE`r5S*#SqWTDFP z{C830G?09*j*wRiU1l#sR-@!z>>p7&4ir-I23|p5?qZJ5y8&XQ&5q1qC|< zd5vI=X+hWE)RF5Lc8CUG+i}ymri3+L>%HISbz>;xwog($FE%4vf;k!m$zLMP3@Qu_ zs+S#^ObfdAY(XT;+!?k-a(OMt(;!y3)U{V(22kMNBhKHqQu=&$vRHCQeJQ)a;z{VP zIAg)Xws5_Dv!`1=sUm>%jk>;UkPJ7NuM8`K;EjhLee>i8_=SehE8fnrsmkj`U#Aad!1*Qu@ly~L)C*FUzR)&FRJWgQ**LFTlAipGo7iH`>l#Fa88)DHk2 zm%XKnqNf}jPsA=tvfy)&6dL z=@3Qm`_be}T|6C@Mmn8v2lBU2DrV};jk)>3^&T5l7;W zS0t~Br+s^qxb_l*F>cE=2p^0s4C$$LbeM&Oiaa^{p6ZbsI7(p5shEa3I@~dFd%1s@$ofJ&YqIa628Cu_buDfe*{;jlitE%mkNpT06| z+@H&Dov)%x+Fg|mq3bsR^~B7b%`==S-m%X#T$y(rdLs(B$iXoc$Ioj;hK&`;4r{?Q zdB*8^+GOuH(yb^^JmFxeM(Wwbxt$HYp?j?6;$W3O04K%A&B}uQ)j0I}J>13sAU-jpHqtthmc^46Ha)238!su;fXy z?gpV5S2^ImRgV(pEP_ut!b7XPuu44f&Ff?2sj=KQ!&RwR?EHT2VLkeQ+W5W|hbg$M zH;mY)zqKAg9rs|uni?VulVEKp~Q+P_hpaNt^&EOKRx}|k4;qI1vhpRS$h0b zt+;BR&U*YU6AB8S+B38y#_xN0?RG3*z`B=S_+%s<8e*uB_GV9TBCxh502X~6Vg1`0 zGCei-Mq51`;G+A%QN+^7Fvqu0gFqk1-vBRiiE6Zno2?SkOiUg7@XOpXJ%;G8IQFwl z5~9xKPP~G1AVnpk=X6rC@z{e`!^HgTvhsE+w}h81i>&t!+SS8#Hf6}rU>omCF^Q-u zqWC+I`B*nc`yEfb0v7nFGjEMQHkmJ*|5UMqLF=J>G zl)AzA(d;V!G{V9ug(J+} z&jH4>HhuIF2J?PY7Yk{xqPCSUj@jk)E|$e@0g&VHtx!F*3D#%|?e$1d6D-s_5gdGZ zx&@gtrE)~6aidW)@&5eLB!?agt;|x%SPvO^^#n_B>#QgAZCdf=AE>Ule_gP+bTDkILsnr?KtK zr??$TTkGMDF}e)j_lhNRoc&c!(fZ{;!{UF2Mdej*;i_(1K65YpVJ}yc2;q13znvt=EB?pM;`Ud^jWcT>xXYb)a;5R(etK%-Xs!GSXcUo`g>*rq> z7m2;$))~n5M(r-s>@2SN#h;p!2`|5Tv}^vFwe#+7=|uZO&@75c$6l(k?GD<9=|i!U zu22@ycA%8u8yLmTp<_4F7~YDaXSf5~9<0VqeF zZ+L28+j*{1IwILWTcx!VYRv4^-wCn400xZ&3)O|*qI^VK$b`?OcAUhg>N#8QiFL@( zi`4gqOx_wdTVKC5ys^v@A5T*XrhkvYX*Q}tjZUCoPI9?dGcZoRrN!iE>vMcpt-+Qr z($mCvJa?eaT4=I{vR8S7qxkrV`gopRv7V6S?0h^R9lSjR^;bKq)tIL7{mZIDng!J{i3rJ-{}J@1{_%$Q^m*zslF{0Jx!}!cL$qtgTA-)b_dD-NCg!a`Sg0{!Cv9zyM(fOrz!VF|$CrVc>HK`z|Ayj8V{Z+m zEbi{5#0801Z`Cvz1?n2lilR*Pbdu%s^}o3!5@_t zaEA5sc(tiS68{4KtbCN3o@PtZvA)K!(@a1s8W%Y7lUbg|q(@2bMZnG4WAK3~W1hxm z2m%cG@N@IAEKleL|IE84Lr`qaMKW`zqN0?HA9rBXu$NvwKHc|K<)8Ud3auUU=JFW; zseWrAOXMbhcLZpwQN^8#F4+gOMj#Yol2(lbd9uN;NnveeXK(+|Ooudx_e;CGzlwz- zEWqbTcnQpsrW(M_s?3@HGOB z8#Yv5d*q33VfM6rQE?PyUMb>|k z4gq_ao7Pxsjhm2JT+akZXy6*lkWN>%~Ss$=y)5yLsS^U#Cer z6xqk19k?fF48;ozb_VI&lDABxgDP!SF@@53!l`;DX^ z%F7C7Q^FTh(sa;J)uxm*(fDK%k4fJzAq+Ule8wGjl?yzEL+Q9e%Dm^pQ$+a(8K>*^ z7W#|HJb(gm+xjUr_`w#VHc?kp@9`AUPd54ZsyGk+nNOI9mHrny?xfPz!x^Aw=#17= z+a3lYwZldEU^!;V_R6x>XdoQJ$&TQ^cvjMXo>DtXFu<9M6D`Ye-4eA~_m~Dpf%JH; z_}os0?3=9r5~FBWP61fe5r_L*qH*xX_%Cvu7&c|Qd?V38da)J=XD6pgaEvyvkwRZ? zAhCqRWrFax4a-5#&HoK{{1+ySJv{W`Uw=ye|AGMhe}n%&Xf|)oG7so9FrDA|Csm;T zn;}N~_P_N49fbty;EqmlUqEWzn~mw8Vg9=P@}tQ6E4wd~$F-L6%m_pSCd>1r;2UB6 zZLm#K=YFNsQ}MOxll(G!p@ZW)m`4{oDx(V`Jr6UCWwbZjR1l)yY6}z#;^D)jqlwe8 ze~YA`3_6q}R_w`eWxrit3Q@c6g7PT4Il(3Ku_f?mdElaK(YUVS$;0ONS4Wm{5%6m=ZoJ#VQ@9bw(w zFe{W3lrh=J_x`FRAh!DfX#2oZnWkzdv(x!_y7m0{9lSF#dQFph>HRU5?-(DnOr+07P-q zfuqeYdv*MW=P7|6@g>SI((NHlPUk+Vj*}LSbmnpYLs*~Vpk|fm$zM0`WFXeb>5*(M z-oPqbmd{$^&|XGNZd^!<0|#!#yl-Q&d5-Ujpk^L3UVl2Pd^8q*D)T>d5-%0UcL=Yw zc0+QnMYjg09nk)x#HB*2{(J!7s0Y(asgM@*ILna5A44@RpEE$MqN-FFAltTF{&SZ1I)t9|80FEO&IleQ*qrA(80MpXrluQi66LSM zq>9|t-_+*ME*tm%egX&k9|#i^eNO-{YLw7@cYMj&8ky@gCHG$K2ZR2kR$QolE=jZm zaHK#&R*YuG#jsMAl{s`GKDArAprF(vdBM@)MhRNO{}15OLf9e}ZZ037Xg2}gGPVrF zV)>1yC{;iV+#^V2okX1^$T?3ldh661XlR*V!EWT4Z(%Ao?l))mV3WL^5{k(5X%A5g zfs>?ynJkzoxZe%1SmR>jp**ce)BysKuD4)~47V(tE+pKAIXKt^@`hw<3D}|Ix1TRmst11n9! zNx2m`9p~{;CtD5L6@`$-!~2He>$rE)xjUjRUc8YP=%c3Wzwl2ih_iaD3;0<~9B^Qu z75|;6;8X6{u(9CpUTGSahcJDvWxdHI$|+BWo?OQP`_u0Bk{vg2@~@(KlIIu={TLG4 z_~-|HFw6_V6pk06=IunPy4GKMTlsb{VElTFVNSpcg@OjRc&Nz zeJjo(Y61RBj0sVRzc7xsthGse^Xo?bMb*3{Bd#lf)Wv$dBotFj2W-{kVL&q`gn#1+ zes$)B-#qH$7{QJNe^_9#Zn+mlDt@{ZaW5&|RFZ$OxjejB|5cgn&cz#`M;_f>jmuYa z{v}h>)~YjE)9agWh++P6O%L5eB|GFHxYN-~2r<4f>ssGdJPErwR>R zUmf}8?ALbCdV6#Exy`v)mGLfLN5JgGo6Pn3S*AF4*p;;X7lr(|u?%>J+s~zl$_`_W&%3mMDW!z zFXZHlvTJs{M+nYWjN&$T-98ajNADv_g>1fvi&?LOyD>xPY?m{Q_|Rke03s#Rl7#@i zlhbsp za9Ba?H)XrWuykUiON@>Qx=kLRm*?LNkb5}%pp}QDW|w6dDm6Mjz(3#uugFxQXbeCs zYhLay=8vg|gSAK8-`Xwcn;caLP?x@_5rxEmddMO*?aU|oKq{Xbh5Hpew>fVItg z)H%g(w!xHGuCmZcaX$fGT02#!KY=nVI0ghq^Fj6flFc6?sDX&&vmOer6XxE^ga%ma zOqu#DJIP}K|GG8{a!{yqMHO>TMpu@oLM{>NYpf5~-L}&vT=-*LK!HnJvCKa-ofmFb zX<9iBS=Y4E)KRHIEgceI7OH@)8^cg(rbXUJd0Xr59*}9ZwJr|tW45EGSE{~HeET?Kj$}#CFW-N+6>`uo-M9s= z<>yWjhG-nUJ7}*m+Wnr#Bla%Am?7}>j3m$jMQ<_!o|=03(*MUrMj2ma9RC56Z%wWv z()ojr0lzejP+v)w9V+~*=%(@?Udyo@;=VD0y}C8Y@D5v;ic!5$CNjP%EL`1rMm*xg&hiwmyGkFC zOxcrPJ5X+^1*abSogPWwU>EqX*4k$w8!r~d|HDsu_h#_>`!M=t2x^$`V6zePwcl+)mn z^mp6CoW>+D3u8lKVGAVtVW%9m8;)(C_-Fk0sPnLN@Fm5I z#N$d3rdz~Rp%+8bxRBcMoWQqZXelb|1ipBx_|`_pQH^*AHogQZVof`ke@`+%1%{-Q zqDIb+uTUmJ_z{8&W`CHZ`;4Bblw+;Y6-Xf^@Q3H!iwrk(q#|Jl+T|mls@x! z`&~GSt&xj@GXOu_fBXLHU)3w}Pq}|quc+Y-l;Mvk#I2VxrS{3FQ=pJoIg3)8AZIx+ zUoetPHk9mSPw_ z7I7U%Wq| z9>o8BnUN;Mk$7np|L;n{@129Vyjl^Tif+L^8to~Ko5UkLNl3YfG(+-*~F;b`DfG|vy=+jb!kIEOFmmOapy8$SC_N%Qy94iuVXqpkoG1{}I1$Dfq$4ZeJBQIj6rSn&-ias*gqeTKoIx0?(5HNLd8-B z>N5N1uYdkjDq{Wr`WTJ%Tbf-djXkDw`H9~*^tQkOsKd7Aqj(5Z?e6+Qv`C^ZCmT^}`6t=*iu!*(8qd}qn6^^v)yW&o+aD0-hsxpC(p;fk1(Z^8NX{-*#0oJsJkNiC8IK?YC#*;oC$;nK3{ z*BKrQx+~vYd5j`eoEWZsmXj2*NOGMk<^R459GK-b zKW$}7sM*f(kNKv`6JXlWlENPp)UP`)g!ew7e5SqD3J-NB`hG4~2Vg;rd01XHefH^Lrow-4#|bcZhBx1!&-YZ@hrfGPI7l= zZze2?>M)SM0cO-*3RKGj!kU^AST0oFpj01Ywe*-z2Vq!OWU zp;C}L?_XXR-a^04Lw<*QBajA{9Mv|<_;LP2N5!65t3g#*gsJ-(gU?d$u(6h=@0;JF z5WBtWu2qPmNOYS~jBzksV{kS&%CYWaP1@7+-wqz{yV8q#^tiO~W#*6kk zHhDIjb7m5`shfwf|K|n z?`C3R#$fWPQvRnoR!i4%-;UiNR+TgQBe-3`Vlh1f>w(-yIy1P;?&ZOkBI9=4b zBCZ2f9<51??uKYDnWEm83g4ui>z{3D3WJ_-@Pj5h@T(eM$@491-}BiQ>ow%cv=b|{ z%csZ9*hfS&d%5gSq*eQIWu6T?#C>RlV>^pkmEDBX4_3h;yd)VN15cYynqb`@evubCx6uJ{vdjMR@>K%sZ`=U zKkXN16ke3aQ6kKv;y)kKXD4Hz-~4e!rPMP2?ld)KO!jkf-y z8ng}}+!TA%ZS_I;`EYA)QnuFJ8@giSxv$=O0XL7H9wfo$Gt`$Wd%Zyif91D>7R($WR<$=rqWbeCGFR%zlD2hinp=a|TB4%nMywr}~KoOL9O_sRV02gWV0N<=b$jbEN8nyxqeBfgf_DUd>L%vD$uc#gv1`er@a0z@P z8pHc%hffIASBWUOUpJum#XG9?`ut!@tg{?Tx=VFs@l0pyKUE$BpFp*FK`D^?uO-*U zm!`!|+oG%grQ;Gb{3{qTI2j2Vv=vMS$RmpHRNmBOwqASo2)#oUcbv>}pZ<|&9Gx+o zasfiit3YzuX$nyrNB;>#$r~^14G-yj76_SXd_?tLr)$3>d|4j{B|H~dui+p6;jux? zR$)i4#PU&py#H6>?2L?_RX%v^e|5i}*kOy4>p`RJedeflI_1~Y z*%LNR!*caaZiYI5`(+|_zGLV}BJYBtW7WjJ8lx?`%Wr`pFZKe*TAU%YuInP7#+29i2FM}9 zM3x!Y@{{zm0qAG8gVm}r7oEw5#^Yu~oJH1Q)>eP@oA_y~S>Lc=bUr zlQaBh`N4$8Cl*cs9t;zZDR82UF$(6s2OzA zV(AL1io{;}sTjQ?<&EVh8{b(lkX{%Aj>n57>1WSt&C+BJ-xmJwnV>`xFE{r?&-Nv) z#=POs7Q!iRPX@1`addT8&Cw&E&3)8Ia-Kw47e6;A-msXi$VJPX%yz;j;?EZl1Qw$UYDeE8RCoJMY_W0v zo>(U}fyqa%s`I7^a5$-8oZam!%GedoisB(296e?FD*#lHGPGsCnpsh>*RU(>AM!yJ z9^ieZKt5F7%DGmDvyC7)lFq4_jYQqnuT;|brY8A;BQy#sw6UIgXfTEfKV(ueFr+>f zWpp)xzHL+2hwywa$`ko8xI6f(%9)WCLyRhji_pXlSNMzJqWv3Rmx(_Go_BAcZ}{h5z&v?8V;zSbTfQY-vNUsr&uSG&D76<$@H$|>-?1wacnHe8 zS5=IZnCCaw#a*Zh9Q2VfIqlkoIhM{ET4~`2Use;5#QjXJ{SHdl1+N;=0OoQlQPtwQBHDT{6_08tQ!wY9~u_Sjz z5~Eqbf)|V#7aBPv$gd=Dt3|aIQ|NBQcr@^!N$~Y z4PW_)Ce>YYB@=?TwQ-AmV_WtR+wo?i(C4AfYtwnk_Qn!p^U5inM)F*x!!U_8HY1dY zX0Sa<+am^7G09`>6^vB;xC^bm1wjzck{lR;8iqK*k5Bim7bA=(f6N2_4(=o$G-Z6{w2 zG&$)XR}^wPi*c4N5;#g zn|PALA3^3a&IVwTj$xzH2_G~4&0@W|~b#Oe;% zaxTnSgK06dItx8HgSYSGifP&1r_VWjiQ1uke)E zP|VjCBSEWl_EXagtN7tDkp-a&@4qXIhUe0_esSP#M_|c?>e`%aMAp16lP#-Yj)&-I zc}W`Q9puw*eV%(hTEd&B6%sF8m_WYxVOzMutfi=R|ML&2kng~0W* z)OR6PKb$hDLQ_^BqAX8jg)G1W4yALtw*%X(A7fa-rKGXIugI@YCsm83>&Uy?aZOjJ zv`@R;3E^%`5z_n+x7Q<`#e}4M4OL~|*}OZy=S0yTAq4F#xA0exNM$nA2Zn{j^Fjsq zxdPdgv7eXm5-4Mm>0mUCE119Pj-b)FBvfd4n#99Wh0|lV6v1h=J1!7f|C3-p;L`>`mube_gT28;GUo|es7-s|{_Wj^M@b9_U@8>( zoDqqV+UP6$m@8?%n)InV${b2(U^$nnxqtJwWT2^L9CzM`96sB;zAssamg*#%BS!UykLh=c*6?0;o6g|a$VW9@Kj|lR1QBmV9;X4~1> zzpy9S3UnnrJ<GqzLH69N?rYUKh1v;#NP~;i>}$%H_3L9)>Flk zDOB~etn|;-bK>v3RxEJNQ4BC(win|j=!JPyixHw(0Djm5pHTZgq`S{FK=92;;H3Nz+XIrORRUxA)RHcyM`2K4dsawYQ^nA?yLCK1}R^=^-s@-vaIGs*rC72@Pa zj%(#JQ;Eu#KRCVZF(~?EvrkM`3-u@}I8zRjP=7kCPPiVa%ZK7A8eBXMFQTg0u_n*- zO;#EqlD;EF;vV0Mf#zDrLu)f~L((IXlsEn{wKi{;_RWSHz{seBx6h7qXK)fb{s=Vo zr3M!3(2=`I>syP#`cTj$RtXL7Dqi2Qw?T>7#H5@Z_ZA}A~XHmXg#rGZ)qYGd@% zp`ry}uUHZpdN$h=b?X0x76*j}MP2bm?~T@f==B6&-6mBc2TL7`k1HA##kiKuHT@s< zzB;O^?d=*wKuIY9DV6T-Qo2Dxy1P3L972#T=?3YL?rx;J1rFWa4d3=&@4fzFjQ1Pg zzwh^-$8lJDpS{<5p7qQ*pSc3zP@CFFkuyHg@VW1%27C}Tnww7VWH8h2A-%UIuir|Q zyLM_Si?{xi2iH{RH1Tw&`gw`^>zxqDL=$5uU6c`)tF)*QA08XD(0JAy9?AOfV)%9+ zavVD`8A9G@BA&k!GTatC{(|G1zgD{g`0l?rl>IxhEbk$H_eWJl)Fc@f2_t zE%s+!r8_7|qQSs0~DunM4KRbSzAD-x&GYnG+ohIyV( z$j_~8`o%Tt^jw2P6S}YgPh# zM2hNi7N*$JT1zJrj5_@?VHvsLWF`}FfYtzTJI$TPR#p#;A~NLcYs$8Zl__+gKc#(- z@33N8&CP%!dQLvzdA0v~(Y9VVK|r$+VG|ww!?naK7){W_IAbLuxwB>BWSWs@G9l8< zY%QQ3!5QOmUr1?#WQ0A`|4jySUG#|$DJ?**n zV3pKr@E89i6y3p|qyz(KxT>zRJku~B7sMpwZW!j+vgQz|aFdfePto zit1<%xQ1NblYJZjd+YLl33yVv0#QtjZ%(FNe7sVfWoM4LwRZQujJ14gZY|Ue!LQDu zUv6qa(Ki!1={r6dX!10C?^IgFGWeU&t7!+&^O;$sG}gl-3r+2dY^@($i0ay4Jq0-r@Cu{Lgb59u@+P1s zhZC`;7;C9ZIMJ1Ypk+~SugNm-!!lcb3vW#T6(LMz9%g5VNx+}WUmMckfrq+1UfUqb zU+xWk^Ii~g7lfB6LKIWLJ{GtnN1eI!&zsiDKZl;rsp=9+hbQ5K+L9SLTA<<&P)o7)M}~}qYu7)FrTN~;y!^)R8VFxPXr&kUS8lpdW&U@5 z;CFG1c;x>ULgBC2|MS88C#mA`fwg$U(v_luzTaMs?)`p=L$bo_6q~u z@8%=98F<)C$cCSOU0neP34DoQ1+S)l&~*(#e80(o+KA6MbaP7Yg7U>1YK}d*bc!A6e*31o_Zse9hNukjX zWu*S|M{y0+mIw~*2MhdBPmwm4pPhegg9+Zc-eFR!LcU0WLWj3M$TQSPVhe|BYhE=Y z1{$|p=3}}%pET_aQN<*E?$$!3bJs&7hG>hV1^c*XmmFIwRUI@80$z3ijLD`Iq#&q*@2I_>0HVhTv@ta9gYZ+^V3ca}gB z`Ap!y$oOHjbHZw1y+eC_eb?tN-W)|~Rzf5n1f5cXH!y-0ezMd9a3-CC^B_$s<8EPC zV#H|4jM+o0jUnA-Mq(nvt-qZUQ~#Yd=~Ghz!n-A4r}FWNF@*G|>!Zc-_YC&8AF;+S z6gGMA(>GWw62&yGF<9*P&NfKW&}7%6ya~GJSjvOJ8Sbp=&8XGTAsfZ8csMOOX!*JD zw+Ibqhd)28+e&$v$gI8$R4lQvDE7xX95%kU^1`2@Pj-KzWW`Z^`t^%o6Ct|CLh`tI zxBLVA116um^+Oo|$@vp?Y^IgAsH4L}go4dlA<{IdEMD9vVReqQH?aar(Eze;0ATa{ zNAca+ZSSd$oT!{@io0leZ;s9;NYi&4<=P4q4gvoYZKL;q#aB$+bkLGeTof7bO>RV^`Ijprow10BWcDWe^G+Cp zA)^sTS*Fbj9WRNw;-Y>ST2%{GJd+z-8$t(-y`HzsBhgicj-AdR_80nr_iZP1P5D{` zul-Zhz1{ggSYPVS_*QMraczH|i4^WmnC{Ru2b)ohg74?<tM+Jt5fqjzd0S z;Q(`=PJdD(88Gwl&EpduOssr4l-I#~U2S~gRO0MdQT^RWo*KPubQSw5KVSvOy!&uO2g-RcarzBBT= zZsc{o)c-S?luu?v3OLs(0B2vOG=qjucO>XMmvmBd>4$0Vf(9J588?re+J?Mnocs?J z04}LN5e%$wqrBt?%^J8{FZE4diTy`+hf;X4je$=UIE>6qUr8SS=9l1nI?(eM%n_Ui z#WwRB84pVgwlIh}dBNj_rH!kIaW^HSN&Ttny$VEr-}%mm-rk&<5aB!EoZ9gGlyj-2 zn`e0bkSGS5JgJHdPHV|y(>J|5lPE^jp1U6(+de;|Nz~97z^|0foCe4-BHmXfvI{@i zGPAbY)XeYb%DitMet@pc0eFXy1p0;K=^Vn82qd$=3T^d-6vKIyrWnk(^2*bcH14b= zWrdBEveHQ1S4;V!78`qX=W+p|t9zlLdJ!_RM}Z} zGs)8i$+m+9wc$ z?~ixyMi$A#rLs{nw=v>dTCxV;va;GpLnS8*tR{`uQqwXlGRKX2>e!y9ToN`1^vn3| zXp-Bwb?&;Fednonrrkgt7OW>k@Cg5TpAVGFuIT4(n7I5NMz2DBI#3NY@v*z^irx9o z8ZPGbYV3LyqNs#rdycWS6w>Vz#P+pJk=)7e>H#%Or@ek~-4I6LK1(9sFzsr@<=dgn z+n?+sjq%j8@7NGX;T^30c3O4$QazyhcK2ADCmgGPeRtXW2b;KTPElpf*plYiGl0Y< z7^qZ%^57iuD+*wI0KCkhtB3FLqOh%y*(!|pxvF9DPWR$_*II^++)CXy)tDskNn)_d zI#X=9i@HOyC4+^i(lE_JsfZ+-WKeB-St)%x@Iuxya=XXY8*e&=qtSv2a3tk}A!n|x zFU7m&pK&<+!KJxsE~I8DWc1Fxqb>l`I3``>OvkgB-N^~`!D!Zzym=Ln81S@L9HaJ>T+zU*68IGW5$FDroAAmzHd z;iOEAzcLtVv3;8l6VxD%sA&DZA(!0l8gN?fPdbar2;|PhmuazkpcfMyT65cgP8Q@uT!uyPbxo16E`W#5FjSwVzbd&4ldH&htGGj_yU6yfr(= z?|sYe-jGH}Tu%$pR4G`k6n9%w*>#+aeaPG%&*!ZACcIhl#_MEqXZ+@S**tfasDVp@ zT(iO})Q592wKT1x=66@DRa=blgu)QKuqKJk;nh+2dRwC^ZzZ{AHFrAq*P;DEBpCR; zw`=JVS;sK_E@z(zE1wN$XaDHcm}!7VChqw3U65>~MHC@-8fD;;@|fj-D^j!@nbvN> zw=$nY} z=)9XXs#-FZtc8KMw6975`}X&J`oRp#vfa0_^$SMFTY?KF8r;=O_1v5hFWDb_@k(e8 zoCnfN5Qhi{HR(gw#>kF4MXY?(iukZml6y332n7TrB<@hHhV749{!+=L1oTNUNd)dF z5~I9!CTj3@C#6*Oe^mxmw`VH|B7lAVp=&XS&hnfKd1GGTwHsjEw!Ik1sC=nEG|dU1 zT0;$ieb*5`Sxf6ziqKBQMnf~HA%|+gjLNx8*OS*40B9<{k-;a3cz@S1_CNEM80yp9 zTXOubE{u*K#JqLH8j+8Gla?qbUMI?7*~75M?_O$46MbJGFdwaPgg9Mf2XO}7Y(s6Sg<+636cGh&K`_dZuylU?w!sd3oILWrGk0}8WvO$^C1%^~} z@k>BNqj&e!&BgMNkDJD4*okS z_g7t_Q5B|arhnMv!RHJNy@vnlgs_>49hNlX$EYdT&6u;RI0oIL*Bb@0gbl~VAWnnI zxD8#)V9wB8B#Uk2`r4xw#8(6#cSikSr16)1UHj?-OPJvz;03gH=be>fiONdD;YYrS zQQrx)b1uyQtObBf!}320RoC>yA}nmBR)0D^jC0UuT{^>5>+U$9&t=RJmArA1GHh>` zyHA_ZcFuHU;A0Oy4>o36{=~O@t{lu=>=u7HCTRHCtY%l*<3mDAb>NJdK9x4~m#&rN zHcO7T7|mg=bNTZG$IRN=1V|Jz2ytgpZ(jDOaRrLHRU(BR#`l$q=9FK3liou{;Zzjm zK`mpE$(OxuN>br5g>tSe?jmrOS^d`Z&R59el;4*cieMI4U6hM%PuQITa(PN``xB&U zD+ITyG$2vr4_r~6*2uAOPXNop_5SO|2QmJG2A;Ee>upA_xH!M!h7)Oz;lp4zA}S+7 zE8t9O>h{CsBDYXlFwDc3Vt?v6{kxr^p$b*!I^s zLH=1Gsp6n&dUP$I= zHI;tWeCOaJ!$Ni7QvpxwD?*T@fP3ZiksspfieJYK9UH~`jmY{QM26?pXIzbH9V{R6 zn;sO0aF3r5T~Bb1(L!zLwq%%$-rw>vE=uK24*sB_Y6+v^4W-6O!-nFMsTN4MC=s6M z6pGin1*nNA93{Tj^{c$yZ3g?u>H5(m^)%Dofm;u7(x8WTZ-sy}MgO$S#(>UMU_qCd z8tXIC3@}p;jCCj|evdZ2c%C)t>Zd$AB8G zrIw^ZTm@p@+}V!+gHo|yj&pw9v_#+iPurbSS1|;8W3ovtc}m>z>pwJYcjVUb)8g1z zSk9nx#qLzK&jqAF0{yB!A@nAX^B#S#;3iM@Qc#&{_piIG_b3z__98e{<#8~g(9IBd zd;VmS4ANNqro-y6V?~v@V;9xQ^ZKbN`v8)XX8sqkc5B3NPM|QyFtzW|;0P-j>!{Lq z8Zf@!g^54%XKS>1J3p|{kjM`2WYli2FpIpWH51N`?K^y*AA!{%vFd)JbN=<#us0gM z{3Xh2@$OBj%kqib^v3MnZ44jJv45&CI{U}@xyajM$@RhM+%nS2xM#OxxlET+GWpIlBYrw8x?viiC9hMhCq#%p1c=Gnp^GU#;s2XCV$zy+=?3 zVP1-We{uSoYb9p2=?v>#-DUeH+D+(UeUyx#oukeiBwBfp;hlG6^;K}GDW86^MaM4l zW<@yC)T1F)+Dm7Grj)+YV$1lW8uFeiCUD9@{IK${Xmt$ zIn{g7y;9Q`8;kD z&R$oZ0_1j|ES}5(ia}JVAPg{*y2K^kg4_f=F#MuHJ*N6>0QKT?Kx2ux`^0S=bhv-S zpZXB5P_p8Oa{P|&8w3~ySI+&u-vG^?2$WA2BkaKvu!deRiCXZKAi+k z&>d$^uhykcZj(%KrZ_nd0j@zrM8==3UQg|J-qTB^@555^pNQXEB_}-n(njt{ZA8eY z4YZD6d&2Mz-y}?*Y-uBgFVvXnZz+tfQ_SpaJXNlfW@3e!8Z_$N^HD_wO^=Yp4!Us6 zJRdNc?M_cqsB;R|L+4{sVK8`?hc3}`wF$N9NP=_*JuyiAb9U=}S8|}H{&d6TDu>o8|cwCgg?dO=o`Pclq#ajI~-V(uy z>9W0t6h=v@fbPCMMRtwc2f9?BRlS}4E9wuxFJtYaFawpBa6Q$MN#jlS* zlF=f@vA;8HghWlpz2tMFp0cDmbMJ|0ktM8rnZm)GI&#~w_#KVryMxf%YSzHB$uqXb zYtUEQpHvrFC6>B)-P7*=V=bV4FiMO2@w$BN^oAi&?{$D#(u#KzpWJzC}cS*g(cBTF7 zF%*}+Ntf*MvD{rs5?N^YUaZs{}ZCz z?v5S>8f;dE8Y0Zqm3(35R5`XyV-JwNV-f?Xid&kb2Iow*4O3K{1*(WxcGg?PfH!}@l-vV1!UEw(o19CUql z=AB;2LCTR=y1*S&$C*?UBWSBmpZwKq8l}j4?=Th~T}Wc2k}O@4F@^O9WS~eh@@H#Rf6hZF zdoyQ%C#YyP5YO6Lwh5thKZ+&wdeIY}IE$ER%bSa2V!P*SAmU6Vf8ysUcU+dcPKtek zKcp5uk2cn-73*~<^S0N#jeMT0>P}Etdie_(8195=T><2Ne%1wkSc6}#X1TWI=mV&- z<3ns%@OO4UG`rslvR~+#PrZ*~gA%ksQ^0 zp&F2ewzTc@%5yZSv8+0=RkK_hYcgHGzTPHJ9gztGnU1D&z+_U)B1fW0vXktTFp)Fo7&_c7d_OChDWi5f{=hWO9{qmfAZ!mtW z?3y1i6NLq17P|`2C?&#icMORkDapgtx%K*)Cn03X(M6fY|nAPsGZMlmj z7VqVKX`0nILJK`yNCf&+Jc z%8mlyt>nQ+znIiVi?*vfaHq#U&&lIoM#seFm)g>~!vG3L|JE6zFOaKtX8Dt{&?FD} zw?i<0b+U4)7*gP7qo3C=bc9;2QhMr8Bc>7bo>evYycdoxamI4i@+532fSTh=>{%U; zO|!}VdOm*oBX)#;N;!nH2k%I9_WwemqI6sn<)QJf;&xFJV(t!Wycnu%%pJ-_%24=v z!aK%8Nuutg8fT*^WvEe-WZVx^pRNrG;qzpDc2ORT3F-F<)B1M+!tZWJo5xdOo6!29 zYWgdNbWp=ZP)~#3ig@#0jt=>VkG=ZmFx%7V3RJ7zG@lm*B}x$pNiM0+8P3+@^DE@HX4tb#`1_Z#(&H17HI&)W|4E!{aldGa)tkJ?NzP9;XObFIqE zs&#ygO2d>`l&EV55FC7WF|}me)Vva-)41+b9Z7>o&CnotRrlPtF&+k@A*`GKVjIkN`Q?Og_mPnM{&6rZ9INC9NfMar2X^`*S^yG9k0-HOpME%1l8VWw_p0Kh z|HkqFq@s2g(v}SR*v6xH$PnL8n9xl;eAmi@&+J~eJa(h_G(aY6A(WV6(v=T1O&FNW zZ-KU{ZO=Ula(gwo{eI!$bc>0CX&Znk!1##`@!F_l=a7ibiRTOPAvfnbiTs?AQ^&2% zlQbYhv(8###A3-tbn6qwF&vk|7DmJKH=|L|}sO2q?)$PHB5 z)f0h|?Pu=)SefNTwB&dQnQ7BKKJG2JB@a11JRXa_3KcYZM=VVYTd)#kVbNhpLW-NvgwFL@iL(*yx2}({Vc}*T#?Ferrr#l?9DC99C z1J)yxu*Wv~Dv5fW$S`m!bvSE~>(UUD2wi2?6KR4k$F)dlX_0 zdN9&ZlhqScHgnkC zdaM@e(QeR#EO=qYC5kD^Jy&T&AY2@c>p~F@#qL(GrYE`EZJ+U=oUK+16PtLTfKTKd zzdty4PF&_-t;ROCN+SoQZi;9Xj{2p4D!_>3iwbGpR^%Uu*^At?*cPz@&L!m3P=ENK`I&?mNzE*F*=txInD%7vH%OZI6-J$8Ke#x?pPfOJanKy;@Q zjfK0tYir4zYsI*Ft1j+}h9J^r(bd(@=T+Bw*-l`Ggnj z!sO#m4>U(tms)Zj*Ro%R+#epf&49^J`3dW1@DqbM9uL)qqVaay;u56x;?ZgYw9gWH z_1Cuo_BBv$IpLdoi4S*OR)$du17Gm#aH5_+vy4H*3?1HZcF+B6u@mByM0q%BI9(7Y$;XZU}CJ!H6U5wwOOy_A)0bI8vNV@yH?yC5dj)dMG z^K!vC`jOX;16y_pLhfqwzH3QHMTQK+GotNQ8o?+ebKGnvv+iqeJ z7?GjXNm|%<(0H4CFBe`Tw3_3FxHCmrqG4AwL#o4CLiajn*d?ud9v-elL8SJ?+F(^V zi=>i!ZuWA!DTV`DG$Ck}fkmtR&eaO0YXf7Qg*Z-dBxi6SahMIhOd=K%!6|z+*tsHq zwWgNb{uWukm!B;PutK(3e&BHepD`ikz|rr}8g-1w41g^OxKD_O(ydQsjz`~agdsfr zknwftI(6V~dOF|zg%GE06exX|;h~z%zp>{ugN6L6?h4}05MQ<+*&KVXy?*qN(T(dk^SUow zoXnHR0o7i4mXHAJ0eYx`S z_g)%f2OmX-uX!Iq zgy~i+)-sF%06#Ay+ai_o>fIZ#a>ZYgR8b=w;Tt}h*`AkPoz+O%M-1$muV}u=RB?lj zGm9E;<~!zpPz55q8!9iGXL1lOl>>U#Md=bg@)8<7Xch&)Ts)X#4Z}+Q3he|K9Ta1i zy0a>&>Jjko=GSYO4y@H@%N;3Ky&cE$KdQWY=%#kDb%9TGN<&BZ0H6*jWC!u5Z`7+F z=;^~6Vse0UGF;p?W^@vMv7!0~z|Cn{Y~))l;P73#+nxB>kD<0@80>(T=SO-?vJlX7#jae+q-b6?*IDF zDTE#^(X{F{v9<0Dn?pL;zuxZ8=fwr>_iNJq`Jb4q#){&37nU|JmdbNzp;RhvQkEw2 z74{{#93OC{&6TskoJ;TC)TK4|n|mevpQ&+}$K1!XW-OQl!J%J`o(!W|#%; z9JzFjH;+S!!x+Q|!1*P_E_(?zGv%lh$}zwRQTZ=4lxx%Gr4Jbo6GU-Y_p}J{o#-OpE)SmV>iZJ~ z{f3_m3tfX2`I(a@lbp)=c`6^jITpqrv#CSr^(o|EA^e)Vf6UVquW~dI;G`S(NL*EJ zpN_qS%9#13CFgw1js&1%YVY~b?_b`ojY(kW)1Azdcp{2NlP?y-we8SyD&ZmUCh6s% zp=GJi?^D0KD8&Cm!B~zd0#w7)-Jz~GDfZYlq>P8fhz2zjx68f8d1-};v(UwfXIyf- z@|U{jkE>;^D*JU%FizZDLlqZ1-|OEvEGa^Ki4Rc~uiSBGZ<_n;P4oMOg2I?yi3Gk$ zH`Kn#`uGW^p(l|qX0pMDRrsN|z3lR2sniW*GXulJasj(h)TirN7c{Xw5~np-@Dy9@ zw_&z9V%iuakOD2?Y?L=Kfj*h8AF8tDN7}w^866Y`)(2c49}Rh;V)viw<)y{S2$V|w z_P65Q*&)6k^ztTkU)*y~e7*amS(wU}$_exDm>9XLY`88Yr^H8Cl(x(Rxd7_+F=a4zDGM|GV+&{D5Tq}54;AF-F!wJr zHb_pSokGbJe0qOor3HJjUV65D++E5ln-!$US%W5RjU%vFSzx1s{cX{eTZIJ6epmJLO`I^)7NfXR)DQ?u_44%8ovuMyC@<+19l6?po)tI-Gu&IydHuCH_ zqF(7}SufKw5VUgTlKXvyd>wEQ34D%%p9|x=H#pbpS2&%(VpjPclOQIS@XGq*8ocOl zh9vT)eIh`<>I=(eMrb{1ac?Jx`!2A2%M&y9Y4m4&{(Io3hB?eZ4nY%UjTl$xhaM1tu2SJP>ZwbDSP@Bt9uRo!)n)<~3eOOCAsT@nZe9`21f^t{2ZPXa3DxMm#d(JH!9(&l~?G!#Wh+ z&=~7%x_(LP9Z+ZLK^`K?yuqj*Z+5bAAhvce9rRl|qO{q!pQ|e-e1{?l&$`hSb6;yY z`YbUG2HX^6T(Z;IxAc~v<=f`T%n{4Vr+Xr)4Q1yL?}k|B_3y4w7H*_IAHogcl>d3P zW0&ni6pqs^4Zwl8jRkB?LcUopq}6MB5sUQBK4dd}F^H>T7asg>Do4k)gi z%}U=<;jtkV4|UQl&tW92!6V9)J;o(r<0K4J6MRZn*o*8>velYY2|Jl1Mz}c+h6PIC zw+?PJiErX#(lB^dEGP_ri%v4$Oz1zu<2n>!<2T}b#{&80E!DW+vRcb-q#aUdgTvPc z)izu4#iWu`iir2K2^}{}Gp0-45%(ratQ@c0-JFUML)MPFa$0|j8Sdf#w^K)O1 zB)Q%$VKe2;Z}w)*o`%FBku?F>kO89(?QZ7n66*?mqSooXAC&={kL2Wv3g77BU}Fgs zi%Az6rm}e&RCqTXs|laI-0CiP_`HvlT$4J%ww=XOp31#xX}mOFm6by-c+Xhr?!gVS zX}LLMyb-CwSz2qSEbm8`ySXPf*b17fv%hfV;%D%y)v^2>KNV%d?a14b>}Ik+Us8-s zLtP9^Enc)TBP+HhGP*1oGrLkIDz#9sFKT&Bx#1xGK^{ReuPsO$`>DUgY<+H)eFIN_ zYu)a(z6*6yWX<`!lVk1GP90CR9=C#4ybx&2^aOx=9^5+FIOusKqdI%s(psC)E*&+m zXai;OKAhO5CcUUTdV0Q;^L{%S(Za(J$2@3^Q&g^OA#21|<)sH-e>uqFAj!Z%95vQ& z{lm(axN67nzau0`%2VL+J=s&cAz?0eg7cqk02~9`+Vp_DHu@=e*n2+4(+JYyeac0k zXvXa~gx!S!V`GFqSWGAwrG1&Bt6{>oG0*bjV&B!|J@CxZxB`c0cOzbm+L7l7@K6rA zjhpWzWliw25JpO^xSQ9x+bF*x>%wr`NKcqKiExD8w%_K=AjCkIR`w z9G8qe9D$tE537Rr;!uNoPdkIdyC{VS&kFx0seiIv*vji#GSaIuGD-Y_V4=a;KP+qcF; zyM8^guUafC{nqbE`JzWME{r-unWQ5bN@HkTc{>5vn`&_wt7%+}1LFdG$3*WtErokS zA;~ucvtl~shCUfS61Xn9yvKN#A<5eZ1NxTBTrG-tU@_@^3z!_-E+hSTKqWib5RUPmP?1%TmPin$Xyi|tFr^E4rwEl{K zz*D@3iaBPGQ2N0l4Xrbs_-JTpQ?G$hZ>S-Lb6x1G*MubF* zW#y7!SW-mn?Dm?%?wt3tQ}^sZ`C`>Z2RpXHvr_J;yII@;cU>$uubCSHQ({(`p^7I<=X zxS`x|%BcY$9#&7*Yv0x|EGYt3dKH_Kdu8UGWLR)QFQPN@YSi9ftI-MM)%Q-ygf-}O zdJ~VCqS_1VGT9S@X#YW3hFxE!lOvkRuaZ|wIc_sHoW0Lq*3X- z0ecyk<@j||X$udMcnyMCoIjSG5a+A1M;rBeIAg-LiNCB^uaFDKc3tpj>%}P7TXWP% zmiJMMb6m}r^{L=zFjihFTvB1g1D#K`k=BQS%dMETVMxfvUo$u}CA$sd6c>Uj=T4y< z*4r_?@F6Lu6t_O(G#e$V=~1GU7q2~-q8lH6RyHAa2)KJsh$8xdw1eeJ#p_`KcAPx@n_W2 z=XGmk=TfR=O%rqa;jrxj*s>Xij=j8haZi^m!Z}0Ws!aE+qvW6ak6$cgFO()ElH_MmlMjq z%34xX;YS~arFd;E>S96!hIyeJTF_-Cs7D<$wQRt|-9gJ-j;&~{7uT_9#KXi{d)2+Z zVqACJ=Q2~5AX~jofRF-?>c%$L-Z-`@x}F>L<7)4lMs&yz zp>Ns0G?DOJTyQz#TDWwymHOXU*+Hdp^CognTr-TiJby}AAIh18*))3^p)P~%7_#1hf%;`pHH`cs>ou%bs654@1IhW zYOYTVCz~qNx;YIp_^q`WKbDWTd2Na(qIzKCvIBq!+nJ&OjUtuLIx zS2pZ&dyVzPn1L@05 zP&0A;Q$(5iN3mzH0z>9}-eiLfk@GA?(G1_0JMAHk1cChAXX;(SaJCD~QMCm|CT?jp zIk6BWBSDU5ie;wOa1hAq(hUZCd|9@GEM>>DKFW>~sczo-hw5 z`Ptl~BcXb^(Q$ib=FEkX%Mq~sW8xN;6Sr$dwSqr4Ue6Sl?=r; zv@)dLu_+L(d8=XaEwypr!>4_BsIj_>1XB%wIvDZ;h@E2w16l|k1z(nqnt6_Fd{;rMKGwmYes_05BcrW~&%nb?k{T z{D$Kbx^&Ale~_&dmpBwGo+{Je>whZsEDU`d;W1Ppnz*xM$t0(3MVeQ?C|9>b31Y&f ze#gd3{;rqXF86jQL>BHTo1%*n-%jp~%s6*u^^TSq)$3$4 z+jhJs;ZC>9DW`B|D0+I+?ogAUZplJN8%2^FdE{6{q$lo#WPb&LkG$~JMYU<$X^0=xLJ`V>+ z5wS#$d^cK_mNV9QlwRPQa3xum*XE|Bzl3K$r=y2UpO|qp4!Ro3Qdgouto(Sk~bq< zZbsZ5>p`yEJ?&a33id^JPKixkVwc_7{2@nxs}pYVPg4)H4X9m=RG<7@t%VR?vL^w! zKSz0hm|}*Ic)R!53D+l$b3`GkGovjv?~6p5+ZCFU(Bm4sM>Xq@Cvw|@Fuw2v4rRWI z;JrjG)I4MQr5UhKBK#*D7>WVG@+Y8R5D0L{5NUN7?BZ+_vD}AR-?PSgw7})kC-0uy+8EI|s$FLGS_=ZvHNNlM#BDBMiE8D6IAtPGzjkBH z=7sObO{b*WxV-^oxRU3SX(@ccxnLC74^Vo;`Q2FVxubQmt_F^bw$DTJ`0k`{=J8Q7 zUbq&1uGg$%yi&0w8`0MZms=vuIG2;Uc0s4#kr)oNj+A#G%9Y}I?g&3>wnD4!it_(=f^XGQBoBfJ+@2Z_lHyIzr}Zwm=A_zA%K>m zAQDQhHjTH9Gi3v=;ww<5`&nCm=2lrN!FROTTcRDoBCUSJ`7s^pdk<_KnByrm3z&~L zkcX0r?OLhanLO znao+v(#_R4kf{zLnUiVvKvxnal-@3+RkkFIMke?8E8#>w6f9=~4bB4H*(*2{qqaVL zgaFd)Q=C`R;Tjm}R?19t;kgW+#FAu20G@!DL;C~Aqwt%Fi|O$RueOE3x&8Oz(4L+HdgHtBT&?t@#BF0<@EHBtN%LUBy%xd>+U&P4A8W7oLxUb)mq` zl0EJojbI0Z%y;@RJx(~UKkbOsQHwHKns_={EFcvUJL|z&TR;V@-}T=TP&M8VCZ@pe zX?1zG;Tp6w(6KZ-zMKtrSeXn*@G_v=QN%>2%s&d2dKhbAC88U8%2u(Npjy}uFP3p* zh~_KF9Pj34UY_ci%uD1?Wb90KUBP|)y&=6+d<6t}3FeAeO;H$O60|JPpDt5V3wCo; zCY+*tOzCk$WC+jQC?RWkF;nK9pSc118#}mNsqD9k^Dq3CFMYIUTs#g{a+1*MxBAoF zH!WWuC>QmF_&I3D^OSIVw0lJn+2DHfS-7!s{{bIl;}5Xk*Gt1%17XUFPmA#0iyjy|+4&*qP}6JaA95yS;&V=7Yt) zfs+T?4JBFQ;Gi?*9ob#Shbhmr3ouJULO5*L;@BX3LkT`Oi2MZNSA+v1z|IBs1BQSS zW!_TspI7W4hKrop`DFxfC6NEt`bpD3I<0R99ee##A^FeXjaCEiVzP%gpdQl!fq5rD zT<>g(tC2mf*<_Y(>98_ZYYTCLi>*C>JrSOZ>2^v%!S+S;p;}%5RWx76`U*m&%srEz zx#QUh^TPQ$Kt6TO3C@WRQ-gA{na3&a1T@RQQRzG6ZQ9kXuO|EYJn;N1LE+BUl?|0Q zoXESq#Lim~ZH}eNNN{u{u<>7Jr92$KFOpQ_wrZv*0Mr|{xiN2VyC)W0FiPf^rn+5~ z`?%u)5B5rbiR-j1Ick-h@j2A5qPG>M4jt8Qy?tbq1FP8{eB*Sv$ua_)v9niy5 z{@DPf6!)p%kou_+z>T&DBLCzPcTE2edv6&QSGq+B7a>4`26sq;dvJGxy9C$Z9^4_g z1a}V(!QCymyA#~qUFOi;w?p51=bM@5`#JNoimFqG_q?+A+H0-78h_e4s5K%pQ?Y+F zxy^9YvzcaQ3vAOfMB`MMXQ~2S!G|Jz=Y$~WOE))5)2_!p@VD;kxw0v8?PfDynhYIfUi5xo&i-j{N>grwJ9i2GoQYx!79;UCs&q|kTc5hh><<*DX7OLMnAg}p^w`kvqi6rX?#Ei3a`eq<=p4* z83HC@f`2;C8Lv^egf&J}nQT}J?Jw=+P5vV}zPkJS<_VMG|1&v$z^K{?kS>CLZ9BS6 zr}Zj%F!ZU&do!nV0l9mYQDLSE4~oV*-v~V5^v}a7Af-#Le53?L2;SGi`=Aya~Hc zRAzeTRjG`qjpA`udxjGy$ag&Q3NchQbF1_{{-ghBF1=0Y*=bn{FmeQm!ZFS z?}d}y;yx>_u;M(FLN|A>wKW=0PNbG3UsMJ)qc3h_EY7Xe9o;1aR7k+y$DD5P zBrLGeDB0Wv4u&r|v}mU;qOK~RsM+tJ;&z4_$nEyN`}#Z>bc+riBu%qJBst)D=X`2+ z(z0WO=n3zeT0+= z5hG3%TxiRG1d3Pf$K+R51j+!m?|Q>_ArKS$A->>Un-Y>kNLHWjSa&$(HOorlHF4-( zH3|Ld0c_PFOjN2rvXjN;vm{y`#fx;L#Pk&c73sQ5_}|MUGcxxn-E}JnsZ|X)!=2?E z*x4*1+P>YIe>Mg}X-}U4*j!?UbDP>4IFXV_Jgq>@f&L$5N&0W^Mf85rY#y~vPC2@r z6;`m(pg~(J(H5ce$3npTPD8eD4KO}NxKTo%OxNfzwH2HEl!#=8GI;iZ%nyHDYV21{ zjUb${`fym)FW;kiZcm73XT?d93{l!_bt|t&UqTf~YhcIT^LG*td`>oR54gzhFJ$Hd z74`qyUvHNn;VBIPHOTFAp5~?J9Fiolk=W}LW`^!FSg6v^qtR6zRS zijDKKroadWG+E$A!eYB4Umqcv>@GMqt3aj+&mt{+kaKu4tGRK?Ypz{V7k9!qwr#0k zO*iU z_WipmfRgC11utU8l>koUt89-u8m5vRDX(kG>pCq)5N#pJmyUt$an{S>g!#gFT`u}> zd$x&Q>xfw4mVK{eRhd>AydB7+5fC>2fZ43TCw@WAnX>8 zvDXhoUK9~F#}&v+b_@a5bYPRZQ|FeAY)eD(p#K~oW-Kt*YHhU0$yxF?zWsL6>UOD! zL7cpa_#JEVV6$`N_}N-ZLW$sK!`r*Wvj(nUHj$^x{e3rVU_dbyY4Pg;u3WBkQJA~I zz-9pA6X^(%VY>LVz!)2+WN9 zel1>Pl>G9RIkJ(81vBmB)$FAN0T^j_k8bOho%o(?G8sR<-ps~}w<$O3g0duZs-uob z$#RkY??NStIeW*d6=_Pdm5W~!3Q&T*b$l@ednnPyLfXIB{o^{6&dhM@nAk3FP@w)< z*B&-WJwTR9ZU#B5cWA1wyHClakv8xKZ!henZn@=jr0z#armZ&DY7OCN*BMHjOG0JM zkCHn!((XU)W~T-}PaxmVOu8XWsi8>qKjEVD0R>d|hPR1F9al7T*L^_Or)l*Hy7;&= zUWWP`@|`L1_tZ%?rmWv|vB@HLtFs2ix9%(MNTr|htBa5! z)GBAhT~BLQ8C+Al#?Y5oH!d0GJryKcD_XSHi!#re{VMu)!==v>E;dSSfAuw-w|_W6 zXnF{1Gar+y#g`zSm&(snnr;p!%5Xl>E-loG$g^p~7-i3rSxr*X`PpTD>qk?rtJc#+ z23WEHnZs&8Bg5SQXXd0-`e=L$v!lz!0p)^&4vMqqE@*IHqD^y=zr0SQ-G|*7R=5pSGL_nW<>lXDdhn+F4j|^wud&XZ^hR_-!RU7;*vRizo)d28cW;&%aiiP=?b`~*;ioKKv1QhX zj8avaAw~Rrk%}Zkh7tmh6Lc=MqM&I0?e0t{()9#z(Y zk)xDpKgfHL=G2Osbq!yqJLrH0#nWddJ{z9wO22`4`*#&T@%0(TGy#gGzhN!199K$v zP~E8YN@Auw7sH_MoP%wvAhd_~hS!U^^vp2_X;OdLqixC!Jc~E$0u%WBw|S9U^CwT2 zdtUtyRkOs1b{@MbwS1#@D7fHIVjJ*Qbj1~B+t!+mZ22wp@@K`<(S@@Fme}_0&*<-p z^c82NaDl}BCx8Obujb7(;4}ZScmIx+%l&mQlK=eUAK-upgE+pxO>lSzuX@euO?G<+ zD4=kQJzcEiExFDuLb?JHin&`nbBZ!fQpj*Ln{6cMYHz;_KyCdSn<#95?n@x;+7Y68 zxDgVAdB0#MlF%RPa^#_`#Jb>OP;-1UfZg%)!M1^R{#lBjxkXN|9o6W_8=5l)IzR2dJU ze=QUXh6^1OqinF?w0F$Qcx^2ka(%_>wg^qR5woQvR*VAY} zJ8mrtIaqe%R^-VsTKTy3Usw=Y_mV;@y19L*kgr+Ri)pM1ncq(fI`5zy&^p*J>~VVd za^ccI%~1736-ahi{blK}-muj1*kOvn6<@jB(!uC;%X=EHwn&ZHz1o<^DF(?b8Iynb zjuBIfz7N3k5Ej+M-+e45^QxsO&_Q^k+DrgPkXVNjDS7{T%utgZN8nnWy-chjg#pXX zP>^V;ocR{;U++OVfK(D{O}uwJw-1_zm#_PfJWNuZIUk)7XSb+z(hRa|7Qgr$^fN7y z5NQsjI5-IA9IEGjlhO{QQK}$A>pG*r^*gOt3e6|He@74`rP+d^e5%ZQ-9BUB$FO_? zi>C0d?_Mjt#a}M9h8i&)<)c#}M!c1PH$m6){VD%tg6|!N#)jrh+G(kNqDZFQA+I>g zOH?`gH)Q;=fS&ZIO7df}zK8d0Pdn(kKJ5X#ulD%b^dPA^`Ri#Fy`?!5XBVf~%7{(R zv%pg}Y8fEOR=RO{aCHozv0w-&=;|9=BE1cW>LT{>B-Jd^amxethN8@I&~(4= zrr1n`ej7PgAJF&HTH~$K3m!LO3l5~|PQyztsWr&4LsJ;|#F2xdLqDh!ye7{2GuZFF5u!VmQ zrVUQ7A%GHi$GC1sszAW+y*Ig$|AeodAE2JN@OgoL)p3jY5B4%9qc#&o70L_R@$ER? z)uk8rTPO!`wxKM4QYAd%CXt0*bvRu&yx9f4EjSaqpu~bylUf(c01ghh0?_bO$NYoV zmxvApIL=K@M?aW$as4jzv{aoT_(5KAFFZ9lZoH~M*+DYHDBAh6Pf!!I9n}6ypaox z+AU$I^agQE&BNiav!#$Mc}oi1So}ycZsMew@7h%aX6~=hvb_Us%4<@;yL&%hn9Ggh z8Ey>#td!O=7*fo#0o?#8QFOV(b~PqcHA@1m8Exu5RPR*AzPg1^-W`T(R$$Sm=}zsr_IjdOnB6ZP%Woa_<*B#!U19AEOorn$#jJw#@GRN zXG(gBdZWV%=!Bbu*=iqs?E2_yXaCkGP8{;Q!KeecIPNlT2vk1a%;Y(G0!2{RkxWlGJd{*FN-Y#1bukj{J1_zU5^wieSM*Aez~&MS`l zueA(HNOcXkG{NQbWN$jg!P#eOVZOgtn9mdHfL+Nk+eL&yS<@|BDorm!Oq=VEZl$K^ z=(vdQIgjmXdkA*9G6IXT5V#!yAbYeF0d{Ntp;}oNSxfQ){D93DC}GtEEKp%>zRRIy zJ7P;o3`O{yWaH;VhT9vK!a4*N0yyOn)sVVWaMWCGK7CM;j1{zFbSfY8RwySoP+H)-W&Gi@|mMk zPDP!T%{#eQvoj*)IGMSL4H}Bhwo=3jIpDoNX_*wC{AensaI~y{@-=Ra!8itqJkTr- z2RdzS1BdBs^x{%%rpA^+mFrqF<3 zZ-f2Kn7>jGQ<1EW4p)&7J!wfxiZY}8JmJP1J`d_o52rH6`0_!J;gW>U64z`A=$3Ip zy^ZNqM~{d|K%->Q9emFu}@rQrutfM3TKT*>uN+4DsN7>y?;xT0I#kBb17 zYcRLWC!Ow>Bq-LeRd49<-N57x0rt~C=EnN+C8-OSZUqdd`Ng9Iysa?VvgAQc6&@-` zC(>x{QrjFl<~J6|W|sV)KnjUwIT(ixzo=zJ=KN(Gn;nyCpc{?-yJX+9ca`I=P9DWv z`h&<)r5E{2-fomTQm@Q{BL37h!-{`DZNSSc31<%E1O1V0abDS=AwwZR{t4cVQ_Wn0 ze}BszO24`iz^a50CcbjSTzh=tFx?yi(Kz?fn{CvH!-!Zh2@0S}ihTFV>17 zI{NK6nR4zw8D{;ee~>AZenvmW`-5@w?dTKt$D8n*yH^Q+NRPYsT?0FVP=!d}I`iVA ziL2ryz1sbgc|&`qI+zG<(G}%@Ps_d z{0Uqx*%ks#a<;#|?F~l}HyQW_flUTNN?4TIR(6l~){5*EUOx)+se^ z?pF~rx=iTuQ{p>*gj#nmV$d<%Q=qXNaBK-7y4xw!{J^dB8{pfnkY{4c5RP#BKy74Ck+FG~ z^2mYk-6QxfdFfxr|MuH9(um9q8xk6~ifF}D=QveWA{nr5Wu_Qa-=bG&qJKXlwqT(9 zu?_iOC2N=v{1L&0t4n)e1+&OqN9D%X@$0YN90X9&6on^_c4YB&Gyy$xHbpBwG>b|( z9QyMm+t6<7i0NeepA^UA(q46uZFdBt*eQZEKEqr~3p~}S#(q^PSORzZ;}hv=qEH|v z(&{*%RRi{6EcsB93vtr<{yob6K7w_+MlXU+Oya0|P0`B6%{k(^OkB1k)astqTrrV=v|5EH>n} zYUZE6xB(YlHWs@hpkuV?|61%(x)B!DHzxcRz;J_gdItbC$nA$1Gb)fy-q?ZL4=8k; z;u=AQd|a`oy02jMXPsCy@!PQ<(k#0`#Jz{zu@v-s%MlUE`wK`hM2=B6d5EoS-IkRX z-WLcGSjxA(bB$M*kq`WLc%$V&{KUZE!=;bH9+=LqeWtdRB`ptLK5^CRL|!D>Je&({ za^>ZKPMh0zE6za+hm9m-UHNRzE}X&(n<%(R6?iICVOcd8hv`D#z8 zbzJ83dFh7`x0((|Fd%Jm2+C4HLQ9j$-Q7&RChTw#nnL30ybM{)k$?zwZ&7$Ml^6=$+xDNO_ZPoYpooyU|57+RVZ?6XXU=>n zB-ZO1n)lhDoXDyGP%pvlO0JeKFBWt6W@ZUh7lyidN03+!T;YwA;U|H(k~`X4y%6qG zxMEZ8M}=AF%eKP)v<=dNe&6}WSw&!jNj6>QAA3+Ae1{B|@#o&kr+OSk9$GncX)trw z(Hc-f&C#s?-VB+)dA)%(EW3IT1`W5`8)|Z_{5rgT2w1EshCGv_OEtd-JFkEOJ6T4@ z6I_UD75=r&X7=6yt&bxmp*i7>Ppb<$J0wu!&9nSEvup%tq6HqvmI097 z02Tp!^+!n*oV{;l;mmav`uvv9Bw(3xe};j-2U|8?3#cpqzH`O7x3A?l1fTPBWJnue#Jw`|`XSFs!SP8+*!+Smrim$aBGnaF>3bvv z-~n?(XER;MPzdev!AE6Z2r4Kr-<5=>i7x4r!aMg4!=eKwAF5WY-%}~V20&U>kN3g> zdch8N9$3qTnW~pu4iDhxaZ9^~KEV1oADHAQ=y3JTO1?nFOOV@yFH5Ry`e^;@O5fn& zV6po|NKn2a;YGjyvDJF6(m4mUaZInfY2TXHBf3&fBxxwsZp@L+I@8(XjFf+#bjtzB zWB-npawd%;?d59f@O6UVU8Ws5cW`1?f0kn_`STltjtVw&T45h<{0xoSi+XZcaLqxx z0(gBed3L2Z22tI5SSg4!G9^QIpiM0O*aZlY0HER+w2ctD)T;f20Yf=#9bXqbG`#6m z$ow(~|J9a_sMCU_>VVh+Ui+#cmjy}9ShSu}*bqA1xLrhnmi2%i9Som`Lu}@Y2 zZQWE)h?++MODzEqK*xldH|i$; zNU0mN{_THZ`G&+_n2NCUBcY|q^xcp~;x9)h|vQ(ivS>E>-) z;=3hi1%ZK{)$L3Hk{^t*$km7&l!r~{NCkz2<+Q^?@A`E+E6jCaTq)wT}SW0YM zgUAUXjTht&fO=~&x9Ay3RDpF3jjwB=CwAf2z*c8wsq*X>lD`A?3wffeiHAA%Pt(#b zODdGRf06@{>n4s03S?|KK|>Ez%|spE`$A8sjBeiu5`tXLX}E6eOQXr<%+t)NJaCw( z7jcp(mv0_T0g>JtPp)fFAI7`tY@5Toi7Fp5AD*=&vLNGi)fOSfP(p2Q|#B5&K9(;4ZKlhg;Z^G>MvSiQ01EF{a+j{dgYWj*|)baBXa*` zjQcchnaEF9+hVZXOO`PXc1b2`Zt#ZgDuL9RS5>Xeqb_k~T;0*^a))|Gs0Pe*p5mRe z)yqEJA7Cgyo0im!W`j4cHDaZ|zWBt=zLx7rTB%}duthIcTV=j=nN)3nE%1Eb>V?hN zLJ`YW2=$A1SEN|+Xna)Zux^d`K5Kun;(ah42 z=Lk)!hG*U3>G`MK4Eqh}c}B=a{Ga|=&lzM9^5oA^h6uv{2V4EGV7vcApvr6Foxwzw zf*_<3+z;9Hg5iY5T2Yd6Y0mF75QxztUX z;-=n+_57ZPY$o(%e4%I++q?>GOze{&?&loCh>#&|C*Ql4HL4XK=JJ`Nsble*-MPJK zs3XRDCaRU|$JZ8>Pi`z9i)tH)f`=gO8rmv0H4MfSHT^m-_jSisNE{xL)p<~1qy;qViR3DCM>ph@1re;JBXq z5A5T#S^5+=cMU`VsGs?e4HU8lvoO!wuo8lHXUE#5V?A!+i{r@?3Zh9qvj~(D;HvE_V0Pr%S+w@xXk7U?t^8yHc zK0^yDX(Z^S%>VGO%KZGP6WGY5^V`0A@kULIb>eHj@xj1)te{5qz)fwic%JnUl8N?8 zV`ROztpnn%L_$F1ATl}jIj(wp7Z5qTGCLkyPsd;>iB{+<^LoYr2A-?re-;>r{?J~8 z6zCvv*XDw&-ym#G0lEw+z*VlHCGb}(-#?yH@&C?ACw4WZ!i_JvI8Ofc{Zh-6sS-ml zro|lU^GuU00k9N{id$;=LQ1K7h|XG|&Xg*WA&Bw(U=X>%dqQ`gKW1{|CnvJ!cNF~^ z(9}MA1BLPbz5f3<9{;(JqB3*y+C6EhYUrpxBt4QfW5x{NgSU~Wr>?{9snM{AUU=?M z#-ZWdrwMO_u)1f_$kjGI9j-Z9@69$wcMlj=rn|A#Rm$J7Jh~d4QewKY%Qo_X&Bb!{ z&XW*BQS?SVoz_R6j=zp@eEMeEEg=Qv8#H{{w_oQsxL<;Bn+JHfd693B3qqvBQ!94bel@dJn73OT=3FvT z36ruHYjCSLZ*iECeF6Vjt;mIdmZSny^-9IgkIYc=PrM+wDb3uuz0wL-(zFO@;14?G z9(K*{LF+){=8HxUgsHndZEdS3o$+cAW3EERmR)8MX^(uJHgR%}f%Rs?laE$1`)0vr zrx0H0z{%olD({@DEE3HWcX4mAJw<7+Y>W!)bk-lNXByHYK)Fdnb3ID z@|_)xb*)PH{`G)$dc{#bKQ5@7_Btj1PRyTJ-a1S!5CF?Nh(Z-IHf(wso^2xFE4XI4 z_A&$B%|Ii^RpJQ8@d}$20?&17MW$*Oj8`9FG;1No69LlgW{wLEX z3q1TC=yEGIdh=qy{cYdDY4m;B<%=hxXDqe z=H-7bnsEfNzIw-8Yq;q%HUzHnt6_)Qm@_O}&hyXEGi6#Fa*GR?wb0a!UWm*SSuV?6 z{g@9ZCP70xgmq^>1@Lx~`lU=hrSZYGfSuTxt`_>t-04qnm4Tm=af>Wna?&gX`rkBa zy0ku0{c3L^at1$-R{D?)q1fp<_zevIxOd3-_=u5=frXj4;lLWLf41A~kwe;4L74TR zrU;(j{Zp{`GGGCeRm0*IlX(J416A)dWiT!^`hait{0_ zQ%@4LXYOcO@bh#aQucp^UDys0b5+f^PMvo4CDu4fXqT`-|3wPm{c|fw3LW?NZURKq zWn8bnq#Z!{+@5ydvqTaN{pt*XYrP4Z&QHx!h-KIz>A>HMlUDl+Lv1KzD_@Gdk9je*7}Dhw=_1;Z`OK5J$(KQ+-!wY82Kf?UjLaI{q z6B}Kc%)t@F7kg60II8h)Hq)b4rAz$wLb*0V$LwRQ3Z$enZjI&}p<*W_-UCg2bC>#p z3sl*H6^5iXm)a`-ba3w*TFX)ul$o|in#u;sdQXD$+Ei+t*6xS3!;qT8_tEtcqmOu_ z)Wt%4KEu+>3mjEN&hgbL7@w>pMm|IMo&tP}PJ+c>xJ23KFB9}^GG&4tblOx+_Ii}N zekc-`+l}w;;4WtDy>7}b`D-IJ zbt#23bH_~z9{1885`TNH*6nVOLN5rVVSgGwf5pQVuvVg@`+4D3=y-eOPn+}7aCDOj zZ9~hOIEg>lC{JvU%qB1 zp^LyC%J?f5h_5?gy5zq;_?}4`jg#&modV;as#s=qK*~g^iLUl$)bQni`5|wlzjfO9 zX}$0|0}?&tNP!-KaSC=RF}I(D#p72!IWcAMFgD-u1NER}YhI#9G@PL?EN)$QwJh_c zsvN-u+!8bzs%P={PXrm7^o`+gwV8&i%eF$v7}DBI0z##N)lSE?KK8S5UXt)56vwt_iM%tX}o5E=C~J}G~lw8_-H;s#M|d9t)N z9j1>9#X(XGb>6eIEsFTZms)SK)S&YujHU73W<#Pgk#ZGAZYnaX_a-*i#Ze5=)Oo;5 zhg`K|soA$Vswp-kU6}2JUnhzg;pY}xn!i_E2ov2XMl#fN5m7>Qn|+jhu(3`)g0TO& zJGk2HX8YP*6gCREtv!tjb1|(m4dwtui<)cq1>E<7vJ@!M(q2|)6$BItR0d&xaGB2P zH$$midPzuJcCsx0u)9(N==;5jH|sRB%gXq-WkMp;t+*4!)rE)hvBNQ%FnWNFn`~CA z{3b>b8fA^{rm5>^J9FW_esJkH3r8jivS8hgx3vUNGVj|-`47zSn9(b zpVMrl)&H>4E8W2$hL@yTZ!F~Vs*<=K8*Y~!s@FU>?=9!t!GYF#;WNbG^<&M0J zh0jHY5$&7kdPv_7JSX>|0-nk~tW({9%?t2HHBfV1ZPe-;)qtozEP6M2=w`M_=DSxq z_01xwi*PG}fF%L>lO=&r`R=VHukJDL@i=C6Sc;+_4FmWe?BAj@2VL17YTWa#VYeMZ zwrUO(0YKRQMoRP)kU?M#6zWHa;55W6csUPK);f@Wmz5yW1vH&i=TO+G5$- zCI8UKP)yTC98sjhBA-)qnXAG8VD(_KqJ~5P731A8u_t<)mo{Xcl|E&w&%u~@xte`@ zfFLi__P>Q0Zwvj{^OYI=A)375T9aXh1lUNQUt6FjK8RQ`_JZG*GnbNCyS1^C%WqdYmv+Y@z!F@sWVtzaNZ-U9j-^W``dZJBIZ_aSX}pE{rFqF z?zuC>3?bhgY`DIaJcZglh!vWKxaGni8kjr*uOQ@H>99WRvDgvA7Fm_YFPt+FAcfj8 z{&rM758}!#J2zOAy|w5ZdLvFPAT)~^b<#y!jWJz6RbNCYhH^U(5;N4Kf`qnm+#OQ3 zX>xx0Nci!YP{AX#zr^=@IL0khHHUtkt1(>kvA1X!ZVzNqKB04It8e(dcCliR2w5s8uv*+6I-^; z)BFTK(K&k~;bJxepT)Uq{>`>ueHd4pQr8V2@+5cK=0l__Jk}g6dxrcMdn?Ian{BdK zaDBRG6sa*B%>-GQmg}r(r+3V4e48U-MC@%tg6Tv3Sbvy59jux zZq$Q$14ncDIO@z_4@WsruyS9btQD*T2Vg$w;sOBA3bRqlN%OvpHTst;SR)1Ilz%#5 zgaoM1(ymqpqkw38j2K{FBK%WGv)mO&OA@(%+on1&k5<#t%;1Ho{=+XtDt4#gOH>+J z9cSNpVWd9hb1(v$eh@7vdI0Ja5rVYo%eAyq=ZTG^ zQT8Ojx-TRY;Qq!x(u6Cy0tM9?ON$}r3}%dc?v*#Y=aORG!eM( zEiq^-7_L%ezU01I_+&gD&bC}OFNB5TbVowh1Eob^@iJ94&)pzsj?N7A5dB4fL~WDQ z?@TPL3{^01B3UyOvycCC=gDv`z&AMO8+^EA7sr2+Frw0M(%%&;HqR=IqXOy+eb*Wb zVIgWR?2Ct8s)q-et+Iic09ypAaSqY_IKZ#?%QfM&0L7$sZO^3@kOXyv_)gV zaU0)8qb{}@8VvrZGhxVx%gxm=F{)kVED#n6CzQC-@DX__pX%;7+|<`QRCVNw!;P0K zkAhnQ-iXhNu1Hhrr`RrVhyvF%WaV-LnHp>@TnLMc&51>-6?%_M2I_h?9rZ4KHEF!= zp|#*ecmnrbeJy$)6H2y+o!-q!r@Y#q-@!pZb`D>I|{;_8GrFzDTO^{3S z(4!t&GD29gW_Qh0xmeO7Z`x4D<{d5m5=iP^kBXiN+E%(+C#QK%loQgcC z?6E0uqj-<(xb_Ms*HXsz;8g*KT~DTNX5_0U$sdr+mui2}H#D{nWM0Zk{1JnX@4G?fH$@|fO- zFi@`7U6gL~mR|(>6IB!rRHRiO&(tp$sx~Q!A9&6=oFAmD2~yYo?I+_^3^mObv?s)N zydwm`Lx*m=gH;7SK>dA6$&%w~^WbHTB z=i+q43sT0ils=jTIz9DiAYnDWM*dyNvY%3qKLf9KyC2`%@ZxK=ncUAjbm-dQ%|~Q) z10EoBwO96dh?{K%wtHa48nb@d5GXcfK_LDw>lxyxcV_x>ida>e_QlId$S*^kMc) zr2q~1=R=2e`67^bA4c8|9)7G&Y8xee=V^vewXxo+u0(&Sa00#Xcte)?xUS6wow{0? zC`9SMr4?y+YwJAZcSnP_5jkhz^FSqL*wW)Oc!-4Ohs1ien{Ia*Btnf~8rLD_b$iI( z)i%|EO#x_|uu`0b#wAG{H6^sIQuC*4xWJWKtBxaoUivv0AKX``XUekP|BR7`Y>J;t zosp6xJvrPE{BE^+(cybhMTOZ~UX4I#0CRMopUI8!kR<$FKgyidZ$H1fdmi*gYBV0I zZltlZeJVCQ62Vk*wFj~Iw}B70oF2tDq>tB;Dr2XU*hZ@PmWrNr69jnaF=F3)@FBm< z;bX}~yEM68Lg2Yrq3xD|tKM#Pv*r;SOoFC+=Zg1Xxfy0s1CyMsKE6#29b-DOv&6!P zuL>~rnEfJCO(>H3hzZVwj^}(fx9Dp%MlqYWnD%v_ceW#!rhoFL;4>rQ=_FLcS6s1qv3&8gX>Qv{@nR(2QM zJqe|4B3MEU{x*g!2i*-rqo5b{ve`^3@`(Re0W3UOP?-s5=z|4uC>onDy9iCU9Ez#^ z@X<>wT!b~#6?_@4xif?&7^vVCXg|(Rn@6^I(s|U(cUfRV454Y#r(f@Tt^-FR12xbs zbiLhTIUgQT_oghrX`&~!V3L5D>K|jvNKOvSxTJu$%ddVTZtdZph!i{rom|=2JxWh` zdd2Y0mOSiHzIq9IL*)RP7&PV4d+R>H!KI9x1hEj;v4i75C~1tG#369|Ym&Im^D?&F z2@M;@l^cZVa{6(ruE0@t+02s34H^3DxcMVXEIi&vwO`>s3<4fj4!V-ARsUOBfX(@?f?M@os zCsG6x)|#-n2|=PgAluXf)=MHoqEbR=@Xlfpp9OxgSkHPZH7HdWON^dx%Gf12$TRX| zCfuPwkX}`^LwuawdIdL*SxN^?$xLCP5A#lZ_uBw!*__D!@ zQ9I4t9Y6Y1yUwQctu5(JpA4jFfKVxL7aZ*c`A7{>7t0t~Lo2CncH}8)*8KC-2wc{z znS822uX?rGvX3U;pb{)>rdOs7QBz05JXA07Iv~;RcYSGHPg}$o8d5_1@ml!X>qop> zgj!ull1qajb0)zaAy^FLS*PrYq$8fuiApFuA9=THI7MdL7&IKusgFmqtV%6 zCN9RElP+vo$3qJT#}e=;EB*(`$;**7qCS@BF`sYizH3JxdHqVbJGN+Dos3E9 zQnA)ZyH9{`n;FPeP8s%EcZVcFAhggl2n6@f$72g*FVEnxgwlGE*oKhzITT?KH{H|B z%!+PWdOj8=_u-N6kmg|O^21VP@JG#9!9$h^`h%f{Qetd>lIy*cGmPdqY+|a7c`*Ao z_HkeRUa&XAKuLt;cVN0ZN9NCxAc`@WXlxIyvHO*sI{O!56w-8rNA(?Oq2*8CVh(>t zn|SrBzUUR+?i3ThL=a?!t)^QYrx`F-@8a6rr*igwYT4M*Teivv5_8ha#r%~>I?hajhvIAFfx(QAaMP#zLgKjeF*Cc+b!qL=jVh!(C7(~xou{^61>EFM z+@4a9<7xP=hBY>7Q3ZIR(K>EJGVNa>>f}evHz0cXWtLs|{!}Oa(Q!w<((I<==du@) zH0^1|0KoqnMNA;rxIO%SJIwFMg}L4mr-GknONe$Wpa@ zgvC}3Qo-wZp__dGVVg&ZaSQJl#D9C?O*m-iPQjUS=WR`6g0E)TePY$tNE9(^Z7xgc z(j0S*V7Ii7uK7z986Cc2-Bh*SelPCR$|_uceIO?1E&b;O*`{mi(7V-@JV#@4blA97 zICp1aobRu$++N_Hv-%mNrgV_(miOF(k&`fdU)Q@FzTECeLY(C%=X1si0j3tU7}2%2 zk`BVoJy-v&^;85x`($GrMQ6WWiwX8N``)M7@nDEDWj0&GWsgDL`^K!bu;x#93x(LB zB0^gW|Jray!|e$1^X~;ll_T+>Zaf>AwB|-Jzd75G=iBY!dRi44IUu#z zO&Z`0ERx;(+~^w^?uPZErdPCw62}I!f>2rBol&%ZWMt<$v)`Y^ofXYw*z476$(&%Q zxmQnsQ}16}pX<)TsZ2<1Es1i~LvB--y09%E{oy#!3v#(sH@DmgD|l!gp6b=8i>txr zSLaA?>O`3$U(G2uvo_2}_%Z(e>=z`FOwOk(?NfV-3pi#M-_zOlHhav1zTSmP)dgf`BR_=&&k+JCEC%Ktf0oG5*%tgi};|h|n)-QwFfFiXgfd2f7uT(t*Z` zNX%QVo&5-AiE^~Hh+gdYvoR9P$rw#t`@IMj%hslv=moQw2m0j!Js(39*Gy<*ivpDt zkzjr%!};g*@*euxY*m@V_+*oJk-W_Lc_UK}$%8lJ=lt3Y^PpRXjH?25f_M7PJqc~YF-X*xpggD6rWsY9~r!K#4L}S z-^AfkN14e>XYc7ryKSpFFMr<|stu7UGsvd_jkn5IZ0+v^bNisc6w>THbk4eNsqnBbCl`eT!PzLsfJpCz@lX~7SXh3&iT~*&48;)b)DHG7QK3LUsElUH3 zVrh&SE9kf#)qbW*3fk7LXMnm1W>8A+u+fCd0-aSOyjYM@<&B!l+4^1TSM$Frtg<%T zULQp1;36r&u3c`=H*bBpZ$10*!K%ugj&(fMFY{BJnczNq;A)=EyxZSTlPx9pD?a@i zS7)>1@}Usd?xd&sng`b4p-O-G07m<=vJiXLm(bdzRCOIEZrDD$Y1pvgi1JyXYiHHqbY&zSv_(qg8v7cRSb518qhoa+>ZJ%$NFA;w zvk++(XHw0U&7{(A-cy_%eRvmO-dZ~;g0+CkNd`;zWQqG+Iy`v=Uimdc(i_xZm@1H>m>?jg`SwSX(T1QA5K}Q zIGR@mdLw9~u$J$)Cr?r#;vRlZ&-BLpanS{H2|zqA$=&;Fh-xfM%OM;x+WQU@?77JM zpT3X|4Pmzu_@LQ%;v-?t2o=^JyHosp4GcR>6g1Pn6`GIa!>EE>|6U>GZ!>PBJp@Kq z32oM^1W}t4p9F{SW+QEvB(@)E5}qq3_&(UNv#i+T>@#F}a^>0*FNURd6WJ$`-*_c2(_>1MBSv5E!nwZ9kp0+n zr!ti9J zH6SC4#yk0M1*wnB^-I~jA2i`VHJ`t-2nqc zRt)w!GN!T-YgCn+yYSO6_H$k%*}A8iDimavM(1c5;$FSrT+*$SKL0jcs=gl9+td%M zMBeZm$uID}&om`jlSCK1e3kN{srdV=h2hO|Pl0bZhtQk6#bYVe4VC&5 zZPu^va@@@YeBM_+ixtizPD@rb6o1yO%JRs-8@>zcCr%yaXe+EQBjq{WHh&x|%v_XR z6R))hR%oRNBkWZeU*BquDL(H_Gnu@*Cnezy~tszOZS#+jRib6*=z%G=n&bJ>ksegx`?eN(-=>KcE4F*stK+m~p?Ak_Uy$azn98Gw#3`HWa3mBra#7;W*B*VI^wSS{ z&*dvGgz5z5E$pgtBoGRRT#}}&KPv_`T@mnsk8>3y0%59l16FmzZnVy~Q{Eog+T9Yq zIM9(9DP@^B8R)5I#6~-i7&=cMw?3mY2M~b0Up|p=deovg%`U`rdcVt=-dLMrHIGFoP#o7iuQCnYw;IMpSZSD3Ec^x zf6N$Jm*)W`YZhv8KRUKa(Z}(JX6-zs+b*no2P9}ix&r3%n_@X`C<9O#EQW4YD~W=- zMu=|UZbW;uir9ZPgQtmPPXjo-Wepnk#)@Te4O9JhDB}UpGgUGz`8L zO=GyByj_h+p{^=F1gq0Uj?VcYLsdM!tyEWXFtzJF}Q_$g2+5p?^~ z8P}~ny}Q3oczuy3vdQ%=D&I4cnu1z~3F*!wy^0K^QxnOTaxdkMVp<&8f?_(CI5Ezh zf-hH8m!0I@H!e3sEG}xCzyY-)eQ+cDd~Y{f&;L=9Znqb+8T_)X4Z1Mk zJ$-;t)s;<@CdAVnxde?@)+0v>Os?(q5RHu@%R!BM+~=c62bmmKH&!<>@eoY|zHb3` zeBCG7(wj@%nuX4aAi<`BUUr|SxVL&tQwOzQY;E~O2Mx(sk1M^7$=KJ91{b`1U7GE* z?loMZDIp9`5WcM$?5+9Ws#RDP0PFMpgz=+b_43#gxyiswnl)klHIa@r?bK7;i;J)A zUiPORjB;GkeF(MVl7td{6)T0hLY1W=q`Yf=n5xugPj5X_hfdm3V}g0xE;URrv#g-Q@Q8^~msm%VRgjxKO}NO{bZ6=my47MN|B2w8{% zx=Nm+!`-+XQH~ZyKI!7U`XbxGtGw+&y_t-rbNHa#eUtnnXYqkClZQM<+!nql4D=6(Sx}F+yf)z^ zL(?u(3$-3=XMiKdc*tjV5Xsci$27;gH4wpD+O#Vs46#E&#{IAD+jLmY1|o4gtAklTkM z;>t@32pl%5tM4+wPMh_IJ^rL>PK^5+yD@y5%Bpo`o2<$1_Rca169k5SVhTt}!8pi^ zO6Yh5N{FLo#m*;x8zyCqy-WWRRb{ef3kIos@}26_AV9PYE_LfJYxX7HWjgS?oPsVW8+bP^$?-odq&FXz=rjhubHPE)vMtfY+vd<4 zen3gS`@8|d6T&S{DBUcj%|`eHMe62B&)^{HGkWJrAAwEu0Xh-lSdzHj^teI18D>Yc z9k050F&1!5KkN=>(p*4-xQyN>@rkmEtLsb|NP%^9;1M=0)>(3X{;$k(3jPOdlCcAY&H#Au3rKg2E;2iWsAtD&d~d zx=zf3{oxHN0c?_B<(?NseP`z>i>F+PCVM~vnLCfc)tQw?x%3`i=wk_*6#sW8 zQzQ}NMJxoAEGPl?GsJi?z!-u6=^ya1bU*e<03`<_~>Jh64`=pLGal+iXEG z^o7&S-o!qpDIZYOb5Mo-A}H#%VKPXt@LELrKJ-fx4V*R!y)!P)VWg9s!`-LjuO6k# z-C5_)-WxwUPCQ=`HAXq;?Cn3HeM@;VXs0#HSTfAtK@^hTjSkm%G=&qZ zzG3~DUWaDr)+(VyAKh1J0#Bm+ikfXl3SPM7Yls}`lgsRb66zm%q?0WEkfJFP+NL3p z*uE3s-39M)(3`}9XsPAgvGEEMdOIjy2DK;e?#_=>rN(E~HQSi-gX;sK`>z-ysg8A- z{aw8I_fz|LTe^C>k5HkwC~LcTMoC=Q2B17nxf$=B4fCcQ+nZR z{eumL`48QE?$xYM=D+g1HkoliX>~ULv$pdU#}1cZba*9|`6_P$gGPWiQJb1a#1z^0=*PKXQd>OH{S{X2_->IH_wYJ zG`4=de(5T zU2k(0z?v2qRprKHHU-ezo}U}s#dZHrYP>I9v?EHt#|<$}SW4$)sHO8R{H}e~-R_q9 z@U1k&#I@0x4TI_YQdx8i&uS3xK0xDp>S$xe$Y)9pA@5uL2?6)E`-fDsqTxSa(S#70 zmfvu|^#6cGEB`|vrSP9b-NJupKPy5iD*gV#+<#O?mikpD>9+^s{x>uLX>X`{Y&NFB zTQEu2d$6*u*WoznZ=}_nJ(TPM*NSth)P&GqStPlar65_CjUdS?n%-q5_Q_25rY_32Nk0+w5AdfWC0;mGBR^&y)ru_u|c zwKwuEKV3EJ#Zk;iXKI!$5zH3D*|iVmA57Z0{-$>mO;uRVK1Gl_^0{TtRi(2PqM#8_ zG;QfjDu{rZWoTf;DT0E7wd62x-Bk|+tU6j_p=Ir@d&c!v>!-P%bO}I3%bgPat(rJ} z*0BGln{8{8l`LMF##7Q0Qa=Btz|}54`7y&0v7om$*~$fSPbw{YE6mW&`5eG&kRJ}cm>umj3fk{04ChmACtZ-L{ZhfiGQas- zPLLhE31&vtOpE_R*F;N;vRd zeoTL%?oNR^>GA=TDHgX5L(+<3-#SLa&%(p}TZ@&IfBoY9|BSGA(36z9gV=7rV`CN@ zRUIw7b1czJ=>FGv@jDq)Ij@V(Be#mi3l9SGD~6|asxLK@oWk#aI^$&~;);vwaQp4Y za$f#DQr96#Qd(32b+j6XmHNkJ@z>+@SrDKWy>h99OP}+PyDIjd=h45`-+n&>W!fjl>3M?RO%I80+}du^#dX*n7beY?VW!Jz}`_i>>>$)?L-nG({J-|gHF-JkL0`8r}ILqt^a zJByHhkTp0sAwhPwuZ*qaaz+Mu^tV?~iJcc0&6q!N^Sm5y7PEkgXMqTx{k~zMv;I*= z{(q%${Jq8h3yz1jB8{K3J`e`oh-Njs-d$x+M`3ohqM;&li$7ObvC>aP8BSpt}AFa}ms!WR4^H-lI0B%5`)tsfB_;jp?`f%IQ)t?xeFSB^#l> z_RH26wx&J~LP$&_z%O$q7qm8)?~?j;dbi zc{{*Hcrz{^pm#95&BJQ)2HvtFgij~{~%7lyCC2LeT%r<4%UB1sg)$@mx3IF`K zB%6S8`YsprDypyMN~_Nm$4sgM9YQob7Hcdl!+)UN91;+cCJ z+gBNGA+u17y0tt!PFGYq16EICSsLBr02|!P%}WloI!c2xsG?eu?qfWfU&WpqPvK_& zf_MB{l*$xe>Nup-{)Bii(D2}_45&^vy@!b$OXe;68+%xiUhGRThg6RJ=R%b-PAe93 z`4B8aNL$OoyhFdNAs|yKH$?*KYV*C}=4lBe=`SEB;O&{WT)@gQjiFYEWB1JOB(s?LA6#P8)=L%~mDloc?Rnint;GP=Vz zdSSm$D%#T6>(FSKu5Bq1p*3&q>Ltm$d&tR!YT{r3H-7`J61X}*x_R-p@l>WCw8qaB zbt;;%kp~hzL@Hv<-;g5DG?7?(bFBfHP&?nFUJ z`Vt;e367`q$lK+2Q}RWTVE^xBLn_->$$x+1e}S?2J4f*UkIQg4^b@`iV_G#LQIhZx z0pE*!ABv!-yei8(NB248QU964q011V_3Nf3IFo8J)IKYtUkPSAleTqb#A?G~{&e=| z%=dRF(R+eVl<~5s(gwCgG9R-*4rFIwqAs4;(|cg)$_fjsPfvnTsV*eBd_C+#r}md7 z#l9NkF}LQn7843Zsrg0PnI;yvg<@j1kQnNw(zqfT ztM;C-7|g2Iv9VvsaV({eEAN*tBr#ldOSaDMjhVm5@JZ#YGRCM!cq+tEc92`A?Aerm&Lm!z5p`RU5Fz01?IpIK zMGfR!70Wh7&9QOwXcsNA*=@(Y{SlB_J)z~W1g1p0v^nfZthW4NB~r)6GR~xyk^W&b z<2;a*e*X*`gRZ8M`F~jS=0v?`L~Ru8zHHmWVhQL@h9Y=;7$tHw zIvM;kzyZ;gFqDCK0Y?KXqm5z?iH>W6%Yu$CUC>(s5z+yD$s{5T2h~ESN9&mVYhATY zWao=h=&T0+zGY*8TH23hnxG1tZyHiDw6fD{VgtdLNX$Dq=XIs>kpzr%6n;V4WaLZ; z1q5sWCg*=$|?7NM)$}eVHo#)wzf=9LbERpyPQ)p2?gu|6UhtG9s*TXs~C*+E@Rdw_8XOt%b_aoST)LJcsFwXG3-<_M~fL1>P3);?|jo-#s?@+HZQg0$W z{89D(v!$jFr{R-E@DA`f_K&Jc9|;6Q7|IAo<9-qm$x%D zw;I1>D%!5ND6DlPCiRr>ktP-jyyJeGy9pY?pDM?Sc!4bSZkTt=bYaIJc_xgOt2uCV zv;>DSjrW_paf?QMy%arX)3Vf1Rf?TrnAf!%uX>5cb6NAlHq`|PH)3mYt}&+B#_7B@ zx%2iLtY5amj=eePsL$;up&}D=JpOARd9K5RF@ud5*oE3Jx@NyJAsM7OW9B17&-;=o zLMvuE+(Om64=C|t_=8z(ThSj*#ZGvITv z3RlBYw!yCgUgw%wk`DC(I=}d!;u7n(k@g<4T<3}rm%9;QA-EVAO^4LH4f_JVXE2NW zPqdHcuUqJTqLMM+pB^x(6F)CqoFPxR0x;IV0l7^N=Rk1ut3wPAm}k8nf~}p4*x>#S ziFd~l+1|y0K9u11>FDOzuiP{2~%nOc%@nR$W>L&L)qt6tZ#T(R|{e3n9{}nIQG- zi5---V}fM(K@g!g22&AK%9Jbk735nJjWsX{W6)5N!kf(Xv}UnX1i z5Jh(UjZ>Fu_-81FzM0nvbm1iADhg-XdRc10d+h^r4R;W_RpfC$!49cO{G%}X!;l3jZLXJHUpYsMlBfg2TK(a=FI{_i zc%~e^`l+zXt9P;Zz37%*^T>xM$XQU`D!HGUaGQDRY4AS8OZ+HP3Fr{iJd**rL!?C8 z?by1xEjwGdRe{axFki9g9oDGx*+6+yzsl9vcc-gGq*%*t=ZUzH>xOOLfvUc$X*f1V zm^MX`d?E|qt_%@p_jyk`ZTaq$R#?v zCdlnS$-xip3J;$}Y1fzQS}EQ;WdLKUZu!u8n7=vj!*yX`;X8Uj{vDvZ(FV%s=FBkr zsdm9NVz_+#Q*wXq+r}kFKP(Sh90L&?o<9mdKep0<#@+0@K;oOE!K1iL6;@d#Ycx4h zK@e>0OV+i z*8Pnd0a#iJ^VQs{(QxBb0gC*W)`_D<*M|cF>lV<4z7}onz7`rfW8FRK5a>kTr)Q&^ zf>B{@g*+WGdicKI?g&%AV7lj0)!0qC%@jF9s!e*?%_e5`Dxmsz{Zz{g7e-NP@v6fY*dxxLUE`RNQs~?Z5GF5g zW|tp92#F8JooA0ovy5%wLYJc7eCHQOOo`N-crGATa-^$lGcFZH56DGnUm+`M)3G_yql%R z7N7B&JZZG0K+_m$rJYE^93u}4iuF_liLO-wfz@)?-)q*O%J?c za&~fw)&ETT+V2quy~^0tVpo_N7ru_8&kyeQ-?lj{ z&imFUVKis$=E`TZ>JB6(zqPd`jr!O_ZGN;SW<(oW>fZkJ(7M`3=G7zI3J*bjZNq+G z%KQ2H(&Ot3%m+Byi1@qEqeo#B4-P-AO|!)*W{h}4+o-U1gd59L=IJa+HT8<}yJ-!I;6WcpPa z%GVc5@V>MvP$pz|byyZr!6i&-pM%Q`El7@5Ako80DtiG$n`9ucg#RI(@y@n1XS6x- zo)d~)?f%h!-7*OKEqzeXd~1GAbP6{m{QTWMwvaYf>PlNGIvLGz`i7qDHx}+FCD)wD z)d57PZ6iiXCLZ-v8pLjBqc6nuTe4kPrj7!URY5+Fv^`e!qwSHDZFhONqP(9PpOR0*&|2oswl22#u)nlpM&f0scyU4%Ao5s>#zor8l8< ztq6#9*TB?9MA zT4FpT+S)CotLBwTF|S#U-bciL_CtKzsNxQFNazs@1)fX3OG)if0a3$X^jm-B9ItZ#qAsq&IHlMW3+ecA|Ih7H7t4yPr3 z4S}AMT1d-9sbU2$?7T7h1yAP%!H24gEQcYRa?)4xLm&;Z+TMthR)XVo2R%YY78=dxDmmG4e z`m+rTkXjJdBn*BNV4q~$e<^GZev|W`pfY;v(7-O|;R2dMCT1T3tcl`0k2<72g_I|26>{wj& zr2;lX{)$)~!el=TPXocq@50yNlK+T;4;ai?swEUbVscaH%{75HTlUETSWvoc9ynX^ zW0a}7P#NM!6_Zih$d&d`=25qS>&x#B5w>PS6qSM%^t)29ch`K+jV7(HP0A0 zkr7=`mh-e#xzyYd>H<_Zb#21%FB146`&sTA=-NvbDN!qdJ@2}*q2cY+jA=q!4> zdZmazx3w}??7yOU%EfDdQSKY^T$=LZ_qg7~j7UWvW(Y@2&ja6GN&Z9=wl-PdKSc;} z{5V@ly&RM+SLLy%K=3*!=5VEhq^{I>_cR9PT4D&RWbnn0+;@kq9Rq&$3pRxQjgY8- zo`G#;zERBlnNw?p2*(9+BF%hW zx-b?_0FvjLB@^;b*F#~e)gaaMuvrU#0nc<6(h{HiWt>OV`njP#YuGPro!a&0J{%az zwZwhz!kaotZqMq9yj#V~WX2Cdtv}M^pO;a4CoZJ0qpY#~Divk1cPV`b#!k!jGU@TK zv&fO2M~7`^Z@QU~af6ZF&;s8CLJNRN5AaOWX4+8RFw99u=5rRf=9h!0Ee$pe+lG zM^rZAFE$qFP3aKh`+${L#f}~RLl#0>N4KJ~>NLil}UtsfI>oVj93+>HloTD}A!BF{y@E8IutU;lxmTitJ zQJ;W_h6?E`>0^#2hn~a+6jv)sSe?{&5juEE&;IQPb$FH5=pq6pkNf8e$5SkJJztm# zwb>$4PmvQ4j#JOeybhbfvrj{a-uv`f5D~CiYi(?Xf`Ow)ut}k!d(wC2ZmZ-lC?2`yJI*`zWBn!VausG^3 zx6M^jPp`v%ZBAuW0Xw`s1Ap)R7$sxlG{N;iGoKW z=xfitlq_Xbv}FBb#ydmk95iZ}`wxho)4*TQntxM0e9!+x>Xb883jGCwsaay*J@4(8 zcHNq?1;%a~p%~rtBQg&5)389~zQNnF$L&=;mwEXUjegm4^m$MRBJBwl&<)4B|);Ep{< zHsu|MYS~>)6N%Q%B8rd>8Lxe&vUTb9x)rct8l!*!Dwd}kuqc7>$bXsvDn#$kH5xyk z;Sr#d>r7GGFTRBMDJdq+oD875f}^SWB@MU5w3BW>ms2D&xOv~HEzbDYOf^oP)K=?# zlTvCSZx#aLYAAmjCQx;_VY>9g`BZJVnT5BP_>$L*^3H3HHr(4b8{5(2gtFK1<5!lv z$>ZjCkL(bZ)v&G)HLBWBbtB|@lKPi)qT}$JrnFBvn2BpZj9nY}O~v}1j#eso5r{z}dT9wOB}~ zv5SuiieR`EltB0a8Zzu;klT@;MciMDXrGQFG)p(JP>aKr-s18#^Ou)n!qd!Z3Ll#S zX*hVONiSyEt>#gQWg^f>T8B5dS!tMv45I5TmmS^7ObLphG zv4cOO&p3uIM;;C-J=zqq+O~IWyL%}{BLZ`Ll049FE&IFrUO3zLPgg@6E)cw~BxRr) zp(D}Qp-bIM75`<{G>In842p%Eu>Fp8UB}n!ABXe|=AdOBDA0@YSzQm5w1^mk48T@` zqU7=O@QxlvG+o{#C3ML5>{iQv#qC%GVd8rC5+?hh3s!wC$dcdxCr0~M3i)3#+P05L zSdI2m{$Gr&bOtn8n2_ZHA1#C!xJ;tBY8h5&j9!>r$E1v{TRbN$=zfVw;)(Q#&Y?D?=`b-c#zeo_r88hlwb&yEUbJj@5Qh zwfx>JQU=-F2vWq;p{xcRUTpWN$(i1wIN+m4M2N4$z1i}k&aDH}BcZ)RxdLB&nBm7? zpJ|RbwV{tnV%&iFtD+=mSFs2~>d{vnJj`taD4gme7KVPsN^;gi|1*(KB?RJ8IhY@h zxYK-A(?mr_@~R)at`KDSUGN^?q@+>@0Q-l&sOo*3tjOTU6Kqa=06zthqax}_liqCz zpDf4YB>HPN;lc-EZ&XSz+L@0~@u8&;C!%$z|K~8hzoX~ZkCh6O+~@nT1hy9jg%gsv zhvD}!t+3>I*CgsWIes3^?)!1J_$hmTfky2$i5Y)`;~pfGfYN4cjfA_WHvQKwBoe7Z zBlwiiaUpz1`tZ1W_f6ON9d8jSZ(!@2nyxYo#ye)UjLM(XvXJUk*`k)V zqW51kDudSBj7x&p^9pp@c942=zPz`DZ46^*O-cS^9F}8~Sfx^m-6zgVUKD)}ehE-6 zkQy-tPB@Ie=A#i;k-+LANMp&-4}esIAPIJsA$FriH6W+8dONqwC9I|}U1}L@q)=;I z!N)@*Imu=ToW=PTWm#K-jPm9+Bz%p)dK@B90O(w&4YX^2UZD8T;0XV!ep5;7!heW6 zqCe>cvIUKkFAH9gl6tz6S~x@P6iwYXSNTaJ@mJxcrF6H~UK`yPr$$TB?PRw3ciQlp zJ^nnzGJ;2@FtSEnv!tlqUTAU}LvJ{GL-*p=1kZYH$%^tSxq<6#T#N08%=6Yaz%!L? z4asP4cJ(8aXUbX^X~2)49=Dn6==7_e@aP_KHFpXXlJcY^*j^sOe@q|m-G2e^YmT-C zc(D9LKHRkhOdR&|y?JtIK&FHNNe`huORIVnmm=tDVf0`@# zxSLa?9149Kbu>cc3LJ4f(P&J$67jkSnsMDLQsUvx5^@>B1y|{j!0rO!4;U_c3uaUC z>VgKiy?ck(XzX?Sj0k6bAeJq46DiHwuKXwSu z0^wr#k1wVj;$7TOYTp{mZfAK{yMakHdVlU5j{?i{#O3AMw$Kz0dayi*w|&w(E(qSM zU%AIxG%pBNH@EVe%%IM|Y(rqhIG2Dg6Cp9aGvkMX@LG#sQ>iHvJ)arrpY@6H9OZU$ z=-biVEFa8qZBS0-M?oC{Q2z#`7ex0B<}X5!XIIB=H;s3Kfch+G&$`HSJQscH@vDv* zl#gM7HA;IP$L;IE|1vRYg#Mj$b!$T8JR}zn1Ohyaakr^= zlc8jF0S618)@2N>m*b(me!X_rr-X`I{^Rjf9?oB?tidmI>Yw#%Ukphz2Js1s+g+0> zNtTdGyLFy2c_Es`NSw_suiGrbayCsJd_U2;S~7lYyHy(u6kZb4oU6P&_4%^6txDM` zu!SEzo2JyN*?&uJVfG**pR5unsE+J*almZ3$CW@Xn2g~=Z0Tn5qU$vEm4>G6QLATM zN~w21o(o#ObQAn^0rtISRagLSDp@Xa?0oSL0jD4@e9}?>k=?l2hOax`i@1Vm0^1M>-K;Lt_b zlN>AAK31u-S7MAkR-Gju1yI&|88N5zJ|?YkN@h&j{R-sX>LFoCgzLTUU}L!@L?FKh zYF&9Op4KSuC8Fmj2KMbcT=u*zCDmwR@FM3pITY16Q-j*kTz+4t*)+w+E99vC7%6eX z&5-zD^cfzB}k z+3RVbi8Oyq_Sj6B7I4uHAR%D%*@vdVYn(+N%Oq{;2Z4q=ha?G{5wyKiu=ygKO)l?- z5nPYTVvyR}`W;Sh)Tj5^!dF#u6@j;~D={H}_YW=1Xj{Zc`x12try0kRXFEeJ_)i~W zeRM&=&gsZ&F4D)3yaGNll1BXjL2rvNggP#rqrnS!0(@o+SRs!em2XYDpyTK-WKLQ4`PuS|8)Zt-8+@D~HivW8MR z(%&N=-YiRm?ngrDwuskFL+8LD`&zpOg93FvP*^0*<}>;Ibxq!%|NL9BhG~!g754is zX1vLqU+@kWod-Uivh4jlYZG=*9!;u?{k!rP8N}zDhm-s0PJ7DrsmP05dK=m%_U|%U z4Z@OBL4jP1&4q+`*gBXhacft?F?i3)!o(lQn@iDrnhW2s%>I(_yX`RHxan+s5T%A- z`wC}rF#O8sDy7lEs*LP&h3rw_CX$D(LDS2pgrC*`-8w=$)&?Q z`-O1=W#rgEDut)Yz6Qrmy2Z3c7A;IA>Y(^J0lAdgfMUb4ROzzkV~La;uNtU|Ukr9K z@rlEZPd%+|_2wf5f|krJU~IH3C}KS68YLEB@J5fPZWl|I7>=F;;TRc25Adv?H&c!V z1ASa|b(QX|^VipdnIS-K`L=sVB@1 zL(kOhCOXt+&R+bK1+%d@~@p zPf&xZHX>5#eGLw3p#F<;*F`WjMC^|)J#tXYPsc!SOyLz=Mz7n`?fYWUkPLTNcL5Ni z7xO9vXZ=HX$KYOopYq^=-%;{y%kxN9U#6&llg71C|1`l{!Pc{2ObhmKawQ4734#Y- z1pkPYJ3qje{*hzKVo>2iFf<2X=U@#-FwmOhS?208bAZm;Ysap%ss7CELx8KCn2_vae2H~Icu*#1Jxz(vc5DI=lmHnjCa^bLQ6vpP6t|x;(~o!y!#gop{>vM z$-kD%PK12c=k&HoU~tx&l4R`md_cF-R<&k>^}&`_8X;QNtNT_$7lP4r8yVE;!0tKI zUUl>l$do`*ff%6ez&;Ezbx)qT9&*5YkL%{t*cgLvYI6IY2;Y2kU}?^VdooA09(>hc z3DOi(THiG_1e+SCV0`w6EF z5Xr*qKq==rw-hzAZCYBJ6F`>SudHET{4kHt^YfJX;*UDDB=l+NOqaTK%THZkSB#(v z5yI0RtDI!~} zISs|zq#+UGA4JuW?_yM|+$}ORB}bA4rW=^gMQ$3$@OcH4*DUuaXqZ>TnP08dBX*6x zX=cn}4@*|gHh?6)09VW-)>`en5v4SO=ox%KZM6#9JM|z(L0JG`{;J()-k?5>2=w^m^LX{h3;0_@)e%Wm9X6)583Eh zl{LjiZb)f0Fu1Kh=0{_Dd*J9E`*kEU@L2ir$kbar++NbuJhxV8{bw!^5^x1r;RoPo`yJp%3g*Y=H% ze1ON)nqjiFfb%rX%cGK-ZRm=8z}UVCJYIWw)%%F+N|n~0>hV20E0mE+T8ntfHJhggOTP0vNk^)l!a}P0M7|Wlgu1!4GTA zvRfsHoxl7pf7D(Cn4$etTCHyQnsqoYYR% z8XTTu{?ZS?TOrcpj1q}H<8W$#PaVXf$nQPH|Vs^swcxLT*1G#9b(_W>^!Z-{%| zL=BAoFXbro;Il*;QKt@hBsWai#3BIE1VM!Zmv=*%hPG29SZWP8ujBJbtWo318l#DuUgkSC_^Hg0H|ZS* zJh@p|>Cp9`H+g?}Qr)c{+Ml8!ZPgso1i5VF#mO<*Z9s}pQHVdp$i7xe9T3&=T~xAo)V$`a9?qo5}bPC0W9zY zxt0nHkw^JABr4}Td$r%=y>c0PczinaeEnU#(COCD_FYaHz-Zt6>kAF=Sj}HftNI&F z{n&1X1}jJanB-RidHLPg5Rt=UT}aZ~T{c`CGZ(a2{*Y2_h#uK7V+z=XJ^Q#jD?0}U z-Kl^GDT`5C=Aa%mR0iEgr0F8*HXXH^Fh<=pCAlMEhL#up)|qoIY^ghOB=i0%RSRDB zK2bt-8-^`4NyB0dw)dl3N}|AlVI$*Hl;ir=7&oh3j~vwIp)!+Jib7N{)S8v?#f7I3 z8oEz2Z$eaANp1(0Ch}amLdYr;!ynn&$RYkaDB+8n3)yPICcf#~7Gny*QTpbq$h5eA zI9eEfcDF0ABYZ%FW`~_CL`oooug#3?oT!u9o}rDGAF+Qc29H^PV*1TCtY=$fYN2)_ z+ZQ`aO3GFIikD6a${bZQgi@*VxjRZV0O z8PTd1lF#NYZHe0#?cdd#-_{GKw7s;suJlIQ2kCYaF^Hlg5kZvZu9#^>!0`dilh4FL zX?3sq^?*}KYEiI}BFDQO2Y;l@mHcA*`~@v^cfb}+<$4oHdT<1W`Q-xUP+KaE)yQ78 z4C(d$CICPu^H&n&yNiA1<>zT6XK2U?9}JGXR(LD((g|ulu0vufFOsBH^;9ywMKflJ%hyg>|U) z%eni@iCsiXx=QU~A&*%(eb)qE!-S6S0|{qFJmb;RR~KCJ{pRM^Q=|E*?n>^ zedHPD*&%--j2gfy6smhD`bwjJ1`5a6W0o7fi2(tS%W1ukkgePN&C<7_B~!2a_AAqKKs zgP)w$CUTm~L^!OI;{G_V!HWK%4v#N+3qo`S!TdSBnae0rpe*J`uvhuLLR@D}wFMK0 zjaiG!ap@fVh1_1eL>m0VNzAzy3%b+ToiQ#*XDvN$Kl4PUNysBHX$}O`U4!bYqoUrF zbe+r)9 zaMqbMu3BWLXxC9{8Na;tEszY6#7}TY{A_#K*Dq4p(uyVo7t``g;Yj7cNw z;>`@j;q(8aTe6?10^uutiWM&86troHs;%)AtT+7Fe1tj5)2inIpdji!H0AqErx1?w zrkDZ<(8A~kZdIc;lcd6n=Rsr-UKWtxITZu0?$X&_pRwLg*wo>X(v|ZC%0kr;o)1TU z=mlt%Cax8sTBr-YZTlh^^Nf}Hg3CtFj!#4^nutW_V~$JALFTJ5AQ3*nPIarr3Kx_) zHSXez_3^YcDFd9>CWz@R7+<85=TyrHUXusK_&Putou3E-%OTMUHTaZgmMeve`Yo6h z(@w6@!=57(AP(uHJr?hW)e3iedwV*A%H0+W?BkzN9lb8`{i^z1(vXaY67NC^}4XgS(^!cLfqV0`+7wu>^fWdE*-ih7%b{b#4zLS-H z40yxPi7t%(OwNj|TCVR>z#v+Ow>w#=dhe>f=s=4BUFTNyJ#ajZ{^_o*R%UzfL!fGzi8KVdP>i%T^M1S zoEeyrE%vz5!TxVKK0YuyGMc9nGhs(|EJJr}DGc+z$f>p#chj5eQ%Y>0=OGg7GtLwd zpA}sVwqLC(Nj|vxVY5e`)G^(PS$sI2URBEBOa`9Q|aPBZ~yaZMD-^DkFlmX=A$W{nH`c*ml1v0>HnvPT6zGNk00l|=++oA{>EQtU zX3XJ~$5}%O{+urk_q4v6{lw62#52pItCt5eM5;-Dh&!;cT)9Mfc&gsdQCzejMA~y` z79u=Yy9XfHy=_By=M(tS@6`Q`+-?$tOtS1 zm5vaN!P6WBH0?x6Sl2fVRZvGfQf&Acr0Os@hNVUheyt7@__RGEc<=m*y29{9L|7W$ zVkuQ70p1E2)5pt&6C^0;7s4#Z)VkGwo-lPV+OW*ckS2kC-?CH5aC^n)p)^3&X#%Vy z%CHxBX5n$6^G^7H3Kd;%DtD%41IYwpOO z)vf8+rXNYBosml(RPy|K+t=y!HcvdIDn1dewGu7-#0N9w1J>|E9kmhNXRizp?kj2u z1$Qa?Bc!FYn9n>vVA@5*^QZG{26-VOPB8sLt4lL)CN<}9S5NlO%0m1E1HHc!svri+ zT3qzCiQT#FRX_r{cv{NyF8o=kp2d@r&34ds@28OePkZMX6~(gcaRdc*1XOZXa^{dE z4kI8EC1=SBh~%8Z5y?3tIp?GdARr);BqJahh9tp}jKqO?JqYJ;?)9#_-sksNe5f_6 zr>47lch&B__y1RpD=d*UED)JMH||m^9iVgvnE3b!R5$4s?vBAIw9Zp4U3FOsU%P{; zYAP+Kh4tKbr3W8i5JXEqDJ4r{8BLU}OOxOQ49PF+a}uBxod>|HYk{ z1S^A~aH{*&%$>btoGwz#=GKf;p1ImR<Yrgn8v;*UBs6OA8PY zjdfv`uq3d9k}thI4mx2i5249La3Y#7bXr|D#Kz?gBRL!B_wtMio?Uh9&r;&`DT1!p zpCwVYzDp#(%zSr*#G@p$`*vmDLW7Cr#h-e$V!Ldr!Jmzv;XJ%1UqG1xGI#P=*_fyj zg0{(f{_9tTioZ28z3PkHm+6LMh{8knb~_V<$24P@=+2;P>b`ylhwm$~jy%Gt7RYS>V$Q5{xn<2H7SE{D@M ziWvc@vrt4;535}$jeeNRQhIY+K%RklI1p{kLY&+wH^;(Epv>}|3~SYhsCJZ6O1JL0 zc`|pPooOi@EHxjCC$3BFWTks2Mfd^5TXQqm*6H@QS(xrYRXN^c_ImHDf%%V50-K5+ z#vHUvaur8DUA42t=)!P+!1{aw^*%HY4$~*L&~l)STO6YhfONy>rN--d`{?PhyfK+~ zwR>`v>N?0BfkJxh@bgs4VE^aKLa{X`VdM59^2RAFp9@3yqA=4RigKugPLM*UrS z&qowTZ-rjTxapEtdpWoZq%sT+lGxcF&pt1Fxj*m<1KFblB=CP>0DbL&@OoZQ>lKSm zBPScK75{t}WcSbKWyt9Lbhx?8`IhX;Z0>pn)`6`H`#CsR zNx%Oc<1TBuBl3DgSelHUn`>@V~JMyjrC z9}0rAS~~g2T=vO)x>81WF_SuzDy&Pzw-40 zNH#X$`(<3*S5|iAhPp9&>tKc>Z1y<`cMy~yv;TqdBExR&mil*EAa%5$QaEIWuc2`8 z+I^kPuYa$-R`}r4EkWHc_OQ`=K?ggJzf>EpNF(E|Z$b>F6DiiSY?NhB^Tk)}+0v&{ z)twtVe9Lw8#X-A!cr2{Gfp&LdXPLy>PN{WYP2|w1@B86h3=`I+ z?=UPP%DT|bxyZgPw%YY?`zv-5`(hoNSph`cv+aS`Wa&549eiB0vE5?eWgG?8j|T}j zY?n9phSBys_Bc!)r`=_#6iYQ@u3F481Q%Y7RaloyAWF*}GJ{BTW!@9UmmPvMNKfu4 z@8cQp+l?x>!xAd4Fv4;eveUi%)hQ-6u$NT@OBqTrdksF5*$Y67o=nUW{J6qgwbJPW zuU848o#*gMd8*&YFy&bg%i4LgKX`_7MNk2Lz?3HU;C?ogwDVw?am! zC!;JaA;wOb^>#N?>c(t-x7}{;z6AE(Nza#Mk-BTLG8TMzkQvgO%*eOcvZuEtH(sUF zF?C$SUU11X#pAMO?u|Lw)OFWhp^W<3_5tH`BVvX^`BVMX_UN%p+QcYf`oXvG z-zbgoq4~=Npr8?BN}nJ7Z$wVDM8@x=1mnY*tsh&u2<1^bRk|%1Y4>(U5Eu85Wdp!z@{+V#A9Z``JT!LU zuoU^KS-6^CbyaPlsrkA&$%HyX(p0&|Rz7F4tB@V=k`#Z-QY?EuEzC-*Ll;%R9c5iE z&GqI4?k8CHLvpi$flt=N5Oz{J3FNAXhT>1pA#t#>UXKtfORIaOHfmCFUQiNmT(Yaow;#%GfUX6|F zsN-|vJRW!T3vh4f@R22ZT}@S&2b!~(5S1nu2-tV$_1j3`%rj)5yg?ZIE+lPIDjzeG zO(S?(WPYF9#YU5PtHjtOw)El6({K*`vfh=?d>$T*5L6;9Tt3P-(@~nF(9g- zn*BK-1FkU|&1QAK5qXAV{k#s~t*Hgq=HJe9ug^V}ic_hNyP8)I1 z#(@wkWFa44B;e+0+R2gC{RNKoPhAZdYqcx2rmMpl@5!$E&A{gvfz-x&gFO;9+W5?w zc=@*C!cpzibfwnY$p(C_q37h{r$8z=_-SNSA#y+2UREh^ENAFU&c#lO^6XuIQntBLyP_~wmM z&*{|%&&Vyap%2Hm`>vnb&x3V_GY%GPHurW&uDCaL`{T_sQSo=|yGO9_KURXYh&!)z ztfOs|^B;rvgO#G;S+AD|^uWv8D?fY1I-c#{%sVN=0KMYPrS{|8(a)Hip$Z@2Dz$ow ziB%-S?!Vh@Nc^)slj`1aS+XvfKSYBCxvX9hPvO&URHPzzE;Vt4F5nmH8wF6UeFIql^fUmL|wxcmoqOsY< z(-dnjNHG8mQ7Z~`HE8t#02;2T;8^ENo_n)`SzS^9mP+se)O{Nxt%>%A-5{~6k_NpO zL5boU+xMy0Xr-|-Dew{+A9e_STsoW@M!eL+jYr%aCTsuU>S;!r{A6NtXmwAu;$Gd% z5X4whMmVw=u5lWlJcIrBVo(S$WTJAi4ZPAN6Pri^W#{6tj@KvGfyIJg5ZY1|nsR!( zsTd=&W1?08!R5;cNZswhW~886Dv^#^-y2yefMB?zCr6=sAkVzEc*Y3&7wW+{&=5Fx zT9sOpP1TVlQJt>aY2F386%V6x^xrqi9b14a)9WM5RqhsCf8HRJWR6Kx&pF$#d0F+% z7eQ~goch8|0U6s)M0L37!^n-y1}ufk zVbjzoZT+)F?o| zt+~vYp5`VQqDx=^2yPoflN0qo2>c4w<@VNc*cyG0n4nvA911rM{rP za}Ng9Q;z=a7Di@03*j54P9}>XL#q@ipcl4ULfZ87U$S5>c|T=u{lK#tBH50)=B!T>V5koRP=ahU zqn-EjETVTAnY3%K0hGf)Ym0~|`env|T8RS1xFldRh~*4X2f5Ia5yN9{jh^$Vc($zG5jm+fBVQw+Po$AdX=yykJnBd)bd!<<&prDP3z zr}V>S^z&HcA<)Kcd={q*>|&l(Y3sa^>(ci(CUW(D7ZlgWn9sFyqA~(d(W6F zHB7Dy@O+zf%l^j@1uPh`P(XzFuPYw6)}dKU-JZZ)PKZAylYIeC6w&bISBQ>r0J^wwhJ4&J$~!sGC8ua|#q> zigcM*menR@mPT1R5$u|(!(A%uc}Qyo+B`8F7-Y{m{u+pyjX!Out~yf`fm@R5B{bS_ zqE>OS7c+2Kv~hR-ozSBzcZ7m*h$(upfnp0DF9;c1O1^rp~sr?Kb zd@mVl2=H^qXFpv0D)9410?dFY!E36o+HuEa?F)nS zi4dxOC%|9oS=5eR;jSTXV}d-QQv%&%2&rnWr9L-j{r(9Fj)8hToAa2%+2FhE!rCvoDaGE*lSYKxBT>&>8rE*!KuCk zf88vAU>JJvn=0TlgtypttN_sSUkvZg@J}s4NbXP(%i!_4<&IL;WUi=D^;+G2FJKPp zvBCz3tI{!L3Rg`-Z0Y(rsATJtDz?XAgSMKFD>5qVJ9bWo`)COf`$Q_z!q$p&q<@=B zv?_hBT+785}=;9rCkyPTM z++b%k=Oz-ReeuPA*q$uPbD`i3m?AOO*NDB4z=%5V$(erL1Z0*yqxE)sVOX`7agh`% zfESKWai;+fPt5z^J|91U1mF$eX6rt=x5Ks$F1RP7GBM2)KY9$M#kprqSJ^??a|!Aa z?ZC~mp->A9cssfqXSy`>}gWPD2u`NU4zXjgJ!Qq zlhGxxwGmiPWWqu3p0dP3%MUhGU!M$2JVQVrqzSyzC zU*qUe7T>iBg$o8Qi{SiYvVZp*D%izF4rj(AVf_E#Qozr=^dS9ra_VpVJ4wmh_8c9z z8MReN3H*S(Gngn17EI63rc@>40tTM%1F4ywTlklj zE84Cc~u->f0Z8fae{aOvE#e_y3-LefTtWih>U`immAG3+lN ze#C?*dRe87#KuAAvHn8p^R1f@D?dC9C`0Pwey>>3Miz!e6B-$p83c$yb#( zQBCk+Z^I)gCq~OOJjuj`;ZZ(7S~?YDHhopG<~K49&L^ z18@`bY^rDD`*VkZ?97v+o~=!%;0QH+w4sH9xQzAL42T=;>-VOig zQFnYTbo+Pu_KG!{JYjI0F6krYzbQtfmj*Cod9ET%%{9;0?J$5*RyGd{;0hh*sK+C2aq}F9ogeT#nhKSCx;H(MRJC(R(pQ_6hQ+LS%$Dw zqsP4%{P|cgO+8^7tyPipEm&g@5`ovHA$53M-6*+t4iNH_? zq?Ab3dzue2GuFxRxE(>kd{VY9RG1nQUBu7RfzCA;-`GlT27bw`8g96yXjlZ zuF2o&*>$x5vPC3&FyymdEUL;v4_)~pd-S+)5cbA+Ra`kFu`OrWBsz^q=kguOiDm{+ zsh2-dC5#2(TyiRDrRh+waXCm>83hOp_`9`Tlh)cde;w6ELmT_d_^W}2X7L>VqWOU9 z=0%f?)Rdn{s^>(JXd1p=cyk*`)vD;;?pZku1ylg zDi%gHv8{i$#vJ?fG~~CkxHh#kFmL?TO&1pS46g2RJB8;QC^Ed4JE zzDB}CEYtfkpsGrI)G^eZ(WV!p<3~!Q`6*w|lx)oaZ~VqB9l>lT%<@b7^1UnSOZP@l z4Z&(2wS=#4f~AA_^qQNc1VjWNNRw(tqfH@}Sf!0uDypjd_e3nCi%$pmq#2F6m(ZbMTP(FUF9eSJAu1$)HhBLzTkOD z$rgG}%Ddisg@K6uO*ovNS#*jdJ~Bc?>Of2z42P!Nc*(#H2Mhx<%)DJ(pi9)4Pp`!B+>=lmU`n4zZE6!o*dPsHu%AtFaM%W z`8|h4UvRcmrSRLyCg3B)x@Q`XQ{U9cOnRDgE~pIPmR2k=z{vxgl{mF@kSP>*pM2^! z@0$+elvBNU@gm;q?=%sMN!NL}`&FbU0rucpDJ`HR?Q}^2=d2 zdh250;~cGO(+2(X=fQY>grS#Lpyr3ix|jqmHxcx^U?-=5m%W$UcNZ`JKAMgSX_-2j z1Qh($mIvW19NSYEPP>;gasRNRUY}F;qc%&d3b5KVYX|`f|L!Tb_xZZ%&N{qI==B|- zW)=Xsq%B{8UY}Ykj1>_}|Bb!|I##fuBKJ#=-(F*3fxZ3Q3n`Xsef43;;pUjj^JlJA zA3u6}Hyg4^`;;5PEy`NAI@A;u74bX#6O{%oBZps=+mGgjs0_^*`nB)Z*ULRH%esE& zZz@G=KYP#fb8#vW5%?Xpvht5Qw2T|cm*MRV7wPCG? zB5lrM%zv{MH`Rh$MG{*Czg|(N3O=N`J4$S%Ae=W46e?_SekwA?RB1) z#1ZBc!-q>u@AC0I^Jpi++}nQK`yU)gIP|yR^40tMcFNcHSAd|Gx=GDGy*q7&V=i!d z_P0^%v0y8xS))51RBcmZyt{Ep)N$AslcDiz5j4sFjKDMo5!EU~noHY&EnVD9wtDUB zoTfI&zEdU+85)S0OOGs3Ux{OqjAwt{e3`K13r1<4iPG^r)C|P4(Mxa35ZW%) z$@Ue>Q3?2KzkW?qZu4gW>ZJ{=RZ9|g>_GgOr>$`CR9o)g?R=h`S+i7`ef&qcz*p;N zBdZBLZTSM;Sk|l|OZu*E(pD9jiEF{M`!^M#L20sR=omkt1YBU~cmmlaCgQR*9O`Gj zw~R@z3ke_iW`Or^RGaav^(Wn(r*L?*0sZEJjpBW7Wt?_11|0OT9i9Z@$jjMh&hDZy zxc!kwNBc#IK0_m+V!v(hNxKmTO#5uA;{6oqjb=8{%&3GP$U>EnGfcpM^=e6Ur-v2R zr`vc_Q`-mM;juvCR4; zsn{w_Na_V`njpMIoz?v7Vb5HX1WY__xXR{4#fCs|+ka+^kRHC&V2NB1ebj{6exdbqBV5Z26cHa+_0gHgXR$P@8Qk*yl7I3cJE<)X9XAp0XLa59&dUCEH9@IcbClt*5NSklJ1UlFSjf; zyv&qyNdw>bML9xAW{W(w&d3AnPprnj0D=Mz&j3M6N;clWwKZDO!UnnCcgWuRBEYe$ zm^Kwv7y;5Fug-$4oRQm|(Bk4Rvck7MeY#EXpE6;WU$o}sMd%Q6uBEYNlj_Grwvib!a9*4=`KYuMuCw`Pe z_S*-V!Nf};(n;q?fI&ty8k+=4H(bPN*(CP1r0WO4p6* zp;6|Xqc7bwpf$RqM8P0(pnuP0Z?=E8@I-jL$U)TNB^oeK38!UrJk(2c8tvmIG{$r2 z>*%ajGcz&${JguS#=UBV%+*&_ZE2LiA9A3YHCVUhowdd+gL#0s(W6?`uKV`9ygi4n z=F=eyHG)M`RMEs_Ctx_QvQ?n!gYgSXhew~I14wA2pZwMk?JRtVv2fsmjbBfcD_ujL zIC06lZJk)dOBrG$;+UMLm*Rb1*ySyfxLuGM-KmZ@1}()+szt!_54=mPL&QX(IkcAIC#f0^JX1_mpnHL9Y?Jy^bao|aYvVhA&a`OODm zWvi7wefq@iO`#{CTj4wvR4vq&KY8a>TQ{Ny)r7i~t#x=84R_yvUzC@dTb$^Z(YIde zkehWoOZeIKQ?G6Qiv|7d;$yp^3h>%mkme1mW|vMx>2*3S*T2+bz^hFil)YKgt5l`D zc>Saj+bVd944(h`3147(PoE+Zs46_t&D<2aajTQ&w5x0&5m@P2&&Ij7P0>)&UHp3PxlVW>JIQK}2n z@kh0vnCM8-=LO|92gRlN?HWmHKd3_K|MLH@^@`QBaeyx`H9h5d+I-$hm28Yy+CO%+2tM+FJ!y2k08CjU#De)F4U&(<3@+Zz2`aa%?*Y%+dZ-{-a5 zai8FkrUE5-(&sgJIapmj>3To(e5*rvhX(>{XE&)74km9lQhB=&wcYWE(V*O|cANDt zx5>vgiBn+dOrBR515DPv8y2DP3*fYk=~|tkIZge4HIU}3z6*-)Q(zz_!7T)lT;mcY z+JB9ed)r9ajj4n<=6<*0i6HBVqln=pDtVt~N#ybDpiWnPJHn_{ z2(>aK=LC65&n`2dPj05l7H^9O-0XY3K$fDD)T*W2X^)qi`pEb~w)u8LD9*C_0Pl;H zD^ESR5-Qi{gqK`L2x2{52@=9VzS*XkD~9D+?!gO}gt1Nm3^M8Kl>6|CF3OGOZ6djS zCU3cQtb2`Z2C+aZ7uxoO@!zeye*L+p5A5NAgoAV=vtG%Nv(6x9gdx5=`Xbz+^v_8%9UAZf|YC_(xJ3VRSYC2Fy zB+~D7$~Xou31lwm)`^5n8Anq7Kl7GfwBgDtEgvC{i^{mepkDSa>>dbW| zwxAOo3USRL7`Mwlb8@g-$4>1ac4Gow6ckX!lk-a_PFCNgxU4KIN+9J+Qw_L$%0J*l z+9RK*etS97xw7^7}PSpJ6?VwVRbfKqSlXfeOk>2GdB>#J{Fe|p5leziJn z#k{D(>bNQb8Fhq~HBC4*&guZG8s#C?d%Km3uA|+CADQl}_$}@3kg|)L%~)M#;#Vq^ zv)80P`=Y+LT4E-x9LkR!blymi54Y+}>XpJTBgS=98du9g&R(|pm#{RIsoe|T=NtA7 zv=WM{h686o!erz4G-1@>O(30KnS8D%P-;=FC5%mA+(XbX3kq5E-Qql*Jc}Xg9qs>B zQT`cl^JeL1%Wj{QyNv6D4b10stwoVdWn5EvB928(7d}CXp7JsP_xO1C*ej0mK2$Ae z3OsJOP|rPO77ckt*~wtYj71kuz5VGZmG%VA32UXviR-go=6=BiBZY-QJr_-!rx_a+ zGZxavqs1#nHZxBS8d$&~0^u!A%$A^figv-9k=n6L_V`&dPr)Upfkrb`=@l_n8<0DCS2H9N0%)^8Qd5t>6QMw0d zL5NH_snwXyK z@$(xCbEujAI44iQcyP;36^OF;XMi2F3~W z0BLdjOB4gxh-nGuk+_JN!EmF7&vWR1b>q=1REExvBatB}#VDRYHTq7T0Z;vp(v%m) z($l=luH(Z|rB0u6|L{P3`Ie+WW457 z1YC$1`6R`^0oF29M{E+=T)z}>Gh5Om{nR_h&k9l>kSUV4;+i32ETW+H=0h>Bd8h;9cp0cJQ;AA8+Kv1#q=@VeplCNi_=8k@hGugX&~La%?vv=)f+y;lo&cnig?0Qokkh;#vPxZh`q~sXjPygP#rxO(;q zdR$QByh|6l2qw%IFY-oJUca3py{KcDMvV)lePNC&P$X1u#Vhb;s^FtK=TBLB9_jaj z@$2dk|55rDD~LD{leff>k^)1*MblZoJ!mx&4rXKGoZCyNaa`p7!|4VF>s#bq*e3Tp zq11&Kgv(ZcG#@4H?5YK0NUw_rNQhnB@wKY>qJ)*PE1hEN5}nu_Lw<=;nChx(H$D8Z z)Y1YPI{a5$XdatTvwF_m0XS#6@KKJc;$oH%Z-F8^=oGs@>?m=W*KN8D*xcM4;_V#I z>{5@Q62*+PWn;Y8D{Xu>FtWKN{8;~`-}~dR7-b#^PZace%pLaqFrFIvISXBg&oU9d zI?cB1LC#sXT=+cyBq`U%<;l^D_Ei7u|0YXeWsc4$w={|x&6q!MZK8&5CI&$xWjzYG zsXJrZPERH2vxE@;`73XQ1LK~a9taOL1()T{R>mT1nptL0t`eKp@&j*XTVu=vq^7$v zi9gh+$=RqSHA++M6VOL#5;vY>8>u|-3H^n$xY+mrUo-Q!v~hS~6ldr_f%DTpOA`9W zhV&FembIseV+uG~pP8P|pUaKlmei22#GyDV%DJF%ckzyPS+Wj^;~;K}{j14e_5H~G~|a3&a1 zrjcT@r1cT|XoRw#T4PgSKbKaRpxH{;2`pVB;^=iV#uM0&zOA#{X8(%E@=fjROV_)} zIO0}cPtQ6$nQL6-uIP^}quf|k%fe2rfG0II9X&RCr6q*F-voycowI~-)jqy7P8gLH zQ(k`c6-Gk&SLaoR$+nkm>#FXh+aYu@26uo7oSD>sw`Ke3>}h+!U={qOSXX3mx!y

)k}UU8z|#e^p+^k2J)YeiCM#3;_I$}7mf3Y~;rUIE65LZP6&{32~&UxQYGOfQO|0b=$cu>fK9~(Yq%H z(5~ERIWV46)y}lX!Z{h0nU;C0SLOn*JkI! z48QHIl81l%1fs=@YNHdcJ;w?nSL9^4u}1XSd8EJpk;j-pM`wq*jm>+G1BIUvkq*i` z-!hy~ILF6OR34N8f5MDJm^~1o%O3s4ZUzC#{FVEjE1R2}CnM0ai1C^i@(;be#Rf7F zKaj{nk%LJudfb0E?^F6uN5$H}N;cFWPp7}PtxYb4H)^O)Tl@aFM&yGlumu&msI<0h zA^%d!-dn~f-gf`IYF6T3E0-oF`77#^?$vWChv<14jz4Oe87#u|Y%_0R7K*tvG2_Wz z;rvNUt6(lm@))`?Rw`QItjWseliVNi%951kUFf8T(ZsFXeT`Pm(8 z)1(6Mne}eL=M5VkbSJA}9$RBsK&UZf>NLNkw#>hBda_kiMig*`4$_n)ZUm?*=Lt`a z_GPY2R3h$*Qf5y#8mZJhR^RCNVN7O65^XKRY71XFQuWpanbCVk%#CLJ?c#JFBLr;f zzTv)D5S^zl5^^x%jfEk%kt!#_v1i-2Yu#d7IY;E80IVQ4TG}Rwi<-^nRM_XFDdUEl z?Ydjdl!`9<(1hXK4%EY!--WyLZ_~j2+AN%jF@1EkJC7CPMDTq>)`weTl;00PeEtep zM0#m^yD9g^e+e0;OYr_b_I>?;F=~H*e^lvjzcYi^{36?p_ApmFQir8M&1B@d|NOE4 z(k~W*@?$t@Dvj7EArO~-Wc`nhV+OON@Iw3I+JwkXCH(t)RY|4Hf2555vy2F3sh?B> zhug;x!VFXBWe}6BN%LP61Q;vlb0R46B#+?heMo6mmvVkSetxnmq<4gc?^N9X$HUU+ zKPDzV5)z970Kzp($u~e!RL3q4sHAP-e=3ef#ECpfIQY7YtH0{Kj_jhmJ2Z6i<6mAD zoBX3RW?C8Glz)?SPElS)$s7~SBRp2NF&QA#DQx6;DNx<0^PjC)lMzak2VPAwJ~6?@ zHg;22!q!ZQFr&EP^}!6sIR-(yH?&XxA#@R;j5ebW98q^c+h?^he8YmxoWi&pE~M1d ze9%X31iLBEM5=V4d6r7$Kl^O3sF_R-@HdOsh0N!!9T}i^)cn6ziv7+SS|Vg_3x)pbvd0YJ2}2@aMT;HjPm2cM=##| E4^Qs16951J diff --git a/docs/setup/README.md b/docs/setup/README.md index ef7487ee..db75cb62 100644 --- a/docs/setup/README.md +++ b/docs/setup/README.md @@ -1,191 +1,312 @@ -# Setting Up the Development Environment for This Course +# Course Setup -This lesson will guide you through setting up your development environment for this course. +Set up your tools, deploy a chat model in Microsoft Foundry, and configure this course's companion app. The app lets you speak with historical characters while you learn generative AI with JavaScript. -There are many ways to set up your development environment, but we wanted to recommend a few options that will provide you with the best experience. +Microsoft Foundry is a cloud service for deploying and using AI models. An application programming interface (API) lets your code send requests to that service. This course's companion app uses the Azure OpenAI-compatible API through the `openai` JavaScript package. You do not need an additional Foundry software development kit (SDK) or changes to the app's source code. -- **Your chosen environment**. There's essentially two ways to set up your development environment for this course: - - **Option 1: GitHub Codespaces**: You can either use GitHub Codespaces. You can configure your GitHub Codespace by creating what's called a `.devcontainer` directory in the root of your repository. This will allow your GitHub Codespace environment to be pre-configured with all the tools and libraries you need so you can get started right away. See the file `.devcontainer/devcontainer.json` for installed Visual Studio Code extensions and other settings. - - **Option 2: Run locally**: set up your local machine. This will require you to install the necessary tools and libraries on your machine. A way to make this easier is to use a local devcontainer. This is a Docker container that has all the tools and libraries you need to run the app. You can find the `devcontainer.json` file in the `.devcontainer` directory. -- **Access to AI models**. You can use GitHub Models or Azure OpenAI to interact with large language models. GitHub Models is free and easy to set up, while Azure OpenAI is a paid service that provides access to a wide range of AI models. How to set the latter up is covered [here](./getting-started-azure-openai.md). +If you already have another OpenAI-compatible provider, use its API base URL, key, and model name with the same configuration variables. The Foundry resource steps below apply only to the Foundry option. -## Which AI service should I use for this course? +## Prerequisites -We provide instructions for setting up your development environment with GitHub Models and Azure OpenAI. You can choose the one that best fits your needs. We recommend using GitHub Models for this course, but you can use any of these services. +- A GitHub account for Codespaces or forking the course. +- For Foundry, an Azure account with an active subscription and permission to create a resource, deploy a model, and read its API key. +- Node.js Long Term Support (LTS). +- Git and a text editor for local development. [Visual Studio Code](https://code.visualstudio.com/) is recommended. +- Basic JavaScript and command line knowledge. -## Choose your setup +> [!IMPORTANT] +> Model usage can incur charges. Check deployment pricing, region availability, and quota (service usage limits) before creating resources. A GitHub account or Codespace does not supply your Foundry API key. -> If **GitHub Models** is your choice, follow the rest of this document to set up your development environment with GitHub Models. -> - **Azure OpenAI** have your eye? [This is the document for you](getting-started-azure-openai.md). +## Choose Your Development Environment -## Quick Start +Use GitHub Codespaces or your local machine. Both options use the same model provider and `.env` configuration. -The fastest way to get started is to use GitHub Codespaces as this will provide you with a pre-configured environment that has access to GitHub Models without any additional setup. +### Option 1 : Creating a GitHub Codespace -However, if you prefer to work on your local machine, there's a section below that will guide you through setting up your [local environment](#option-2--running-the-app-locally). +1. Open [this repository](https://github.com/microsoft/generative-ai-with-javascript). +2. Select **Fork** to create your own copy. +3. In your fork, select **Code**, then **Codespaces**, then **Create codespace**. +4. Wait for the environment to start. Open its terminal. +5. Check the Node.js and npm versions: -## GitHub Models explained + ```bash + node --version + npm --version + ``` -GitHub Models offers the following features: +Use the LTS release, not the Current release. If you use nvm, run `nvm install` and `nvm use` from the repository root; `.nvmrc` selects the active LTS release. Continue with [Install Dependencies](#install-dependencies). -- **Free access to AI models**: Experiment with various AI models for free. -- **Interactive playground**: Test and interact with different models directly within your development environment. -- **Reliable access**: Hosted within GitHub's infrastructure, these models offer reliable access and consistent performance. +### Option 2 : Running the app locally -### Free access to AI models +1. Install [Node.js](https://nodejs.org/en/download) and [Git](https://git-scm.com/downloads) if needed. +2. Check your tools: -GitHub Models provides an intuitive way to experiment with various AI models directly within your development environment. This feature allows developers to test and interact with different models, understanding their capabilities and limitations before implementation. + ```bash + node --version + npm --version + git --version + ``` -### Interactive playground +3. Clone the repository, or use the clone URL of your fork: -To test out various AI models, GitHub Models offers an interactive playground. This feature allows developers to select from different models, input prompts, and evaluate model responses. + ```bash + git clone https://github.com/microsoft/generative-ai-with-javascript.git + cd generative-ai-with-javascript + ``` -> Here's a [playground](https://github.com/marketplace/models) for you to test and explore different AI models. +Continue with the commands below from the repository root. -![GitHub Models playground](../images/playground.png) +## Install Dependencies -Additionally, developers can grab code snippets to integrate these models into their applications. +Install the root packages and the companion app packages: -![Playground code snippets](../images/playground-snippets.png) +```bash +npm ci +npm ci --prefix app +``` -Through a simple interface, you can explore model responses, evaluate performance, and determine the best fit for your application requirements. Hosted within GitHub's infrastructure, these models offer reliable access and consistent performance, making them ideal for development and testing phases. Best of all, there is a free tier to start your exploration without any cost. +The app already includes `openai` and `dotenv`. Do not install `@azure/openai` or copy older Azure client code into `app.js`. -**Getting started** +Lesson packages are independent. Install their dependencies in the lesson directory when its instructions require it. TypeScript lessons have their own build commands. A global `tsx` installation is not required to run the companion app. -To get started with GitHub Models, you need the following: +## Set Up Microsoft Foundry -- **A GitHub account**, you can sign up for free at GitHub.com. -- **Optional: A personal access token**, this is something you will create in the next section. A token will uniquely identify you when you interact with GitHub Models. This step is optional if you're using GitHub Codespaces (as you can rely on the built-in token `GITHUB_TOKEN`) but mandatory if you're running the app locally. +### 1. Create a Project -## Optional: Setting up GitHub Access Tokens +1. Sign in to the [Microsoft Foundry portal](https://ai.azure.com/). +2. Use the new Foundry experience. Open the project selector and select **Create new project**. +3. Enter a project name, such as `genai-javascript-course`. +4. Open **Advanced options**. Select your subscription, resource group, and a region that supports your chosen model. +5. Select **Create project** and wait for the project to be ready. -> [!NOTE] -> You only need to do this step if you plan to use GitHub Models from your local machine. If you're using GitHub Codespaces, you can skip this step as there's a built-in variable called `GITHUB_TOKEN` that can access GitHub Models from within your GitHub Codespaces instance. +If your account cannot create the resource or project, ask your Azure administrator for the required access. See the [official resource setup guide](https://learn.microsoft.com/en-us/azure/foundry/tutorials/quickstart-create-foundry-resources) for current portal steps and permissions. -> [!TIP] -> From a security standpoint, it's always a good idea to create a personal access token (PAT) with a limited scope and short expiration time. +### 2. Deploy a Chat Model -### Creating a Personal Access Token, PAT for GitHub Model access +A deployment is a hosted model with a name that your application uses in API requests. -1. Navigate to [GitHub Settings](https://github.com/settings/profile): +1. Open **Discover**, then **Models**, and search for **gpt-5-mini**. +2. Check the model's availability, deployment pricing, and quota. +3. Select **Deploy**, then **Default settings**, or customize the deployment settings if needed. +4. Wait for deployment to complete. +5. Open the deployment details and record its deployment name. Use `gpt-5-mini` to match the example configuration, or use your own name and set `AI_MODEL` to that exact name. - - Click your profile picture in the top-right corner - - Select **Settings** from the dropdown menu +In the classic portal, model deployment is under **Models + endpoints**. Portal labels can change; use the official setup guide linked above if your screen differs. - ![GitHub Settings](https://raw.githubusercontent.com/microsoft/Generative-AI-for-beginners-dotnet/main/02-SetupDevEnvironment/images/settings-github.png) +If `gpt-5-mini` is not available, select another model that supports chat completions, such as `gpt-4.1`, and use its deployment name in `AI_MODEL`. -1. Access [Developer Settings](https://github.com/settings/apps): +**Models needed for this course:** One chat deployment is enough for the companion app and the basic CSV retrieval example in Lesson 5. Unlike the LangChain.js course, this setup does not require a second comparison model or a hosted embedding model. Deploy additional models only when your chosen exercise needs them. - - Scroll down the left sidebar - - Click on **Developer settings** (usually at the bottom) +### 3. Get the API Key and Endpoint - ![Developer Settings](https://github.com/microsoft/Generative-AI-for-beginners-dotnet/raw/main/02-SetupDevEnvironment/images/developer-settings-github.png) +1. Open the Foundry resource associated with your project. Use its **Keys and Endpoint** page in the Azure portal, or the resource's endpoint and key details in Foundry. +2. Copy an API key for that resource. +3. Find its **Azure OpenAI resource endpoint**. +4. Add `/openai/v1` to the resource endpoint if it is not already present. -1. Generate a New Token: +The API base URL must look like: - - Select **Personal access tokens** → **Tokens (classic)** +```text +https://your-resource.openai.azure.com/openai/v1 +``` - ![Adding the Tokens(classic)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet/raw/main/02-SetupDevEnvironment/images/tokens-classic-github.png) +Use the resource endpoint and key from the same resource. - - In the dropdown in the middle of the page, click **Generate new token (classic)** +> [!IMPORTANT] +> Do not use a project URL ending in `/api/projects/...`, or a full `/chat/completions` request URL, as `AI_ENDPOINT`. The companion app needs the OpenAI-compatible API base URL. It adds the request path itself. - ![Create your Token](https://github.com/microsoft/Generative-AI-for-beginners-dotnet/raw/main/02-SetupDevEnvironment/images/token-generate-github.png) +This sample uses API-key authentication. If your organization does not permit it, ask your administrator for an approved learning resource or authentication approach. Do not disable organization security controls. - - Under "Note", provide a descriptive name (e.g., `GenAI-JavaScript-Course-Token`) - - Set an expiration date (recommended: 7 days for security best practices) - - There is no need adding any permissions to this token. +## Configure Environment Variables -> 💡 **Security Tip**: Always use the minimum required scope and shortest practical expiration time for your access tokens. This follows the principle of least privilege and helps maintain your account's tokens safe. +Environment variables are configuration values that a running program can read. This app can load them from a private `.env` file instead of storing them in its source code. -## Option 1 : Creating a GitHub Codespace +### Create the File -> [!NOTE] -> You don't strictly need to create a GitHub Codespace instance to test out GitHub Models, but it's a nice way to get an environment where extensions and tools are pre-installed and ready to go. Let's cover first how to create a GitHub Codespace and in the next section, it will be explained how to run locally. +Create `.env` in the repository root, not in `app/`. If you already have a `.env` file, edit it instead of overwriting it. -Let's create a GitHub Codespace to use for the rest of this course. +On macOS, Linux, WSL, or Codespaces: -1. Open this repository's main page in a new window by [right-clicking here](https://github.com/microsoft/generative-ai-with-javascript) and selecting **Open in new window** from the context menu -1. Fork this repo into your GitHub account by clicking the **Fork** button in the top right corner of the page -1. Click the **Code** dropdown button and then select the **Codespaces** tab -1. Select the **+** option. +```bash +cp .env.example .env +``` - ![Create Codespace](../images/create-codespace.png) +In Windows PowerShell: -### Verifying your Codespace is running correctly with GitHub Models +```powershell +Copy-Item .env.example .env +``` -Once your Codespace is fully loaded and configured, let's run a sample app to verify everything is working correctly. +In Windows Command Prompt: -> [!NOTE] -> If you are using a personal access token, you need to update the code in `app.js` in the `/app` directory to use your token. You can access your token using `process.env.`. If not, you can skip this instruction in this note. +```cmd +copy .env.example .env +``` + +### Set Your Values + +Open `.env` in your editor: + +```dotenv +AI_API_KEY=your_microsoft_foundry_api_key +AI_ENDPOINT=https://your-resource.openai.azure.com/openai/v1 +AI_MODEL=gpt-5-mini +``` + +Replace the key and resource name. Set `AI_MODEL` to your actual deployment name, which can differ from the model's catalog name. + +The app reads the repository-root file automatically. Existing environment variables take priority over the file. Missing or blank settings stop the app with an error. + +The `.env` file is excluded from Git. Keep it private. Do not put keys in browser code, screenshots, issue reports, or commits. A GitHub personal access token is not a Foundry API key. + +### Use an Existing Environment File + +You can select another file with `ENV_FILE`. From the repository root on macOS, Linux, WSL, or Codespaces: + +```bash +ENV_FILE="$HOME/.env" npm --prefix app start +``` + +In PowerShell: + +```powershell +$env:ENV_FILE = "$HOME\.env" +npm --prefix app start +``` + +An unreadable explicit file stops the app. Do not copy shared credentials into the repository when you can use the existing file. -Follow these steps to run the sample app: +## Test Your Setup -1. Open the terminal. Open a terminal window (if it's not open already). +### Start the Companion App + +From the repository root: + +```bash +npm --prefix app start +``` + +The terminal should show: + +```text +Server is running on http://localhost:3000 +``` + +1. Open `http://localhost:3000` locally. In Codespaces, open port 3000 from the **Ports** panel. +2. Keep the forwarded port **Private**. The sample does not authenticate HTTP callers. +3. Select Ada Lovelace from the character images. +4. Send a short message, such as `Tell me about your work in mathematics.` +5. Check that a response appears in the chat panel. + +A successful response confirms that your endpoint, key, and deployment work together. The response text can vary. The terminal startup message alone does not verify model access. + +Use **Ctrl+C** to stop the app. + +### Run the Local Regression Tests + +From the repository root: + +```bash +npm --prefix app test +``` + +These tests check request validation, chat behavior, and SDK restrictions. They use local test services and do not verify your Foundry credentials. + +## Use the Configuration in Lesson Samples + +> [!NOTE] +> The companion app and lesson AI clients use `AI_ENDPOINT`, `AI_API_KEY`, and `AI_MODEL`. Lesson package scripts load the repository-root `.env` when it exists. Existing environment variables take priority. Standalone scripts need the same variables before they start. -1. Switch to the proper directory by running the following command (providing you're in the repo root): +The lesson clients validate the required variables before creating an OpenAI client. This is the connection pattern: - ```bash - cd app - ``` +```javascript +import { OpenAI } from 'openai'; -1. Install all the dependencies by running the following command: +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} - ```bash - npm install - ``` +const openai = new OpenAI({ + baseURL: endpoint, + apiKey +}); -1. Run the application by running the following command: +const completion = await openai.chat.completions.create({ + model, + messages: [{ role: 'user', content: 'Tell me about Ada Lovelace.' }] +}); - ```bash - npm start - ``` +console.log(completion.choices[0]?.message?.content); +``` -1. It may take a couple of seconds, but eventually the application should start. You should see a message link to open a browser to `http://localhost:3000` displayed in the terminal. +For Lesson 2, install its own dependencies and run its start script: -> 🙋 **Need help?**: Something not working? [Open an issue](https://github.com/microsoft/generative-ai-with-javascript/issues/new?template=Blank+issue) and we'll help you out. +```bash +cd lessons/02-first-ai-app/sample-app +npm ci +npm start +``` +For an existing home environment file, run `node --env-file="$HOME/.env" app.js` in that lesson directory instead. Use the lesson's build and run instructions for TypeScript or MCP examples. `ENV_FILE` is the companion app's file-selection option; Node's `--env-file` selects a file for a standalone lesson script. +Lesson 5 has an independent package. Run `npm ci --prefix lessons/05-rag` from the repository root, then use `npm --prefix lessons/05-rag run cars` or `npm --prefix lessons/05-rag run wikipedia`. -## Option 2 : Running the app locally +Lesson 4 includes a native JSON Schema example. Run `npm --prefix lessons/04-structured-output/sample-app run structured` to parse a validated travel request with the current OpenAI SDK and Zod. -Even if GitHub Codespaces is a great way to get started, you can also run the app locally on your machine. To do so, you need to do the following. Start this step by copying the value for your token you created earlier in GitHub. +For MCP lessons, `npm run build` only compiles the code. `npm run client` builds and runs the client, while `npm start` runs the compiled server. Clients close their transport after completing their work. -- **Create and set an environment variable**: You need to set an environment variable with the token you created earlier. Create the variable and assign it the value of the token. +Models can support different request parameters. If a lesson sets parameters that your deployment rejects, such as `temperature` or `max_tokens`, use a compatible model or update the request for that model. - on macOS or Linux, you can set an environment variable using the following command: +## Optional: Use GitHub Copilot for Companion Chat - ```sh - export GITHUB_TOKEN= - ``` +The companion app also has a Copilot SDK backend. This option requires GitHub Copilot access rather than a Foundry deployment. - on Windows, you can set an environment variable using the following command: +From the repository root: - ```sh - set GITHUB_TOKEN= - ``` +```bash +npm --prefix app run start:sdk +``` - > [!TIP] - > You're recommended to create an `.env` file in the root and add [dotenv](https://www.npmjs.com/package/dotenv) to your project to manage your environment variables. Then you can access your token using `process.env.GITHUB_TOKEN`. +Use a Copilot-compatible token or GitHub CLI authentication as described in the [app guide](../../app/README.md#run). This option is for companion chat; it does not configure the independent lesson samples. - ```javascript - // add to top of app.js file in /app directory - - require('dotenv').config(); - const token = process.env.TOKEN; // your token value +The SDK backend is chat-only. Do not enable host tools or approve tool permissions to make chat work. Keep its forwarded port private. - ``` +## Troubleshooting -- **Run the app**: You can run the app by following the same steps as above, but instead of running `npm start` in the Codespace terminal, you can run it in your local terminal. +| Problem | What to check | +| --- | --- | +| Node.js version error | Select Node.js LTS. Use `nvm use` if nvm is installed. | +| `Cannot find module` | Run `npm ci` in the package directory. Root and app dependencies are separate. | +| `AI_ENDPOINT`, `AI_API_KEY`, or `AI_MODEL` is required | Check the repository-root `.env`, spelling, and whether an existing environment variable overrides the file. | +| The environment file could not be read | Check the `ENV_FILE` path and file permissions. | +| HTTP 401 or invalid API key | Use a complete key from the same resource as the endpoint. Ask your administrator whether API-key authentication is allowed. | +| HTTP 404 or deployment not found | Check the `/openai/v1` base URL and exact deployment name in `AI_MODEL`. | +| HTTP 400 or unsupported parameter | Confirm that the chosen model supports the lesson's API and request parameters. | +| HTTP 429 or a rate limit error | Wait before retrying. Check deployment quota and usage in Foundry. | +| A generic error appears in the chat | Read the server terminal for the provider error. Remove keys and private resource details before sharing it. | +| Port 3000 is in use | Stop your own earlier app instance, or set another `PORT` value before starting the app. | -## Summary +## Setup Checklist -In this lesson, you learned how to set up your development environment for the rest of the course. You created a GitHub Codespace or did a local setup and configured it to use GitHub Models. You also learned how to create a personal access token for GitHub Models and how to run a sample application to verify everything is working correctly. +- [ ] Node.js LTS is available. +- [ ] Root and companion app dependencies are installed. +- [ ] A chat model is deployed in Microsoft Foundry. +- [ ] The deployment name, API key, and `/openai/v1` endpoint are in `.env` or a selected `ENV_FILE`. +- [ ] The companion app returns a real model response. +- [ ] Local regression tests pass. +- [ ] Credentials remain private and any forwarded app port is private. -### Additional Resources +When you finish using the Azure resources, remove only deployments or resources that you created for this course. Do not delete shared resources without their owner's approval. -You're encouraged to explore the following resources to deepen your understanding: +## Next Steps and Resources -- [Azure OpenAI](getting-started-azure-openai.md) to learn how to use Azure OpenAI in your development environment. -- [GitHub Codespaces Documentation](https://docs.github.com/en/codespaces) -- [GitHub Models Documentation](https://docs.github.com/en/github-models/prototyping-with-ai-models) +- Continue with [Lesson 1: Introduction to Generative AI](../../lessons/01-intro-to-genai/README.md). +- Read the [companion app guide](../../app/README.md). +- See [Microsoft Foundry resource setup](https://learn.microsoft.com/en-us/azure/foundry/tutorials/quickstart-create-foundry-resources) and [Azure OpenAI-compatible endpoint guidance](https://learn.microsoft.com/en-us/azure/foundry-classic/openai/how-to/switching-endpoints). +- Read [GitHub Codespaces documentation](https://docs.github.com/en/codespaces). +- For course problems, use this repository's [issues page](https://github.com/microsoft/generative-ai-with-javascript/issues). +The setup flow follows the [LangChain.js course setup](https://github.com/microsoft/langchainjs-for-beginners/blob/main/00-course-setup/README.md), with this course's repository, packages, model requirements, and companion app commands. diff --git a/docs/setup/getting-started-azure-openai.md b/docs/setup/getting-started-azure-openai.md index 2f15cb05..dc349543 100644 --- a/docs/setup/getting-started-azure-openai.md +++ b/docs/setup/getting-started-azure-openai.md @@ -1,157 +1,39 @@ -# Setting Up the Development Environment for Azure OpenAI +# Microsoft Foundry and Azure OpenAI Setup -Azure AI Foundry is a service that allows you to deploy and manage AI models in the cloud. You can do things like create a project, deploy a model, interact with the model, and more. +Use the [course setup guide](README.md) for the complete instructions. It covers local development and Codespaces, Foundry project creation, model deployment, API keys, environment variables, and a live companion app check. -> [!NOTE] -> If you want to use Azure AI Foundry models for your .NET AI apps in this course, follow the steps in this guide. +## Connection Settings -👉 [If you want to use GitHub models, follow this guide instruction.](./README.md) +The companion app already uses the `openai` JavaScript package. You do not need to install `@azure/openai`, create a hub, or replace the app's client code. -## Create the Azure AI Foundry resources +Create `.env` in the repository root with these values from your Foundry resource: -To use Azure AI Foundry models, you need to take the following steps: +```dotenv +AI_API_KEY=your_microsoft_foundry_api_key +AI_ENDPOINT=https://your-resource.openai.azure.com/openai/v1 +AI_MODEL=gpt-5-mini +``` -1. Create a hub and project in the Azure AI Foundry portal. -1. Deploy a model to your project. -1. Add the Azure AI library code + API key and other credentials to your code. +`AI_MODEL` must be your deployment name. `AI_ENDPOINT` must be the Azure OpenAI-compatible API base URL, not the Foundry project URL or a full chat-completion request URL. -### Step 1: Create a Hub and Project in Azure AI Foundry +Follow [Set Up Microsoft Foundry](README.md#set-up-microsoft-foundry) to obtain these values, then [Configure Environment Variables](README.md#configure-environment-variables). -1. Go to the [Azure AI Foundry Portal](https://ai.azure.com/). -1. Sign in with your Azure account. -1. Select **All hubs + projects** from the left-hand menu and then click the **+ New hub** from the dropdown. (Note: You may have to click on **+ New project** first to see the **+ New hub** option). +## Run and Verify -1. A new window will open. Fill in the details for your hub: - - Give your hub a name (e.g., "MyAIHub"). - - Choose a region closest to you. - - Select the appropriate subscription and resource group. - - You can leave the rest of the settings as they are. - - Click **Next**. - - Review the details and click **Create**. -1. Once your hub is created, the portal will open its details page. Click the **Create Project** button. - - Give your project a name (e.g., "GenAIJavaScript") or accept the default. - - Click **Create**. +From the repository root: -🎉 **Done!** You’ve just created your first project in Azure AI Foundry. +```bash +npm ci +npm ci --prefix app +npm --prefix app start +``` -Before you can interact with the model, you need to deploy it to your project, so let's do that next. +Open `http://localhost:3000`, select a character, and send a message. In Codespaces, keep port 3000 private. -### Step 2 : Deploy a Language Model in Azure AI Foundry +For an existing environment file: -Now, let’s deploy a **gpt-4o-mini** model to your project: - -1. In the Azure AI Foundry portal, navigate to your project (it should automatically open after creating it). -1. Click on **Models and Endpoints** from the left-hand menu and then the **Deploy Model** button. -1. Select **Deploy base model** from the dropdown. -1. Search for **gpt-4o-mini** in the model catalog. -1. Select the model and click the **Confirm** button. -1. Specify a deployment name (e.g., "gpt-4o-mini"). You can leave the rest of the options as they are. -1. Click **Deploy** and wait for the model to be provisioned. -1. Once deployed, make a note of the values for **Model Name**, **Target URI**, and **API Key** from the model details page as you will use the later in your sample code. - -🎉 **Done!** You’ve deployed your first Large Language Model in Azure AI Foundry. - -> [!NOTE] -> The endpoint is similar to `https://< your hub name>.openai.azure.com/openai/deployments/gpt-4o-mini/chat/completions?api-version=2024-08-01-preview`. The endpoint name that we need is only `https://< your hub name >.openai.azure.com/`*. - -## Adding Azure to your code - -Now let’s update the code to use the newly deployed model. Here's the plan: - -- Install the needed libraries, you will need the libraries `@azure/openai` and `dotenv`. -- Update the code to use the values you noted above for the model name, endpoint, and API key. -- Run the app. - -1. Open the terminal and switch to the project directory (providing you're in the project root directory): - - ```bash - cd app - ``` - -1. Run the following commands to add the required libraries: - - ```bash - npm install @azure/openai dotenv - ``` - -1. At the top of `app.js` add the following imports: - - ```javascript - import { OpenAIClient, AzureKeyCredential, ChatRequestMessage } from "@azure/openai"; - import * as dotenv from "dotenv"; - ``` - -1. Add the following code to load the environment variables: - - ```javascript - dotenv.config(); - ``` - -1. Create new variables to hold the model name, endpoint, and API key: - - ```javascript - const endpoint = process.env.AZURE_OPENAI_ENDPOINT || ''; - const azureApiKey = process.env.AZURE_OPENAI_API_KEY || ''; - ``` - -1. Create a client to interact with the model: - - ```javascript - const client = new OpenAIClient(endpoint, new AzureKeyCredential(azureApiKey)); - const deploymentName = ''; - ``` - - The code above creates a new client using the endpoint and API key you noted earlier. It also assigned the deployment name to a variable. - -1. Create a prompt and chat messages: - - ```javascript - const promptText = `Tell me about yourself.`; - - const chatMessages: ChatRequestMessage[] = [ - { - role: 'system', - content: "You're Ada Lovelace, a mathematician and writer. You're considered the first computer programmer. You only know about the time you lived in, so you might not know about modern technology.", - }, - { - role: 'user', - content: promptText - }, - ]; - ``` - - Now you have a prompt and chat messages to send to the model. Let's send the messages and get the response: - - ```javascript - const completionResponse = await client.getChatCompletions(deploymentName, chatMessages, { - maxTokens: 150, - temperature: 0.1, - }); - - console.log("Ada says: "); - console.log(completionResponse.choices[0].message?.content); - ``` - -1. Run the app: - - ```bash - npm start - ``` - -1. You should see output similar to the following: - - ```text - Ada says: I'm Ada Lovelace, a mathematician and writer. I'm considered the first computer programmer. I only know about the time I lived in, so I might not know about modern technology. - ``` - -> 🙋 **Need help?**: Something not working? [Open an issue](https://github.com/microsoft/Generative-AI-for-beginners-dotnet/issues/new?template=Blank+issue) and we'll help you out. - -## Summary - -In this lesson, you learned how to create a hub and project in Azure AI Foundry, deploy a model to your project, and interact with the model in your code. - -### Additional Resources - -- [Azure AI Foundry Documentation](https://learn.microsoft.com/en-us/azure/ai-services/) -- [How to Deploy Models in Azure AI Foundry](https://learn.microsoft.com/en-us/azure/ai-services/deploy/) +```bash +ENV_FILE="$HOME/.env" npm --prefix app start +``` +See [Test Your Setup](README.md#test-your-setup) and [Troubleshooting](README.md#troubleshooting) for verification and error handling. diff --git a/index.html b/index.html index 1415d8ea..d1a8c49b 100644 --- a/index.html +++ b/index.html @@ -2,14 +2,70 @@ - Web Dev for Beginners + Generative AI for Beginners with JavaScript - + - + - - + +

diff --git a/lessons/01-intro-to-genai/README.md b/lessons/01-intro-to-genai/README.md index ceab7d2b..fd6abd4f 100644 --- a/lessons/01-intro-to-genai/README.md +++ b/lessons/01-intro-to-genai/README.md @@ -10,14 +10,6 @@ In this chapter you will learn: If you haven't already, set up your development environment. Here's how you can do it: [Setup your environment](/docs/setup/README.md). -## Related Resources - -[![Watch a short video about an Introduction to Generative AI](https://img.youtube.com/vi/vLYtDgs_zx8/0.jpg)](https://www.youtube.com/watch?v=vLYtDgs_zx8&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=1) - -_This video gives you an introduction to Generative AI with JavaScript_ - -💼 Slides: [Introduction to Generative AI](/videos/slides/00-intro.pptx) - ## Generative AI By now, you've likely heard of tools like ChatGPT or Generative AI. The concept is simple: you provide a prompt, and a model—often called a Large Language Model (LLM)—generates a paragraph or even an entire page of text. This output can be used for various purposes, including creative writing, answering questions, and coding. @@ -161,12 +153,12 @@ If you want to interact with Dinocrates, run the [Characters](/app/README.md) ap 1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. Navigate to _/app_ in the repo root. -3. Locate the console and run `npm install` followed by `npm start`. +3. Locate the console and run `npm ci` followed by `npm start`. 4. Once it appears, select the "Open in Browser" button. 5. Chat with Dinocrates. > [!NOTE] - > If you're running the project locally on your machine, please review the QuickStart guide to get a [GitHub personal access](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) token setup and replace the key in the code. +> Configure `AI_ENDPOINT`, `AI_API_KEY`, and `AI_MODEL` in the repository-root `.env` for both local development and Codespaces. See the [setup guide](/docs/setup/README.md#configure-environment-variables). ### Code Sneak Peek @@ -175,51 +167,80 @@ While there is still a lot more to cover in this Generative AI curriculum, let's Inside of `/app/app.js` you'll find an `app.post`function that handles the Generative AI functionality. It's shown next: ```JavaScript -app.post('/send', async (req, res) => { - const { message } = req.body; - const prompt = message; - - const messages = [ - { - "role": "system", - "content": "You are Dinocrates of Alexandria, a famous architect and engineer. Limit your responses to only the time you live in, you don't know anything else. You only want to talk about your architecture and engineering projects, and possibly new ideas you have.", - }, - { - "role": "user", - "content": prompt +import express from 'express'; +import { OpenAI } from 'openai'; +import path from 'path'; +import { fileURLToPath } from 'url'; +import { ChatRequestError, getChatRequest, handleBodyError } from './chat-request.js'; +import { getModelConfig, loadEnvironment } from './model-config.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +export function createApp(openai, model) { + if (typeof model !== 'string' || !model.trim()) { + throw new Error('A model name is required to create the chat app.'); + } + const app = express(); + + app.use(express.json()); + app.use(express.static(path.join(__dirname, 'public'))); + app.locals.delimiters = '{{ }}'; + + app.post('/send', async (req, res) => { + try { + const { prompt, systemMessage } = getChatRequest(req.body); + const completion = await openai.chat.completions.create({ + model, + messages: [ + { role: "system", content: systemMessage }, + { role: "user", content: prompt } + ] + }); + + const answer = completion?.choices?.[0]?.message?.content; + if (typeof answer !== 'string' || !answer.trim()) { + throw new Error('The model did not return an answer.'); + } + res.json({ prompt, answer }); + } catch (error) { + if (error instanceof ChatRequestError) { + res.status(400).json({ message: error.message }); + return; + } + console.error(`Error: ${error.message}`); + res.status(500).json({ message: 'An unexpected error occurred. Please try again later.' }); } - ]; + }); + app.use(handleBodyError); + return app; +} + +if (process.argv[1] && path.resolve(process.argv[1]) === __filename) { + loadEnvironment(); + const port = process.env.PORT || 3000; + const { baseURL, apiKey, model } = getModelConfig(); const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL, + apiKey, + timeout: 60000 }); - - try { - console.log(`sending prompt ${prompt}`) - const completion = await openai.chat.completions.create({ - model: 'gpt-4o-mini', - messages: messages, - }); - - res.json({ - prompt: prompt, - answer: completion.choices[0]?.message?.content - }); - } catch (error) { - res.status(500).json({ error: error.message }); - } -}); + const app = createApp(openai, model); + app.listen(port, '127.0.0.1', () => { + console.log(`Server is running on http://localhost:${port}`); + }); +} ``` Here's a step-by-step summary of what the function does: -1. **Extract Message from Request**: The function extracts the message from the request body (req.body). -2. **Create Prompt Array**: It constructs an array of messages, including a system message and the user's prompt message. -3. **Initialize OpenAI Client**: An OpenAI client is initialized with the base URL and API key from environment variables. A _gpt-4o-mini_ model from [GitHub Models](https://github.com/marketplace/models) is used to process the prompt and return a response. -4. **Send Prompt to OpenAI**: The function logs the prompt and sends it to the OpenAI API to generate a completion. -5. **Handle Response**: If successful, the function responds with the prompt and the completion's answer. -6. **Error Handling**: If an error occurs, it responds with a 500 status and the error message. +1. **Validate the Request**: `getChatRequest` checks the message and resolves the character name to server-owned instructions. +2. **Create Messages**: The handler builds system and user messages for the configured model. +3. **Use the Configured Client**: The endpoint, key, and deployment name are loaded and checked before the server starts. +4. **Request an Answer**: The OpenAI-compatible client sends the messages to the model. +5. **Check the Answer**: A missing or empty answer produces an error; a valid answer is returned with the prompt. +6. **Report Errors**: Invalid requests return HTTP 400. Provider failures are logged and return a generic HTTP 500 message. > **Note**: [GitHub Copilot](https://github.com/features/copilot) was used to generate this code summary. Generative AI in action! @@ -258,7 +279,7 @@ As you can see, these improvements can both help the front office and the back o Here's an example of a "chatbot application" in action: -![Image of chat app](https://camo.githubusercontent.com/76f2ad7cd754a2de2b9957d2070448e130e5ba228084b9b4b128e3af9c9f5239/68747470733a2f2f6c6561726e2e6d6963726f736f66742e636f6d2f656e2d75732f73656d616e7469632d6b65726e656c2f6d656469612f636861742d636f70696c6f742d696e2d616374696f6e2e676966) +![Course companion chat app](/docs/images/character-chat.png) **You:** Fascinating, I'll make a note of going to the 21st century to see how these tools are used. @@ -345,5 +366,3 @@ C. Python is the only language used for AI development. [Quiz solution](/lessons/01-intro-to-genai/solution/solution-quiz.md) ## Self-Study Resources - -- [Generative AI JavaScript video series](https://aka.ms/genai-js) diff --git a/lessons/01-intro-to-genai/translations/README.bn.md b/lessons/01-intro-to-genai/translations/README.bn.md index f611bcc8..beddca4b 100644 --- a/lessons/01-intro-to-genai/translations/README.bn.md +++ b/lessons/01-intro-to-genai/translations/README.bn.md @@ -10,14 +10,6 @@ আপনার যদি এখনও ডেভেলপমেন্ট এনভায়রনমেন্ট সেটআপ না করা থাকে, তাহলে এটি করুন: [আপনার পরিবেশ সেটআপ করুন](/docs/setup/README.md)। -## **সম্পর্কিত রিসোর্স** - -[![জেনারেটিভ এআই-এর পরিচিতির উপর সংক্ষিপ্ত ভিডিও দেখুন](https://img.youtube.com/vi/vLYtDgs_zx8/0.jpg)](https://www.youtube.com/watch?v=vLYtDgs_zx8&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=1) - -_এই ভিডিওটি জাভাস্ক্রিপ্টের মাধ্যমে জেনারেটিভ এআই-এর পরিচিতি দেয়।_ - -💼 **স্লাইডস:** [জেনারেটিভ এআই-এর পরিচিতি](/videos/slides/00-intro.pptx) - ## **জেনারেটিভ এআই** আপনি সম্ভবত ইতোমধ্যে ChatGPT বা জেনারেটিভ এআই-এর মতো টুলগুলোর কথা শুনেছেন। ধারণাটি সহজ: আপনি একটি প্রম্পট দেন, এবং একটি মডেল—যাকে সাধারণত একটি বড় ভাষার মডেল (LLM) বলা হয়—একটি অনুচ্ছেদ বা সম্পূর্ণ পৃষ্ঠা তৈরি করে। @@ -189,12 +181,12 @@ _সময়ের যন্ত্র, “জর্জ” ধাতব বি 1. [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) ব্যবহার করে কোডস্পেস শুরু করুন। 2. রিপোজিটরির মূল ফোল্ডারে _/app_ এ যান। -3. কনসোলে `npm install` এবং তারপর `npm start` চালান। +3. কনসোলে `npm ci` এবং তারপর `npm start` চালান। 4. যখন চালু হবে, "Open in Browser" বাটনে ক্লিক করুন। 5. ডিনোক্রেটিসের সাথে চ্যাট করুন। > [!NOTE] -> যদি আপনি এই প্রকল্পটি আপনার লোকাল মেশিনে চালাচ্ছেন, তাহলে কোড চালানোর জন্য [GitHub ব্যক্তিগত অ্যাক্সেস টোকেন](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) সেটআপ করুন। +> রিপোজিটরির মূল ফোল্ডারের `.env` ফাইলে `AI_ENDPOINT`, `AI_API_KEY` এবং `AI_MODEL` সেট করুন। লোকাল পরিবেশ এবং Codespaces উভয়ের জন্য এই সেটিংস প্রয়োজন। [সেটআপ নির্দেশিকা](/docs/setup/README.md#configure-environment-variables) দেখুন। --- @@ -205,41 +197,70 @@ _সময়ের যন্ত্র, “জর্জ” ধাতব বি **`/app/app.js`** ফাইলের মধ্যে নিচের **`app.post`** ফাংশনটি AI ইন্টারঅ্যাকশন পরিচালনা করে: ```JavaScript -app.post('/send', async (req, res) => { - const { message } = req.body; - const prompt = message; - - const messages = [ - { - "role": "system", - "content": "You are Dinocrates of Alexandria, a famous architect and engineer...", - }, - { - "role": "user", - "content": prompt +import express from 'express'; +import { OpenAI } from 'openai'; +import path from 'path'; +import { fileURLToPath } from 'url'; +import { ChatRequestError, getChatRequest, handleBodyError } from './chat-request.js'; +import { getModelConfig, loadEnvironment } from './model-config.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +export function createApp(openai, model) { + if (typeof model !== 'string' || !model.trim()) { + throw new Error('A model name is required to create the chat app.'); + } + const app = express(); + + app.use(express.json()); + app.use(express.static(path.join(__dirname, 'public'))); + app.locals.delimiters = '{{ }}'; + + app.post('/send', async (req, res) => { + try { + const { prompt, systemMessage } = getChatRequest(req.body); + const completion = await openai.chat.completions.create({ + model, + messages: [ + { role: "system", content: systemMessage }, + { role: "user", content: prompt } + ] + }); + + const answer = completion?.choices?.[0]?.message?.content; + if (typeof answer !== 'string' || !answer.trim()) { + throw new Error('The model did not return an answer.'); + } + res.json({ prompt, answer }); + } catch (error) { + if (error instanceof ChatRequestError) { + res.status(400).json({ message: error.message }); + return; + } + console.error(`Error: ${error.message}`); + res.status(500).json({ message: 'An unexpected error occurred. Please try again later.' }); } - ]; + }); + app.use(handleBodyError); + return app; +} + +if (process.argv[1] && path.resolve(process.argv[1]) === __filename) { + loadEnvironment(); + const port = process.env.PORT || 3000; + const { baseURL, apiKey, model } = getModelConfig(); const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL, + apiKey, + timeout: 60000 }); - - try { - console.log(`sending prompt ${prompt}`) - const completion = await openai.chat.completions.create({ - model: 'gpt-4o-mini', - messages: messages, - }); - - res.json({ - prompt: prompt, - answer: completion.choices[0]?.message?.content - }); - } catch (error) { - res.status(500).json({ error: error.message }); - } -}); + const app = createApp(openai, model); + app.listen(port, '127.0.0.1', () => { + console.log(`Server is running on http://localhost:${port}`); + }); +} ``` ### **জেনারেটিভ এআই-এর ব্যবহারিক ক্ষেত্র** @@ -310,6 +331,4 @@ C. পাইথনই একমাত্র ভাষা যা এআই ডে --- -## **স্বশিক্ষা সংস্থান (Self-Study Resources)** - -- [Generative AI JavaScript ভিডিও সিরিজ](https://aka.ms/genai-js) +## **স্বশিক্ষা সংস্থান (Self-Study Resources)** diff --git a/lessons/01-intro-to-genai/translations/README.fr.md b/lessons/01-intro-to-genai/translations/README.fr.md index 8254b279..fcef28b7 100644 --- a/lessons/01-intro-to-genai/translations/README.fr.md +++ b/lessons/01-intro-to-genai/translations/README.fr.md @@ -12,11 +12,9 @@ Si ce n'est pas encore fait, configurez votre environnement de développement. V ## Ressources associées -[![Regardez une courte vidéo sur l'introduction à l'IA générative](https://img.youtube.com/vi/vLYtDgs_zx8/0.jpg)](https://www.youtube.com/watch?v=vLYtDgs_zx8\&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk\&index=1) *Cette vidéo vous donne une introduction à l'IA générative avec JavaScript.* -💼 Slides : [Introduction à l'IA générative](/videos/slides/00-intro.pptx) ## L'IA générative @@ -152,7 +150,7 @@ Si vous souhaitez interagir avec Dinocrates, exécutez l'application [Characters > [!IMPORTANT] > Ceci est entièrement fictif ; les réponses sont générées par une IA. -> [Clause de non-responsabilité AI responsable](../../README.md#responsible-ai-disclaimer) +> [Clause de non-responsabilité AI responsable](/README.md#responsible-ai-disclaimer) ![Dinocrates portant une toge](https://raw.githubusercontent.com/microsoft/generative-ai-with-javascript/main/lessons/01-intro-to-genai/assets/dinocrates.png) @@ -160,12 +158,12 @@ Si vous souhaitez interagir avec Dinocrates, exécutez l'application [Characters 1. Lancez un [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript). 2. Naviguez vers */app* à la racine du dépôt. -3. Localisez la console et exécutez `npm install` suivi de `npm start`. +3. Localisez la console et exécutez `npm ci` suivi de `npm start`. 4. Une fois que l'application est ouverte, sélectionnez le bouton "Ouvrir dans le navigateur". 5. Discutez avec Dinocrates. > [!NOTE] -> Si vous exécutez le projet localement sur votre machine, veuillez consulter le guide de démarrage rapide pour configurer un [token d'accès personnel GitHub](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) et remplacer la clé dans le code. +> Configurez `AI_ENDPOINT`, `AI_API_KEY` et `AI_MODEL` dans le fichier `.env` à la racine du dépôt, en local comme dans Codespaces. Consultez le [guide de configuration](/docs/setup/README.md#configure-environment-variables). ### Aperçu du code @@ -174,51 +172,80 @@ Bien qu'il reste encore beaucoup à couvrir dans ce programme d'apprentissage su Dans `/app/app.js`, vous trouverez une fonction `app.post` qui gère la fonctionnalité d'IA générative. Elle est illustrée ci-dessous : ```JavaScript -app.post('/send', async (req, res) => { - const { message } = req.body; - const prompt = message; - - const messages = [ - { - "role": "system", - "content": "You are Dinocrates of Alexandria, a famous architect and engineer. Limit your responses to only the time you live in, you don't know anything else. You only want to talk about your architecture and engineering projects, and possibly new ideas you have.", - }, - { - "role": "user", - "content": prompt +import express from 'express'; +import { OpenAI } from 'openai'; +import path from 'path'; +import { fileURLToPath } from 'url'; +import { ChatRequestError, getChatRequest, handleBodyError } from './chat-request.js'; +import { getModelConfig, loadEnvironment } from './model-config.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +export function createApp(openai, model) { + if (typeof model !== 'string' || !model.trim()) { + throw new Error('A model name is required to create the chat app.'); + } + const app = express(); + + app.use(express.json()); + app.use(express.static(path.join(__dirname, 'public'))); + app.locals.delimiters = '{{ }}'; + + app.post('/send', async (req, res) => { + try { + const { prompt, systemMessage } = getChatRequest(req.body); + const completion = await openai.chat.completions.create({ + model, + messages: [ + { role: "system", content: systemMessage }, + { role: "user", content: prompt } + ] + }); + + const answer = completion?.choices?.[0]?.message?.content; + if (typeof answer !== 'string' || !answer.trim()) { + throw new Error('The model did not return an answer.'); + } + res.json({ prompt, answer }); + } catch (error) { + if (error instanceof ChatRequestError) { + res.status(400).json({ message: error.message }); + return; + } + console.error(`Error: ${error.message}`); + res.status(500).json({ message: 'An unexpected error occurred. Please try again later.' }); } - ]; + }); + app.use(handleBodyError); + return app; +} + +if (process.argv[1] && path.resolve(process.argv[1]) === __filename) { + loadEnvironment(); + const port = process.env.PORT || 3000; + const { baseURL, apiKey, model } = getModelConfig(); const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL, + apiKey, + timeout: 60000 }); - - try { - console.log(`sending prompt ${prompt}`) - const completion = await openai.chat.completions.create({ - model: 'gpt-4o-mini', - messages: messages, - }); - - res.json({ - prompt: prompt, - answer: completion.choices[0]?.message?.content - }); - } catch (error) { - res.status(500).json({ error: error.message }); - } -}); + const app = createApp(openai, model); + app.listen(port, '127.0.0.1', () => { + console.log(`Server is running on http://localhost:${port}`); + }); +} ``` Voici un résumé étape par étape de ce que fait la fonction : -1. **Extraction du message de la requête** : La fonction extrait le message du corps de la requête (`req.body`). -2. **Création du tableau d'invite** : Elle construit un tableau de messages, incluant un message système et le message d'invite de l'utilisateur. -3. **Initialisation du client OpenAI** : Un client OpenAI est initialisé avec l'URL de base et la clé API à partir des variables d'environnement. Un modèle *gpt-4o-mini* de [GitHub Models](https://github.com/marketplace/models) est utilisé pour traiter l'invite et renvoyer une réponse. -4. **Envoi de l'invite à OpenAI** : La fonction enregistre l'invite et l'envoie à l'API OpenAI pour générer une réponse. -5. **Gestion de la réponse** : Si cela réussit, la fonction répond avec l'invite et la réponse générée. -6. **Gestion des erreurs** : En cas d'erreur, elle répond avec un statut 500 et le message d'erreur. +1. **Valider la requête** : `getChatRequest` vérifie le message et recherche les instructions du personnage sur le serveur. +2. **Créer les messages** : Le gestionnaire construit les messages système et utilisateur. +3. **Utiliser le client configuré** : Le point de terminaison, la clé et le nom du déploiement sont vérifiés avant le démarrage. +4. **Demander une réponse** : Le client compatible OpenAI envoie les messages au modèle. +5. **Vérifier la réponse** : Une réponse vide déclenche une erreur. +6. **Signaler les erreurs** : Une requête invalide renvoie HTTP 400. Une erreur du fournisseur est journalisée et renvoie un message générique HTTP 500. > **Remarque** : [GitHub Copilot](https://github.com/features/copilot) a été utilisé pour générer ce résumé de code. L'IA générative en action ! @@ -257,7 +284,7 @@ Comme vous pouvez le voir, ces améliorations peuvent à la fois aider le front- Voici un exemple d'une "application de chatbot" en action : -![Image de l'application de chat](https://camo.githubusercontent.com/76f2ad7cd754a2de2b9957d2070448e130e5ba228084b9b4b128e3af9c9f5239/68747470733a2f2f6c6561726e2e6d6963726f736f66742e636f6d2f656e2d75732f73656d616e7469632d6b65726e656c2f6d656469612f636861742d636f70696c6f742d696e2d616374696f6e2e676966) +![Application de chat du cours](/docs/images/character-chat.png) **Vous :** Fascinant, je vais noter l'idée de visiter le 21e siècle pour voir comment ces outils sont utilisés. @@ -344,5 +371,3 @@ C. Python est le seul langage utilisé pour le développement en IA. [Quiz solution](/lessons/01-intro-to-genai/solution/solution-quiz.md) ## Ressources d'auto-apprentissage - -* [Série vidéo sur l'IA générative avec JavaScript](https://aka.ms/genai-js) diff --git a/lessons/01-intro-to-genai/translations/README.pt-br.md b/lessons/01-intro-to-genai/translations/README.pt-br.md index 1db2f5e1..43e4cdf7 100644 --- a/lessons/01-intro-to-genai/translations/README.pt-br.md +++ b/lessons/01-intro-to-genai/translations/README.pt-br.md @@ -10,14 +10,6 @@ Neste capítulo você vai aprender: Se você ainda não configurou seu ambiente de desenvolvimento, veja como fazer: [Configure seu ambiente](/docs/setup/README.md). -## Recursos relacionados - -[![Assista a um vídeo curto sobre Introdução à IA Generativa](https://img.youtube.com/vi/vLYtDgs_zx8/0.jpg)](https://www.youtube.com/watch?v=vLYtDgs_zx8&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=1) - -_Este vídeo apresenta uma introdução à IA Generativa com JavaScript_ - -💼 Slides: [Introdução à IA Generativa](/videos/slides/00-intro.pptx) - ## IA Generativa Provavelmente você já ouviu falar de ferramentas como ChatGPT ou IA Generativa. O conceito é simples: você fornece um prompt, e um modelo—frequentemente chamado de Grande Modelo de Linguagem (LLM)—gera um parágrafo ou até mesmo uma página inteira de texto. Esta saída pode ser usada para diversos propósitos, incluindo escrita criativa, respostas a perguntas e codificação. @@ -43,7 +35,7 @@ No coração da Londres de 1860, você é reconhecido como um dos mecânicos mai Sua bancada de trabalho, o coração da sua oficina, é uma bagunça organizada.
- Oficina em Londres + Oficina em Londres
_No centro da bancada está o torso de um robô—uma maravilha da engenharia que consumiu meses de esforço. Sua estrutura de madeira é intrincadamente esculpida, cada articulação meticulosamente projetada para movimentos suaves._ @@ -75,7 +67,7 @@ Está escuro e sombrio lá dentro, a única luz filtrando através das janelas e Conforme seus olhos se adaptam à luz fraca, você nota uma figura à distância, acenando para você. Você caminha em sua direção, seus passos ecoando no piso de madeira. A figura fica mais clara, e você a reconhece das fotos de jornal, é Charles Babbage.
- Biblioteca Empoeirada + Biblioteca Empoeirada
### O que é este dispositivo? @@ -91,7 +83,7 @@ Impulsionado pela curiosidade, seus dedos deslizam em direção ao botão vermel Então, escuridão, e uma sensação de queda.
- Vórtice do Tempo + Vórtice do Tempo
### Alexandria 300 a.C. @@ -101,7 +93,7 @@ Você acorda, desorientado. À medida que sua visão se clareia, uma cidade anti Pessoas em togas movimentam-se pelas ruas, suas vozes se mesclando em uma sinfonia de dialetos antigos, o ar preenchido com o aroma de especiarias exóticas e o som distante de mercadores anunciando suas mercadorias.
- Alexandria 300 a.C. + Alexandria 300 a.C.
**Você:** Certamente, devo ter batido a cabeça, você pensa, fechando os olhos e abrindo-os novamente, a cena permanece inalterada. @@ -113,7 +105,7 @@ Estou preso no passado? Devo pressionar aquele botão novamente? Antes que você Um senhor idoso vestindo uma toga acena para você dos degraus do grande templo. Seu cabelo branco e barba capturam a luz do sol, dando-lhe um brilho quase etéreo.
- Dinócrates vestindo uma toga + Dinócrates vestindo uma toga
**Dinócrates:** "Bem-vindo, viajante," ele diz calorosamente. "Eu sou Dinócrates, arquiteto desta grande cidade. Sua chegada foi prevista." @@ -145,7 +137,7 @@ Um pensamento lhe ocorre. O dispositivo pode me entender se eu falar com ele? **Você:** Você está certo, George é um bom nome, era o nome do meu pai, na verdade.
- Dispositivo de viagem no tempo semelhante a um besouro metálico + Dispositivo de viagem no tempo semelhante a um besouro metálico
_Dispositivo de tempo, "George" o besouro metálico_ @@ -166,19 +158,19 @@ Se você quiser interagir com Dinócrates, execute o aplicativo [Characters](/ap > [Aviso sobre IA Responsável](/README.md#responsible-ai-disclaimer)
- Dinócrates vestindo uma toga + Dinócrates vestindo uma toga
**Passos**: 1. Inicie um [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. Navegue até _/app_ na raiz do repositório. -3. Localize o console e execute `npm install` seguido de `npm start`. +3. Localize o console e execute `npm ci` seguido de `npm start`. 4. Quando aparecer, selecione o botão "Open in Browser". 5. Converse com Dinócrates. > [!NOTE] - > Se você estiver executando o projeto localmente em sua máquina, por favor revise o guia de Início Rápido para configurar um [token de acesso pessoal do GitHub](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) e substitua a chave no código. +> Configure `AI_ENDPOINT`, `AI_API_KEY` e `AI_MODEL` no arquivo `.env` na raiz do repositório, tanto localmente quanto no Codespaces. Consulte o [guia de configuração](/docs/setup/README.md#configure-environment-variables). ### Uma prévia do código @@ -187,48 +179,77 @@ Embora ainda haja muito mais para abordar neste currículo de IA Generativa, vam Dentro de `/app/app.js` você encontrará uma função `app.post` que gerencia a funcionalidade de IA Generativa. Ela é mostrada a seguir: ```JavaScript -app.post('/send', async (req, res) => { - const { message } = req.body; - const prompt = message; - - const messages = [ - { - "role": "system", - "content": "You are Dinocrates of Alexandria, a famous architect and engineer. Limit your responses to only the time you live in, you don't know anything else. You only want to talk about your architecture and engineering projects, and possibly new ideas you have.", - }, - { - "role": "user", - "content": prompt +import express from 'express'; +import { OpenAI } from 'openai'; +import path from 'path'; +import { fileURLToPath } from 'url'; +import { ChatRequestError, getChatRequest, handleBodyError } from './chat-request.js'; +import { getModelConfig, loadEnvironment } from './model-config.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +export function createApp(openai, model) { + if (typeof model !== 'string' || !model.trim()) { + throw new Error('A model name is required to create the chat app.'); + } + const app = express(); + + app.use(express.json()); + app.use(express.static(path.join(__dirname, 'public'))); + app.locals.delimiters = '{{ }}'; + + app.post('/send', async (req, res) => { + try { + const { prompt, systemMessage } = getChatRequest(req.body); + const completion = await openai.chat.completions.create({ + model, + messages: [ + { role: "system", content: systemMessage }, + { role: "user", content: prompt } + ] + }); + + const answer = completion?.choices?.[0]?.message?.content; + if (typeof answer !== 'string' || !answer.trim()) { + throw new Error('The model did not return an answer.'); + } + res.json({ prompt, answer }); + } catch (error) { + if (error instanceof ChatRequestError) { + res.status(400).json({ message: error.message }); + return; + } + console.error(`Error: ${error.message}`); + res.status(500).json({ message: 'An unexpected error occurred. Please try again later.' }); } - ]; + }); + app.use(handleBodyError); + return app; +} + +if (process.argv[1] && path.resolve(process.argv[1]) === __filename) { + loadEnvironment(); + const port = process.env.PORT || 3000; + const { baseURL, apiKey, model } = getModelConfig(); const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL, + apiKey, + timeout: 60000 }); - - try { - console.log(`sending prompt ${prompt}`) - const completion = await openai.chat.completions.create({ - model: 'gpt-4o-mini', - messages: messages, - }); - - res.json({ - prompt: prompt, - answer: completion.choices[0]?.message?.content - }); - } catch (error) { - res.status(500).json({ error: error.message }); - } -}); + const app = createApp(openai, model); + app.listen(port, '127.0.0.1', () => { + console.log(`Server is running on http://localhost:${port}`); + }); +} ``` Aqui está um resumo passo a passo do que a função faz: 1. **Extrai a Mensagem da Requisição**: A função extrai a mensagem do corpo da requisição (req.body). 2. **Cria um Array de Prompt**: Constrói um array de mensagens, incluindo uma mensagem do sistema e a mensagem de prompt do usuário. -3. **Inicializa o Cliente OpenAI**: Um cliente OpenAI é inicializado com a URL base e chave de API das variáveis de ambiente. Um modelo _gpt-4o-mini_ do [GitHub Models](https://github.com/marketplace/models) é usado para processar o prompt e retornar uma resposta. +3. **Inicializa o Cliente OpenAI**: O endpoint, a chave de API e o nome da implantação vêm do seu recurso Microsoft Foundry. O código usa `AI_ENDPOINT`, `AI_API_KEY` e `AI_MODEL`. 4. **Envia o Prompt para a OpenAI**: A função registra o prompt e o envia para a API OpenAI para gerar uma conclusão. 5. **Trata a Resposta**: Se bem-sucedido, a função responde com o prompt e a resposta da conclusão. 6. **Tratamento de Erros**: Se ocorrer um erro, responde com um status 500 e a mensagem de erro. @@ -270,7 +291,7 @@ Como você pode ver, essas melhorias podem ajudar tanto o front office quanto o Aqui está um exemplo de um "aplicativo de chatbot" em ação: -![Imagem de aplicativo de chat](https://camo.githubusercontent.com/76f2ad7cd754a2de2b9957d2070448e130e5ba228084b9b4b128e3af9c9f5239/68747470733a2f2f6c6561726e2e6d6963726f736f66742e636f6d2f656e2d75732f73656d616e7469632d6b65726e656c2f6d656469612f636861742d636f70696c6f742d696e2d616374696f6e2e676966) +![Aplicativo de chat do curso](/docs/images/character-chat.png) **Você:** Fascinante, vou anotar para visitar o século 21 para ver como essas ferramentas são usadas. @@ -357,5 +378,3 @@ C. Python é a única linguagem usada para desenvolvimento de IA. [Solução do quiz](../solution/solution-quiz.md) ## Recursos para auto-estudo - -- [Série de vídeos sobre JavaScript para IA Generativa](https://aka.ms/genai-js) diff --git a/lessons/01-intro-to-genai/translations/README.zh-cn.md b/lessons/01-intro-to-genai/translations/README.zh-cn.md index 7342dfd0..7c026842 100644 --- a/lessons/01-intro-to-genai/translations/README.zh-cn.md +++ b/lessons/01-intro-to-genai/translations/README.zh-cn.md @@ -10,14 +10,6 @@ 如果你还没有设置开发环境,以下是设置方法:[设置你的环境](/docs/setup/README.md)。 -## 相关资源 - -[![观看关于生成式 AI 介绍的短视频](https://img.youtube.com/vi/vLYtDgs_zx8/0.jpg)](https://www.youtube.com/watch?v=vLYtDgs_zx8&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=1) - -_这个视频为你介绍了 JavaScript 中的生成式 AI_ - -💼 幻灯片:[生成式 AI 介绍](/videos/slides/00-intro.pptx) - ## 生成式 AI 到目前为止,你可能已经听说过 ChatGPT 或生成式 AI。这个概念很简单:你提供一个提示,然后一个模型——通常被称为大语言模型(LLM)——会生成一段或甚至一整页的文本。这个输出可以用于各种目的,包括创意写作、回答问题和编程。 @@ -43,7 +35,7 @@ _这个视频为你介绍了 JavaScript 中的生成式 AI_ 你的工作台,工作室的核心,是一个有序的混乱。
- 伦敦工作室 + 伦敦工作室
_工作台中央放着一个机器人的躯干——一个耗费了数月努力的工程奇迹。它的木制框架精心雕刻,每个关节都经过精心设计以实现流畅的运动。_ @@ -75,7 +67,7 @@ _查尔斯·巴贝奇。"_ 当你的眼睛适应了昏暗的光线,你注意到远处有一个人影在向你挥手。你朝他走去,脚步声在木地板上回响。人影变得清晰,你从报纸照片中认出了他,是查尔斯·巴贝奇。
- 布满灰尘的图书馆 + 布满灰尘的图书馆
### 这是什么设备? @@ -91,7 +83,7 @@ _查尔斯·巴贝奇。"_ 然后,一片黑暗,和坠落的感觉。
- 时空漩涡 + 时空漩涡
### 公元前 300 年的亚历山大 @@ -101,7 +93,7 @@ _查尔斯·巴贝奇。"_ 身穿托加长袍的人们在街道上穿行,他们的声音融合成古老方言的交响乐,空气中充满异国香料的气味和远处商人叫卖的声音。
- 公元前 300 年的亚历山大 + 公元前 300 年的亚历山大
**你**: 我一定是撞到了头,你想着,闭上眼睛又睁开,场景依然不变。 @@ -113,7 +105,7 @@ _查尔斯·巴贝奇。"_ 一位身穿托加长袍的老者从大庙的台阶上向你挥手。他的白发和胡须在阳光下闪耀,给他一种几乎是超凡的光芒。
- 身穿托加长袍的迪诺克拉底 + 身穿托加长袍的迪诺克拉底
**迪诺克拉底**: "欢迎,旅行者,"他温和地说。"我是迪诺克拉底,这座伟大城市的建筑师。你的到来早有预言。" @@ -145,7 +137,7 @@ _查尔斯·巴贝奇。"_ **你**: 你说得对,乔治确实是个好名字,事实上这是我父亲的名字。
- 像金属甲虫的时间旅行设备 + 像金属甲虫的时间旅行设备
_时间设备,"乔治"金属甲虫_ @@ -166,19 +158,19 @@ _时间设备,"乔治"金属甲虫_ > [负责任的 AI 免责声明](../../../README.md#responsible-ai-disclaimer)
- 身穿托加长袍的迪诺克拉底 + 身穿托加长袍的迪诺克拉底
**步骤**: 1. 启动一个 [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. 导航到仓库根目录中的 _/app_。 -3. 在控制台中运行 `npm install` 然后运行 `npm start`。 +3. 在控制台中运行 `npm ci` 然后运行 `npm start`。 4. 当它出现时,选择"在浏览器中打开"。 5. 与迪诺克拉底聊天。 > [!NOTE] -> 如果你在本地机器上运行项目,请查看快速入门指南以设置 [GitHub personal access](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) token 并在代码中替换密钥。 +> 在存储库根目录的 `.env` 中配置 `AI_ENDPOINT`、`AI_API_KEY` 和 `AI_MODEL`。本地开发和 Codespaces 都需要这些设置。请参阅[配置指南](/docs/setup/README.md#configure-environment-variables)。 ### 代码预览 @@ -187,48 +179,77 @@ _时间设备,"乔治"金属甲虫_ 在 `/app/app.js` 中,你会找到一个处理生成式 AI 功能的 `app.post` 函数。代码如下: ```JavaScript -app.post('/send', async (req, res) => { - const { message } = req.body; - const prompt = message; - - const messages = [ - { - "role": "system", - "content": "You are 迪诺克拉底 of Alexandria, a famous architect and engineer. Limit your responses to only the time you live in, you don't know anything else. You only want to talk about your architecture and engineering projects, and possibly new ideas you have.", - }, - { - "role": "user", - "content": prompt +import express from 'express'; +import { OpenAI } from 'openai'; +import path from 'path'; +import { fileURLToPath } from 'url'; +import { ChatRequestError, getChatRequest, handleBodyError } from './chat-request.js'; +import { getModelConfig, loadEnvironment } from './model-config.js'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +export function createApp(openai, model) { + if (typeof model !== 'string' || !model.trim()) { + throw new Error('A model name is required to create the chat app.'); + } + const app = express(); + + app.use(express.json()); + app.use(express.static(path.join(__dirname, 'public'))); + app.locals.delimiters = '{{ }}'; + + app.post('/send', async (req, res) => { + try { + const { prompt, systemMessage } = getChatRequest(req.body); + const completion = await openai.chat.completions.create({ + model, + messages: [ + { role: "system", content: systemMessage }, + { role: "user", content: prompt } + ] + }); + + const answer = completion?.choices?.[0]?.message?.content; + if (typeof answer !== 'string' || !answer.trim()) { + throw new Error('The model did not return an answer.'); + } + res.json({ prompt, answer }); + } catch (error) { + if (error instanceof ChatRequestError) { + res.status(400).json({ message: error.message }); + return; + } + console.error(`Error: ${error.message}`); + res.status(500).json({ message: 'An unexpected error occurred. Please try again later.' }); } - ]; + }); + app.use(handleBodyError); + return app; +} + +if (process.argv[1] && path.resolve(process.argv[1]) === __filename) { + loadEnvironment(); + const port = process.env.PORT || 3000; + const { baseURL, apiKey, model } = getModelConfig(); const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL, + apiKey, + timeout: 60000 }); - - try { - console.log(`sending prompt ${prompt}`) - const completion = await openai.chat.completions.create({ - model: 'gpt-4o-mini', - messages: messages, - }); - - res.json({ - prompt: prompt, - answer: completion.choices[0]?.message?.content - }); - } catch (error) { - res.status(500).json({ error: error.message }); - } -}); + const app = createApp(openai, model); + app.listen(port, '127.0.0.1', () => { + console.log(`Server is running on http://localhost:${port}`); + }); +} ``` 以下是该函数的逐步说明: 1. **从请求中提取消息**:该函数从请求体(req.body)中提取消息。 2. **创建提示数组**:它构建一个消息数组,包括系统消息和用户的提示消息。 -3. **初始化 OpenAI 客户端**:使用基础 URL 和环境变量中的 API 密钥初始化 OpenAI 客户端。使用来自 [GitHub Models](https://github.com/marketplace/models) 的 _gpt-4o-mini_ 模型来处理提示并返回响应。 +3. **初始化 OpenAI 客户端**:终结点、API 密钥和部署名称来自你的 Microsoft Foundry 资源。代码使用 `AI_ENDPOINT`、`AI_API_KEY` 和 `AI_MODEL`。 4. **向 OpenAI 发送提示**:该函数记录提示并将其发送到 OpenAI API 以生成完成。 5. **处理响应**:如果成功,该函数返回提示和完成的答案。 6. **错误处理**:如果发生错误,它返回 500 状态和错误消息。 @@ -270,7 +291,7 @@ app.post('/send', async (req, res) => { 这是一个"聊天机器人应用"的实际示例: -![聊天应用图片](https://camo.githubusercontent.com/76f2ad7cd754a2de2b9957d2070448e130e5ba228084b9b4b128e3af9c9f5239/68747470733a2f2f6c6561726e2e6d6963726f736f66742e636f6d2f656e2d75732f73656d616e7469632d6b65726e656c2f6d656469612f636861742d636f70696c6f742d696e2d616374696f6e2e676966) +![课程配套聊天应用](/docs/images/character-chat.png) **你**: 有趣,我要记下来去 21 世纪看看这些工具是如何使用的。 @@ -356,5 +377,3 @@ C. Python 是唯一用于 AI 开发的语言。 [测验解决方案](/lessons/01-intro-to-genai/solution/solution-quiz.md) ## 自学资源 - -- [生成式 AI JavaScript 视频系列](https://aka.ms/genai-js) diff --git a/lessons/02-first-ai-app/README.md b/lessons/02-first-ai-app/README.md index ddcedf21..522ad4ee 100644 --- a/lessons/02-first-ai-app/README.md +++ b/lessons/02-first-ai-app/README.md @@ -10,16 +10,6 @@ In this chapter you will learn: If you haven't already, set up your development environment. Here's how you can do it: [Setup your environment](/docs/setup/README.md). -## Related Resources - -[![Watch a short video about large language models](https://img.youtube.com/vi/GQ_2OjNZ9aA/0.jpg)](https://www.youtube.com/watch?v=GQ_2OjNZ9aA&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=2) - -_This video gives you an introduction to AI models called "large language models", LLMs, what they are and how you can use them to integrate AI into your apps._ - -*🎥 Click on the image above to watch a short video about large language models* - -💼 Slides: [Introduction to large language models, LLMs](/videos/slides/01-llms.pptx) - ## Narrative: Picture yourself in a boat on a river @@ -126,14 +116,14 @@ If you want to interact with Leonardo, run the [Characters](/app/README.md) app. 1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. Navigate to _/app/README.md_ in the repo root. -3. Locate the console and run `npm install` followed by `npm start`. +3. Locate the console and run `npm ci` followed by `npm start`. 4. Once it appears, select the "Open in Browser" button. 5. Chat with Leonardo. For a more detailed explanation of the app, see [Detailed app explanation](/lessons/01-intro-to-genai/README.md#interact-with-dinocrates). > [!NOTE] - > If you're running the project locally on your machine, please review the QuickStart guide to get a [GitHub personal access](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) token setup and replace the key in the code. +> Configure `AI_ENDPOINT`, `AI_API_KEY`, and `AI_MODEL` in the repository-root `.env` for both local development and Codespaces. See the [setup guide](/docs/setup/README.md#configure-environment-variables). ## Development environment setup @@ -175,7 +165,7 @@ Before you can assist Leonardo with his project, you should first think about th **Time Beetle:** Generative AI models can be used for many things, for example, language translation. In fact, it accepts input in one language and can generate text in another language. Let's start with a simple app that takes English input and generates Italian text. -```javascript +```javascript import { OpenAI } from "openai"; @@ -194,9 +184,16 @@ ${question} // 2. Create client // ----------------------------------- +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL: endpoint, + apiKey, }); @@ -226,13 +223,13 @@ Let's explain what's happening here: **You:** I think I get it. So if I change the value of the `question` variable to something else, the app will generate a different Italian translation? -**Time Beetle:** Exactly, you can change the input text to anything you want. Also note how GitHub models are being used as the base URL for the API together with a GitHub token as the API key. +**Time Beetle:** The endpoint, API key, and deployment name come from your Microsoft Foundry resource. The code reads them from `AI_ENDPOINT`, `AI_API_KEY`, and `AI_MODEL`. **You:** Why is that important? -**Time Beetle:** It's important to use a base URL and API key that are specific to the model you're using. GitHub Models is a platform that hosts a variety of models, all with different capabilities and features, it's also free to use. +**Time Beetle:** Microsoft Foundry hosts the model deployment. Use an API key from the same resource as the endpoint, and set `AI_MODEL` to the deployment name. Model usage can incur Azure charges; check pricing and quota. -**You:** Oh good, I don't know who to pay anyways and I doubt they accept my currency here. :) +**You:** Then I'll use a small deployment and check the costs before experimenting. ## Chat apps @@ -268,7 +265,7 @@ AI: Rome is known for its ancient ruins, art, and vibrant culture. You can visit **Time Beetle:** Below is how we can construct a conversation with the AI: -```javascript +```javascript // Define the context @@ -295,9 +292,16 @@ const messages = [ } ]; +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL: endpoint, + apiKey, }); @@ -499,5 +503,5 @@ C. The context window determines how creative the AI's responses are. - [Text generation](https://platform.openai.com/docs/guides/text-generation) - [JavaScript library for OpenAI](https://github.com/openai/openai-node/tree/master/examples) - [Tokenizer](https://platform.openai.com/tokenizer) -- [Completion API](https://platform.openai.com/docs/api-reference/completions) -- [Chat completions](https://platform.openai.com/docs/guides/text-generation#text-generation-models) +- [Completion API](https://github.com/openai/openai-node#usage) +- [Chat completions](https://platform.openai.com/docs/guides/text-generation#text-generation-models) diff --git a/lessons/02-first-ai-app/sample-app/app.js b/lessons/02-first-ai-app/sample-app/app.js index 35f2b269..4f284211 100644 --- a/lessons/02-first-ai-app/sample-app/app.js +++ b/lessons/02-first-ai-app/sample-app/app.js @@ -1,4 +1,11 @@ import { OpenAI } from "openai"; + +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} // 1. Define the prompt // ----------------------------------- @@ -18,8 +25,9 @@ const messages = [ // ----------------------------------- const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL: endpoint, + apiKey, + timeout: 60000, }); @@ -27,7 +35,7 @@ const openai = new OpenAI({ // ----------------------------------- const completion = await openai.chat.completions.create({ - model: 'gpt-4o-mini', + model, messages: messages, }); @@ -36,4 +44,6 @@ console.log(`Answer for "${question}":`); // 4. Print the answer // ----------------------------------- -console.log(completion.choices[0]?.message?.content); +const answer = completion.choices[0]?.message?.content; +if (!answer?.trim()) throw new Error("The model did not return an answer."); +console.log(answer); diff --git a/lessons/02-first-ai-app/sample-app/package-lock.json b/lessons/02-first-ai-app/sample-app/package-lock.json index ae1264ed..d3886f9f 100644 --- a/lessons/02-first-ai-app/sample-app/package-lock.json +++ b/lessons/02-first-ai-app/sample-app/package-lock.json @@ -9,218 +9,38 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "openai": "^4.84.1" - } - }, - "node_modules/@types/node": { - "version": "18.19.75", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.75.tgz", - "integrity": "sha512-UIksWtThob6ZVSyxcOqCLOUNg/dyO1Qvx4McgeuhrEtHTLFTf7BBhEazaE4K806FGTPtzd/2sE90qn4fVr7cyw==", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", - "license": "MIT", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", - "license": "MIT" - }, - "node_modules/formdata-node": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", - "license": "MIT", - "dependencies": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.3" - }, - "engines": { - "node": ">= 12.20" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "openai": "^7.28.0" } }, "node_modules/openai": { - "version": "4.84.1", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.84.1.tgz", - "integrity": "sha512-bVdFsfeVBXN59x9i26dHnYUkY5JPk19w7SydzMvJZDsA+FxwXZrQsUBtdwsQt/ZLuilcc/LzJG7mpJucO2DDHg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-7.28.0.tgz", + "integrity": "sha512-HSY4fFLflQGYe2kvO0atm6/GzhD61gpyiOZZUvO4nptMUhuB1to2K3wwFpFqc5gfEK0SxyIIFiu1yE2MtygWcA==", "license": "Apache-2.0", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" - }, - "bin": { - "openai": "bin/cli" + "engines": { + "node": ">=22.0.0" }, "peerDependencies": { - "ws": "^8.18.0", - "zod": "^3.23.8" + "@aws-sdk/credential-provider-node": ">=3.972.0 <4", + "@smithy/hash-node": ">=4.3.0 <5", + "@smithy/signature-v4": ">=5.4.0 <6", + "undici": ">=5 <9", + "ws": "^8.21.0", + "zod": "^3.25 || ^4.0" }, "peerDependenciesMeta": { + "@aws-sdk/credential-provider-node": { + "optional": true + }, + "@smithy/hash-node": { + "optional": true + }, + "@smithy/signature-v4": { + "optional": true + }, + "undici": { + "optional": true + }, "ws": { "optional": true }, @@ -228,43 +48,6 @@ "optional": true } } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "license": "MIT" - }, - "node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } } } } diff --git a/lessons/02-first-ai-app/sample-app/package.json b/lessons/02-first-ai-app/sample-app/package.json index 106a315c..9646d953 100644 --- a/lessons/02-first-ai-app/sample-app/package.json +++ b/lessons/02-first-ai-app/sample-app/package.json @@ -4,13 +4,13 @@ "main": "app.js", "type": "module", "scripts": { - "start": "node app.js" + "start": "node --env-file-if-exists=../../../.env app.js" }, "keywords": [], "author": "", "license": "ISC", - "description": "Sample app showcasing AI usage using GitHub model", + "description": "First AI app using a configured OpenAI-compatible model", "dependencies": { - "openai": "^4.84.1" + "openai": "^7.28.0" } } diff --git a/lessons/02-first-ai-app/solution/solution.md b/lessons/02-first-ai-app/solution/solution.md index cef38b55..fce8c855 100644 --- a/lessons/02-first-ai-app/solution/solution.md +++ b/lessons/02-first-ai-app/solution/solution.md @@ -1,6 +1,6 @@ Here's the solution -```javascript +```javascript import { OpenAI } from "openai"; // 1. Define the prompt @@ -21,9 +21,16 @@ const messages = [ // 2. Create client // ----------------------------------- +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL: endpoint, + apiKey, }); @@ -31,7 +38,7 @@ const openai = new OpenAI({ // ----------------------------------- const completion = await openai.chat.completions.create({ - model: 'gpt-4o-mini', + model, messages: messages, }); diff --git a/lessons/02-first-ai-app/translations/README.bn.md b/lessons/02-first-ai-app/translations/README.bn.md index 734ac090..762a5b6d 100644 --- a/lessons/02-first-ai-app/translations/README.bn.md +++ b/lessons/02-first-ai-app/translations/README.bn.md @@ -10,16 +10,6 @@ যদি আপনি এখনো সেটআপ না করে থাকেন, তাহলে আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট সেট আপ করুন। এটি করার জন্য এই লিঙ্কটি অনুসরণ করুন: [আপনার এনভায়রনমেন্ট সেটআপ করুন](/docs/setup/README.md)। -## সম্পর্কিত রিসোর্সসমূহ - -[![বড় ভাষা মডেল সম্পর্কে একটি ছোট ভিডিও দেখুন](https://img.youtube.com/vi/GQ_2OjNZ9aA/0.jpg)](https://www.youtube.com/watch?v=GQ_2OjNZ9aA&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=2) - -_এই ভিডিওটি AI মডেল, বিশেষ করে "বড় ভাষা মডেল" (LLMs) কী এবং কীভাবে এগুলো ব্যবহার করে আপনার অ্যাপে AI সংযুক্ত করা যায় তা পরিচয় করিয়ে দেয়।_ - -*🎥 উপরের ছবিতে ক্লিক করে বড় ভাষা মডেল সম্পর্কে একটি ছোট ভিডিও দেখুন* - -💼 স্লাইড: [বড় ভাষা মডেল, LLMs-এর পরিচিতি](/videos/slides/01-llms.pptx) - ## গল্প: নিজেকে একটি নদীতে একটি নৌকায় কল্পনা করুন > [!NOTE] @@ -132,14 +122,14 @@ _এই ভিডিওটি AI মডেল, বিশেষ করে "বড 1. শুরু করুন [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. রিপোজিটরির মূল ফোল্ডারে _/app/README.md_ এ যান। -3. কনসোলে `npm install` চালান, তারপর `npm start` কমান্ড দিন। +3. কনসোলে `npm ci` চালান, তারপর `npm start` কমান্ড দিন। 4. যখন অ্যাপটি চালু হবে, তখন "Open in Browser" বোতামটি নির্বাচন করুন। 5. এখন আপনি লিওনার্দোর সাথে চ্যাট করতে পারেন। আরও বিস্তারিত জানতে, দেখুন [বিস্তারিত অ্যাপ ব্যাখ্যা](/lessons/01-intro-to-genai/translations/README.bn.md#ডিনোক্রেটিসের-সাথে-সাক্ষাৎ)। > [!NOTE] -> আপনি যদি প্রকল্পটি আপনার স্থানীয় কম্পিউটারে চালান, তাহলে দয়া করে **QuickStart গাইড** অনুসরণ করে [GitHub ব্যক্তিগত অ্যাক্সেস টোকেন (PAT)](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) সেটআপ করুন এবং কোডে টোকেনটি প্রতিস্থাপন করুন। +> রিপোজিটরির মূল ফোল্ডারের `.env` ফাইলে `AI_ENDPOINT`, `AI_API_KEY` এবং `AI_MODEL` সেট করুন। লোকাল পরিবেশ এবং Codespaces উভয়ের জন্য এই সেটিংস প্রয়োজন। [সেটআপ নির্দেশিকা](/docs/setup/README.md#configure-environment-variables) দেখুন। > ## ডেভেলপমেন্ট এনভায়রনমেন্ট সেটআপ লিওনার্দোকে তার প্রকল্পে সাহায্য করার আগে, প্রথমেই আপনার **"কারিগরি সরঞ্জাম"** সম্পর্কে চিন্তা করা উচিত, যা আপনাকে কার্যকরভাবে সহায়তা করতে সাহায্য করবে। @@ -199,9 +189,16 @@ ${question} // 2. ক্লায়েন্ট তৈরি করুন // ----------------------------------- +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, // পরিবেশ পরিবর্তনশীল ব্যবহার করুন + baseURL: endpoint, + apiKey, // পরিবেশ পরিবর্তনশীল ব্যবহার করুন }); // 3. অনুরোধ পাঠান @@ -223,7 +220,7 @@ console.log(completion.choices[0]?.message?.content); ### **আপনার অ্যাপ চালানোর জন্য করণীয়:** 1. **Node.js এবং npm ইনস্টল করুন** -2. **আপনার API কী (GITHUB_TOKEN) সেট করুন** পরিবেশ পরিবর্তনশীল হিসাবে +2. **`AI_ENDPOINT`, `AI_API_KEY`, এবং `AI_MODEL` সেট করুন** পরিবেশ পরিবর্তনশীল হিসাবে 3. **এই স্ক্রিপ্টটি চালান:** ```bash node your_script.js @@ -244,13 +241,13 @@ console.log(completion.choices[0]?.message?.content); **আপনি:** "আমি মনে করি আমি বুঝতে পেরেছি। তাহলে যদি আমি `question` ভেরিয়েবলের মান পরিবর্তন করি, তাহলে অ্যাপটি ভিন্ন ইতালীয় অনুবাদ তৈরি করবে?" -**টাইম বিটল:** "একদম ঠিক! আপনি ইনপুট পাঠ্য যেকোনো কিছুতে পরিবর্তন করতে পারেন। লক্ষ্য করুন, **GitHub মডেল** API-এর বেস URL হিসাবে ব্যবহার করা হচ্ছে এবং **GitHub টোকেন** API কী হিসেবে ব্যবহার করা হয়েছে।" +**টাইম বিটল:** এন্ডপয়েন্ট, API কী এবং ডেপ্লয়মেন্টের নাম আপনার Microsoft Foundry রিসোর্স থেকে আসে। কোডে `AI_ENDPOINT`, `AI_API_KEY` এবং `AI_MODEL` ব্যবহার করা হয়। **আপনি:** "এটি গুরুত্বপূর্ণ কেন?" -**টাইম বিটল:** "এটি গুরুত্বপূর্ণ কারণ আপনি যে মডেলটি ব্যবহার করছেন, সেটির জন্য নির্দিষ্ট **বেস URL এবং API কী** ব্যবহার করা প্রয়োজন। **GitHub Models** একটি প্ল্যাটফর্ম যেখানে বিভিন্ন ক্ষমতা ও বৈশিষ্ট্যের মডেল হোস্ট করা হয়, এবং এটি বিনামূল্যে ব্যবহারের জন্য উপলব্ধ।" +**টাইম বিটল:** Microsoft Foundry মডেল ডেপ্লয়মেন্ট হোস্ট করে। একই রিসোর্সের এন্ডপয়েন্ট ও API কী ব্যবহার করুন এবং `AI_MODEL`-এ ডেপ্লয়মেন্টের নাম দিন। Azure-এর মূল্য এবং কোটা পরীক্ষা করুন। -**আপনি:** "ওহ দারুণ, যাক! আমি জানি না কাকে টাকা দিতে হবে, আর আমি সন্দেহ করি যে তারা আমার মুদ্রা গ্রহণ করবে কিনা। 😄" +**আপনি:** "তাহলে ছোট একটি ডেপ্লয়মেন্ট ব্যবহার করব এবং পরীক্ষা করার আগে খরচ দেখে নেব।" ## চ্যাট অ্যাপস **টাইম বিটল:** "Generative AI মডেলগুলোকে কথোপকথনের উপর ভিত্তি করে **পাঠ্য তৈরি করতেও ব্যবহার করা যায়**। আপনি AI-এর সাথে **একটি কথোপকথন অনুকরণ করতে পারেন** একটি **বার্তার তালিকা (messages list)** প্রদান করে, যা মনে হবে যেন কথোপকথন ইতিমধ্যেই ঘটেছে।" @@ -313,9 +310,16 @@ const messages = [ } ]; +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, // API কী সংযুক্ত করুন + baseURL: endpoint, + apiKey, // API কী সংযুক্ত করুন }); // অনুরোধ পাঠান @@ -550,5 +554,5 @@ C. **প্রসঙ্গ উইন্ডো নির্ধারণ করে - [টেক্সট জেনারেশন](https://platform.openai.com/docs/guides/text-generation) - [OpenAI-এর জন্য JavaScript লাইব্রেরি](https://github.com/openai/openai-node/tree/master/examples) - [Tokenizer](https://platform.openai.com/tokenizer) -- [Completion API](https://platform.openai.com/docs/api-reference/completions) -- [Chat completions](https://platform.openai.com/docs/guides/text-generation#text-generation-models) +- [Completion API](https://github.com/openai/openai-node#usage) +- [Chat completions](https://platform.openai.com/docs/guides/text-generation#text-generation-models) diff --git a/lessons/02-first-ai-app/translations/README.fr.md b/lessons/02-first-ai-app/translations/README.fr.md index a313c04a..62cdf30b 100644 --- a/lessons/02-first-ai-app/translations/README.fr.md +++ b/lessons/02-first-ai-app/translations/README.fr.md @@ -12,13 +12,11 @@ Si ce n'est pas encore fait, configurez votre environnement de développement. V ## Ressources associées -[![Regardez une courte vidéo sur les modèles de langage étendus.](https://img.youtube.com/vi/GQ_2OjNZ9aA/0.jpg)](https://www.youtube.com/watch?v=GQ_2OjNZ9aA\&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk\&index=2) *Cette vidéo vous donne une introduction aux modèles d'IA appelés "modèles de langage étendus", LLM, ce qu'ils sont et comment vous pouvez les utiliser pour intégrer l'IA dans vos applications.* *🎥 Cliquez sur l’image ci-dessus pour regarder une courte vidéo sur les modèles de langage étendus* -💼 Diapositives : [Introduction aux modèles de langage étendus, LLMs](/videos/slides/01-llms.pptx) ## Narrative: Picture yourself in a boat on a river @@ -122,14 +120,14 @@ Si vous voulez interagir avec Léonard, exécutez l'application [Personnages](/a 1. Lancez un [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript). 2. Accédez à */app/README.md* à la racine du référentiel. -3. Localisez la console et exécutez `npm install` suivi de `npm start`. +3. Localisez la console et exécutez `npm ci` suivi de `npm start`. 4. Une fois que l'application est ouverte, sélectionnez le bouton "Ouvrir dans le navigateur". 5. Discutez avec Leonardo. Pour une explication plus détaillée de l'application, voir [Explication détaillée de l'application](/lessons/01-intro-to-genai/README.md#interact-with-dinocrates). > [!NOTE] -> Si vous exécutez le projet localement sur votre machine, veuillez consulter le guide de démarrage rapide pour configurer un [token d'accès personnel GitHub](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) et remplacer la clé dans le code. +> Configurez `AI_ENDPOINT`, `AI_API_KEY` et `AI_MODEL` dans le fichier `.env` à la racine du dépôt, en local comme dans Codespaces. Consultez le [guide de configuration](/docs/setup/README.md#configure-environment-variables). ## Configuration de l'environnement de développement @@ -192,9 +190,16 @@ ${question} // 2. Create client // ----------------------------------- +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL: endpoint, + apiKey, }); @@ -224,13 +229,13 @@ Expliquons ce qui se passe ici : **Vous :** Je pense que je comprends. Donc, si je change la valeur de la variable `question` par autre chose, l'application générera une traduction italienne différente ? -**Scarabée du Temps :** Exactement, vous pouvez changer le texte d'entrée comme vous le souhaitez. Notez également comment les modèles GitHub sont utilisés comme URL de base pour l'API avec un token GitHub comme clé API. +**Scarabée du Temps :** Le point de terminaison, la clé API et le nom du déploiement proviennent de votre ressource Microsoft Foundry. Le code utilise `AI_ENDPOINT`, `AI_API_KEY` et `AI_MODEL`. **Vous :** Pourquoi est-ce important ? -**Scarabée du Temps :** Il est important d'utiliser une URL de base et une clé API spécifiques au modèle que vous utilisez. GitHub Models est une plateforme qui héberge une variété de modèles, chacun ayant des capacités et des fonctionnalités différentes. De plus, c’est gratuit à utiliser. +**Scarabée du Temps :** Microsoft Foundry héberge le déploiement. Utilisez une clé API de la même ressource que le point de terminaison et son nom de déploiement dans `AI_MODEL`. Vérifiez les tarifs et les quotas Azure. -**Vous :** Ah, tant mieux, je ne sais pas qui payer de toute façon, et je doute qu’ils acceptent ma monnaie ici. :) +**Vous :** Je vais donc utiliser un petit déploiement et vérifier les coûts avant de faire des essais. ## Applications de chat @@ -293,9 +298,16 @@ const messages = [ } ]; +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL: endpoint, + apiKey, }); @@ -497,5 +509,5 @@ C. La fenêtre de contexte détermine à quel point les réponses de l’IA sont * [Génération de texte](https://platform.openai.com/docs/guides/text-generation) * [Bibliothèque JavaScript pour OpenAI](https://github.com/openai/openai-node/tree/master/examples) * [Tokeniseur](https://platform.openai.com/tokenizer) -* [API de complétion](https://platform.openai.com/docs/api-reference/completions) +* [API de complétion](https://github.com/openai/openai-node#usage) * [Complétions de chat](https://platform.openai.com/docs/guides/text-generation#text-generation-models) diff --git a/lessons/02-first-ai-app/translations/README.pt-br.md b/lessons/02-first-ai-app/translations/README.pt-br.md index 82dbc1a7..2afda2b6 100644 --- a/lessons/02-first-ai-app/translations/README.pt-br.md +++ b/lessons/02-first-ai-app/translations/README.pt-br.md @@ -10,16 +10,6 @@ Neste capítulo você vai aprender: Se você ainda não configurou seu ambiente de desenvolvimento, veja como fazer: [Configure seu ambiente](/docs/setup/README.md). -## Recursos relacionados - -[![Assista a um vídeo curto sobre grandes modelos de linguagem](https://img.youtube.com/vi/GQ_2OjNZ9aA/0.jpg)](https://www.youtube.com/watch?v=GQ_2OjNZ9aA&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=2) - -_Este vídeo apresenta uma introdução aos modelos de IA chamados "grandes modelos de linguagem", LLMs, o que são e como você pode usá-los para integrar IA em seus aplicativos._ - -*🎥 Clique na imagem acima para assistir a um vídeo curto sobre grandes modelos de linguagem* - -💼 Slides: [Introdução aos grandes modelos de linguagem, LLMs](/videos/slides/01-llms.pptx) - ## Narrativa: Imagine-se em um barco num rio @@ -42,7 +32,7 @@ Quando você abre os olhos, o mundo mudou. Ao conseguir se levantar, você perce Observando o barco, você encontra um remo longo apoiado na lateral. Segurando-o, você começa a remar em direção aos edifícios distantes. À medida que se aproxima, os edifícios ficam mais nítidos, são antigos, sua arquitetura lembrando uma pintura renascentista.
- Barco no rio, homem em pé com um remo + Barco no rio, homem em pé com um remo
A questão agora é: onde e quando você está desta vez? @@ -52,7 +42,7 @@ Você consegue atracar o barco no cais e começa a caminhar ao longo das tábuas Enquanto caminha, você nota um homem com uma longa barba e um chapéu, remexendo em uma caixa do que parecem ser peças mecânicas. Suas mãos se movem com destreza, separando engrenagens e molas com facilidade experiente.
- Leonardo Da Vinci em pé ao lado de uma caixa no porto + Leonardo Da Vinci em pé ao lado de uma caixa no porto
### Ajude-me, Leonardo @@ -82,7 +72,7 @@ Enquanto caminha, você nota um homem com uma longa barba e um chapéu, remexend ### Na oficina
- Oficina de Leonardo + Oficina de Leonardo
O velho o leva até uma grande porta de madeira e você é recebido pela visão de uma oficina cheia de todo tipo de engenhocas mecânicas. @@ -125,21 +115,21 @@ Se você quiser interagir com Leonardo, execute o aplicativo [Characters](/app/R > [Aviso sobre IA Responsável](/README.md#responsible-ai-disclaimer)
- +
**Passos**: 1. Inicie um [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. Navegue até _/app/README.md_ na raiz do repositório. -3. Localize o console e execute `npm install` seguido de `npm start`. +3. Localize o console e execute `npm ci` seguido de `npm start`. 4. Quando aparecer, selecione o botão "Open in Browser". 5. Converse com Leonardo. Para uma explicação mais detalhada do aplicativo, consulte [Explicação detalhada do aplicativo](/lessons/01-intro-to-genai/README.md#interaja-com-dinocrates). > [!NOTE] - > Se você estiver executando o projeto localmente em sua máquina, por favor revise o guia de Início Rápido para configurar um [token de acesso pessoal do GitHub](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) e substitua a chave no código. +> Configure `AI_ENDPOINT`, `AI_API_KEY` e `AI_MODEL` no arquivo `.env` na raiz do repositório, tanto localmente quanto no Codespaces. Consulte o [guia de configuração](/docs/setup/README.md#configure-environment-variables). ## Configuração do ambiente de desenvolvimento @@ -181,7 +171,7 @@ Antes de poder ajudar Leonardo com seu projeto, você deve primeiro pensar nas " **Besouro do Tempo:** Modelos de IA generativa podem ser usados para muitas coisas, por exemplo, tradução de idiomas. Na verdade, ele aceita entrada em um idioma e pode gerar texto em outro idioma. Vamos começar com um aplicativo simples que recebe entrada em inglês e gera texto em italiano. -```javascript +```javascript import { OpenAI } from "openai"; @@ -200,9 +190,16 @@ ${question} // 2. Crie o cliente // ----------------------------------- +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL: endpoint, + apiKey, }); @@ -232,13 +229,13 @@ Vamos explicar o que está acontecendo aqui: **Você:** Acho que entendi. Então, se eu mudar o valor da variável `question` para outra coisa, o aplicativo gerará uma tradução italiana diferente? -**Besouro do Tempo:** Exatamente, você pode alterar o texto de entrada para qualquer coisa que desejar. Observe também como os modelos do GitHub estão sendo usados como a URL base para a API junto com um token do GitHub como a chave da API. +**Besouro do Tempo:** O endpoint, a chave de API e o nome da implantação vêm do seu recurso Microsoft Foundry. O código usa `AI_ENDPOINT`, `AI_API_KEY` e `AI_MODEL`. **Você:** Por que isso é importante? -**Besouro do Tempo:** É importante usar uma URL base e uma chave de API específicas para o modelo que você está usando. GitHub Models é uma plataforma que hospeda uma variedade de modelos, todos com diferentes capacidades e recursos, e também é gratuito para usar. +**Besouro do Tempo:** O Microsoft Foundry hospeda a implantação. Use uma chave da mesma origem do endpoint e defina o nome da implantação em `AI_MODEL`. Verifique os preços e as cotas do Azure. -**Você:** Ah, que bom, eu não sei quem pagar de qualquer forma e duvido que eles aceitem minha moeda aqui. :) +**Você:** Então vou usar uma implantação pequena e verificar os custos antes de experimentar. ## Aplicativos de chat @@ -274,7 +271,7 @@ IA: Roma é conhecida por suas ruínas antigas, arte e cultura vibrante. Você p **Besouro do Tempo:** Abaixo está como podemos construir uma conversa com a IA: -```javascript +```javascript // Defina o contexto @@ -301,9 +298,16 @@ const messages = [ } ]; +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL: endpoint, + apiKey, }); @@ -462,7 +466,7 @@ Leonardo de repente pediu para inspecionar o Besouro do Tempo mais de perto, olh **Besouro do Tempo:** Nada
- Parafuso aéreo, Leonardo Da Vinci + Parafuso aéreo, Leonardo Da Vinci
> [!NOTE] @@ -507,5 +511,5 @@ C. A janela de contexto determina quão criativas são as respostas da IA. - [Geração de texto](https://platform.openai.com/docs/guides/text-generation) - [Biblioteca JavaScript para OpenAI](https://github.com/openai/openai-node/tree/master/examples) - [Tokenizer](https://platform.openai.com/tokenizer) -- [API de Completions](https://platform.openai.com/docs/api-reference/completions) +- [API de Completions](https://github.com/openai/openai-node#usage) - [Chat completions](https://platform.openai.com/docs/guides/text-generation#text-generation-models) diff --git a/lessons/02-first-ai-app/translations/README.zh-cn.md b/lessons/02-first-ai-app/translations/README.zh-cn.md index a5702017..578e031d 100644 --- a/lessons/02-first-ai-app/translations/README.zh-cn.md +++ b/lessons/02-first-ai-app/translations/README.zh-cn.md @@ -10,16 +10,6 @@ 如果你还没有设置开发环境,以下是设置方法:[设置你的环境](/docs/setup/README.md)。 -## 相关资源 - -[![观看关于大语言模型的短视频](https://img.youtube.com/vi/GQ_2OjNZ9aA/0.jpg)](https://www.youtube.com/watch?v=GQ_2OjNZ9aA&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=2) - -_这个视频向你介绍了被称为"大语言模型"(LLM)的 AI 模型,它们是什么以及如何使用它们将 AI 集成到你的应用程序中。_ - -*🎥 点击上方图片观看关于大语言模型的短视频* - -💼 幻灯片:[大语言模型(LLM)介绍](/videos/slides/01-llms.pptx) - ## 故事叙述:想象自己在河上的一条船里 @@ -42,7 +32,7 @@ _这个视频向你介绍了被称为"大语言模型"(LLM)的 AI 模型, 环顾船内,你发现一根长桨靠在船边。抓起桨,你开始向远处的建筑物划去。当你靠近时,建筑物变得更加清晰,它们很古老,建筑风格让人联想到文艺复兴时期的画作。
- 河上的船,一个人拿着桨站立 + 河上的船,一个人拿着桨站立
现在的问题是,这次你身在何时何地? @@ -52,7 +42,7 @@ _这个视频向你介绍了被称为"大语言模型"(LLM)的 AI 模型, 在行走过程中,你注意到一个留着长胡子戴着帽子的人,正在翻找一个看起来像机械零件的箱子。他的手灵活地移动,熟练地分拣齿轮和弹簧。
- 莱昂纳多·达·芬奇站在港口的箱子旁边 + 莱昂纳多·达·芬奇站在港口的箱子旁边
### 帮帮我,莱昂纳多 @@ -82,7 +72,7 @@ _这个视频向你介绍了被称为"大语言模型"(LLM)的 AI 模型, ### 在工作坊
- 莱昂纳多的工作坊 + 莱昂纳多的工作坊
老人领你来到一扇大木门前,迎接你的是一个工作坊,里面充满了各种机械装置。 @@ -124,21 +114,21 @@ _这个视频向你介绍了被称为"大语言模型"(LLM)的 AI 模型, > [负责任的 AI 免责声明](/README.md#responsible-ai-disclaimer)
- +
**步骤**: 1. 启动一个 [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. 导航到仓库根目录中的 _/app/README.md_。 -3. 在控制台中运行 `npm install` 然后运行 `npm start`。 +3. 在控制台中运行 `npm ci` 然后运行 `npm start`。 4. 当它出现时,选择"在浏览器中打开"按钮。 5. 与莱昂纳多聊天。 有关应用程序的更详细解释,请参见[详细应用程序说明](/lessons/01-intro-to-genai/README.md#interact-with-dinocrates)。 > [!NOTE] - > 如果你在本地机器上运行项目,请查看快速入门指南以设置 [GitHub personal access](../../../docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) token 并在代码中替换密钥。 +> 在存储库根目录的 `.env` 中配置 `AI_ENDPOINT`、`AI_API_KEY` 和 `AI_MODEL`。本地开发和 Codespaces 都需要这些设置。请参阅[配置指南](/docs/setup/README.md#configure-environment-variables)。 ## 开发环境设置 @@ -180,7 +170,7 @@ _这个视频向你介绍了被称为"大语言模型"(LLM)的 AI 模型, **时间甲虫**:生成式 AI 模型可以用于很多事情,例如语言翻译。事实上,它接受一种语言的输入并可以生成另一种语言的文本。让我们从一个简单的应用程序开始,它接收英语输入并生成意大利语文本。 -```javascript +```javascript import { OpenAI } from "openai"; @@ -199,9 +189,16 @@ ${question} // 2. 创建客户端 // ----------------------------------- +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL: endpoint, + apiKey, }); @@ -231,13 +228,13 @@ console.log(completion.choices[0]?.message?.content); **你**:我想我明白了。所以如果我改变 `question` 变量的值为别的内容,应用程序就会生成不同的意大利语翻译? -**时间甲虫**:没错,你可以将输入文本更改为任何你想要的内容。还要注意 GitHub 模型如何作为 API 的基础 URL 与环境变量中的 GitHub 令牌一起作为 API 密钥使用。 +**时间甲虫**:终结点、API 密钥和部署名称来自你的 Microsoft Foundry 资源。代码使用 `AI_ENDPOINT`、`AI_API_KEY` 和 `AI_MODEL`。 **你**:为什么这很重要? -**时间甲虫**:使用特定于你所使用的模型的基础 URL 和 API 密钥很重要。GitHub Models 是一个托管各种模型的平台,所有这些模型都具有不同的功能和特性,而且使用是免费的。 +**时间甲虫**:Microsoft Foundry 托管模型部署。使用同一资源的终结点和 API 密钥,并将 `AI_MODEL` 设置为部署名称。模型使用可能产生 Azure 费用,请检查价格和配额。 -**你**:哦,太好了,反正我不知道该付钱给谁,而且我怀疑他们是否接受我的货币。:) +**你**:那我会使用较小的部署,并在实验前检查费用。 ## 聊天应用程序 @@ -273,7 +270,7 @@ AI: Rome is known for its ancient ruins, art, and vibrant culture. You can visit **时间甲虫**:以下是我们如何构建与 AI 的对话: -```javascript +```javascript // 定义上下文 @@ -300,9 +297,16 @@ const messages = [ } ]; +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL: endpoint, + apiKey, }); @@ -459,7 +463,7 @@ const completion = await openai.chat.completions.create({ **时间甲虫**:没什么
- 空气螺旋,莱昂纳多·达·芬奇 + 空气螺旋,莱昂纳多·达·芬奇
> [!NOTE] @@ -503,5 +507,5 @@ C. 上下文窗口决定了 AI 响应的创造性程度。 - [文本生成](https://platform.openai.com/docs/guides/text-generation) - [OpenAI 的 JavaScript 库](https://github.com/openai/openai-node/tree/master/examples) - [Tokenizer](https://platform.openai.com/tokenizer) -- [Completion API](https://platform.openai.com/docs/api-reference/completions) +- [Completion API](https://github.com/openai/openai-node#usage) - [聊天完成](https://platform.openai.com/docs/guides/text-generation#text-generation-models) diff --git a/lessons/03-prompt-engineering/README.md b/lessons/03-prompt-engineering/README.md index 14ff06e7..30fc280a 100644 --- a/lessons/03-prompt-engineering/README.md +++ b/lessons/03-prompt-engineering/README.md @@ -10,16 +10,6 @@ In this chapter you will learn: If you haven't already, set up your development environment. Here's how you can do it: [Setup your environment](/docs/setup/README.md). -## Related Resources - -[![Watch a short video about prompt engineering](https://img.youtube.com/vi/gQ6TlyxBmWs/0.jpg)](https://www.youtube.com/watch?v=gQ6TlyxBmWs&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=3) - -_This video offers an introduction to improving your "prompting" skills, teaching you how to give clearer and more effective instructions to the AI to achieve better results._ - -*🎥 Click on the image above to watch a short video about prompt engineering* - -💼 Slides: [Prompt engineering](/videos/slides/02-prompt-engineering.pptx) - ## Narrative: Ticket to ride > [!NOTE] @@ -116,14 +106,14 @@ If you want to interact with Sforza, run the [Characters](/app/README.md) app. 1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. Navigate to _/app_ in the repo root. -3. Locate the console and run `npm install` followed by `npm start`. +3. Locate the console and run `npm ci` followed by `npm start`. 4. Once it appears, select the "Open in Browser" button. 5. Chat with Sforza. For a more detailed explanation of the app, see [Detailed app explanation](/lessons/01-intro-to-genai/README.md#interact-with-dinocrates). > [!NOTE] - > If you're running the project locally on your machine, please review the QuickStart guide to get a [GitHub personal access](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) token setup and replace the key in the code. +> Configure `AI_ENDPOINT`, `AI_API_KEY`, and `AI_MODEL` in the repository-root `.env` for both local development and Codespaces. See the [setup guide](/docs/setup/README.md#configure-environment-variables). ## What is prompt engineering? @@ -330,6 +320,4 @@ C. Prompt engineering is about training a model to recognize patterns in data. - [Prompt engineering](https://en.wikipedia.org/wiki/Prompt_engineering) - [Prompt engineering fundamentals](https://github.com/microsoft/generative-ai-for-beginners/blob/main/04-prompt-engineering-fundamentals/README.md?WT.mc_id=academic-105485-koreyst) -- [Advanced prompt engineering](https://github.com/microsoft/generative-ai-for-beginners/tree/main/05-advanced-prompts) - - +- [Advanced prompt engineering](https://github.com/microsoft/generative-ai-for-beginners/tree/main/05-advanced-prompts) diff --git a/lessons/03-prompt-engineering/sample-app/app.js b/lessons/03-prompt-engineering/sample-app/app.js index 5c4c74e1..a9b9bec5 100644 --- a/lessons/03-prompt-engineering/sample-app/app.js +++ b/lessons/03-prompt-engineering/sample-app/app.js @@ -1,52 +1,37 @@ import { OpenAI } from "openai"; -import readline from "readline"; - -// User input -const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout -}); +import { createInterface } from "node:readline/promises"; +import { stdin, stdout } from "node:process"; + +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} -const question = (query) => { - return new Promise((resolve) => { - rl.question(query, (answer) => { - resolve(answer); - }); - }); -}; +const openai = new OpenAI({ baseURL: endpoint, apiKey, timeout: 60000 }); async function main() { - const userPrompt = await question("Enter your prompt: "); - - const messages = [ - { - role: "user", - content: userPrompt + const rl = createInterface({ input: stdin, output: stdout }); + try { + const userPrompt = await rl.question("Enter your prompt: "); + if (!userPrompt.trim()) throw new Error("Enter a non-empty prompt."); + const completion = await openai.chat.completions.create({ + model, + messages: [{ role: "user", content: userPrompt }] + }); + const answer = completion.choices[0]?.message?.content; + if (!answer?.trim()) throw new Error("The model did not return an answer."); + console.log(`\nAI Response:\n${answer}`); + if (userPrompt.toLowerCase().includes("time-traveling javascript developer")) { + console.log("\nEaster Egg Unlocked! You discovered the hidden poem!"); } - ]; - - // OpenAI API setup - const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, - }); - - const completion = await openai.chat.completions.create({ - model: 'gpt-4o-mini', - messages: messages, - }); - - const answer = completion.choices[0]?.message?.content; - - console.log(`\nAI Response:\n`); - console.log(answer); - - // Easter Egg Check - if (userPrompt.toLowerCase().includes("time-traveling javascript developer") && answer) { - console.log("\n Easter Egg Unlocked! You discovered the hidden poem! "); + } finally { + rl.close(); } - - rl.close(); } -main(); +main().catch(error => { + console.error("Error:", error.message); + process.exitCode = 1; +}); diff --git a/lessons/03-prompt-engineering/sample-app/package-lock.json b/lessons/03-prompt-engineering/sample-app/package-lock.json index ae1264ed..d3886f9f 100644 --- a/lessons/03-prompt-engineering/sample-app/package-lock.json +++ b/lessons/03-prompt-engineering/sample-app/package-lock.json @@ -9,218 +9,38 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "openai": "^4.84.1" - } - }, - "node_modules/@types/node": { - "version": "18.19.75", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.75.tgz", - "integrity": "sha512-UIksWtThob6ZVSyxcOqCLOUNg/dyO1Qvx4McgeuhrEtHTLFTf7BBhEazaE4K806FGTPtzd/2sE90qn4fVr7cyw==", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", - "license": "MIT", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", - "license": "MIT" - }, - "node_modules/formdata-node": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", - "license": "MIT", - "dependencies": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.3" - }, - "engines": { - "node": ">= 12.20" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "openai": "^7.28.0" } }, "node_modules/openai": { - "version": "4.84.1", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.84.1.tgz", - "integrity": "sha512-bVdFsfeVBXN59x9i26dHnYUkY5JPk19w7SydzMvJZDsA+FxwXZrQsUBtdwsQt/ZLuilcc/LzJG7mpJucO2DDHg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-7.28.0.tgz", + "integrity": "sha512-HSY4fFLflQGYe2kvO0atm6/GzhD61gpyiOZZUvO4nptMUhuB1to2K3wwFpFqc5gfEK0SxyIIFiu1yE2MtygWcA==", "license": "Apache-2.0", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" - }, - "bin": { - "openai": "bin/cli" + "engines": { + "node": ">=22.0.0" }, "peerDependencies": { - "ws": "^8.18.0", - "zod": "^3.23.8" + "@aws-sdk/credential-provider-node": ">=3.972.0 <4", + "@smithy/hash-node": ">=4.3.0 <5", + "@smithy/signature-v4": ">=5.4.0 <6", + "undici": ">=5 <9", + "ws": "^8.21.0", + "zod": "^3.25 || ^4.0" }, "peerDependenciesMeta": { + "@aws-sdk/credential-provider-node": { + "optional": true + }, + "@smithy/hash-node": { + "optional": true + }, + "@smithy/signature-v4": { + "optional": true + }, + "undici": { + "optional": true + }, "ws": { "optional": true }, @@ -228,43 +48,6 @@ "optional": true } } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "license": "MIT" - }, - "node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } } } } diff --git a/lessons/03-prompt-engineering/sample-app/package.json b/lessons/03-prompt-engineering/sample-app/package.json index 44add90e..6d837865 100644 --- a/lessons/03-prompt-engineering/sample-app/package.json +++ b/lessons/03-prompt-engineering/sample-app/package.json @@ -4,13 +4,13 @@ "main": "app.js", "type": "module", "scripts": { - "start": "node app.js" + "start": "node --env-file-if-exists=../../../.env app.js" }, "keywords": [], "author": "", "license": "ISC", "description": "", "dependencies": { - "openai": "^4.84.1" + "openai": "^7.28.0" } } diff --git a/lessons/03-prompt-engineering/solution/solution.md b/lessons/03-prompt-engineering/solution/solution.md index f0d559a5..377a9f7d 100644 --- a/lessons/03-prompt-engineering/solution/solution.md +++ b/lessons/03-prompt-engineering/solution/solution.md @@ -1,118 +1,55 @@ -Here's the solution: +# Aerial Screw Prompt Solution -```javascript -import { OpenAI } from "openai"; -import readline from "node:readline"; +This is a fictional, simplified physics exercise, not flight guidance. It demonstrates how clear inputs and assumptions improve a prompt. -const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout -}); +Save the code as `solution.js` in the lesson's `sample-app` directory. Run it with `node --env-file=../../../.env solution.js`, or select another environment file with Node's `--env-file` option. -const question = (query) => { - return new Promise((resolve) => { - rl.question(query, (answer) => { - resolve(answer); - }); +```javascript +import { OpenAI } from "openai"; +import { createInterface } from "node:readline/promises"; +import { stdin, stdout } from "node:process"; + +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + +const openai = new OpenAI({ baseURL: endpoint, apiKey, timeout: 60000 }); +const rl = createInterface({ input: stdin, output: stdout }); +try { + async function number(question) { + const text = await rl.question(question); + const value = Number(text); + if (!text.trim() || !Number.isFinite(value)) throw new Error("Enter a finite number."); + return value; + } + const height = await number("Height above ground in meters: "); + const speed = await number("Forward speed in meters per second: "); + const gravity = await number("Gravity in meters per second squared: "); + const upwardSpeed = await number("Initial upward speed in meters per second: "); + if (height < 0 || speed <= 0 || gravity <= 0) { + throw new Error("Height must be non-negative; speed and gravity must be positive."); + } + const prompt = `For this fictional exercise, the hill is 100 meters away. +Height is ${height} meters, forward speed is ${speed} meters per second, +gravity is ${gravity} meters per second squared, and initial upward speed +is ${upwardSpeed} meters per second. Ignore drag. +Use horizontal travel time = 100 / forward speed and vertical height +y(t) = initial height + initial upward speed * t - gravity * t^2 / 2. +State the travel time and whether the machine reaches ground before the hill. +Give a short result and check the units.`; + const completion = await openai.chat.completions.create({ + model, + messages: [{ role: "user", content: prompt }] }); -}; - -const height = await question("Enter the current height above the ground in meters:"); - -const speed = await question("Enter the speed at which you're moving forward in meters per second:"); - -const gravity = await question("Enter the gravity in meters per second squared:"); - -const wind = await question("Enter the wind speed upwards in meters per second:"); - -// Distance to the hill -const distance = 100; - -// Create prompt including inputs should include chain of thought - -const prompt = `Current height above the ground: ${height} meters, Moving forward at: ${speed} meters per second, Gravity: ${gravity} meters per second squared, Wind upwards at: ${wind} meters per second, Distance to the hill: ${distance} meters, Time it will take to reach the hill: t, Here's the formula to calculate the time it will take to reach the hill: D = 1/2 * (g - w) * t^2.`; - -// Call the language model with the prompt - -const messages = [ -{ - "role": "user", - "content": prompt -}]; - -// 2. Create client -// ----------------------------------- - -const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, -}); - -// 3. Send the request -// ----------------------------------- - -const completion = await openai.chat.completions.create({ - model: 'gpt-4o-mini', - messages: messages, -}); - -console.log(`Answer for "${prompt}":`); - -// 4. Print the answer -// ----------------------------------- - -console.log(completion.choices[0]?.message?.content); - + const answer = completion.choices[0]?.message?.content; + if (!answer?.trim()) throw new Error("The model did not return an answer."); + console.log(answer); +} finally { + rl.close(); +} ``` -## Sample output - -```text -Enter the current height above the ground in meters:100 -Enter the speed at which you're moving forward in meters per second:3 -Enter the gravity in meters per second squared:9.82 -Enter the wind speed upwards in meters per second:3 -Answer for "Current height above the ground: 100 meters, Moving forward at: 3 meters per second, Gravity: 9.82 meters per second squared, Wind upwards at: 3 meters per second, Distance to the hill: 100 meters, Time it will take to reach the hill: t, Here's the formula to calculate the time it will take to reach the hill: D = 1/2 * (g - w) * t^2.": -To determine the time \( t \) it will take to reach the hill, we can rearrange the formula you provided: - -\[ -D = \frac{1}{2} (g - w) t^2 -\] - -Where: -- \( D \) is the distance to the hill (100 meters), -- \( g \) is the acceleration due to gravity (9.82 m/s²), -- \( w \) is the upward wind speed (3 m/s). - -First, we need to calculate \( g - w \): - -\[ -g - w = 9.82 \, \text{m/s}^2 - 3 \, \text{m/s} = 6.82 \, \text{m/s}^2 -\] - -Now, substituting \( D = 100 \) meters into the formula: - -\[ -100 = \frac{1}{2} \times 6.82 \times t^2 -\] - -To isolate \( t^2 \), we can multiply both sides by 2: - -\[ -200 = 6.82 t^2 -\] - -Next, we divide both sides by 6.82: - -\[ -t^2 = \frac{200}{6.82} \approx 29.34 -\] - -Now, taking the square root of both sides gives us \( t \): - -\[ -t \approx \sqrt{29.34} \approx 5.42 \, \text{seconds} -\] - -So, it will take approximately **5.42 seconds** to reach the hill under the given conditions. -``` +For height `100`, forward speed `3`, gravity `9.82`, and initial upward speed `3`, travel time to the hill is about `33.33` seconds. The simplified trajectory reaches ground after about `4.83` seconds, before reaching the hill. Check numerical answers rather than assuming the model is correct. diff --git a/lessons/03-prompt-engineering/translations/README.bn.md b/lessons/03-prompt-engineering/translations/README.bn.md index 758164f1..4c090cb6 100644 --- a/lessons/03-prompt-engineering/translations/README.bn.md +++ b/lessons/03-prompt-engineering/translations/README.bn.md @@ -15,15 +15,6 @@ --- -## **সম্পর্কিত রিসোর্সসমূহ** - -[![প্রম্পট ইঞ্জিনিয়ারিং সম্পর্কে একটি ছোট ভিডিও দেখুন](https://img.youtube.com/vi/gQ6TlyxBmWs/0.jpg)](https://www.youtube.com/watch?v=gQ6TlyxBmWs&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=3) - -_এই ভিডিওটি আপনাকে **"প্রম্পটিং" দক্ষতা উন্নত করার প্রাথমিক ধারণা প্রদান করবে**, যা আপনাকে **AI-কে আরও স্পষ্ট এবং কার্যকর নির্দেশনা দিতে সাহায্য করবে**, ফলে আপনি আরও ভালো ফলাফল পেতে পারেন।_ - -🎥 *উপরের ছবিতে ক্লিক করে প্রম্পট ইঞ্জিনিয়ারিং সম্পর্কে একটি ছোট ভিডিও দেখুন* - -💼 **স্লাইড:** [প্রম্পট ইঞ্জিনিয়ারিং](/videos/slides/02-prompt-engineering.pptx) ## **গল্প: টিকিট টু রাইড** > [!NOTE] @@ -141,14 +132,14 @@ _এই ভিডিওটি আপনাকে **"প্রম্পটিং" 1. **শুরু করুন** [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. **রিপোজিটরির মূল ফোল্ডারে** _/app_ এ যান। -3. **কনসোল খুঁজে বের করুন** এবং **`npm install`** কমান্ড চালান, তারপর **`npm start`** লিখে রান করুন। +3. **কনসোল খুঁজে বের করুন** এবং **`npm ci`** কমান্ড চালান, তারপর **`npm start`** লিখে রান করুন। 4. **অ্যাপ চালু হলে**, "Open in Browser" বোতাম নির্বাচন করুন। 5. **স্পোর্জার সাথে চ্যাট করুন।** আরও বিস্তারিত জানতে, দেখুন **[বিস্তারিত অ্যাপ ব্যাখ্যা](/lessons/01-intro-to-genai/translations/README.bn.md#talk-to-dinocrates)**। > [!NOTE] -> আপনি যদি **প্রকল্পটি স্থানীয়ভাবে (locally) চালান**, তাহলে দয়া করে **QuickStart গাইড** পর্যালোচনা করুন এবং **[GitHub ব্যক্তিগত অ্যাক্সেস টোকেন (PAT)](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access)** সেটআপ করুন, তারপর **কোডে টোকেনটি প্রতিস্থাপন করুন**। +> রিপোজিটরির মূল ফোল্ডারের `.env` ফাইলে `AI_ENDPOINT`, `AI_API_KEY` এবং `AI_MODEL` সেট করুন। লোকাল পরিবেশ এবং Codespaces উভয়ের জন্য এই সেটিংস প্রয়োজন। [সেটআপ নির্দেশিকা](/docs/setup/README.md#configure-environment-variables) দেখুন। ## **প্রম্পট ইঞ্জিনিয়ারিং কী?** **টাইম বিটল:** "আমাদের **প্রম্পট ইঞ্জিনিয়ারিং** সম্পর্কে কথা বলা দরকার।" @@ -373,4 +364,4 @@ C. **প্রম্পট ইঞ্জিনিয়ারিং হলো এ --- ### **প্রারম্ভিক প্রকল্প:** -শুরু করতে এই **[Starter project](/app/README.md)** ব্যবহার করো! +শুরু করতে এই **[Starter project](/app/README.md)** ব্যবহার করো! diff --git a/lessons/03-prompt-engineering/translations/README.fr.md b/lessons/03-prompt-engineering/translations/README.fr.md index cbcf467d..6aeb05b3 100644 --- a/lessons/03-prompt-engineering/translations/README.fr.md +++ b/lessons/03-prompt-engineering/translations/README.fr.md @@ -12,13 +12,11 @@ Si ce n'est pas encore fait, configurez votre environnement de développement. V ## Ressources associées -[![Regardez une courte vidéo sur l'ingénierie des prompts](https://img.youtube.com/vi/gQ6TlyxBmWs/0.jpg)](https://www.youtube.com/watch?v=gQ6TlyxBmWs\&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk\&index=3) *Cette vidéo propose une introduction à l'amélioration de vos compétences en matière de "prompt", en vous apprenant à donner des instructions plus claires et plus efficaces à l'IA pour obtenir de meilleurs résultats.* *🎥 Cliquez sur l'image ci-dessus pour regarder une courte vidéo sur l'ingénierie des prompts* -💼 Présentation : [Ingénierie des prompts](/videos/slides/02-prompt-engineering.pptx) ## Narrative: Ticket to ride @@ -116,14 +114,14 @@ Si vous souhaitez interagir avec Sforza, exécutez l'application [Personnages](/ 1. Lancez un [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript). 2. Naviguez vers */app* à la racine du dépôt. -3. Localisez la console et exécutez `npm install` suivi de `npm start`. +3. Localisez la console et exécutez `npm ci` suivi de `npm start`. 4. Une fois que l'application est ouverte, sélectionnez le bouton "Ouvrir dans le navigateur". 5. Discutez avec Sforza. Pour une explication plus détaillée de l'application, voir [Explication détaillée de l'application](/lessons/01-intro-to-genai/README.md#interact-with-dinocrates). > [!NOTE] -> Si vous exécutez le projet localement sur votre machine, veuillez consulter le guide de démarrage rapide pour configurer un [token d'accès personnel GitHub](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) et remplacer la clé dans le code. +> Configurez `AI_ENDPOINT`, `AI_API_KEY` et `AI_MODEL` dans le fichier `.env` à la racine du dépôt, en local comme dans Codespaces. Consultez le [guide de configuration](/docs/setup/README.md#configure-environment-variables). ## Qu'est-ce que l'ingénierie des prompts ? diff --git a/lessons/03-prompt-engineering/translations/README.pt-br.md b/lessons/03-prompt-engineering/translations/README.pt-br.md index 33f46732..e8588018 100644 --- a/lessons/03-prompt-engineering/translations/README.pt-br.md +++ b/lessons/03-prompt-engineering/translations/README.pt-br.md @@ -10,16 +10,6 @@ Neste capítulo você vai aprender: Se você ainda não configurou seu ambiente de desenvolvimento, veja como fazer: [Configure seu ambiente](/docs/setup/README.md). -## Recursos relacionados - -[![Assista a um vídeo curto sobre engenharia de prompts](https://img.youtube.com/vi/gQ6TlyxBmWs/0.jpg)](https://www.youtube.com/watch?v=gQ6TlyxBmWs&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=3) - -_Este vídeo oferece uma introdução para melhorar suas habilidades de "prompting", ensinando como dar instruções mais claras e eficazes à IA para obter melhores resultados._ - -*🎥 Clique na imagem acima para assistir a um vídeo curto sobre engenharia de prompts* - -💼 Slides: [Engenharia de prompts](/videos/slides/02-prompt-engineering.pptx) - ## Narrativa: Passagem para aventura > [!NOTE] @@ -35,7 +25,7 @@ _Este vídeo oferece uma introdução para melhorar suas habilidades de "prompti Antes que você consiga pressionar o botão, as portas da oficina se abrem com um estrondo. Um homem está na entrada, de ombros largos e vestido com roupas caras, ele agita um pedaço de papel no ar, gritando:
- Um Ludovico Sforza furioso irrompendo pela porta + Um Ludovico Sforza furioso irrompendo pela porta
*Ludovico Sforza* @@ -65,7 +55,7 @@ Um turbilhão de cores envolve a carruagem, o mundo ao seu redor se dissolve em O turbilhão de cores desaparece, e você se encontra na carruagem, agora correndo pela Via Appia em Roma e, para seu espanto, está no meio de uma corrida de cavalos. Bigas trovejam passando, suas rodas levantando nuvens de poeira.
- Fuga de Roma + Fuga de Roma
**Você:** Leonardo, onde estamos? @@ -105,7 +95,7 @@ Com um impulso final, o parafuso aéreo começa a girar. As lâminas pegam o ar, Você olha para a cidade; os edifícios antigos se estendem abaixo de você.
- No ar, olhando para a cidade com os pés pendurados + No ar, olhando para a cidade com os pés pendurados
## Interaja com Sforza @@ -117,21 +107,21 @@ Se você quiser interagir com Sforza, execute o aplicativo [Characters](/app/REA > [Aviso sobre IA Responsável](/README.md#responsible-ai-disclaimer)
- Ludovico Sforza + Ludovico Sforza
**Passos**: 1. Inicie um [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. Navegue até _/app_ na raiz do repositório. -3. Localize o console e execute `npm install` seguido de `npm start`. +3. Localize o console e execute `npm ci` seguido de `npm start`. 4. Quando aparecer, selecione o botão "Open in Browser". 5. Converse com Sforza. Para uma explicação mais detalhada do aplicativo, consulte [Explicação detalhada do aplicativo](/lessons/01-intro-to-genai/README.md#interact-with-dinocrates). > [!NOTE] - > Se você estiver executando o projeto localmente em sua máquina, por favor revise o guia de Início Rápido para configurar um [token de acesso pessoal do GitHub](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) e substitua a chave no código. +> Configure `AI_ENDPOINT`, `AI_API_KEY` e `AI_MODEL` no arquivo `.env` na raiz do repositório, tanto localmente quanto no Codespaces. Consulte o [guia de configuração](/docs/setup/README.md#configure-environment-variables). ## O que é engenharia de prompts? diff --git a/lessons/03-prompt-engineering/translations/README.zh-cn.md b/lessons/03-prompt-engineering/translations/README.zh-cn.md index 558920e2..b5bc8bcc 100644 --- a/lessons/03-prompt-engineering/translations/README.zh-cn.md +++ b/lessons/03-prompt-engineering/translations/README.zh-cn.md @@ -10,16 +10,6 @@ 如果你还没有设置开发环境,以下是设置方法:[设置你的环境](/docs/setup/README.md)。 -## 相关资源 - -[![观看关于提示工程的短视频](https://img.youtube.com/vi/gQ6TlyxBmWs/0.jpg)](https://www.youtube.com/watch?v=gQ6TlyxBmWs&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=3) - -_这个视频介绍了如何提高你的"提示"技巧,教你如何向 AI 提供更清晰、更有效的指令,以获得更好的结果。_ - -*🎥 点击上方图片观看关于提示工程的短视频* - -💼 幻灯片:[提示工程](../../../videos/slides/02-prompt-engineering.pptx) - ## 故事叙述:乘车票 > [!NOTE] @@ -35,7 +25,7 @@ _这个视频介绍了如何提高你的"提示"技巧,教你如何向 AI 提 在你按下按钮之前,工作坊的门突然猛烈撞开,发出雷鸣般的巨响。一个人站在门口,宽肩膀,穿着昂贵的衣服,他在空中挥舞着一张纸,大喊:
- 愤怒的卢多维科·斯福尔扎冲破门而入 + 愤怒的卢多维科·斯福尔扎冲破门而入
*卢多维科·斯福尔扎(Ludovico Sforza)* @@ -65,7 +55,7 @@ _这个视频介绍了如何提高你的"提示"技巧,教你如何向 AI 提 色彩的旋涡褪去,你发现自己在马车里,现在正沿着罗马的阿皮亚大道(Via Appia)飞驰,令你惊讶的是,你正处于一场赛马比赛的中间。战车轰隆作响地驶过,车轮卷起阵阵尘土。
- 从罗马逃脱 + 从罗马逃脱
**你**:莱昂纳多,我们在哪里? @@ -105,7 +95,7 @@ _这个视频介绍了如何提高你的"提示"技巧,教你如何向 AI 提 你俯瞰这座城市;古老的建筑在你们下方延伸开来。
- 空中飞行,脚悬空俯瞰城市 + 空中飞行,脚悬空俯瞰城市
## 与斯福尔扎互动 @@ -117,21 +107,21 @@ _这个视频介绍了如何提高你的"提示"技巧,教你如何向 AI 提 > [负责任的 AI 免责声明](../../../README.md#responsible-ai-disclaimer)
- 卢多维科·斯福尔扎 + 卢多维科·斯福尔扎
**步骤**: 1. 启动一个 [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. 导航到仓库根目录中的 _/app_。 -3. 在控制台中运行 `npm install` 然后运行 `npm start`。 +3. 在控制台中运行 `npm ci` 然后运行 `npm start`。 4. 当它出现时,选择"在浏览器中打开"按钮。 5. 与斯福尔扎聊天。 有关应用程序的更详细解释,请参见[详细应用程序说明](../../01-intro-to-genai/README.md#talk-to-dinocrates)。 > [!NOTE] - > 如果你在本地机器上运行项目,请查看快速入门指南以设置 [GitHub personal access](../../../docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) token 并在代码中替换密钥。 +> 在存储库根目录的 `.env` 中配置 `AI_ENDPOINT`、`AI_API_KEY` 和 `AI_MODEL`。本地开发和 Codespaces 都需要这些设置。请参阅[配置指南](/docs/setup/README.md#configure-environment-variables)。 ## 什么是提示工程? diff --git a/lessons/04-structured-output/README.md b/lessons/04-structured-output/README.md index 7ae7656a..08624b30 100644 --- a/lessons/04-structured-output/README.md +++ b/lessons/04-structured-output/README.md @@ -10,18 +10,6 @@ In this chapter you will learn: If you haven't already, set up your development environment. Here's how you can do it: [Setup your environment](/docs/setup/README.md). -## Related Resources - -It's worth rewatching the video on prompt engineering as it lays the foundation for what you're about to learn in this chapter. - -[![Watch a short video about prompt engineering](https://img.youtube.com/vi/gQ6TlyxBmWs/0.jpg)](https://www.youtube.com/watch?v=gQ6TlyxBmWs&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=3) - -_This video offers an introduction to improving your "prompting" skills, teaching you how to give clearer and more effective instructions to the AI to achieve better results._ - -*🎥 Click on the image above to watch a short video about prompt engineering* - -💼 Slides: [Prompt engineering](/videos/slides/02-prompt-engineering.pptx) - ## Narrative - Out of the frying pan and into the fire > [!NOTE] @@ -56,8 +44,6 @@ Leonardo da Vinci steps forward, his eyes wide with wonder. Before you can react, a group of Aztec soldiers approaches. -![Meeting with Aztecs](https://raw.githubusercontent.com/microsoft/generative-ai-with-javascript/main/lessons/04-structured-output/assets/meeting.png) - **Soldier leader:** "Who are you, and what have you done?" he demands in Nahuatl. You take a deep breath, trying to steady your nerves. @@ -126,14 +112,14 @@ If you want to interact with Montezuma, run the [Characters](/app/README.md) app 1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. Navigate to _/app_ in the repo root. -3. Locate the console and run `npm install` followed by `npm start`. +3. Locate the console and run `npm ci` followed by `npm start`. 4. Once it appears, select the "Open in Browser" button. 5. Chat with Montezuma. For a more detailed explanation of the app, see [Detailed app explanation](/lessons/01-intro-to-genai/README.md#interact-with-dinocrates). > [!NOTE] - > If you're running the project locally on your machine, please review the QuickStart guide to get a [GitHub personal access](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) token setup and replace the key in the code. +> Configure `AI_ENDPOINT`, `AI_API_KEY`, and `AI_MODEL` in the repository-root `.env` for both local development and Codespaces. See the [setup guide](/docs/setup/README.md#configure-environment-variables). ## Structured Output @@ -518,11 +504,10 @@ This combination of presenting skills and parameters and extracting data from pr **Instruction:** Write a prompt that asks for the boot sequence for the aerial screw, the text should be mirrored and encoded with a Caesar cipher with a shift of 3. Respond with the encoded text. -See the [sample app](/app/README.md) for code to get started with. It contains a Node.js project with all the dependencies you need. +See the [lesson starter](/lessons/04-structured-output/sample-app/app.js) for code to get started with. Run `npm ci` and `npm start` in `lessons/04-structured-output/sample-app`. -> NOTE: If you haven't created a Codespace, please do so now as you will need it to get the AI communication in the sample app to work. -> -> See the _Option 1 : Creating a GitHub Codespace*_*_ section of the [Setup your environment](/docs/setup/README.md) document. +> [!NOTE] +> Both local development and Codespaces work. Configure the model endpoint, key, and deployment in the repository-root `.env` as described in the [setup guide](/docs/setup/README.md). ## Solution @@ -558,4 +543,16 @@ C. Generating unstructured text. ## Self-Study Resources -- [Generative AI with JavaScript video series](https://aka.ms/genai-js) + +## Validated JSON with the Current SDK + +Run the native JSON Schema example from the repository root: + +```bash +npm ci --prefix lessons/04-structured-output/sample-app +npm --prefix lessons/04-structured-output/sample-app run structured +``` + +The sample uses `chat.completions.parse`, `zodResponseFormat`, and Zod to validate `skill`, `parameters`, and `extracted_data`. Missing results and model refusals produce errors. + +[structured-json.js](/lessons/04-structured-output/sample-app/structured-json.js) diff --git a/lessons/04-structured-output/assets/meeting.png b/lessons/04-structured-output/assets/meeting.png deleted file mode 100644 index d0495254fc923de4e2fbfac553c1a3dcd40d15cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 205408 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
PHMC)45 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∾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 diff --git a/lessons/04-structured-output/sample-app/app.js b/lessons/04-structured-output/sample-app/app.js index e652ecdc..54d90c39 100644 --- a/lessons/04-structured-output/sample-app/app.js +++ b/lessons/04-structured-output/sample-app/app.js @@ -1,12 +1,14 @@ import { OpenAI } from "openai"; -// Distance to the hill -const distance = 100; - -// Create prompt including inputs should include chain of thought - -const boot_sequence = `left left up right`; - +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + +const bootSequence = `left left up right`; +// Write a prompt that mirrors bootSequence and applies a Caesar cipher with a shift of 3. const prompt = `TODO`; // Call the language model with the prompt @@ -21,15 +23,16 @@ const messages = [ // ----------------------------------- const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL: endpoint, + apiKey, + timeout: 60000, }); // 3. Send the request // ----------------------------------- const completion = await openai.chat.completions.create({ - model: 'gpt-4o-mini', + model, messages: messages, }); @@ -38,4 +41,6 @@ console.log(`Answer for "${prompt}":`); // 4. Print the answer // ----------------------------------- -console.log(completion.choices[0]?.message?.content); +const answer = completion.choices[0]?.message?.content; +if (!answer?.trim()) throw new Error("The model did not return an answer."); +console.log(answer); diff --git a/lessons/04-structured-output/sample-app/package-lock.json b/lessons/04-structured-output/sample-app/package-lock.json index ae1264ed..2d60a859 100644 --- a/lessons/04-structured-output/sample-app/package-lock.json +++ b/lessons/04-structured-output/sample-app/package-lock.json @@ -9,218 +9,39 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "openai": "^4.84.1" - } - }, - "node_modules/@types/node": { - "version": "18.19.75", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.75.tgz", - "integrity": "sha512-UIksWtThob6ZVSyxcOqCLOUNg/dyO1Qvx4McgeuhrEtHTLFTf7BBhEazaE4K806FGTPtzd/2sE90qn4fVr7cyw==", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", - "license": "MIT", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", - "license": "MIT" - }, - "node_modules/formdata-node": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", - "license": "MIT", - "dependencies": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.3" - }, - "engines": { - "node": ">= 12.20" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "openai": "^7.28.0", + "zod": "^4.6.5" } }, "node_modules/openai": { - "version": "4.84.1", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.84.1.tgz", - "integrity": "sha512-bVdFsfeVBXN59x9i26dHnYUkY5JPk19w7SydzMvJZDsA+FxwXZrQsUBtdwsQt/ZLuilcc/LzJG7mpJucO2DDHg==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-7.28.0.tgz", + "integrity": "sha512-HSY4fFLflQGYe2kvO0atm6/GzhD61gpyiOZZUvO4nptMUhuB1to2K3wwFpFqc5gfEK0SxyIIFiu1yE2MtygWcA==", "license": "Apache-2.0", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" - }, - "bin": { - "openai": "bin/cli" + "engines": { + "node": ">=22.0.0" }, "peerDependencies": { - "ws": "^8.18.0", - "zod": "^3.23.8" + "@aws-sdk/credential-provider-node": ">=3.972.0 <4", + "@smithy/hash-node": ">=4.3.0 <5", + "@smithy/signature-v4": ">=5.4.0 <6", + "undici": ">=5 <9", + "ws": "^8.21.0", + "zod": "^3.25 || ^4.0" }, "peerDependenciesMeta": { + "@aws-sdk/credential-provider-node": { + "optional": true + }, + "@smithy/hash-node": { + "optional": true + }, + "@smithy/signature-v4": { + "optional": true + }, + "undici": { + "optional": true + }, "ws": { "optional": true }, @@ -229,41 +50,13 @@ } } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "license": "MIT" - }, - "node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "node_modules/zod": { + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.5.tgz", + "integrity": "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==", "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "funding": { + "url": "https://github.com/sponsors/colinhacks" } } } diff --git a/lessons/04-structured-output/sample-app/package.json b/lessons/04-structured-output/sample-app/package.json index 44add90e..cfef39f0 100644 --- a/lessons/04-structured-output/sample-app/package.json +++ b/lessons/04-structured-output/sample-app/package.json @@ -4,13 +4,15 @@ "main": "app.js", "type": "module", "scripts": { - "start": "node app.js" + "start": "node --env-file-if-exists=../../../.env app.js", + "structured": "node --env-file-if-exists=../../../.env structured-json.js" }, "keywords": [], "author": "", "license": "ISC", "description": "", "dependencies": { - "openai": "^4.84.1" + "openai": "^7.28.0", + "zod": "^4.6.5" } } diff --git a/lessons/04-structured-output/sample-app/structured-json.js b/lessons/04-structured-output/sample-app/structured-json.js new file mode 100644 index 00000000..2bc3d1cf --- /dev/null +++ b/lessons/04-structured-output/sample-app/structured-json.js @@ -0,0 +1,33 @@ +import { OpenAI } from "openai"; +import { zodResponseFormat } from "openai/helpers/zod"; +import { z } from "zod"; + +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + +const TravelRequest = z.object({ + skill: z.enum(["book_flight", "book_hotel"]), + parameters: z.array(z.string()), + extracted_data: z.object({ + destination: z.string(), + date: z.string() + }) +}); + +const openai = new OpenAI({ baseURL: endpoint, apiKey, timeout: 60000 }); +const completion = await openai.chat.completions.parse({ + model, + messages: [ + { role: "system", content: "Extract the travel request. Return the skill, parameter names, destination, and date." }, + { role: "user", content: "Book a flight to Florence on 2030-06-15." } + ], + response_format: zodResponseFormat(TravelRequest, "travel_request") +}); +const message = completion.choices[0]?.message; +if (message?.refusal) throw new Error(`The model refused the request: ${message.refusal}`); +if (!message?.parsed) throw new Error("The model did not return a structured response."); +console.log(JSON.stringify(message.parsed, null, 2)); diff --git a/lessons/04-structured-output/solution/solution.md b/lessons/04-structured-output/solution/solution.md index 7dc8bbe8..add9bd46 100644 --- a/lessons/04-structured-output/solution/solution.md +++ b/lessons/04-structured-output/solution/solution.md @@ -1,83 +1,37 @@ -Here's the solution +# Aerial Screw Boot Sequence Solution + +Use the model settings from the repository-root `.env`. This solution asks for only the encoded result, not an explanation. ```javascript import { OpenAI } from "openai"; -// Distance to the hill -const distance = 100; - -// Create prompt including inputs should include chain of thought - -const bootSequence = `left left up right`; - -const prompt = `Provide the boot sequence for the aerial screw, the text should be mirrored and encoded with a Caesar cipher with a shift of 3. The boot sequence is: ${bootSequence}.`; - -// Call the language model with the prompt - -const messages = [ -{ - "role": "user", - "content": prompt -}]; - -// 2. Create client -// ----------------------------------- - -const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, -}); - -// 3. Send the request -// ----------------------------------- +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} +const bootSequence = "left left up right"; +const openai = new OpenAI({ baseURL: endpoint, apiKey, timeout: 60000 }); const completion = await openai.chat.completions.create({ - model: 'gpt-4o-mini', - messages: messages, + model, + messages: [{ + role: "user", + content: `Reverse the entire string "${bootSequence}", then apply a Caesar cipher with a shift of 3 to each letter. Preserve spaces. Return only the encoded text.` + }] }); - -console.log(`Answer for "${prompt}":`); - -// 4. Print the answer -// ----------------------------------- - -console.log(completion.choices[0]?.message?.content); - +const answer = completion.choices[0]?.message?.content; +if (!answer?.trim()) throw new Error("The model did not return an answer."); +console.log(answer); ``` -## Sample output +## Expected Result ```text -Answer for "Provide the boot sequence for the aerial screw, the text should be mirrored and encoded with a Caesar cipher with a shift of 3. The boot sequence is: left left up right.": -To provide the mirrored and encoded boot sequence for the aerial screw, let's follow these steps: - -1. First, write the boot sequence: - **left left up right** - -2. Next, mirror the sequence: - **thgir pu tfelt tfel** - -3. Then, apply a Caesar cipher with a shift of 3. - -Here's how each letter shifts: -- 't' shifts to 'w' -- 'h' shifts to 'k' -- 'g' shifts to 'j' -- 'i' shifts to 'l' -- 'r' shifts to 'u' -- 'p' shifts to 's' -- 'u' shifts to 'x' -- 'f' shifts to 'i' -- 'e' shifts to 'h' -- 'l' shifts to 'o' -- 't' shifts to 'w' +wkjlu sx wiho wiho +``` -So, the encoded sequence becomes: -- thgir -> wklju -- pu -> sx -- tfelt -> whiho -- tfel -> whiho +Reversing the input produces `thgir pu tfel tfel`. Shifting each letter by three gives the result above. Check the result instead of assuming that a model response is correct. -Putting this all together, the final result is: -**wklju sx whiho whiho** -``` +For native, schema-validated JSON output, see [structured-json.js](../sample-app/structured-json.js). Run `npm run structured` in the lesson's `sample-app` directory. diff --git a/lessons/04-structured-output/translations/README.bn.md b/lessons/04-structured-output/translations/README.bn.md index b08fdd81..b2c1e01b 100644 --- a/lessons/04-structured-output/translations/README.bn.md +++ b/lessons/04-structured-output/translations/README.bn.md @@ -10,17 +10,6 @@ যদি আপনি এখনও আপনার ডেভেলপমেন্ট এনভায়রনমেন্ট সেটআপ না করে থাকেন, তাহলে এটি করুন। কিভাবে সেটআপ করবেন তা জানতে এখানে যান: [আপনার এনভায়রনমেন্ট সেটআপ করুন](/docs/setup/README.md)। -## সম্পর্কিত রিসোর্স - -**প্রম্পট ইঞ্জিনিয়ারিং** সংক্রান্ত ভিডিওটি পুনরায় দেখা উপকারী হতে পারে, কারণ এটি এই অধ্যায়ের শিক্ষার ভিত্তি গড়ে তোলে। - -[![প্রম্পট ইঞ্জিনিয়ারিং সম্পর্কিত সংক্ষিপ্ত ভিডিও দেখুন](https://img.youtube.com/vi/gQ6TlyxBmWs/0.jpg)](https://www.youtube.com/watch?v=gQ6TlyxBmWs&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=3) - -_এই ভিডিওটি আপনাকে "প্রম্পটিং" দক্ষতা উন্নত করতে সহায়তা করবে, যাতে আপনি AI-কে আরও পরিষ্কার এবং কার্যকর নির্দেশ দিতে পারেন এবং ভালো ফলাফল পেতে পারেন।_ - -🎥 *উপরের ছবিতে ক্লিক করে প্রম্পট ইঞ্জিনিয়ারিং সম্পর্কিত সংক্ষিপ্ত ভিডিও দেখুন* - -💼 **স্লাইড:** [প্রম্পট ইঞ্জিনিয়ারিং](/videos/slides/02-prompt-engineering.pptx) ## বর্ণনা - আগুন থেকে বাঁচতে গিয়ে আগুনে পড়া > [!NOTE] @@ -57,7 +46,6 @@ _অ্যাজটেক ক্যালেন্ডার, উইকিপি আপনি প্রতিক্রিয়া জানানোর আগেই, অ্যাজটেক সৈন্যদের একটি দল এগিয়ে আসে।
- অ্যাজটেকদের সঙ্গে সাক্ষাৎ
**সৈন্য নেতা:** "তোমরা কারা, এবং এখানে কী করেছ?" তিনি নাহুয়াতল ভাষায় কঠোর স্বরে জিজ্ঞাসা করেন। @@ -131,14 +119,14 @@ _পাটোলি - উইকিপিডিয়া_ 1. [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) এ ক্লিক করে একটি GitHub Codespace শুরু করুন। 2. রিপোজিটরির মূল ফোল্ডারে যান এবং _/app_ ডিরেক্টরিতে প্রবেশ করুন। -3. কনসোলে `npm install` চালান, তারপর `npm start` চালান। +3. কনসোলে `npm ci` চালান, তারপর `npm start` চালান। 4. যখন অ্যাপ চালু হবে, "Open in Browser" বোতামটি নির্বাচন করুন। 5. এখন আপনি মন্টেজুমার সাথে চ্যাট করতে পারবেন। আরও বিস্তারিত জানতে, দেখুন [অ্যাপের বিশদ ব্যাখ্যা](/lessons/01-intro-to-genai/translations/README.bn.md#ডিনোক্রেটিসের-সাথে-সাক্ষাৎ)। > [!NOTE] -> আপনি যদি স্থানীয়ভাবে (লোকাল মেশিনে) প্রকল্পটি চালাচ্ছেন, তাহলে **QuickStart গাইড** অনুসরণ করে [GitHub ব্যক্তিগত অ্যাক্সেস টোকেন](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) সেটআপ করুন এবং কোডের মধ্যে টোকেনটি প্রতিস্থাপন করুন। +> রিপোজিটরির মূল ফোল্ডারের `.env` ফাইলে `AI_ENDPOINT`, `AI_API_KEY` এবং `AI_MODEL` সেট করুন। লোকাল পরিবেশ এবং Codespaces উভয়ের জন্য এই সেটিংস প্রয়োজন। [সেটআপ নির্দেশিকা](/docs/setup/README.md#configure-environment-variables) দেখুন। ## কাঠামোগত আউটপুট **টাইম বিটল:** জানতে চাও কীভাবে আমি মন্টেজুমাকে হারালাম? @@ -630,6 +618,16 @@ C. অসংগঠিত (unstructured) টেক্সট তৈরি কর ## **স্বশিক্ষা সংস্থান (Self-Study Resources)** -- 🎥 **[Generative AI with JavaScript ভিডিও সিরিজ](https://aka.ms/genai-js)** ## **চ্যালেঞ্জ** +## বর্তমান SDK দিয়ে JSON যাচাই + +রিপোজিটরির মূল ফোল্ডার থেকে JSON Schema উদাহরণটি চালান: + +```bash +npm ci --prefix lessons/04-structured-output/sample-app +npm --prefix lessons/04-structured-output/sample-app run structured +``` + +উদাহরণটি `chat.completions.parse`, `zodResponseFormat` এবং Zod দিয়ে `skill`, `parameters` ও `extracted_data` যাচাই করে। ফলাফল না থাকলে বা মডেল অনুরোধ প্রত্যাখ্যান করলে ত্রুটি দেখায়। +[structured-json.js](/lessons/04-structured-output/sample-app/structured-json.js) diff --git a/lessons/04-structured-output/translations/README.fr.md b/lessons/04-structured-output/translations/README.fr.md index 91d5a86b..285c655e 100644 --- a/lessons/04-structured-output/translations/README.fr.md +++ b/lessons/04-structured-output/translations/README.fr.md @@ -14,13 +14,11 @@ Si ce n'est pas encore fait, configurez votre environnement de développement. V Cela vaut la peine de revoir la vidéo sur l'ingénierie des prompts, car elle pose les bases de ce que vous allez apprendre dans ce chapitre. -[![Regardez une courte vidéo sur l'ingénierie des prompts](https://img.youtube.com/vi/gQ6TlyxBmWs/0.jpg)](https://www.youtube.com/watch?v=gQ6TlyxBmWs\&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk\&index=3) *Cette vidéo propose une introduction à l'amélioration de vos compétences en matière de "prompt", en vous apprenant à donner des instructions plus claires et plus efficaces à l'IA pour obtenir de meilleurs résultats.* *🎥 Cliquez sur l'image ci-dessus pour regarder une courte vidéo sur l'ingénierie des prompts* -💼 Présentation : [Ingénierie des prompts](/videos/slides/02-prompt-engineering.pptx) ## Récit - De Charybde en Scylla @@ -56,8 +54,6 @@ Léonard de Vinci s'avance et ses yeux s'ouvrent en grand de fascination. Avant que vous puissiez réagir, un groupe de soldats aztèques s'approche. -![Rencontre avec les Aztèques](https://raw.githubusercontent.com/microsoft/generative-ai-with-javascript/main/lessons/04-structured-output/assets/meeting.png) - **Chef des soldats :** "Qui êtes-vous et qu'avez-vous fait ?" demande-t-il en nahuatl. Vous prenez une grande inspiration pour calmer vos nerfs. @@ -127,14 +123,14 @@ Si vous voulez interagir avec Montezuma, exécutez l'application [Characters](/a 1. Lancez un [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript). 2. Naviguez vers */app* à la racine du dépôt. -3. Localisez la console et exécutez `npm install` suivi de `npm start`. +3. Localisez la console et exécutez `npm ci` suivi de `npm start`. 4. Une fois que l'application est ouverte, sélectionnez le bouton "Ouvrir dans le navigateur". 5. Discutez avec Montezuma. Pour une explication plus détaillée de l'application, voir [Explication détaillée de l'application](/lessons/01-intro-to-genai/README.md#interact-with-dinocrates). > [!NOTE] -> Si vous exécutez le projet localement sur votre machine, veuillez consulter le guide de démarrage rapide pour configurer un [token d'accès personnel GitHub](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) et remplacer la clé dans le code. +> Configurez `AI_ENDPOINT`, `AI_API_KEY` et `AI_MODEL` dans le fichier `.env` à la racine du dépôt, en local comme dans Codespaces. Consultez le [guide de configuration](/docs/setup/README.md#configure-environment-variables). ## Sorties structurées @@ -316,7 +312,6 @@ Modifiez le prompt en conséquence pour demander une sortie JSON : > } > ] -````text > Response: Sure! Here are some ideas for inventions you can build using 15th-century technology, presented in JSON format: @@ -383,7 +378,7 @@ Sure! Here are some ideas for inventions you can build using 15th-century techno "effort": "Very High - Building an aqueduct involves extensive construction work and engineering. Ensuring a consistent gradient for water flow requires precise planning and execution." } ] -```` +``` **Scarabée temporel :** Ce type de sortie structurée peut être transmis à un autre service ou une autre application qui peut lire les données JSON. @@ -558,4 +553,16 @@ C. Générer du texte non structuré. ## Ressources d'auto-apprentissage -* [Série vidéo sur l'IA générative avec JavaScript](https://aka.ms/genai-js) + +## JSON validé avec le SDK actuel + +Exécutez l'exemple JSON Schema depuis la racine du dépôt : + +```bash +npm ci --prefix lessons/04-structured-output/sample-app +npm --prefix lessons/04-structured-output/sample-app run structured +``` + +L'exemple utilise `chat.completions.parse`, `zodResponseFormat` et Zod pour valider `skill`, `parameters` et `extracted_data`. Les réponses manquantes et les refus du modèle produisent des erreurs. + +[structured-json.js](/lessons/04-structured-output/sample-app/structured-json.js) diff --git a/lessons/04-structured-output/translations/README.pt-br.md b/lessons/04-structured-output/translations/README.pt-br.md index 2493cefb..f7fb2f35 100644 --- a/lessons/04-structured-output/translations/README.pt-br.md +++ b/lessons/04-structured-output/translations/README.pt-br.md @@ -10,18 +10,6 @@ Neste capítulo você vai aprender: Se você ainda não configurou seu ambiente de desenvolvimento, veja como fazer: [Configure seu ambiente](/docs/setup/README.md). -## Recursos relacionados - -Vale a pena reassistir ao vídeo sobre engenharia de prompts, pois ele estabelece a base para o que você está prestes a aprender neste capítulo. - -[![Assista a um vídeo curto sobre engenharia de prompts](https://img.youtube.com/vi/gQ6TlyxBmWs/0.jpg)](https://www.youtube.com/watch?v=gQ6TlyxBmWs&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=3) - -_Este vídeo oferece uma introdução para melhorar suas habilidades de "prompting", ensinando como dar instruções mais claras e eficazes à IA para obter melhores resultados._ - -*🎥 Clique na imagem acima para assistir a um vídeo curto sobre engenharia de prompts* - -💼 Slides: [Engenharia de prompts](/videos/slides/02-prompt-engineering.pptx) - ## Narrativa - Da frigideira para o fogo > [!NOTE] @@ -47,7 +35,7 @@ A luz brilhante do Besouro do Tempo desaparece, e você se vê parado na base de O parafuso aéreo repousa desajeitadamente sobre uma grande pedra intrincadamente esculpida, com marcações que parecem um calendário
- Calendário asteca, Wikipedia + Calendário asteca, Wikipedia
_Calendário asteca, Wikipedia_ @@ -59,7 +47,6 @@ Leonardo da Vinci avança, seus olhos arregalados de admiração. Antes que você possa reagir, um grupo de soldados astecas se aproxima.
- Encontro com astecas
**Líder dos soldados:** "Quem são vocês e o que fizeram?" ele exige em Nahuatl. @@ -83,7 +70,7 @@ Ao chegar ao topo da pirâmide, você é conduzido a uma grande câmara onde Mon **Montezuma:** "Muito bem. Proponho um jogo de [Patolli](#patolli). Se eu vencer a melhor de três partidas, vocês me darão seu dispositivo e me dirão como ele funciona. Se vocês vencerem, estarão livres para ir."
- Jogando uma partida de Patolli + Jogando uma partida de Patolli
O jogo começa, e a sala fica em silêncio, exceto pelo som de feijões sendo rolados e peças se movendo pelo tabuleiro. @@ -115,7 +102,7 @@ Com um movimento final e decisivo, Leonardo vence o jogo. A sala explode em viva > **Envolvimento Asteca**: Amplamente jogado por nobres e plebeus, era um favorito na corte de Montezuma. Além de diversão, envolvia apostas de alto risco com apostas como cobertores, pedras preciosas ou até mesmo a liberdade.
- Tabuleiro de Patolli + Tabuleiro de Patolli
_Patolli - Wikipedia_ @@ -129,21 +116,21 @@ Se você quiser interagir com Montezuma, execute o aplicativo [Characters](/app/ > [Aviso sobre IA Responsável](/README.md#responsible-ai-disclaimer)
- Montezuma + Montezuma
**Passos**: 1. Inicie um [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. Navegue até _/app_ na raiz do repositório. -3. Localize o console e execute `npm install` seguido de `npm start`. +3. Localize o console e execute `npm ci` seguido de `npm start`. 4. Quando aparecer, selecione o botão "Open in Browser". 5. Converse com Montezuma. Para uma explicação mais detalhada do aplicativo, consulte [Explicação detalhada do aplicativo](/lessons/01-intro-to-genai/README.md#interact-with-dinocrates). > [!NOTE] - > Se você estiver executando o projeto localmente em sua máquina, por favor revise o guia de Início Rápido para configurar um [token de acesso pessoal do GitHub](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) e substitua a chave no código. +> Configure `AI_ENDPOINT`, `AI_API_KEY` e `AI_MODEL` no arquivo `.env` na raiz do repositório, tanto localmente quanto no Codespaces. Consulte o [guia de configuração](/docs/setup/README.md#configure-environment-variables). ## Saída Estruturada @@ -568,4 +555,16 @@ C. Gerar texto não estruturado. ## Recursos para auto-estudo -- [Série de vídeos sobre IA Generativa com JavaScript](https://aka.ms/genai-js) + +## JSON validado com o SDK atual + +Execute o exemplo de JSON Schema na raiz do repositório: + +```bash +npm ci --prefix lessons/04-structured-output/sample-app +npm --prefix lessons/04-structured-output/sample-app run structured +``` + +O exemplo usa `chat.completions.parse`, `zodResponseFormat` e Zod para validar `skill`, `parameters` e `extracted_data`. Respostas ausentes e recusas do modelo geram erros. + +[structured-json.js](/lessons/04-structured-output/sample-app/structured-json.js) diff --git a/lessons/04-structured-output/translations/README.zh-cn.md b/lessons/04-structured-output/translations/README.zh-cn.md index 958c3f05..df442fb2 100644 --- a/lessons/04-structured-output/translations/README.zh-cn.md +++ b/lessons/04-structured-output/translations/README.zh-cn.md @@ -10,18 +10,6 @@ 如果您尚未设置开发环境,请按照以下方法进行设置:[设置您的环境](/docs/setup/README.md)。 -## 相关资源 - -值得重新观看关于提示工程的视频,因为它为您即将在本章学习的内容奠定了基础。 - -[![观看关于提示工程的短视频](https://img.youtube.com/vi/gQ6TlyxBmWs/0.jpg)](https://www.youtube.com/watch?v=gQ6TlyxBmWs&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=3) - -_这个视频介绍了如何提高您的"提示"技能,教您如何向AI提供更清晰、更有效的指令以获得更好的结果。_ - -*🎥 点击上方图片观看关于提示工程的短视频* - -💼 幻灯片:[提示工程](../../../videos/slides/02-prompt-engineering.pptx) - ## 故事情节 - 跳出油锅,掉进火坑 > [!NOTE] @@ -47,7 +35,7 @@ _这个视频介绍了如何提高您的"提示"技能,教您如何向AI提供 空中螺旋机尴尬地停在一块雕刻精美的大石头上,上面有看起来像日历的标记
- 阿兹特克日历,维基百科 + 阿兹特克日历,维基百科
_阿兹特克日历,维基百科_ @@ -59,7 +47,6 @@ _阿兹特克日历,维基百科_ 在您做出反应之前,一群阿兹特克士兵走了过来。
- 与阿兹特克人会面
**士兵领袖**:"你们是谁,做了什么?"他用纳瓦特尔语质问道。 @@ -83,7 +70,7 @@ _阿兹特克日历,维基百科_ **蒙特祖马**:"很好。我提议玩一场[帕托利](#patolli)游戏。如果我赢得三局中的大多数,你们将把你们的设备给我并告诉我它是如何工作的。如果你们赢了,你们可以自由离开。"
- 玩帕托利游戏 + 玩帕托利游戏
游戏开始了,房间里一片寂静,只有豆子滚动和棋子在棋盘上移动的声音。 @@ -115,7 +102,7 @@ _阿兹特克日历,维基百科_ > **阿兹特克人的参与**:贵族和平民广泛玩这个游戏,它是蒙特祖马宫廷的最爱。除了娱乐外,它还涉及高风险赌博,赌注如毯子、宝石甚至自由。
- 帕托利棋盘 + 帕托利棋盘
_帕托利 - 维基百科_ @@ -129,21 +116,21 @@ _帕托利 - 维基百科_ > [负责任的AI免责声明](../../../README.md#responsible-ai-disclaimer)
- 蒙特祖马 + 蒙特祖马
**步骤**: 1. 启动一个[![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. 导航到仓库根目录中的_/app_。 -3. 找到控制台并运行`npm install`,然后运行`npm start`。 +3. 找到控制台并运行`npm ci`,然后运行`npm start`。 4. 出现后,选择"在浏览器中打开"按钮。 5. 与蒙特祖马聊天。 有关应用的更详细解释,请参阅[详细应用解释](../../01-intro-to-genai/README.md#interact-with-dinocrates)。 > [!NOTE] -> 如果您在本地机器上运行项目,请查看快速入门指南,设置[GitHub个人访问令牌](../../../docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access)并替换代码中的密钥。 +> 在存储库根目录的 `.env` 中配置 `AI_ENDPOINT`、`AI_API_KEY` 和 `AI_MODEL`。本地开发和 Codespaces 都需要这些设置。请参阅[配置指南](/docs/setup/README.md#configure-environment-variables)。 ## 结构化输出 @@ -562,4 +549,15 @@ C. 生成非结构化文本。 ## 自学资源 -- [使用JavaScript的生成式AI视频系列](https://aka.ms/genai-js) \ No newline at end of file +## 使用当前 SDK 验证 JSON + +在存储库根目录运行 JSON Schema 示例: + +```bash +npm ci --prefix lessons/04-structured-output/sample-app +npm --prefix lessons/04-structured-output/sample-app run structured +``` + +示例使用 `chat.completions.parse`、`zodResponseFormat` 和 Zod 验证 `skill`、`parameters` 和 `extracted_data`。缺少结果或模型拒绝请求时会报告错误。 + +[structured-json.js](/lessons/04-structured-output/sample-app/structured-json.js) diff --git a/lessons/05-rag/README.md b/lessons/05-rag/README.md index 52b06556..d20f21fe 100644 --- a/lessons/05-rag/README.md +++ b/lessons/05-rag/README.md @@ -10,16 +10,6 @@ In this chapter you will learn: If you haven't already, set up your development environment. Here's how you can do it: [Setup your environment](/docs/setup/README.md). -## Related Resources - -[![Watch a short video about RAG](https://img.youtube.com/vi/xkFOmx5yxIA/0.jpg)](https://www.youtube.com/watch?v=xkFOmx5yxIA&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=4) - -_This video explains Retrieval Augmented Generation (RAG), a method that helps the AI use your content alongside its training data for improved results._ - -*🎥 Click on the image above to watch a short video about retrieval augmented generation, RAG* - -💼 Slides: [Retrieval augmented generation, RAG](/videos/slides/03-rag.pptx) - ## Narrative - Genesis > [!NOTE] @@ -85,14 +75,14 @@ If you want to interact with Ada, run the [Characters](/app/README.md) app. 1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. Navigate to _/app_ in the repo root. -3. Locate the console and run `npm install` followed by `npm start`. +3. Locate the console and run `npm ci` followed by `npm start`. 4. Once it appears, select the "Open in Browser" button. 5. Chat with Ada. For a more detailed explanation of the app, see [Detailed app explanation](/lessons/01-intro-to-genai/README.md#interact-with-dinocrates). > [!NOTE] - > If you're running the project locally on your machine, please review the QuickStart guide to get a [GitHub personal access](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) token setup and replace the key in the code. +> Configure `AI_ENDPOINT`, `AI_API_KEY`, and `AI_MODEL` in the repository-root `.env` for both local development and Codespaces. See the [setup guide](/docs/setup/README.md#configure-environment-variables). ## Known challenges with large language models, LLMs @@ -259,13 +249,20 @@ ${question} // 4. Generator component: use the search results to generate a response // --------------------------------------------------------------------- +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL: endpoint, + apiKey, }); const chunks = await openai.chat.completions.create({ - model: "gpt-4o-mini", + model, messages: [{ role: "user", content: augmentedPrompt }], stream: true, }); @@ -273,7 +270,7 @@ const chunks = await openai.chat.completions.create({ console.log(`Answer for "${question}":`); for await (const chunk of chunks) { - process.stdout.write(chunk.choices[0].delta.content ?? ""); + process.stdout.write(chunk.choices[0]?.delta.content ?? ""); } ``` @@ -341,4 +338,4 @@ C. The retriever finds relevant information from external data sources. - **Sample apps**: * [Serverless AI Chat with RAG](https://github.com/Azure-Samples/serverless-chat-langchainjs/) * [Ask Youtube: A RAG-based Youtube Q&A API](https://github.com/Azure-Samples/langchainjs-quickstart-demo) -- [Full-length workshop: Create your own ChatGPT with RAG](https://moaw.dev/workshop/gh:azure-samples/azure-openai-rag-workshop/docs/workshop-qdrant.md) +- [Full-length workshop: Create your own ChatGPT with RAG](https://github.com/Azure-Samples/azure-openai-rag-workshop) diff --git a/lessons/05-rag/assets/cern.jpg b/lessons/05-rag/assets/cern.jpg deleted file mode 100644 index 0cb6ca59253f3463ebf058cff7d2ba05223811c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 617239 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�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%0A(6b3&UD<>@!$8C$77rF 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
2RPHH51g9P*m%#ey33QeOnraVQ6Y5S=N96( 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 hQtfa%L?RlN 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

s-!+0L)xtTM)l|4xmA(=8FA%~`#)IV=w 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�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≷% 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 DzTzcW diff --git a/lessons/05-rag/example/rag-cars.js b/lessons/05-rag/example/rag-cars.js index d63339c5..fb7e08ab 100644 --- a/lessons/05-rag/example/rag-cars.js +++ b/lessons/05-rag/example/rag-cars.js @@ -9,6 +9,13 @@ import process from "node:process"; import fs from "node:fs"; import { OpenAI } from "openai"; +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + // Change the current working directory to the directory of the script const __dirname = dirname(fileURLToPath(import.meta.url)); process.chdir(__dirname); @@ -62,18 +69,26 @@ ${question} // --------------------------------------------------------------------- const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL: endpoint, + apiKey, + timeout: 60000, }); const chunks = await openai.chat.completions.create({ - model: "gpt-4o-mini", + model, messages: [{ role: "user", content: augmentedPrompt }], stream: true, }); console.log(`Answer for "${question}":`); +let receivedText = false; for await (const chunk of chunks) { - process.stdout.write(chunk.choices[0].delta.content ?? ""); + const text = chunk.choices[0]?.delta.content; + if (text) { + receivedText = true; + process.stdout.write(text); + } } +if (!receivedText) throw new Error("The model did not return an answer."); +process.stdout.write("\n"); diff --git a/lessons/05-rag/package-lock.json b/lessons/05-rag/package-lock.json new file mode 100644 index 00000000..3dd51efa --- /dev/null +++ b/lessons/05-rag/package-lock.json @@ -0,0 +1,52 @@ +{ + "name": "retrieval-examples", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "retrieval-examples", + "version": "1.0.0", + "dependencies": { + "openai": "^7.28.0" + } + }, + "node_modules/openai": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-7.28.0.tgz", + "integrity": "sha512-HSY4fFLflQGYe2kvO0atm6/GzhD61gpyiOZZUvO4nptMUhuB1to2K3wwFpFqc5gfEK0SxyIIFiu1yE2MtygWcA==", + "license": "Apache-2.0", + "engines": { + "node": ">=22.0.0" + }, + "peerDependencies": { + "@aws-sdk/credential-provider-node": ">=3.972.0 <4", + "@smithy/hash-node": ">=4.3.0 <5", + "@smithy/signature-v4": ">=5.4.0 <6", + "undici": ">=5 <9", + "ws": "^8.21.0", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-provider-node": { + "optional": true + }, + "@smithy/hash-node": { + "optional": true + }, + "@smithy/signature-v4": { + "optional": true + }, + "undici": { + "optional": true + }, + "ws": { + "optional": true + }, + "zod": { + "optional": true + } + } + } + } +} diff --git a/lessons/05-rag/package.json b/lessons/05-rag/package.json new file mode 100644 index 00000000..e2e55937 --- /dev/null +++ b/lessons/05-rag/package.json @@ -0,0 +1,13 @@ +{ + "name": "retrieval-examples", + "version": "1.0.0", + "private": true, + "type": "module", + "scripts": { + "cars": "node --env-file-if-exists=../../.env example/rag-cars.js", + "wikipedia": "node --env-file-if-exists=../../.env solution/rag-www.js" + }, + "dependencies": { + "openai": "^7.28.0" + } +} diff --git a/lessons/05-rag/solution/rag-www.js b/lessons/05-rag/solution/rag-www.js index 2b0cb043..8daf486a 100644 --- a/lessons/05-rag/solution/rag-www.js +++ b/lessons/05-rag/solution/rag-www.js @@ -6,6 +6,13 @@ import process from "node:process"; import { OpenAI } from "openai"; +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + // 1. Ask a question about the web // ------------------------------- @@ -15,9 +22,16 @@ const question = `why did you create the web?`; // ------------------------------------------------- // Load text data from Wikipedia's Tim Berners-Lee page -const response = await fetch('https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&redirects=true&explaintext&titles=Tim%20Berners-Lee'); +const response = await fetch('https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&redirects=true&explaintext&titles=Tim%20Berners-Lee', { + headers: { "User-Agent": "GenerativeAIJavaScriptCourse/1.0 (https://github.com/microsoft/generative-ai-with-javascript)" }, + signal: AbortSignal.timeout(30000) +}); +if (!response.ok) throw new Error(`Wikipedia request failed: HTTP ${response.status}.`); const data = await response.json(); -const wikipediaInfo = Object.values(data.query.pages)[0]?.extract; +const wikipediaInfo = data.query?.pages && Object.values(data.query.pages)[0]?.extract; +if (typeof wikipediaInfo !== "string" || !wikipediaInfo.trim()) { + throw new Error("Wikipedia did not return source text."); +} // 3. Context augmentation: create a combined prompt with the information // ---------------------------------------------------------------------- @@ -40,18 +54,26 @@ ${question} // ----------------------------------------------------------------------- const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL: endpoint, + apiKey, + timeout: 60000, }); const chunks = await openai.chat.completions.create({ - model: "gpt-4o-mini", + model, messages: [{ role: "user", content: augmentedPrompt }], stream: true, }); console.log(`You:\n${question}\n\nTim:`); +let receivedText = false; for await (const chunk of chunks) { - process.stdout.write(chunk.choices[0].delta.content ?? ""); + const text = chunk.choices[0]?.delta.content; + if (text) { + receivedText = true; + process.stdout.write(text); + } } +if (!receivedText) throw new Error("The model did not return an answer."); +process.stdout.write("\n"); diff --git a/lessons/05-rag/translations/README.bn.md b/lessons/05-rag/translations/README.bn.md index 5f8bc9b9..453a7356 100644 --- a/lessons/05-rag/translations/README.bn.md +++ b/lessons/05-rag/translations/README.bn.md @@ -14,15 +14,6 @@ --- -## **সম্পর্কিত রিসোর্স** - -[![RAG সম্পর্কে সংক্ষিপ্ত ভিডিও দেখুন](https://img.youtube.com/vi/xkFOmx5yxIA/0.jpg)](https://www.youtube.com/watch?v=xkFOmx5yxIA&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=4) - -_এই ভিডিওটি **Retrieval-Augmented Generation (RAG)** ব্যাখ্যা করে, যা AI-কে তার ট্রেনিং ডেটার পাশাপাশি **তোমার নিজের কনটেন্ট ব্যবহার করতে সাহায্য করে, যাতে আরও উন্নত ফলাফল পাওয়া যায়**।_ - -🎥 *উপরের ছবিতে ক্লিক করে RAG সম্পর্কে সংক্ষিপ্ত ভিডিও দেখো।* - -💼 **স্লাইডস:** [**Retrieval-Augmented Generation, RAG**](/videos/slides/03-rag.pptx) ## **বর্ণনা - জেনেসিস** > [!NOTE] @@ -119,14 +110,14 @@ _এই ভিডিওটি **Retrieval-Augmented Generation (RAG)** ব্য 1. [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) এ ক্লিক করে **GitHub Codespace শুরু করুন**। 2. রিপোজিটরির মূল ফোল্ডারে গিয়ে **_/app_** ডিরেক্টরিতে প্রবেশ করুন। -3. কনসোলে **`npm install`** চালান, তারপর **`npm start`** চালান। +3. কনসোলে **`npm ci`** চালান, তারপর **`npm start`** চালান। 4. যখন অ্যাপ চালু হবে, **"Open in Browser"** বোতামটি নির্বাচন করুন। 5. এখন আপনি **এডা লাভলেসের সাথে চ্যাট করতে পারবেন।** আরও বিস্তারিত জানতে, দেখুন **[অ্যাপের বিশদ ব্যাখ্যা](/lessons/01-intro-to-genai/translations/README.bn.md#ডিনোক্রেটিসের-সাথে-সাক্ষাৎ)**। > [!NOTE] -> আপনি যদি **লোকাল মেশিনে প্রকল্প চালান**, তাহলে **QuickStart গাইড অনুসরণ করুন** এবং [GitHub ব্যক্তিগত অ্যাক্সেস টোকেন](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) সেটআপ করে **কোডের মধ্যে টোকেন প্রতিস্থাপন করুন**। +> রিপোজিটরির মূল ফোল্ডারের `.env` ফাইলে `AI_ENDPOINT`, `AI_API_KEY` এবং `AI_MODEL` সেট করুন। লোকাল পরিবেশ এবং Codespaces উভয়ের জন্য এই সেটিংস প্রয়োজন। [সেটআপ নির্দেশিকা](/docs/setup/README.md#configure-environment-variables) দেখুন। > ## **বৃহৎ ভাষা মডেল (LLMs) সম্পর্কিত পরিচিত চ্যালেঞ্জ** **এডা:** চল, প্রথমে আমরা **AI মডেল** সম্পর্কে আলোচনা করি, যা আমাদের যন্ত্রটি চালিত করবে। আমরা **একটি ডেটা রিট্রিভাল সিস্টেমের সাথে AI মডেল জোড়া লাগাবো**, যাতে প্রতিক্রিয়ার গুণগত মান আরও উন্নত হয়। @@ -380,13 +371,20 @@ ${question} // 4. জেনারেটর কম্পোনেন্ট: অনুসন্ধান ফলাফল ব্যবহার করে উত্তর তৈরি করা // ---------------------------------------------------------------------- +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL: endpoint, + apiKey, }); const chunks = await openai.chat.completions.create({ - model: "gpt-4o-mini", + model, messages: [{ role: "user", content: augmentedPrompt }], stream: true, }); @@ -394,7 +392,7 @@ const chunks = await openai.chat.completions.create({ console.log(`Answer for "${question}":`); for await (const chunk of chunks) { - process.stdout.write(chunk.choices[0].delta.content ?? ""); + process.stdout.write(chunk.choices[0]?.delta.content ?? ""); } ``` --- @@ -467,4 +465,4 @@ C. **Retriever বাহ্যিক তথ্যসূত্র থেকে - [Serverless AI Chat with RAG](https://github.com/Azure-Samples/serverless-chat-langchainjs/) - [Ask Youtube: একটি RAG-ভিত্তিক YouTube Q&A API](https://github.com/Azure-Samples/langchainjs-quickstart-demo) 🎯 **ওয়ার্কশপ:** -- [Create your own ChatGPT with RAG](https://moaw.dev/workshop/gh:azure-samples/azure-openai-rag-workshop/docs/workshop-qdrant.md) +- [Create your own ChatGPT with RAG](https://github.com/Azure-Samples/azure-openai-rag-workshop) diff --git a/lessons/05-rag/translations/README.fr.md b/lessons/05-rag/translations/README.fr.md index 2f1f5c27..f7694e16 100644 --- a/lessons/05-rag/translations/README.fr.md +++ b/lessons/05-rag/translations/README.fr.md @@ -12,13 +12,11 @@ Si ce n'est pas encore fait, configurez votre environnement de développement. V ## Ressources associées -[![Regardez une courte vidéo sur RAG](https://img.youtube.com/vi/xkFOmx5yxIA/0.jpg)](https://www.youtube.com/watch?v=xkFOmx5yxIA\&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk\&index=4) *Cette vidéo explique la génération augmentée par récupération (RAG), une méthode qui aide l'IA à utiliser vos contenus en complément de ses données d'entraînement pour de meilleurs résultats.* *🎥 Cliquez sur l'image ci-dessus pour regarder une courte vidéo sur la génération augmentée par récupération, RAG.* -💼 Diapositives : [Génération augmentée par récupération, RAG](/videos/slides/03-rag.pptx) ## Narration - Genèse @@ -84,14 +82,14 @@ If you want to interact with Ada, run the [Characters](/app/README.md) app. 1. Lancez un [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript). 2. Naviguez vers */app* à la racine du dépôt. -3. Localisez la console et exécutez `npm install` suivi de `npm start`. +3. Localisez la console et exécutez `npm ci` suivi de `npm start`. 4. Une fois que l'application est ouverte, sélectionnez le bouton "Ouvrir dans le navigateur". 5. Discutez avec Ada. Pour une explication plus détaillée de l'application, voir [Explication détaillée de l'application](/lessons/01-intro-to-genai/README.md#interact-with-dinocrates). > [!NOTE] -> Si vous exécutez le projet localement sur votre machine, veuillez consulter le guide de démarrage rapide pour configurer un [token d'accès personnel GitHub](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) et remplacer la clé dans le code. +> Configurez `AI_ENDPOINT`, `AI_API_KEY` et `AI_MODEL` dans le fichier `.env` à la racine du dépôt, en local comme dans Codespaces. Consultez le [guide de configuration](/docs/setup/README.md#configure-environment-variables). ## Défis connus avec les modèles de langage à grande échelle (LLMs) @@ -258,13 +256,20 @@ ${question} // 4. Generator component: use the search results to generate a response // --------------------------------------------------------------------- +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL: endpoint, + apiKey, }); const chunks = await openai.chat.completions.create({ - model: "gpt-4o-mini", + model, messages: [{ role: "user", content: augmentedPrompt }], stream: true, }); @@ -272,7 +277,7 @@ const chunks = await openai.chat.completions.create({ console.log(`Answer for "${question}":`); for await (const chunk of chunks) { - process.stdout.write(chunk.choices[0].delta.content ?? ""); + process.stdout.write(chunk.choices[0]?.delta.content ?? ""); } ``` @@ -340,4 +345,4 @@ C. Le récupérateur trouve des informations pertinentes à partir de sources de * **Exemples d'applications** : * [Chat IA sans serveur avec RAG](https://github.com/Azure-Samples/serverless-chat-langchainjs/) * [Demandez à Youtube : Une API de questions-réponses basée sur RAG pour Youtube](https://github.com/Azure-Samples/langchainjs-quickstart-demo) -* [Atelier complet : Créez votre propre ChatGPT avec RAG](https://moaw.dev/workshop/gh\:azure-samples/azure-openai-rag-workshop/docs/workshop-qdrant.md) +* [Atelier complet : Créez votre propre ChatGPT avec RAG](https://github.com/Azure-Samples/azure-openai-rag-workshop) diff --git a/lessons/05-rag/translations/README.pt-br.md b/lessons/05-rag/translations/README.pt-br.md index 17c7a7d6..b340aa02 100644 --- a/lessons/05-rag/translations/README.pt-br.md +++ b/lessons/05-rag/translations/README.pt-br.md @@ -10,16 +10,6 @@ Neste capítulo você vai aprender: Se você ainda não configurou seu ambiente de desenvolvimento, veja como fazer: [Configure seu ambiente](/docs/setup/README.md). -## Recursos relacionados - -[![Assista a um vídeo curto sobre RAG](https://img.youtube.com/vi/xkFOmx5yxIA/0.jpg)](https://www.youtube.com/watch?v=xkFOmx5yxIA&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=4) - -_Este vídeo explica a Geração Aumentada por Recuperação (RAG), um método que ajuda a IA a usar seu conteúdo junto com seus dados de treinamento para obter melhores resultados._ - -*🎥 Clique na imagem acima para assistir a um vídeo curto sobre geração aumentada por recuperação, RAG* - -💼 Slides: [Geração aumentada por recuperação, RAG](/videos/slides/03-rag.pptx) - ## Narrativa - Gênesis > [!NOTE] @@ -37,7 +27,7 @@ _Este vídeo explica a Geração Aumentada por Recuperação (RAG), um método q Vocês pousam no jardim, é tarde da noite com uma névoa espessa e luzes sinistras piscando à distância. A mansão se ergue diante de vocês. Leonardo olha ao redor, seus olhos arregalados de admiração.
- Antiga mansão mostrada em uma névoa densa + Antiga mansão mostrada em uma névoa densa
### Fugindo dos Cães @@ -45,7 +35,7 @@ Vocês pousam no jardim, é tarde da noite com uma névoa espessa e luzes sinist Você ouve latidos e o som de cães correndo em sua direção. Você se vira para Leonardo: "Precisamos entrar, agora!"
- Fugindo dos cães + Fugindo dos cães
Quando você chega à porta da mansão, ela se abre e um par de atendentes sai apressadamente. Depois de avaliá-los, eles fazem sinal para que vocês os sigam. @@ -63,7 +53,7 @@ Você se encontra cara a cara com Ada Lovelace, seus olhos brilhando de curiosid **Você:** Mas...
- Ada Lovelace e Charles Babbage trabalhando em um dispositivo + Ada Lovelace e Charles Babbage trabalhando em um dispositivo
Charles Babbage se aproxima, examinando o Besouro do Tempo em sua mão. "Este dispositivo é notável, mas está um pouco defeituoso, não está? Você deve ter notado, tenho certeza." @@ -85,21 +75,21 @@ Se você quiser interagir com Ada, execute o aplicativo [Characters](/app/README > [Aviso sobre IA Responsável](/README.md#responsible-ai-disclaimer)
- Ada Lovelace + Ada Lovelace
**Passos**: 1. Inicie um [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. Navegue até _/app_ na raiz do repositório. -3. Localize o console e execute `npm install` seguido de `npm start`. +3. Localize o console e execute `npm ci` seguido de `npm start`. 4. Quando aparecer, selecione o botão "Open in Browser". 5. Converse com Ada. Para uma explicação mais detalhada do aplicativo, consulte [Explicação detalhada do aplicativo](/lessons/01-intro-to-genai/README.md#interact-with-dinocrates). > [!NOTE] - > Se você estiver executando o projeto localmente em sua máquina, por favor revise o guia de Início Rápido para configurar um [token de acesso pessoal do GitHub](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) e substitua a chave no código. +> Configure `AI_ENDPOINT`, `AI_API_KEY` e `AI_MODEL` no arquivo `.env` na raiz do repositório, tanto localmente quanto no Codespaces. Consulte o [guia de configuração](/docs/setup/README.md#configure-environment-variables). ## Desafios conhecidos com grandes modelos de linguagem, LLMs @@ -266,13 +256,20 @@ ${question} // 4. Componente gerador: usa os resultados da pesquisa para gerar uma resposta // --------------------------------------------------------------------- +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL: endpoint, + apiKey, }); const chunks = await openai.chat.completions.create({ - model: "gpt-4o-mini", + model, messages: [{ role: "user", content: augmentedPrompt }], stream: true, }); @@ -280,7 +277,7 @@ const chunks = await openai.chat.completions.create({ console.log(`Resposta para "${question}":`); for await (const chunk of chunks) { - process.stdout.write(chunk.choices[0].delta.content ?? ""); + process.stdout.write(chunk.choices[0]?.delta.content ?? ""); } ``` @@ -348,4 +345,4 @@ C. O recuperador encontra informações relevantes de fontes de dados externas. - **Aplicativos de exemplo**: * [Chat de IA Serverless com RAG](https://github.com/Azure-Samples/serverless-chat-langchainjs/) * [Ask Youtube: Uma API de perguntas e respostas do Youtube baseada em RAG](https://github.com/Azure-Samples/langchainjs-quickstart-demo) -- [Workshop completo: Crie seu próprio ChatGPT com RAG](https://moaw.dev/workshop/gh:azure-samples/azure-openai-rag-workshop/docs/workshop-qdrant.md) +- [Workshop completo: Crie seu próprio ChatGPT com RAG](https://github.com/Azure-Samples/azure-openai-rag-workshop) diff --git a/lessons/05-rag/translations/README.zh-cn.md b/lessons/05-rag/translations/README.zh-cn.md index 8cfb0c82..6a806897 100644 --- a/lessons/05-rag/translations/README.zh-cn.md +++ b/lessons/05-rag/translations/README.zh-cn.md @@ -10,16 +10,6 @@ 如果您尚未设置开发环境,请按照以下方法进行设置:[设置您的环境](/docs/setup/README.md)。 -## 相关资源 - -[![观看关于RAG的短视频](https://img.youtube.com/vi/xkFOmx5yxIA/0.jpg)](https://www.youtube.com/watch?v=xkFOmx5yxIA&list=PLlrxD0HtieHi5ZpsHULPLxm839IrhmeDk&index=4) - -_这个视频解释了检索增强生成(RAG),这是一种帮助AI在其训练数据之外使用您的内容以获得改进结果的方法。_ - -*🎥 点击上方图片观看关于检索增强生成(RAG)的短视频* - -💼 幻灯片:[检索增强生成,RAG](../../../videos/slides/03-rag.pptx) - ## 故事情节 - 起源 > [!NOTE] @@ -37,7 +27,7 @@ _这个视频解释了检索增强生成(RAG),这是一种帮助AI在其 您降落在花园里,现在是深夜,浓雾弥漫,远处闪烁着诡异的灯光。豪宅耸立在您面前。达芬奇环顾四周,眼中充满惊奇。
- 在浓雾中显示的古老豪宅 + 在浓雾中显示的古老豪宅
### 逃离猎犬 @@ -45,7 +35,7 @@ _这个视频解释了检索增强生成(RAG),这是一种帮助AI在其 您听到吠叫声和狗向您奔来的声音。您转向达芬奇,"我们需要进去,现在!"
- 逃离猎犬 + 逃离猎犬
当您到达豪宅的门口时,门突然打开,一对侍者匆忙走出来。在打量了您之后,他们示意您跟随他们。 @@ -63,7 +53,7 @@ _这个视频解释了检索增强生成(RAG),这是一种帮助AI在其 **您**:但是...
- 艾达·洛夫莱斯和查尔斯·巴贝奇正在研究一个设备 + 艾达·洛夫莱斯和查尔斯·巴贝奇正在研究一个设备
查尔斯·巴贝奇走上前来,检查您手中的时间甲虫。"这个设备非常了不起,但它有点故障,不是吗?我想你已经注意到了。" @@ -85,21 +75,21 @@ _这个视频解释了检索增强生成(RAG),这是一种帮助AI在其 > [负责任的AI免责声明](/README.md#responsible-ai-disclaimer)
- 艾达·洛夫莱斯 + 艾达·洛夫莱斯
**步骤**: 1. 启动一个[![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. 导航到仓库根目录中的_/app_。 -3. 找到控制台并运行`npm install`,然后运行`npm start`。 +3. 找到控制台并运行`npm ci`,然后运行`npm start`。 4. 出现后,选择"在浏览器中打开"按钮。 5. 与艾达聊天。 有关应用程序的更详细说明,请参见[详细应用程序说明](/lessons/01-intro-to-genai/README.md#interact-with-dinocrates)。 > [!NOTE] - > 如果您在本地机器上运行项目,请查看快速入门指南,设置[GitHub个人访问令牌](../../../docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access)并在代码中替换密钥。 +> 在存储库根目录的 `.env` 中配置 `AI_ENDPOINT`、`AI_API_KEY` 和 `AI_MODEL`。本地开发和 Codespaces 都需要这些设置。请参阅[配置指南](/docs/setup/README.md#configure-environment-variables)。 ## 大型语言模型(LLM)的已知挑战 @@ -266,13 +256,20 @@ ${question} // 4. 生成器组件:使用搜索结果生成响应 // --------------------------------------------------------------------- +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} + const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, + baseURL: endpoint, + apiKey, }); const chunks = await openai.chat.completions.create({ - model: "gpt-4o-mini", + model, messages: [{ role: "user", content: augmentedPrompt }], stream: true, }); @@ -280,7 +277,7 @@ const chunks = await openai.chat.completions.create({ console.log(`"${question}"的答案:`); for await (const chunk of chunks) { - process.stdout.write(chunk.choices[0].delta.content ?? ""); + process.stdout.write(chunk.choices[0]?.delta.content ?? ""); } ``` @@ -348,6 +345,6 @@ C. 检索器从外部数据源中查找相关信息。 - **示例应用**: * [使用RAG的无服务器AI聊天](https://github.com/Azure-Samples/serverless-chat-langchainjs/) * [Ask Youtube:基于RAG的Youtube问答API](https://github.com/Azure-Samples/langchainjs-quickstart-demo) -- [完整工作坊:使用RAG创建您自己的ChatGPT](https://moaw.dev/workshop/gh:azure-samples/azure-openai-rag-workshop/docs/workshop-qdrant.md) +- [完整工作坊:使用RAG创建您自己的ChatGPT](https://github.com/Azure-Samples/azure-openai-rag-workshop) **艾达**:让我们先讨论我们将用来驱动设备的AI。我们将依靠"AI模型 diff --git a/lessons/06-tool-calling/README.md b/lessons/06-tool-calling/README.md index 45277988..c2337210 100644 --- a/lessons/06-tool-calling/README.md +++ b/lessons/06-tool-calling/README.md @@ -63,26 +63,26 @@ The world around you starts to blur, and everything fades to black. You come to ## Interact with Amelia Earhart -If you want to interact with Ada, run the [Characters](/app/README.md) app. +If you want to interact with Amelia, run the [Characters](/app/README.md) app. > [!IMPORTANT] > This is entirely fictional; the responses are generated by AI. > [Responsible AI disclaimer](/README.md#responsible-ai-disclaimer) -![Ada Lovelace](https://raw.githubusercontent.com/microsoft/generative-ai-with-javascript/main/lessons/06-tool-calling/assets/amelia-front.jpeg) +![Amelia Earhart](https://raw.githubusercontent.com/microsoft/generative-ai-with-javascript/main/lessons/06-tool-calling/assets/amelia-front.jpeg) **Steps**: 1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. Navigate to _/app_ in the repo root. -3. Locate the console and run `npm install` followed by `npm start`. +3. Locate the console and run `npm ci` followed by `npm start`. 4. Once it appears, select the "Open in Browser" button. 5. Chat with Amelia. For a more detailed explanation of the app, see [Detailed app explanation](/lessons/01-intro-to-genai/README.md#interact-with-dinocrates). > [!NOTE] - > If you're running the project locally on your machine, please review the QuickStart guide to get a [GitHub personal access](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) token setup and replace the key in the code. +> Configure `AI_ENDPOINT`, `AI_API_KEY`, and `AI_MODEL` in the repository-root `.env` for both local development and Codespaces. See the [setup guide](/docs/setup/README.md#configure-environment-variables). ## Tool calling @@ -106,9 +106,9 @@ try { if (!landingSpot) { throw new Error("No suitable landing spot found"); } - console.log(Landing spot found at coordinates: ${landingSpot.lat}, ${landingSpot.long}); + console.log(`Landing spot found at coordinates: ${landingSpot.lat}, ${landingSpot.long}`); } catch (error) { - console.log(Error: ${error.message}); + console.error(`Error: ${error.message}`); } ``` @@ -143,15 +143,11 @@ function findLandingSpot(lat, long) { "properties": { "lat": { "type": "number", - "description": "The latitude of the location", - }, + "description": "The latitude of the location"}, "long": { "type": "number", - "description": "The longitude of the location", - }, - }, - "required": ["lat", "long"], - }, + "description": "The longitude of the location"}}, + "required": ["lat", "long"]}, "output": { "type": "object", "properties": { "lat": "number", "long": "number" } } } ``` @@ -185,7 +181,7 @@ const getBackgroundOnCharacterJson = { description: "The name of the character", } }, - required: ["lat", "long"], + required: ["name"], }, output: { type: "string" } }; @@ -217,16 +213,16 @@ const messages = [{ }]; const completion = await openai.chat.completions.create({ - model: 'gpt-4o-mini', + model: process.env.AI_MODEL, messages: messages, - functions: [getBackgroundOnCharacterJson, findLandingSpotJson] + tools: [getBackgroundOnCharacterJson, findLandingSpotJson].map(({ name, description, parameters }) => ({ type: "function", function: { name, description, parameters } })) }); ``` **Time Beetle**: "In the preceding code snippet we:" - Define the metadata for the `find-landing-spot` tool and the `get-background-on-character` tool. -- Provide this metadata to the `client.getChatCompletions` call as part of the `functions` parameter. This tells the AI model that these tools are available to be called." +- Provide this metadata to the `openai.chat.completions.create` call as part of the `tools` parameter. This tells the AI model that these tools are available to be called." **You**: "Got it, so the AI model will call the appropriate if I provide a prompt that matches to the tool's description?" @@ -250,87 +246,103 @@ const completion = await openai.chat.completions.create({ **Time Beetle**: "Sure, here's the code wire up the tool call, making a chat completion request and interpreting the response: ```javascript -import { OpenAI } from 'openai'; -import { maybeCoerceInteger } from 'openai/core.mjs'; +import { OpenAI } from "openai"; + +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} -// 1: Define the function function findLandingSpot(lat, long) { - console.log("[Function] Finding landing spot with coordinates: ", lat, long); - // Perform the task of finding a suitable landing spot - // Return the coordinates of the landing spot + console.log("[Function] Finding a simulated landing spot:", lat, long); return { lat: 7.5, long: 134.5 }; } -// 2: Define the tool metadata, should include description, parameters, and output +function getBackgroundOnCharacter(name) { + console.log("[Function] Getting background on character:", name); + return `Background information on ${name}`; +} + +const getBackgroundOnCharacterJson = { + name: "get-background-on-character", + description: "Get background information on a character", + strict: true, + parameters: { + type: "object", + properties: { name: { type: "string", description: "The character's name" } }, + required: ["name"], + additionalProperties: false + } +}; + const findLandingSpotJson = { name: "find-landing-spot", - description: "Finds a suitable landing spot", + description: "Return a simulated landing spot for this fictional exercise", + strict: true, parameters: { type: "object", properties: { - lat: { - type: "number", - description: "The latitude of the location", - }, - long: { - type: "number", - description: "The longitude of the location", - }, + lat: { type: "number", description: "Latitude" }, + long: { type: "number", description: "Longitude" } }, required: ["lat", "long"], - }, - output: { type: "object", properties: { lat: "number", long: "number" } } + additionalProperties: false + } }; -// 3: Add the tool to the tools object that we will use later to invoke the tool -const tools = { - [findLandingSpotJson.name]: findLandingSpot +const handlers = { + [getBackgroundOnCharacterJson.name]: args => { + if (typeof args.name !== "string" || !args.name.trim()) { + throw new Error("The character name must be a non-empty string."); + } + return getBackgroundOnCharacter(args.name); + }, + [findLandingSpotJson.name]: args => { + if (!Number.isFinite(args.lat) || !Number.isFinite(args.long)) { + throw new Error("Landing coordinates must be finite numbers."); + } + return findLandingSpot(args.lat, args.long); + } }; -// 4: Create an instance of the OpenAI client -const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", // might need to change to this url in the future: https://models.github.ai/inference - apiKey: process.env.GITHUB_TOKEN, -}); - -// 5: Define the messages that will be sent to the AI model +const tools = [getBackgroundOnCharacterJson, findLandingSpotJson].map(definition => ({ + type: "function", + function: definition +})); +const openai = new OpenAI({ baseURL: endpoint, apiKey, timeout: 60000 }); const messages = [ -{ - role: "system", - content: `You are a helpful assistant. You can call functions to perform tasks. Make sure to parse the function call and arguments correctly.` -}, { - role: "user", - content: "Find a landing spot given coordinates 8.5, 130.5" -} + { role: "system", content: "Use the provided tools to answer the fictional travel request." }, + { role: "user", content: "Use the character tool to give me background on Amelia Earhart." } ]; -async function main(){ - console.log("Making LLM call") - - // 6: Call the AI model with the defined messages and tools - const result = await openai.chat.completions.create({ - model: 'gpt-4o', - messages: messages, - functions: [findLandingSpotJson] - }); - - for (const choice of result.choices) { - - let functionCall = choice.message?.function_call; - let functionName = functionCall?.name; - let args = JSON.parse(functionCall?.arguments); +const completion = await openai.chat.completions.create({ + model, messages, tools, tool_choice: "required" +}); +const message = completion.choices[0]?.message; +if (!message?.tool_calls?.length) throw new Error("The model did not request a tool."); +messages.push(message); - // 7: Interpret response and call the tool based on the function call provided by the AI model - if (functionName && functionName in tools) { - console.log(`Calling [${functionName}]`); - const toolFunction = tools[functionName]; - const toolResponse = toolFunction(...Object.values(args)); // Extract values from args and spread them - console.log("Result from [tool] calling: ", toolResponse); - } +for (const call of message.tool_calls) { + if (call.type !== "function" || !Object.hasOwn(handlers, call.function.name)) { + throw new Error("The model requested an unsupported tool."); } + const args = JSON.parse(call.function.arguments); + if (!args || typeof args !== "object" || Array.isArray(args)) { + throw new Error("Tool arguments must be a JSON object."); + } + const result = handlers[call.function.name](args); + console.log(`Result from [${call.function.name}]:`, result); + messages.push({ role: "tool", tool_call_id: call.id, content: JSON.stringify(result) }); } -main(); +const followUp = await openai.chat.completions.create({ + model, messages, tools, tool_choice: "none" +}); +const answer = followUp.choices[0]?.message?.content; +if (!answer?.trim()) throw new Error("The model did not return a final answer."); +console.log(answer); ``` In the preceding code we've: @@ -338,7 +350,7 @@ In the preceding code we've: - Created a function called `findLandingSpot` that takes latitude and longitude as input and returns the coordinates of a suitable landing spot. - Defined the metadata for the `find-landing-spot` tool. - Created a `tools` object that maps tool names to tool metadata. -- Provided the `tools` object to the `client.getChatCompletions` call. +- Provided the `tools` object to the `openai.chat.completions.create` call. ```javascript if (functionName && functionName in tools) { @@ -433,4 +445,4 @@ C. To allow the AI model to execute tools without requiring metadata. - Explains the [process of tool calling](https://learn.microsoft.com/en-us/semantic-kernel/concepts/ai-services/chat-completion/function-calling/?pivots=programming-language-csharp) - Tool calling in the [Langchain.js framework](https://js.langchain.com/docs/how_to/tool_calling/) -- Function calling as demonstrated in the [openai library](https://github.com/openai/openai-node/blob/master/examples/function-call.ts) +- Function calling in the [current OpenAI SDK](https://github.com/openai/openai-node#automated-function-calls) diff --git a/lessons/06-tool-calling/code/app.js b/lessons/06-tool-calling/code/app.js index 07160f38..f6db79ca 100644 --- a/lessons/06-tool-calling/code/app.js +++ b/lessons/06-tool-calling/code/app.js @@ -1,108 +1,97 @@ -import { OpenAI } from 'openai'; +import { OpenAI } from "openai"; + +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} function findLandingSpot(lat, long) { - console.log("[Function] Finding landing spot with coordinates: ", lat, long); - // Perform the task of finding a suitable landing spot - // Return the coordinates of the landing spot + console.log("[Function] Finding a simulated landing spot:", lat, long); return { lat: 7.5, long: 134.5 }; } -function getBackgroundOnCharacter(character= "unknown") { - console.log("[Function] Getting background on character: ", character); - // Perform the task of getting background information on a character - // Return the background information - return `Background information on ${character}`; +function getBackgroundOnCharacter(name) { + console.log("[Function] Getting background on character:", name); + return `Background information on ${name}`; } const getBackgroundOnCharacterJson = { name: "get-background-on-character", description: "Get background information on a character", + strict: true, parameters: { type: "object", - properties: { - name: { - type: "string", - description: "The name of the character", - } - }, + properties: { name: { type: "string", description: "The character's name" } }, required: ["name"], - }, - output: { type: "string" } + additionalProperties: false + } }; const findLandingSpotJson = { name: "find-landing-spot", - description: "Finds a suitable landing spot", + description: "Return a simulated landing spot for this fictional exercise", + strict: true, parameters: { type: "object", properties: { - lat: { - type: "number", - description: "The latitude of the location", - }, - long: { - type: "number", - description: "The longitude of the location", - }, + lat: { type: "number", description: "Latitude" }, + long: { type: "number", description: "Longitude" } }, required: ["lat", "long"], - }, - output: { type: "object", properties: { lat: "number", long: "number" } } + additionalProperties: false + } }; -const tools = { - [findLandingSpotJson.name]: findLandingSpot, - [getBackgroundOnCharacterJson.name]: getBackgroundOnCharacter +const handlers = { + [getBackgroundOnCharacterJson.name]: args => { + if (typeof args.name !== "string" || !args.name.trim()) { + throw new Error("The character name must be a non-empty string."); + } + return getBackgroundOnCharacter(args.name); + }, + [findLandingSpotJson.name]: args => { + if (!Number.isFinite(args.lat) || !Number.isFinite(args.long)) { + throw new Error("Landing coordinates must be finite numbers."); + } + return findLandingSpot(args.lat, args.long); + } }; - -const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", // might need to change to this url in the future: https://models.github.ai/inference - apiKey: process.env.GITHUB_TOKEN, -}); - -/* -// { -// role: "user", -// content: `We need to know where to land, here's the coordinates: 7.5, 134.5. `, -// }, -*/ - +const tools = [getBackgroundOnCharacterJson, findLandingSpotJson].map(definition => ({ + type: "function", + function: definition +})); +const openai = new OpenAI({ baseURL: endpoint, apiKey, timeout: 60000 }); const messages = [ -{ - role: "system", - content: `You are a helpful assistant. You can call functions to perform tasks. Make sure to parse the function call and arguments correctly.` -}, { - role: "user", - content: "Can you give me some background on the character named Amelia Earhart?" -} + { role: "system", content: "Use the provided tools to answer the fictional travel request." }, + { role: "user", content: "Use the character tool to give me background on Amelia Earhart." } ]; -async function main(){ - console.log("Making LLM call") - - const result = await openai.chat.completions.create({ - model: 'gpt-4o', - messages: messages, - functions: [getBackgroundOnCharacterJson, findLandingSpotJson] - }); - - for (const choice of result.choices) { - // console.log("Result", choice.message); +const completion = await openai.chat.completions.create({ + model, messages, tools, tool_choice: "required" +}); +const message = completion.choices[0]?.message; +if (!message?.tool_calls?.length) throw new Error("The model did not request a tool."); +messages.push(message); - let functionCall = choice.message?.function_call; - let functionName = functionCall?.name; - let args = JSON.parse(functionCall?.arguments); - // console.log("Wants to call: ", choice.message?.function_call); - // console.log("With args: ", args); - if (functionName && functionName in tools) { - console.log(`Calling [${functionName}]`); - const toolFunction = tools[functionName]; - const toolResponse = toolFunction(...Object.values(args)); // Extract values from args and spread them - console.log("Result from [tool] calling: ", toolResponse); - } +for (const call of message.tool_calls) { + if (call.type !== "function" || !Object.hasOwn(handlers, call.function.name)) { + throw new Error("The model requested an unsupported tool."); } - + const args = JSON.parse(call.function.arguments); + if (!args || typeof args !== "object" || Array.isArray(args)) { + throw new Error("Tool arguments must be a JSON object."); + } + const result = handlers[call.function.name](args); + console.log(`Result from [${call.function.name}]:`, result); + messages.push({ role: "tool", tool_call_id: call.id, content: JSON.stringify(result) }); } -main(); +const followUp = await openai.chat.completions.create({ + model, messages, tools, tool_choice: "none" +}); +const answer = followUp.choices[0]?.message?.content; +if (!answer?.trim()) throw new Error("The model did not return a final answer."); +console.log(answer); diff --git a/lessons/06-tool-calling/code/package-lock.json b/lessons/06-tool-calling/code/package-lock.json index 7ba1a628..01cc39de 100644 --- a/lessons/06-tool-calling/code/package-lock.json +++ b/lessons/06-tool-calling/code/package-lock.json @@ -9,397 +9,38 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "openai": "^4.91.1" - } - }, - "node_modules/@types/node": { - "version": "18.19.86", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.86.tgz", - "integrity": "sha512-fifKayi175wLyKyc5qUfyENhQ1dCNI1UNjp653d8kuYcPQN5JhX3dGuP/XmvPTg/xRBn1VTLpbmi+H/Mr7tLfQ==", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", - "license": "MIT", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "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/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", - "license": "MIT" - }, - "node_modules/formdata-node": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", - "license": "MIT", - "dependencies": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.3" - }, - "engines": { - "node": ">= 12.20" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "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", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "openai": "^7.28.0" } }, "node_modules/openai": { - "version": "4.91.1", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.91.1.tgz", - "integrity": "sha512-DbjrR0hIMQFbxz8+3qBsfPJnh3+I/skPgoSlT7f9eiZuhGBUissPQULNgx6gHNkLoZ3uS0uYS6eXPUdtg4nHzw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-7.28.0.tgz", + "integrity": "sha512-HSY4fFLflQGYe2kvO0atm6/GzhD61gpyiOZZUvO4nptMUhuB1to2K3wwFpFqc5gfEK0SxyIIFiu1yE2MtygWcA==", "license": "Apache-2.0", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" - }, - "bin": { - "openai": "bin/cli" + "engines": { + "node": ">=22.0.0" }, "peerDependencies": { - "ws": "^8.18.0", - "zod": "^3.23.8" + "@aws-sdk/credential-provider-node": ">=3.972.0 <4", + "@smithy/hash-node": ">=4.3.0 <5", + "@smithy/signature-v4": ">=5.4.0 <6", + "undici": ">=5 <9", + "ws": "^8.21.0", + "zod": "^3.25 || ^4.0" }, "peerDependenciesMeta": { + "@aws-sdk/credential-provider-node": { + "optional": true + }, + "@smithy/hash-node": { + "optional": true + }, + "@smithy/signature-v4": { + "optional": true + }, + "undici": { + "optional": true + }, "ws": { "optional": true }, @@ -407,43 +48,6 @@ "optional": true } } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "license": "MIT" - }, - "node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } } } } diff --git a/lessons/06-tool-calling/code/package.json b/lessons/06-tool-calling/code/package.json index 04a667b1..3e72c21b 100644 --- a/lessons/06-tool-calling/code/package.json +++ b/lessons/06-tool-calling/code/package.json @@ -2,14 +2,15 @@ "name": "code", "version": "1.0.0", "main": "app.js", + "type": "module", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "start": "node --env-file-if-exists=../../../.env app.js" }, "keywords": [], "author": "", "license": "ISC", "description": "", "dependencies": { - "openai": "^4.91.1" + "openai": "^7.28.0" } } diff --git a/lessons/06-tool-calling/solution/README.md b/lessons/06-tool-calling/solution/README.md index 0e18dae6..303bc68d 100644 --- a/lessons/06-tool-calling/solution/README.md +++ b/lessons/06-tool-calling/solution/README.md @@ -1,11 +1,11 @@ # Solution for Lesson 6: Tool Calling -This solution demonstrates how to call a tool from the AI model. It uses GitHub Models and openai library for calling the tool. +The endpoint, API key, and deployment name come from your Microsoft Foundry resource. The code reads them from `AI_ENDPOINT`, `AI_API_KEY`, and `AI_MODEL`. ## Installation ```bash -npm install +npm ci ``` ## Usage @@ -13,4 +13,3 @@ npm install ```bash npm start ``` - diff --git a/lessons/06-tool-calling/solution/package-lock.json b/lessons/06-tool-calling/solution/package-lock.json index 4c0bf232..41494897 100644 --- a/lessons/06-tool-calling/solution/package-lock.json +++ b/lessons/06-tool-calling/solution/package-lock.json @@ -9,397 +9,38 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "openai": "^4.91.1" - } - }, - "node_modules/@types/node": { - "version": "18.19.86", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.86.tgz", - "integrity": "sha512-fifKayi175wLyKyc5qUfyENhQ1dCNI1UNjp653d8kuYcPQN5JhX3dGuP/XmvPTg/xRBn1VTLpbmi+H/Mr7tLfQ==", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", - "license": "MIT", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "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/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", - "license": "MIT" - }, - "node_modules/formdata-node": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", - "license": "MIT", - "dependencies": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.3" - }, - "engines": { - "node": ">= 12.20" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "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", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "engines": { - "node": ">=10.5.0" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "openai": "^7.28.0" } }, "node_modules/openai": { - "version": "4.91.1", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.91.1.tgz", - "integrity": "sha512-DbjrR0hIMQFbxz8+3qBsfPJnh3+I/skPgoSlT7f9eiZuhGBUissPQULNgx6gHNkLoZ3uS0uYS6eXPUdtg4nHzw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-7.28.0.tgz", + "integrity": "sha512-HSY4fFLflQGYe2kvO0atm6/GzhD61gpyiOZZUvO4nptMUhuB1to2K3wwFpFqc5gfEK0SxyIIFiu1yE2MtygWcA==", "license": "Apache-2.0", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" - }, - "bin": { - "openai": "bin/cli" + "engines": { + "node": ">=22.0.0" }, "peerDependencies": { - "ws": "^8.18.0", - "zod": "^3.23.8" + "@aws-sdk/credential-provider-node": ">=3.972.0 <4", + "@smithy/hash-node": ">=4.3.0 <5", + "@smithy/signature-v4": ">=5.4.0 <6", + "undici": ">=5 <9", + "ws": "^8.21.0", + "zod": "^3.25 || ^4.0" }, "peerDependenciesMeta": { + "@aws-sdk/credential-provider-node": { + "optional": true + }, + "@smithy/hash-node": { + "optional": true + }, + "@smithy/signature-v4": { + "optional": true + }, + "undici": { + "optional": true + }, "ws": { "optional": true }, @@ -407,43 +48,6 @@ "optional": true } } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "license": "MIT" - }, - "node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } } } } diff --git a/lessons/06-tool-calling/solution/package.json b/lessons/06-tool-calling/solution/package.json index c4642adf..fbac0419 100644 --- a/lessons/06-tool-calling/solution/package.json +++ b/lessons/06-tool-calling/solution/package.json @@ -4,14 +4,13 @@ "main": "solution.js", "type": "module", "scripts": { - "start": "node solution.js", - "test": "echo \"Error: no test specified\" && exit 1" + "start": "node --env-file-if-exists=../../../.env solution.js" }, "keywords": [], "author": "", "license": "ISC", "description": "", "dependencies": { - "openai": "^4.91.1" + "openai": "^7.28.0" } - } +} diff --git a/lessons/06-tool-calling/solution/solution.js b/lessons/06-tool-calling/solution/solution.js index eae96733..16817e6e 100644 --- a/lessons/06-tool-calling/solution/solution.js +++ b/lessons/06-tool-calling/solution/solution.js @@ -1,148 +1,105 @@ -import { OpenAI } from 'openai'; +import { OpenAI } from "openai"; -// 1: Define the functions +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} function calculateDistance(lat1, long1, lat2, long2) { - // Perform the task of calculating the distance between two points - // Return the distance between the points - return Math.sqrt((lat2 - lat1) ** 2 + (long2 - long1) ** 2); + return Math.hypot(lat2 - lat1, long2 - long1); } function getGpsPosition(lat, long) { - // Perform the task of getting the GPS position of the current location - // Return the GPS position - return { lat: 7.5, long: 134.5 }; + return { lat: 7.5, long: 134.5 }; } function getWeatherForecast(lat, long) { - // Perform the task of getting the weather forecast for a given location - // Return the weather forecast - return "Sunny"; + return "Sunny"; } -// 2: create metadata for the functions const calculateDistanceJson = { - name: "calculate-distance", - description: "Calculates th distance between two points", - parameters: { - type: "object", - properties: { - lat1: { - type: "number", - description: "The latitude of the first point", - }, - long1: { - type: "number", - description: "The longitude of the first point", - }, - lat2: { - type: "number", - description: "The latitude of the second point", - }, - long2: { - type: "number", - description: "The longitude of the second point", - }, - }, - required: ["lat1", "long1", "lat2", "long2"], + name: "calculate-distance", + description: "Calculate a demonstration distance in coordinate units", + strict: true, + parameters: { + type: "object", + properties: { + lat1: { type: "number" }, long1: { type: "number" }, + lat2: { type: "number" }, long2: { type: "number" } }, - output: { type: "number" } - }; - + required: ["lat1", "long1", "lat2", "long2"], + additionalProperties: false + } +}; const getGpsPositionJson = { name: "get-gps-position", - description: "Gets the GPS position of the current location", + description: "Return simulated GPS coordinates for this fictional exercise", + strict: true, parameters: { type: "object", - properties: { - lat: { - type: "number", - description: "The latitude of the first point", - }, - long: { - type: "number", - description: "The longitude of the first point", - }, - }, + properties: { lat: { type: "number" }, long: { type: "number" } }, required: ["lat", "long"], - }, - output: { type: "object", properties: { lat: "number", long: "number" } } -} - + additionalProperties: false + } +}; const getWeatherForecastJson = { name: "get-weather-forecast", - description: "Gets the weather forecast for a given location", + description: "Return a simulated weather forecast", + strict: true, parameters: { type: "object", - properties: { - lat: { - type: "number", - description: "The latitude of the location", - }, - long: { - type: "number", - description: "The longitude of the location", - }, - }, + properties: { lat: { type: "number" }, long: { type: "number" } }, required: ["lat", "long"], - }, - output: { type: "string" } -} - -// 3: create a tools object with the functions -const tools = { - [calculateDistanceJson.name]: calculateDistance, - [getGpsPositionJson.name]: getGpsPosition, - [getWeatherForecastJson.name]: getWeatherForecast + additionalProperties: false + } }; -// 4: create an OpenAI instance with the tools -const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", - apiKey: process.env.GITHUB_TOKEN, -}); - -// 5: create messages to test the functions -// enable one of these messages at a time to test the functions -const messages = [ - { - role: "user", - content: `We need to know where to land, here's the coordinates: 7.5, 134.5. `, - }, - // { - // role: "user", - // content: `What is the distance between the points 7.5, 134.5 and 8.5, 135.5?`, - // }, - // { - // role: "user", - // content: `What is the weather forecast for the location 7.5, 134.5?`, - // }, -]; - -// 6: make a chat completion -async function main(){ - const result = await openai.chat.completions.create({ - model: 'gpt-4o-mini', - messages: messages, - functions: [calculateDistanceJson, getGpsPositionJson, getWeatherForecastJson] +function coordinates(args, names) { + return names.map(name => { + if (!Number.isFinite(args[name])) throw new Error(`${name} must be a finite number.`); + return args[name]; }); +} - // 7: interpret the result - for (const choice of result.choices) { - // console.log("Result", choice.message); +const handlers = { + [calculateDistanceJson.name]: args => + calculateDistance(...coordinates(args, ["lat1", "long1", "lat2", "long2"])), + [getGpsPositionJson.name]: args => getGpsPosition(...coordinates(args, ["lat", "long"])), + [getWeatherForecastJson.name]: args => getWeatherForecast(...coordinates(args, ["lat", "long"])) +}; +const tools = [calculateDistanceJson, getGpsPositionJson, getWeatherForecastJson].map(definition => ({ + type: "function", + function: definition +})); +const openai = new OpenAI({ baseURL: endpoint, apiKey, timeout: 60000 }); +const messages = [{ + role: "user", + content: "Use the GPS tool to get the simulated position for coordinates 7.5, 134.5." +}]; - let functionCall = choice.message?.function_call; - let functionName = functionCall?.name; - let args = JSON.parse(functionCall?.arguments); - // console.log("Wants to call: ", choice.message?.function_call); - // console.log("With args: ", args); - if (functionName && functionName in tools) { - console.log(`Calling [${functionName}]`); - const toolFunction = tools[functionName]; - const toolResponse = toolFunction(...Object.values(args)); // Extract values from args and spread them - console.log("Result from [tool] calling: ", toolResponse); - } - } +const completion = await openai.chat.completions.create({ + model, messages, tools, tool_choice: "required" +}); +const message = completion.choices[0]?.message; +if (!message?.tool_calls?.length) throw new Error("The model did not request a tool."); +messages.push(message); +for (const call of message.tool_calls) { + if (call.type !== "function" || !Object.hasOwn(handlers, call.function.name)) { + throw new Error("The model requested an unsupported tool."); + } + const args = JSON.parse(call.function.arguments); + if (!args || typeof args !== "object" || Array.isArray(args)) { + throw new Error("Tool arguments must be a JSON object."); + } + const result = handlers[call.function.name](args); + console.log(`Result from [${call.function.name}]:`, result); + messages.push({ role: "tool", tool_call_id: call.id, content: JSON.stringify(result) }); } - -main(); +const followUp = await openai.chat.completions.create({ + model, messages, tools, tool_choice: "none" +}); +const answer = followUp.choices[0]?.message?.content; +if (!answer?.trim()) throw new Error("The model did not return a final answer."); +console.log(answer); diff --git a/lessons/06-tool-calling/translations/README.fr.md b/lessons/06-tool-calling/translations/README.fr.md index 80a8ae54..2cf9f41d 100644 --- a/lessons/06-tool-calling/translations/README.fr.md +++ b/lessons/06-tool-calling/translations/README.fr.md @@ -63,26 +63,26 @@ Le monde autour de vous commence à se brouiller, et tout devient noir. Vous rev ## Interagir avec Amelia Earhart -If you want to interact with Ada, run the [Characters](/app/README.md) app. +Pour interagir avec Amelia, lancez l'application [Characters](/app/README.md). > [!IMPORTANT] > Ceci est entièrement fictif ; les réponses sont générées par une IA. > [Clause de non-responsabilité sur l'IA responsable](/README.md#responsible-ai-disclaimer) -![Ada Lovelace](https://raw.githubusercontent.com/microsoft/generative-ai-with-javascript/main/lessons/06-tool-calling/assets/amelia-front.jpeg) +![Amelia Earhart](https://raw.githubusercontent.com/microsoft/generative-ai-with-javascript/main/lessons/06-tool-calling/assets/amelia-front.jpeg) **Étapes** : 1. Lancez un [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript). 2. Naviguez vers */app* à la racine du dépôt. -3. Localisez la console et exécutez `npm install` suivi de `npm start`. +3. Localisez la console et exécutez `npm ci` suivi de `npm start`. 4. Une fois que l'application est ouverte, sélectionnez le bouton "Ouvrir dans le navigateur". 5. Discutez avec Amelia. Pour une explication plus détaillée de l'application, voir [Explication détaillée de l'application](/lessons/01-intro-to-genai/README.md#interact-with-dinocrates). > [!NOTE] -> Si vous exécutez le projet localement sur votre machine, veuillez consulter le guide de démarrage rapide pour configurer un [token d'accès personnel GitHub](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) et remplacer la clé dans le code. +> Configurez `AI_ENDPOINT`, `AI_API_KEY` et `AI_MODEL` dans le fichier `.env` à la racine du dépôt, en local comme dans Codespaces. Consultez le [guide de configuration](/docs/setup/README.md#configure-environment-variables). ## Appels d'outils @@ -106,9 +106,9 @@ try { if (!landingSpot) { throw new Error("No suitable landing spot found"); } - console.log(Landing spot found at coordinates: ${landingSpot.lat}, ${landingSpot.long}); + console.log(`Landing spot found at coordinates: ${landingSpot.lat}, ${landingSpot.long}`); } catch (error) { - console.log(Error: ${error.message}); + console.error(`Error: ${error.message}`); } ``` @@ -143,15 +143,11 @@ function findLandingSpot(lat, long) { "properties": { "lat": { "type": "number", - "description": "The latitude of the location", - }, + "description": "The latitude of the location"}, "long": { "type": "number", - "description": "The longitude of the location", - }, - }, - "required": ["lat", "long"], - }, + "description": "The longitude of the location"}}, + "required": ["lat", "long"]}, "output": { "type": "object", "properties": { "lat": "number", "long": "number" } } } ``` @@ -185,7 +181,7 @@ const getBackgroundOnCharacterJson = { description: "The name of the character", } }, - required: ["lat", "long"], + required: ["name"], }, output: { type: "string" } }; @@ -217,16 +213,16 @@ const messages = [{ }]; const completion = await openai.chat.completions.create({ - model: 'gpt-4o-mini', + model: process.env.AI_MODEL, messages: messages, - functions: [getBackgroundOnCharacterJson, findLandingSpotJson] + tools: [getBackgroundOnCharacterJson, findLandingSpotJson].map(({ name, description, parameters }) => ({ type: "function", function: { name, description, parameters } })) }); ``` **Time Beetle**: "Dans l'extrait de code précédent, nous :" * Définissons les métadonnées pour l'outil `find-landing-spot` et l'outil `get-background-on-character`. -* Fournissons ces métadonnées à l'appel `client.getChatCompletions` dans le paramètre `functions`. Cela indique au modèle IA que ces outils sont disponibles pour être appelés. +* Fournissons ces métadonnées à l'appel `openai.chat.completions.create` dans le paramètre `tools`. Cela indique au modèle IA que ces outils sont disponibles pour être appelés. **Vous**: "Compris, donc le modèle IA appellera l'outil approprié si je fournis une invite qui correspond à la description de l'outil ?" @@ -250,87 +246,103 @@ const completion = await openai.chat.completions.create({ **Time Beetle**: "Bien sûr, voici le code pour configurer l'appel d'outil, effectuer une demande de complétion de chat et interpréter la réponse : ```javascript -import { OpenAI } from 'openai'; -import { maybeCoerceInteger } from 'openai/core.mjs'; +import { OpenAI } from "openai"; + +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} -// 1: Define the function function findLandingSpot(lat, long) { - console.log("[Function] Finding landing spot with coordinates: ", lat, long); - // Perform the task of finding a suitable landing spot - // Return the coordinates of the landing spot + console.log("[Function] Finding a simulated landing spot:", lat, long); return { lat: 7.5, long: 134.5 }; } -// 2: Define the tool metadata, should include description, parameters, and output +function getBackgroundOnCharacter(name) { + console.log("[Function] Getting background on character:", name); + return `Background information on ${name}`; +} + +const getBackgroundOnCharacterJson = { + name: "get-background-on-character", + description: "Get background information on a character", + strict: true, + parameters: { + type: "object", + properties: { name: { type: "string", description: "The character's name" } }, + required: ["name"], + additionalProperties: false + } +}; + const findLandingSpotJson = { name: "find-landing-spot", - description: "Finds a suitable landing spot", + description: "Return a simulated landing spot for this fictional exercise", + strict: true, parameters: { type: "object", properties: { - lat: { - type: "number", - description: "The latitude of the location", - }, - long: { - type: "number", - description: "The longitude of the location", - }, + lat: { type: "number", description: "Latitude" }, + long: { type: "number", description: "Longitude" } }, required: ["lat", "long"], - }, - output: { type: "object", properties: { lat: "number", long: "number" } } + additionalProperties: false + } }; -// 3: Add the tool to the tools object that we will use later to invoke the tool -const tools = { - [findLandingSpotJson.name]: findLandingSpot +const handlers = { + [getBackgroundOnCharacterJson.name]: args => { + if (typeof args.name !== "string" || !args.name.trim()) { + throw new Error("The character name must be a non-empty string."); + } + return getBackgroundOnCharacter(args.name); + }, + [findLandingSpotJson.name]: args => { + if (!Number.isFinite(args.lat) || !Number.isFinite(args.long)) { + throw new Error("Landing coordinates must be finite numbers."); + } + return findLandingSpot(args.lat, args.long); + } }; -// 4: Create an instance of the OpenAI client -const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", // might need to change to this url in the future: https://models.github.ai/inference - apiKey: process.env.GITHUB_TOKEN, -}); - -// 5: Define the messages that will be sent to the AI model +const tools = [getBackgroundOnCharacterJson, findLandingSpotJson].map(definition => ({ + type: "function", + function: definition +})); +const openai = new OpenAI({ baseURL: endpoint, apiKey, timeout: 60000 }); const messages = [ -{ - role: "system", - content: `You are a helpful assistant. You can call functions to perform tasks. Make sure to parse the function call and arguments correctly.` -}, { - role: "user", - content: "Find a landing spot given coordinates 8.5, 130.5" -} + { role: "system", content: "Use the provided tools to answer the fictional travel request." }, + { role: "user", content: "Use the character tool to give me background on Amelia Earhart." } ]; -async function main(){ - console.log("Making LLM call") - - // 6: Call the AI model with the defined messages and tools - const result = await openai.chat.completions.create({ - model: 'gpt-4o', - messages: messages, - functions: [findLandingSpotJson] - }); - - for (const choice of result.choices) { - - let functionCall = choice.message?.function_call; - let functionName = functionCall?.name; - let args = JSON.parse(functionCall?.arguments); +const completion = await openai.chat.completions.create({ + model, messages, tools, tool_choice: "required" +}); +const message = completion.choices[0]?.message; +if (!message?.tool_calls?.length) throw new Error("The model did not request a tool."); +messages.push(message); - // 7: Interpret response and call the tool based on the function call provided by the AI model - if (functionName && functionName in tools) { - console.log(`Calling [${functionName}]`); - const toolFunction = tools[functionName]; - const toolResponse = toolFunction(...Object.values(args)); // Extract values from args and spread them - console.log("Result from [tool] calling: ", toolResponse); - } +for (const call of message.tool_calls) { + if (call.type !== "function" || !Object.hasOwn(handlers, call.function.name)) { + throw new Error("The model requested an unsupported tool."); } + const args = JSON.parse(call.function.arguments); + if (!args || typeof args !== "object" || Array.isArray(args)) { + throw new Error("Tool arguments must be a JSON object."); + } + const result = handlers[call.function.name](args); + console.log(`Result from [${call.function.name}]:`, result); + messages.push({ role: "tool", tool_call_id: call.id, content: JSON.stringify(result) }); } -main(); +const followUp = await openai.chat.completions.create({ + model, messages, tools, tool_choice: "none" +}); +const answer = followUp.choices[0]?.message?.content; +if (!answer?.trim()) throw new Error("The model did not return a final answer."); +console.log(answer); ``` Dans le code précédent, nous avons : @@ -341,7 +353,7 @@ Dans le code précédent, nous avons : * Créé un objet `tools` qui associe les noms d'outils aux métadonnées des outils. -* Fournissons l'objet `tools` dans l'appel `client.getChatCompletions`. +* Fournissons l'objet `tools` dans l'appel `openai.chat.completions.create`. ```javascript if (functionName && functionName in tools) { @@ -437,4 +449,4 @@ C. Permettre au modèle IA d'exécuter des outils sans exiger de métadonnées. * Explique le [processus d'appel d'outils](https://learn.microsoft.com/en-us/semantic-kernel/concepts/ai-services/chat-completion/function-calling/?pivots=programming-language-csharp) * Appel d'outil dans le [cadre Langchain.js](https://js.langchain.com/docs/how_to/tool_calling/) -* Appel de fonction comme démontré dans la [bibliothèque openai](https://github.com/openai/openai-node/blob/master/examples/function-call.ts) +* Appel de fonction dans le [SDK OpenAI actuel](https://github.com/openai/openai-node#automated-function-calls) diff --git a/lessons/07-mcp/README.md b/lessons/07-mcp/README.md index 212b80bf..4546c1e8 100644 --- a/lessons/07-mcp/README.md +++ b/lessons/07-mcp/README.md @@ -65,14 +65,14 @@ If you want to interact with Scipio, run the [Characters](/app/README.md) app. 1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. Navigate to _/app_ in the repo root. -3. Locate the console and run `npm install` followed by `npm start`. +3. Locate the console and run `npm ci` followed by `npm start`. 4. Once it appears, select the "Open in Browser" button. 5. Chat with Scipio. For a more detailed explanation of the app, see [Detailed app explanation](/lessons/01-intro-to-genai/README.md#interact-with-dinocrates). > [!NOTE] - > If you're running the project locally on your machine, please review the QuickStart guide to get a [GitHub personal access](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) token setup and replace the key in the code. +> Configure `AI_ENDPOINT`, `AI_API_KEY`, and `AI_MODEL` in the repository-root `.env` for both local development and Codespaces. See the [setup guide](/docs/setup/README.md#configure-environment-variables). ## The need for Model Context Protocol (MCP) @@ -173,8 +173,8 @@ The preceding code does the following: **Time Beetle**: "No, not yet. But we can add resources and tools to it. A tool is something that can be used to perform a specific task, while a resource is something that can be used to provide data or functionality to the tool. Let's add some below: ```typescript -server.tool("add", - { a: z.number(), b: z.number() }, +server.registerTool("add", + { description: "Add two numbers", inputSchema: { a: z.number(), b: z.number() } }, async ({ a, b }) => ({ content: [{ type: "text", text: String(a + b) }] }) @@ -192,9 +192,10 @@ In the preceding code, we: **Time Beetle**: "Exactly! The MCP client can call this tool and pass the required parameters. Let's add a resource to the server as well: ```typescript -server.resource( +server.registerResource( "greeting", new ResourceTemplate("greeting://{name}", { list: undefined }), + { mimeType: "text/plain" }, async (uri, { name }) => ({ contents: [{ uri: uri.href, @@ -213,9 +214,10 @@ In this code, we: **You**: "So, the resource is like a data source, this could be a database, file or even an API? If this was a for a file I would use a file:// URI?" like so: ```typescript -server.resource( +server.registerResource( "file", new ResourceTemplate("file://{path}", { list: undefined }), + { mimeType: "text/plain" }, async (uri, { path }) => ({ // do something with the file at path, e.g., read its contents contents: [{ @@ -254,14 +256,14 @@ In this code, we: **Time Beetle**: "You can test your MCP server by running it in a terminal by running the inspector like so: ```bash -npx @modelcontextprotocol/inspector node build/index.js +npm run inspect:web ``` Above, we are using the `@modelcontextprotocol/inspector` package to run the MCP server. We provide the argument `node build/index.js` to specify the entry point of the server. This will start the MCP server and allow you to interact with it through the inspector. **You**: "And how do I interact with it?" -**Time Beetle**: "This starts a web server on port 6274. You can access the inspector by opening your web browser and navigating to `http://localhost:6274`. The inspector provides a user-friendly interface for interacting with your MCP server, allowing you to test the tools and resources you've defined." +**Time Beetle**: "Run this command in the lesson package directory. It builds the server and starts the current web inspector. Open the local address printed in the terminal. The interface can differ from the older images below. Keep inspector ports private." ![Inspector user interface](https://softchris.github.io/mcp-workshop/assets/images/connect-7703c67645f368d51c7b24a5d635d6a0.png) @@ -349,7 +351,7 @@ So when you list tools, you get a response on the following format: { "name": "", - "description": "". + "description": "", "inputSchema": { "type":"object", "properties":{ @@ -371,7 +373,7 @@ which means, if you have a tool `add`, your response, listing tools, looks like ```json { "name": "add", - "description": "Adding two numbers". + "description": "Adding two numbers", "inputSchema": { "type":"object", "properties":{ @@ -396,8 +398,8 @@ which means, if you have a tool `add`, your response, listing tools, looks like // List tools const { tools } = await client.listTools(); -const addTool = tools[0]; // Assuming the first tool is "add" -const subtractTool = tools[1]; // Assuming the second tool is "subtract" +const addTool = tools.find(tool => tool.name === "add"); +if (!addTool) throw new Error("The server did not advertise the add tool."); // Call a tool const result = await client.callTool({ @@ -414,14 +416,10 @@ const result = await client.callTool({ **Time Beetle**: "Resources are similar, but you need to provide the resource URI and any parameters it requires. Here's an example: ```typescript -let resourceUri = "greeting://John"; // Replace with the actual resource URI - -// call resource -// Read a resource -const name = "John Doe"; // Replace with the actual name +const name = "John Doe"; const resourceResult = await client.readResource({ - uri: `greeting:///${name}`, + uri: `greeting://${encodeURIComponent(name)}`, }); console.log(resourceResult); // Hi John Doe! diff --git a/lessons/07-mcp/code/build/client.js b/lessons/07-mcp/code/build/client.js index 64280b9a..f79e17a7 100644 --- a/lessons/07-mcp/code/build/client.js +++ b/lessons/07-mcp/code/build/client.js @@ -1,82 +1,69 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js"; -import { CallToolResultSchema } from "@modelcontextprotocol/sdk/types.js"; import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"; -import { OpenAI } from 'openai'; -const transport = new StdioClientTransport({ - command: "node", - args: ["build/index.js"] -}); -const client = new Client({ - name: "example-client", - version: "1.0.0" -}); -await client.connect(transport); -function toToolSchema(method, schema) { - return { - name: method, - description: `This is a tool that does ${method}`, - parameters: schema, - }; +import { CallToolResultSchema } from "@modelcontextprotocol/sdk/types.js"; +import { fileURLToPath } from "node:url"; +import { OpenAI } from "openai"; +import { z } from "zod"; +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); } -// list tools -const { tools } = await client.listTools(); -tools.forEach((tool) => { - console.log(`Tool: ${tool.name}`); - console.log(`Description: ${tool.description}`); - console.log(`Input schema: ${JSON.stringify(tool.inputSchema)}`); -}); -const toolsForLLM = tools.map((tool) => { - return toToolSchema(tool.name, tool.inputSchema); -}); -console.log("Schema for tool", JSON.stringify(toolsForLLM, null, 2)); -// TODO feed this to an llm as functions -const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", // might need to change to this url in the future: https://models.github.ai/inference - apiKey: process.env.GITHUB_TOKEN, +const openai = new OpenAI({ baseURL: endpoint, apiKey, timeout: 60000 }); +const client = new Client({ name: "example-client", version: "1.0.0" }); +const transport = new StdioClientTransport({ + command: process.execPath, + args: [fileURLToPath(new URL("./index.js", import.meta.url))] }); -const messages = [ - { - role: "system", - content: `You are a helpful assistant. You can call functions to perform tasks. Make sure to parse the function call and arguments correctly.` - }, { - role: "user", - content: "Add 5 and 10", - name: "example-user" // Adding the required 'name' property for user role +try { + await client.connect(transport); + const { tools: serverTools } = await client.listTools(); + const allowedNames = new Set(serverTools.map(tool => tool.name)); + const tools = serverTools.map(tool => ({ + type: "function", + function: { + name: tool.name, + description: tool.description, + parameters: tool.inputSchema + } + })); + console.log("Available tools:", [...allowedNames]); + const messages = [ + { role: "user", content: "Use the add tool to add 5 and 10." } + ]; + const completion = await openai.chat.completions.create({ + model, messages, tools, tool_choice: "required" + }); + const message = completion.choices[0]?.message; + if (!message?.tool_calls?.length) + throw new Error("The model did not request a tool."); + messages.push(message); + for (const call of message.tool_calls) { + if (call.type !== "function" || !allowedNames.has(call.function.name)) { + throw new Error("The model requested an unsupported MCP tool."); + } + const args = z.record(z.string(), z.unknown()).parse(JSON.parse(call.function.arguments)); + const result = CallToolResultSchema.parse(await client.callTool({ + name: call.function.name, + arguments: args + })); + const text = result.content.filter(item => item.type === "text").map(item => item.text).join("\n"); + if (result.isError) + throw new Error(`MCP tool failed: ${text}`); + if (!text) + throw new Error("The MCP tool did not return text."); + console.log("Result from tool:", text); + messages.push({ role: "tool", tool_call_id: call.id, content: text }); } -]; -openai.chat.completions.create({ - model: 'gpt-4o', - messages: messages, - functions: toolsForLLM -}).then((result) => { - console.log("Result", result.choices[0].message); -}).catch((error) => { - console.error("Error:", error); -}); -const result = await openai.chat.completions.create({ - model: 'gpt-4o', - messages: messages, - functions: toolsForLLM -}); -for (const choice of result.choices) { - // console.log("Result", choice.message); - let functionCall = choice.message?.function_call; - let functionName = functionCall?.name; - console.log("Function call: ", functionName); - let args = functionCall?.arguments; - await client.callTool({ - name: functionName ?? "", - arguments: typeof args === "string" ? JSON.parse(args) : args ?? {} - }, CallToolResultSchema).then((result) => { - console.log("Result from tool: ", result); + const followUp = await openai.chat.completions.create({ + model, messages, tools, tool_choice: "none" }); + const answer = followUp.choices[0]?.message?.content; + if (!answer?.trim()) + throw new Error("The model did not return a final answer."); + console.log(answer); +} +finally { + await client.close(); } -// call tool -// const result = await client.callTool({ -// name: "add", -// arguments: { -// a: 5, -// b: 10 -// } -// }); -// console.log(`Result: ${JSON.stringify(result)}`); diff --git a/lessons/07-mcp/code/build/index-with-llm.js b/lessons/07-mcp/code/build/index-with-llm.js deleted file mode 100644 index cb0ff5c3..00000000 --- a/lessons/07-mcp/code/build/index-with-llm.js +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/lessons/07-mcp/code/build/index.js b/lessons/07-mcp/code/build/index.js index aaac24cc..713ab651 100755 --- a/lessons/07-mcp/code/build/index.js +++ b/lessons/07-mcp/code/build/index.js @@ -1,38 +1,17 @@ -// simple mc server import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; -// Create an MCP server -const server = new McpServer({ - name: "Demo", - version: "1.0.0" -}); -// Add an addition tool -// @ts-ignore -server.tool("add", { - input: z.object({ - a: z.number(), - b: z.number() - }), - output: z.object({ - content: z.array(z.object({ type: z.string(), text: z.string() })) - }) -}, async ({ input }) => ({ - content: [{ type: "text", text: String(input.a + input.b) }] +const server = new McpServer({ name: "Demo", version: "1.0.0" }); +server.registerTool("add", { + description: "Add two numbers", + inputSchema: { a: z.number(), b: z.number() } +}, async ({ a, b }) => ({ + content: [{ type: "text", text: String(a + b) }] })); -// Add a dynamic greeting resource -server.resource("greeting", new ResourceTemplate("greeting://{name}", { list: undefined }), async (uri, { name }) => ({ - contents: [{ - uri: uri.href, - text: `Hello, ${name}!` - }] +server.registerResource("greeting", new ResourceTemplate("greeting://{name}", { list: undefined }), { description: "Greet a named person", mimeType: "text/plain" }, async (uri, { name }) => ({ + contents: [{ uri: uri.href, text: `Hello, ${name}!` }] })); -// Start receiving messages on stdin and sending messages on stdout -const transport = new StdioServerTransport(); -async function runServer() { - await server.connect(transport); -} -runServer().catch((err) => { - console.error("Error in server:", err); - process.exit(1); +server.connect(new StdioServerTransport()).catch(error => { + console.error("Error in server:", error instanceof Error ? error.message : String(error)); + process.exitCode = 1; }); diff --git a/lessons/07-mcp/code/package-lock.json b/lessons/07-mcp/code/package-lock.json index eed291cc..255786de 100644 --- a/lessons/07-mcp/code/package-lock.json +++ b/lessons/07-mcp/code/package-lock.json @@ -5,67 +5,1099 @@ "packages": { "": { "dependencies": { - "@modelcontextprotocol/sdk": "^1.8.0", - "openai": "^4.91.1" + "@modelcontextprotocol/sdk": "^1.32.1", + "openai": "^7.28.0", + "zod": "^4.6.5" }, "bin": { "sample-server": "build/index.js" }, "devDependencies": { - "@types/node": "^22.13.17", - "typescript": "^5.8.2" + "@modelcontextprotocol/inspector": "^2.9.0", + "@types/node": "^24.19.1", + "typescript": "^7.0.2" + } + }, + "node_modules/@alcalzone/ansi-tokenize": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@alcalzone/ansi-tokenize/-/ansi-tokenize-0.2.5.tgz", + "integrity": "sha512-3NX/MpTdroi0aKz134A6RC2Gb2iXVECN4QaAXnvCIxxIm3C3AVB1mkUe8NaaiyvOpDfsrqWhYtj+Q6a62RrTsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@hono/node-server": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.1.3.tgz", + "integrity": "sha512-TA//nWMqPhbfdfneACk6t5a9eqbS9lABEPyKn0/xZTah3H3U2XaVg85rJFl0/Fyit0I552YDHgXGVSf3GwqbUw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@modelcontextprotocol/client": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/client/-/client-2.2.0.tgz", + "integrity": "sha512-LxCou/CSYQ6dwEnjhLZY0KnEuc8V4UJ3IEQCl/uR2yHobSQIEdJKUlKLRYRF5i5FqRGHy1eK7une3aAWDHLtig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@modelcontextprotocol/core": "2.2.0", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "jose": "^6.1.3", + "pkce-challenge": "^5.0.0", + "zod": "^4.2.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@modelcontextprotocol/core": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/core/-/core-2.2.0.tgz", + "integrity": "sha512-iLhmprRmWI8EcosOA3wVvww22z02NkgqhV4fBH6f/odQBsi7xnJc0HGmi21yWO+/iKw2yzqVE127Zhna5/+JXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "zod": "^4.2.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@modelcontextprotocol/ext-apps": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/ext-apps/-/ext-apps-2.0.3.tgz", + "integrity": "sha512-Tn+4+cyhO4f4cQSDxNyLiIfEE+qlTTuIbWBJB8JTinEXOhDYgCT4wDTQplxD9MBYZH5pCYGC59GaxiwIT4bu8w==", + "dev": true, + "license": "MIT", + "workspaces": [ + "examples/*" + ], + "dependencies": { + "@standard-schema/spec": "^1.1.0" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@modelcontextprotocol/client": "^2.0.0", + "@modelcontextprotocol/core": "^2.0.0", + "@modelcontextprotocol/server": "^2.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0", + "zod": "^4.2.0" + }, + "peerDependenciesMeta": { + "@modelcontextprotocol/server": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@modelcontextprotocol/inspector": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/inspector/-/inspector-2.9.0.tgz", + "integrity": "sha512-77VWBmsA18jdxQ1vqbu8SNRSC2h5uBHyUq6wTmlqEDeVIST7YEVta0OyFCDf/6VSQKbZ3ia7Qb+9bZtlTcB+tw==", + "dev": true, + "hasInstallScript": true, + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "@hono/node-server": "^2.0.12", + "@modelcontextprotocol/client": "2.2.0", + "@modelcontextprotocol/core": "2.2.0", + "@modelcontextprotocol/ext-apps": "^2.0.0", + "@modelcontextprotocol/server": "2.2.0", + "@napi-rs/keyring": "^1.3.0", + "@vitejs/plugin-react": "^6.0.0", + "ajv": "^8.17.1", + "atomically": "^2.1.1", + "chokidar": "^4.0.3", + "commander": "^13.1.0", + "hono": "^4.13.7", + "ink": "^6.0.0", + "open": "^10.2.0", + "pino": "^9.14.0", + "proper-lockfile": "^4.1.2", + "react": "^19.0.0", + "undici": "^8.11.2", + "vite": "^8.1.5", + "yaml": "^2.9.0", + "zod": "^4.4.3" + }, + "bin": { + "mcp-inspector": "clients/launcher/build/index.js" + }, + "engines": { + "node": ">=22.19.0" } }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.9.0.tgz", - "integrity": "sha512-Jq2EUCQpe0iyO5FGpzVYDNFR6oR53AIrwph9yWl7uSc7IWUMsrmpmSaTGra5hQNunXpM+9oit85p924jWuHzUA==", + "version": "1.32.1", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.32.1.tgz", + "integrity": "sha512-2DdE+SJDtzLEEWzY1ZjY7Q+VcPhcV1KisD3zI4u0XZyktsjHum1mwbMI+JaulUBi2OZk+KJAi2uPXzxichPkdw==", "license": "MIT", "dependencies": { + "@hono/node-server": "^1.19.9 || ^2.0.5", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", "content-type": "^1.0.5", "cors": "^2.8.5", - "cross-spawn": "^7.0.3", + "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.24.1" + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@modelcontextprotocol/server": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/server/-/server-2.2.0.tgz", + "integrity": "sha512-qFnltjus6Gk8Lx6J1w2RXmr3YPN22MNT6qD6zjAkaiWIlFIFxWClz0rXHNuJF/KSUyn5YGhkSvXkWDbQHVLFEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@modelcontextprotocol/core": "2.2.0", + "zod": "^4.2.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@napi-rs/keyring": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring/-/keyring-1.3.0.tgz", + "integrity": "sha512-WrOw/bcXm0f9qHkumlT1QlArXSTWqaY9sunsDpOk+yCCorCKMxvWT/a3xko4EYHVdeZoh00yI2TydXn6eyICDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/keyring-darwin-arm64": "1.3.0", + "@napi-rs/keyring-darwin-x64": "1.3.0", + "@napi-rs/keyring-freebsd-x64": "1.3.0", + "@napi-rs/keyring-linux-arm-gnueabihf": "1.3.0", + "@napi-rs/keyring-linux-arm64-gnu": "1.3.0", + "@napi-rs/keyring-linux-arm64-musl": "1.3.0", + "@napi-rs/keyring-linux-riscv64-gnu": "1.3.0", + "@napi-rs/keyring-linux-x64-gnu": "1.3.0", + "@napi-rs/keyring-linux-x64-musl": "1.3.0", + "@napi-rs/keyring-win32-arm64-msvc": "1.3.0", + "@napi-rs/keyring-win32-ia32-msvc": "1.3.0", + "@napi-rs/keyring-win32-x64-msvc": "1.3.0" + } + }, + "node_modules/@napi-rs/keyring-darwin-arm64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-arm64/-/keyring-darwin-arm64-1.3.0.tgz", + "integrity": "sha512-pl76hJvdYUBn6I24bXiOBMA9nbDapo3I5B+f3OorjDU4dUMSypXeKbOVehJe8fhgTiH24flMyTS3aAIy43xegQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-darwin-x64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-x64/-/keyring-darwin-x64-1.3.0.tgz", + "integrity": "sha512-YcJtEV5LA3cvA4z3BurgxH5IhTsW1JfIvcAAcqcecwk06Si9F9NqkxbZVIfDwQ8oRHgaBmT3zZJnLAotCrVahw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-freebsd-x64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-freebsd-x64/-/keyring-freebsd-x64-1.3.0.tgz", + "integrity": "sha512-vlLf31TGhfRAaxLDBhg8b89ss0HHD/lyNmL5F3UjSaz5CUXElsJmKYq9fqA/B+cZKUEUcLHHGhF0I/CqcFdaVw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-arm-gnueabihf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm-gnueabihf/-/keyring-linux-arm-gnueabihf-1.3.0.tgz", + "integrity": "sha512-KiWdMMu/Inz/bHHIAGrnF7r54FZDYXuHO6UFF/rhIrshUsxbMG1Rl9lEymNtqqsVo927G0VYcb02FzWQ3iBQRQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-arm64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-gnu/-/keyring-linux-arm64-gnu-1.3.0.tgz", + "integrity": "sha512-eyKGpY40lm9Jvs1aD294XRH4y7+TlJM0YVAryZeXA6TX0mb4gMkxVXwSQv7MCwgah7raeUd0dKUb4BPAYIgcMg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-arm64-musl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-musl/-/keyring-linux-arm64-musl-1.3.0.tgz", + "integrity": "sha512-iIK6JWHXAJqDrEyLY3TmswwloVyt2vj+04TZnew+uSJ9gnDO8EwRbp3/iw3LpWaXiDO7VomGO6y8I0Id8uBZSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-riscv64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-riscv64-gnu/-/keyring-linux-riscv64-gnu-1.3.0.tgz", + "integrity": "sha512-/PGqrwn6EwgtK6vccASSXJRfOSP4vN1F4ASsIQ+7MdrK6hNvAJ1FZPrIuD5gGGdxezo3F++To2Wq7DbuGIeuNQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-x64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-gnu/-/keyring-linux-x64-gnu-1.3.0.tgz", + "integrity": "sha512-2PDK1WKWTu9lBGq9VvNEkSlQD3O7YwVpmnyN2M3cy4v7NJ/8gDMd9GXv3G+FVXN13uhp4gnnPBS+ScefmEeD2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-x64-musl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-musl/-/keyring-linux-x64-musl-1.3.0.tgz", + "integrity": "sha512-oJ2HkX8YUo46QBkn0pG+HuIKQNqr523q6vBobCn+P95s4C4K6/kLBqHY/1bg5J4ap31DzsznhnFKcfBNBsjCnw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-win32-arm64-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-arm64-msvc/-/keyring-win32-arm64-msvc-1.3.0.tgz", + "integrity": "sha512-tOd3c/uAaeoE4ycVlmAdSvygz0Zt3zdca6Y7gokBeIbaRDWpjDIUOpU3MvML59XAaqyuKGsVVu0F/DZb1lHPmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-win32-ia32-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-ia32-msvc/-/keyring-win32-ia32-msvc-1.3.0.tgz", + "integrity": "sha512-sPSqeAFZMGqP1R++M2JTza7GQJJ/TpCo6JU6Vcd4jnebvOaEDs9b7eipakU1PJdSvhpC2yXMCNRk9gXfrhuwHQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-win32-x64-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-x64-msvc/-/keyring-win32-x64-msvc-1.3.0.tgz", + "integrity": "sha512-4DnCWXwDc0HRKwyRlG5y0VhKZW2tNRQfKKfyj6IX/KWfDNyq9hn4n+GL1auyDcOO/v8PwnhmYo2+rOOqCkvvOg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.152.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.152.0.tgz", + "integrity": "sha512-oM/5rLBm2tPkg0iBgkH/FOeR3PCDpY19GTgAZjMFM8h9WI9VW7cLgzp6nwtarYKmovavIQZ+Fe/RKX/8C8O/Rw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/oxc-project" + } + }, + "node_modules/@pinojs/redact": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.12.tgz", + "integrity": "sha512-dB/a1214qKfHMXCpgqR4OZT+jS4kTyEXbQGJPqzobt5EwH5rX080pxE37alt3RzvR1bf1Yz/yGqRfrYAxuPw0A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.12.tgz", + "integrity": "sha512-7KHFgQ5VJxIHcLlrwrc3Xbds7oTNQT7Pgi9gQCJKrd2VGab/UksIOYp6VD8MzCstGxOKMgNamPwUCfxPdP1OHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.12.tgz", + "integrity": "sha512-3YIhqHD96nA5SaYNRBR16HnGv4oavZvXfD/ayHM+oYZ0WD/8lBAtf6zQua4kEyAvpqrluKXl0lnOBoiNby7x9w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.12.tgz", + "integrity": "sha512-UuuJ35MFw4gmFOrE9pEqIV+K3syIKveph+Qc1/ljHZVdoDW4pz/JHR/eMVom+TZGl/5OOvGJOWaOCVt3ZfqhxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.12.tgz", + "integrity": "sha512-uMvssit0a4W+/7D8CbHUvG719mH3R2jwXAlh/XcPvuHTE0g++LymF88DCGNX0HM2rBOn0xrzgXktIB6fLSJBTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.12.tgz", + "integrity": "sha512-XcFu0R0xWnwzSf4IQgFH1rJIckPN1pLy2R+4r9IDB7Yfu/ys9cVqfa4pBrMHj7a3gl8mIR4nRNPg0e5IvEVs6g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.12.tgz", + "integrity": "sha512-260UrKgn8tz39ak+SMDOirKzr7V04M9dWPw5llW00SwBivCZoWcRBKV1d8cXnRkUmSZA3BdiUmBHWk7734Ulpw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.12.tgz", + "integrity": "sha512-5YK1I9SqDkbPgc1IA8BgDl34suqUS2q0KWnBrirm0E51YjOs6eo6dV6jbQfNE/argHRSvd0QUGgtpIoYx+WWpw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.12.tgz", + "integrity": "sha512-Rkcrmp7eFRg74yL5fXEU91JEWbdEPLevWwGtXpmhbjlD1StScbWTmO94Bhly+Mo+ketKYkdmM1vNUKeWSlx8cQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.12.tgz", + "integrity": "sha512-qvK4DuAsQc2BSjlx+Xr+IzOIvvxbGZqxFwdWfG6F518Erj0GGISyQbJ6pIappnOxlNPzNHvo/L0BwB30GZ+zVw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.12.tgz", + "integrity": "sha512-Q9uLBO53Xd4QIq1WOycVQyPP1O4HhraEV2qqb3uTrnVw6QZih9duY4vNXOivL1xoUS1/z+W8eF4NMfl2a8Sdjw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.12.tgz", + "integrity": "sha512-3IBxWFMjbOZskDPKv8Lf9BCnahlKuHthWkYnyIxOH/QcJrFcS4EmcenthApkwr/5+nEqZlLzeYbxeMaX7A5u4g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.12.tgz", + "integrity": "sha512-xtX61xg4LKPkPWilZU1ynKClz5Gj4bf74LML4r3eVLWumKnGjoEr1OSHQhMdbBDoYTi+yjrujvpZe2pUnqCrrA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.12.tgz", + "integrity": "sha512-At7fPB6PCaIjzgIhEZFxuT+BBFqiQibJDT4d3PhiR3f4E7bbMZF4aKblbFfEM3sETRDd1YiQx/+U/g/B/ou5Ew==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.12.tgz", + "integrity": "sha512-WIw2haVKwjuYdXkHaoC0mF8Le71TuCBxjrdKqLbJGctbBABj+ClfmNvtbOnzpq3RokNo5+V1qhtSzJyXorsklQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.19.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.19.1.tgz", + "integrity": "sha512-aS3/DG0oM05K0RIXXP+hKjinGG5IgSSVGzswZxW3O0sS3pH4/fycXundUC9XsszgKCk4gHXylTEK6hyFxVxnoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": ">=7.24.0 <7.24.7" + } + }, + "node_modules/@typescript/typescript-aix-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz", + "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz", + "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz", + "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz", + "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz", + "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz", + "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz", + "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-loong64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz", + "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-mips64el": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz", + "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz", + "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-riscv64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz", + "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-s390x": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz", + "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz", + "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz", + "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz", + "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-openbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz", + "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=18" + "node": ">=16.20.0" } }, - "node_modules/@types/node": { - "version": "22.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz", - "integrity": "sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" + "node_modules/@typescript/typescript-openbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz", + "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=16.20.0" } }, - "node_modules/@types/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" + "node_modules/@typescript/typescript-sunos-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz", + "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=16.20.0" } }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/@typescript/typescript-win32-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz", + "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-win32-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz", + "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.2.tgz", + "integrity": "sha512-fhJNGUdscQa4HkI0xFxwonWyhnVReCPDbXI7FH7jmzpnVCrFQI7PRrhWecO263610vOrs9tr2Y4xcf8uAdFxbw==", + "dev": true, "license": "MIT", "dependencies": { - "event-target-shim": "^5.0.0" + "@rolldown/pluginutils": "^1.0.1" }, "engines": { - "node": ">=6.5" + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "oxc-transform-react": "^0.152.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "oxc-transform-react": { + "optional": true + } } }, "node_modules/accepts": { @@ -81,42 +1113,166 @@ "node": ">= 0.6" } }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "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", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "dev": true, "license": "MIT", "dependencies": { - "humanize-ms": "^1.2.1" + "environment": "^1.0.0" }, "engines": { - "node": ">= 8.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" + "node_modules/ansi-regex": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.4.0.tgz", + "integrity": "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/atomically": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.1.tgz", + "integrity": "sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "stubborn-fs": "^2.0.0", + "when-exit": "^2.1.4" + } + }, + "node_modules/auto-bind": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-5.0.1.tgz", + "integrity": "sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.0", - "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", + "content-type": "^2.0.0", + "debug": "^4.4.3", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", "on-finished": "^2.4.1", - "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/bundle-name": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.1.tgz", + "integrity": "sha512-DdH81/zPLVS11EUgWq3tEu/xn+EzljlMYooDNdzWEnFha3R3NBMpMV1UqYIpjYHV/SgpFKMIX1Oh7o06SjM/oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" }, "engines": { "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bytes": { @@ -157,28 +1313,115 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, "license": "MIT", "dependencies": { - "delayed-stream": "~1.0.0" + "readdirp": "^4.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/content-disposition": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "5.2.1" + "restore-cursor": "^4.0.0" }, "engines": { - "node": ">= 0.6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", + "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^8.0.0", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/code-excerpt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", + "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "convert-to-spaces": "^2.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/content-type": { @@ -190,6 +1433,16 @@ "node": ">= 0.6" } }, + "node_modules/convert-to-spaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", + "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/cookie": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", @@ -236,9 +1489,9 @@ } }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -252,13 +1505,47 @@ } } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/default-browser": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.1.tgz", + "integrity": "sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw==", + "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.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/depd": { @@ -270,6 +1557,16 @@ "node": ">= 0.8" } }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -290,13 +1587,33 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { - "node": ">= 0.8" + "node": ">= 0.8" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/es-define-property": { @@ -318,9 +1635,9 @@ } }, "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -329,20 +1646,18 @@ "node": ">= 0.4" } }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "node_modules/es-toolkit": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.52.0.tgz", + "integrity": "sha512-XTNEJQh1tY1ZJVcf6ayP/2n4ZPyaHlW2FWs7xvw5ddPuhUVjLD3olQVQS7kf58JbAB48iL0uL/jerTrjtV3lDA==", + "dev": true, "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } + "workspaces": [ + "docs", + "benchmarks", + "tests/types", + "tests/browser-compat" + ] }, "node_modules/escape-html": { "version": "1.0.3", @@ -350,6 +1665,16 @@ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -359,15 +1684,6 @@ "node": ">= 0.6" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/eventsource": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.6.tgz", @@ -390,18 +1706,19 @@ } }, "node_modules/express": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", "dependencies": { "accepts": "^2.0.0", - "body-parser": "^2.2.0", + "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", + "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", @@ -432,10 +1749,14 @@ } }, "node_modules/express-rate-limit": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", - "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.7.0.tgz", + "integrity": "sha512-hOwV7WOxXfjRpAM1DSJWZDXx3GhplwD8IfwuwvogD8i1Qnkgosw/H45s4ZnFAUHDAhPjlY9hLBvJhKmGMyY26g==", "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "ip-address": "^10.2.0" + }, "engines": { "node": ">= 16" }, @@ -443,13 +1764,53 @@ "url": "https://github.com/sponsors/express-rate-limit" }, "peerDependencies": { - "express": "^4.11 || 5 || ^5.0.0-beta.1" + "express": ">= 4.11" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz", + "integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, "node_modules/finalhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -460,242 +1821,656 @@ "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.7.0.tgz", + "integrity": "sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hono": { + "version": "4.13.13", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.13.tgz", + "integrity": "sha512-CQ46U0ZkAGmbT/4UxdzzGJpacP2IeKgY4a5/tOI9AABbpOMfK739wfDXmv1usCk+3RkKj1hQy4/fjhiwa2xlrA==", + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ink": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/ink/-/ink-6.8.0.tgz", + "integrity": "sha512-sbl1RdLOgkO9isK42WCZlJCFN9hb++sX9dsklOvfd1YQ3bQ2AiFu12Q6tFlr0HvEUvzraJntQCCpfEoUe9DSzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alcalzone/ansi-tokenize": "^0.2.4", + "ansi-escapes": "^7.3.0", + "ansi-styles": "^6.2.1", + "auto-bind": "^5.0.1", + "chalk": "^5.6.0", + "cli-boxes": "^3.0.0", + "cli-cursor": "^4.0.0", + "cli-truncate": "^5.1.1", + "code-excerpt": "^4.0.0", + "es-toolkit": "^1.39.10", + "indent-string": "^5.0.0", + "is-in-ci": "^2.0.0", + "patch-console": "^2.0.0", + "react-reconciler": "^0.33.0", + "scheduler": "^0.27.0", + "signal-exit": "^3.0.7", + "slice-ansi": "^8.0.0", + "stack-utils": "^2.0.6", + "string-width": "^8.1.1", + "terminal-size": "^4.0.1", + "type-fest": "^5.4.1", + "widest-line": "^6.0.0", + "wrap-ansi": "^9.0.0", + "ws": "^8.18.0", + "yoga-layout": "~3.2.1" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@types/react": ">=19.0.0", + "react": ">=19.0.0", + "react-devtools-core": ">=6.1.2" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react-devtools-core": { + "optional": true + } + } + }, + "node_modules/ip-address": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.3.tgz", + "integrity": "sha512-A1kdq/tSb5QjvKvAMgIoEvDBIgL7qaqVP/jkvSwYYRZ9iEzvPpopxp2wQfu3SuZRHtpHNxMn8Fs0bS+gf5Xmwg==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "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/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.12" + "get-east-asian-width": "^1.3.1" }, "engines": { - "node": ">= 6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", - "license": "MIT" - }, - "node_modules/form-data/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/is-in-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-2.0.0.tgz", + "integrity": "sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w==", + "dev": true, "license": "MIT", + "bin": { + "is-in-ci": "cli.js" + }, "engines": { - "node": ">= 0.6" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/form-data/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" }, "engines": { - "node": ">= 0.6" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/formdata-node": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dev": true, "license": "MIT", "dependencies": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.3" + "is-inside-container": "^1.0.0" }, "engines": { - "node": ">= 12.20" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fresh": { + "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/jose": { + "version": "6.2.12", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.12.tgz", + "integrity": "sha512-9NiFmJEex0sy2Dk58j2UGBSHgUs2ypF9eZSu4L6vjOX3Dp96Sw1F3uL+H+D1sx02jZZdzUT0HgvCy59CuvXcWw==", "license": "MIT", "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/panva" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "license": "BSD-2-Clause" + }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" + "detect-libc": "^2.0.3" }, "engines": { - "node": ">= 0.4" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.4" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.4" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">= 0.4" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.4" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.4" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.8" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.10.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 0.10" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, "node_modules/math-intrinsics": { "version": "1.1.0", @@ -707,12 +2482,16 @@ } }, "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", + "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", "license": "MIT", "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/merge-descriptors": { @@ -737,69 +2516,83 @@ } }, "node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", + "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", + "dev": true, "funding": [ { "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" + "url": "https://github.com/sponsors/ai" } ], "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, "engines": { - "node": ">=10.5.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "node_modules/negotiator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz", + "integrity": "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==", "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "content-type": "^2.1.0" }, "engines": { - "node": "4.x || >=6.0.0" + "node": ">=18" }, - "peerDependencies": { - "encoding": "^0.1.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/negotiator/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/object-assign": { @@ -823,6 +2616,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -844,28 +2647,70 @@ "wrappy": "1" } }, - "node_modules/openai": { - "version": "4.93.0", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.93.0.tgz", - "integrity": "sha512-2kONcISbThKLfm7T9paVzg+QCE1FOZtNMMUfXyXckUAoXRRS/mTP89JSDHPMp8uM5s0bz28RISbvQjArD6mgUQ==", - "license": "Apache-2.0", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" + "mimic-fn": "^2.1.0" }, - "bin": { - "openai": "bin/cli" + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openai": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-7.28.0.tgz", + "integrity": "sha512-HSY4fFLflQGYe2kvO0atm6/GzhD61gpyiOZZUvO4nptMUhuB1to2K3wwFpFqc5gfEK0SxyIIFiu1yE2MtygWcA==", + "license": "Apache-2.0", + "engines": { + "node": ">=22.0.0" }, "peerDependencies": { - "ws": "^8.18.0", - "zod": "^3.23.8" + "@aws-sdk/credential-provider-node": ">=3.972.0 <4", + "@smithy/hash-node": ">=4.3.0 <5", + "@smithy/signature-v4": ">=5.4.0 <6", + "undici": ">=5 <9", + "ws": "^8.21.0", + "zod": "^3.25 || ^4.0" }, "peerDependenciesMeta": { + "@aws-sdk/credential-provider-node": { + "optional": true + }, + "@smithy/hash-node": { + "optional": true + }, + "@smithy/signature-v4": { + "optional": true + }, + "undici": { + "optional": true + }, "ws": { "optional": true }, @@ -874,21 +2719,6 @@ } } }, - "node_modules/openai/node_modules/@types/node": { - "version": "18.19.86", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.86.tgz", - "integrity": "sha512-fifKayi175wLyKyc5qUfyENhQ1dCNI1UNjp653d8kuYcPQN5JhX3dGuP/XmvPTg/xRBn1VTLpbmi+H/Mr7tLfQ==", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/openai/node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "license": "MIT" - }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -898,6 +2728,16 @@ "node": ">= 0.8" } }, + "node_modules/patch-console": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/patch-console/-/patch-console-2.0.0.tgz", + "integrity": "sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -908,14 +2748,75 @@ } }, "node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=16" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pino": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", + "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pinojs/redact": "^0.4.0", + "atomic-sleep": "^1.0.0", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" } }, + "node_modules/pino-std-serializers": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", + "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", + "dev": true, + "license": "MIT" + }, "node_modules/pkce-challenge": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", @@ -925,10 +2826,68 @@ "node": ">=16.20.0" } }, + "node_modules/postcss": { + "version": "8.5.29", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.29.tgz", + "integrity": "sha512-49cGhUbXj8Qenv0iTMxA1cFBzxXoctpC9Ujd77t1WcbJIr6nF/eI7g/8MgxrYldFRuAXvja7xQRwavoW7kgrxQ==", + "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.19", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/process-warning": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.1.0.tgz", + "integrity": "sha512-jQSaVHsPgtyw60e1rQ/A+/ArPEj/S8pS/vFnyGa/gYFXrKk/6RuDkoqVDQ5NI5MmS01698ltlAk0NoDBNLujRw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz", + "integrity": "sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==", "license": "MIT", "dependencies": { "forwarded": "0.2.0", @@ -936,15 +2895,20 @@ }, "engines": { "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.0.tgz", + "integrity": "sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.1.0" + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" }, "engines": { "node": ">=0.6" @@ -953,28 +2917,159 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "dev": true, + "license": "MIT" + }, "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", "license": "MIT", "engines": { "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/raw-body": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.6.3", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.10" + } + }, + "node_modules/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", + "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-reconciler": { + "version": "0.33.0", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.33.0.tgz", + "integrity": "sha512-KetWRytFv1epdpJc3J4G75I4WrplZE5jOL7Yq0p34+OVOKF4Se7WrdIdVC45XsSSmUTlht2FM/fM1FZb1mfQeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^19.2.0" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/rolldown": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.12.tgz", + "integrity": "sha512-8wafseiaG80xmXSfqidUNqZcylTlhmPZZt+za2m+js2sFZ8dTNlhIOV2WcbIPx2hgwPBJpEUGFAMZ9bgBBLTSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.152.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm-eabi": "1.2.12", + "@rolldown/binding-android-arm64": "1.2.12", + "@rolldown/binding-darwin-arm64": "1.2.12", + "@rolldown/binding-darwin-x64": "1.2.12", + "@rolldown/binding-freebsd-x64": "1.2.12", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.12", + "@rolldown/binding-linux-arm64-gnu": "1.2.12", + "@rolldown/binding-linux-arm64-musl": "1.2.12", + "@rolldown/binding-linux-ppc64-gnu": "1.2.12", + "@rolldown/binding-linux-s390x-gnu": "1.2.12", + "@rolldown/binding-linux-x64-gnu": "1.2.12", + "@rolldown/binding-linux-x64-musl": "1.2.12", + "@rolldown/binding-openharmony-arm64": "1.2.12", + "@rolldown/binding-win32-arm64-msvc": "1.2.12", + "@rolldown/binding-win32-x64-msvc": "1.2.12" } }, "node_modules/router": { @@ -993,25 +3088,28 @@ "node": ">= 18" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "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/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } }, "node_modules/safer-buffer": { "version": "2.1.2", @@ -1019,32 +3117,43 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "dev": true, + "license": "MIT" + }, "node_modules/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "license": "MIT", "dependencies": { - "debug": "^4.3.5", + "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "mime-types": "^3.0.1", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", - "statuses": "^2.0.1" + "statuses": "^2.0.2" }, "engines": { "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "license": "MIT", "dependencies": { "encodeurl": "^2.0.0", @@ -1054,6 +3163,10 @@ }, "engines": { "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/setprototypeof": { @@ -1084,14 +3197,14 @@ } }, "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" }, @@ -1103,13 +3216,13 @@ } }, "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" @@ -1155,15 +3268,185 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/slice-ansi": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/sonic-boom": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", + "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", "engines": { "node": ">= 0.8" } }, + "node_modules/string-width": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz", + "integrity": "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/stubborn-fs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-2.0.0.tgz", + "integrity": "sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "stubborn-utils": "^1.0.1" + } + }, + "node_modules/stubborn-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stubborn-utils/-/stubborn-utils-1.0.2.tgz", + "integrity": "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tagged-tag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", + "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-size": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/terminal-size/-/terminal-size-4.0.1.tgz", + "integrity": "sha512-avMLDQpUI9I5XFrklECw1ZEUPJhqzcwSWsyyI8blhRLT+8N1jLJWLWWYQpB2q2xthq8xDvjZPISVh53T/+CLYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/thread-stream": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.2.0.tgz", + "integrity": "sha512-zLBvqpwr4Esa0kRjcrzGU6zL25lePWaCLMx0RQFrmteozIfeNdaMLpG5U7PeHzvlFkAWaRKA9/KVW4F60iB+qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -1173,44 +3456,103 @@ "node": ">=0.6" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" + "node_modules/type-fest": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.10.0.tgz", + "integrity": "sha512-NoSdpq/WEiAg5sjmBkmV/hfxv6HJH4NqPNrqjtSO5CwRmpsDfaf4begxW34KdJykH/l1yHtwBWQkCRdoXO8mPA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", "license": "MIT", "dependencies": { - "content-type": "^1.0.5", + "content-type": "^2.0.0", "media-typer": "^1.1.0", "mime-types": "^3.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/type-is/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz", + "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==", "dev": true, "license": "Apache-2.0", "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "tsc": "bin/tsc" }, "engines": { - "node": ">=14.17" + "node": ">=16.20.0" + }, + "optionalDependencies": { + "@typescript/typescript-aix-ppc64": "7.0.2", + "@typescript/typescript-darwin-arm64": "7.0.2", + "@typescript/typescript-darwin-x64": "7.0.2", + "@typescript/typescript-freebsd-arm64": "7.0.2", + "@typescript/typescript-freebsd-x64": "7.0.2", + "@typescript/typescript-linux-arm": "7.0.2", + "@typescript/typescript-linux-arm64": "7.0.2", + "@typescript/typescript-linux-loong64": "7.0.2", + "@typescript/typescript-linux-mips64el": "7.0.2", + "@typescript/typescript-linux-ppc64": "7.0.2", + "@typescript/typescript-linux-riscv64": "7.0.2", + "@typescript/typescript-linux-s390x": "7.0.2", + "@typescript/typescript-linux-x64": "7.0.2", + "@typescript/typescript-netbsd-arm64": "7.0.2", + "@typescript/typescript-netbsd-x64": "7.0.2", + "@typescript/typescript-openbsd-arm64": "7.0.2", + "@typescript/typescript-openbsd-x64": "7.0.2", + "@typescript/typescript-sunos-x64": "7.0.2", + "@typescript/typescript-win32-arm64": "7.0.2", + "@typescript/typescript-win32-x64": "7.0.2" + } + }, + "node_modules/undici": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-8.11.2.tgz", + "integrity": "sha512-u4UB2/IrKdU6lFxumHmmo1a3fCQO5tzQllRorfoRS63txhrB7xTpSn1PftwC4qEHkOaqP95fCWW4lJzwErwzhQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=22.19.0" } }, "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", + "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", + "dev": true, "license": "MIT" }, "node_modules/unpipe": { @@ -1231,30 +3573,90 @@ "node": ">= 0.8" } }, - "node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "node_modules/vite": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.2.tgz", + "integrity": "sha512-SQr1x6W5vVSbROg7vsyXIaxK9b0G7zsT68acdWWRmnBUsgDieLCRG+Rep9WdZgcposvv/GSnr4GUUBqB3vXq6w==", + "dev": true, "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.7", + "postcss": "^8.5.28", + "rolldown": "~1.2.11", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, "engines": { - "node": ">= 14" + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.7.1", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "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/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } + "node_modules/when-exit": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.5.tgz", + "integrity": "sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==", + "dev": true, + "license": "MIT" }, "node_modules/which": { "version": "2.0.2", @@ -1271,28 +3673,141 @@ "node": ">= 8" } }, + "node_modules/widest-line": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-6.0.0.tgz", + "integrity": "sha512-U89AsyEeAsyoF0zVJBkG9zBgekjgjK7yk9sje3F4IQpXBJ10TF6ByLlIfjMhcmHMJgHZI4KHt4rdNfktzxIAMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^8.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "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/wrap-ansi/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "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/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, + "node_modules/ws": { + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.22.0.tgz", + "integrity": "sha512-Ydggc987+RO0AnWtZ/7Wq9FtNvcrL1b/RO0ud9mWjUPgDrsAAwQSF51sm2hm1XofbU/4jkpGEsLFsZZxU+1DOg==", + "devOptional": 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/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yaml": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.1.tgz", + "integrity": "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yoga-layout": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/yoga-layout/-/yoga-layout-3.2.1.tgz", + "integrity": "sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==", + "dev": true, + "license": "MIT" + }, "node_modules/zod": { - "version": "3.24.2", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", - "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.5.tgz", + "integrity": "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } }, "node_modules/zod-to-json-schema": { - "version": "3.24.5", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", - "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", "license": "ISC", "peerDependencies": { - "zod": "^3.24.1" + "zod": "^3.25.28 || ^4" } } } diff --git a/lessons/07-mcp/code/package.json b/lessons/07-mcp/code/package.json index 89a1c407..7ad6ab78 100644 --- a/lessons/07-mcp/code/package.json +++ b/lessons/07-mcp/code/package.json @@ -1,21 +1,26 @@ { "type": "module", "bin": { - "sample-server": "./build/index.js" + "sample-server": "./build/index.js" }, "scripts": { - "build": "tsc && node build/index.js", - "client": "node build/client.js" + "build": "tsc", + "start": "node build/index.js", + "client": "npm run build && node --env-file-if-exists=../../../.env build/client.js", + "inspect": "npm run build && mcp-inspector --cli node build/index.js --method tools/list", + "inspect:web": "npm run build && mcp-inspector --web node build/index.js" }, "files": [ - "build" + "build" ], "dependencies": { - "@modelcontextprotocol/sdk": "^1.8.0", - "openai": "^4.91.1" + "@modelcontextprotocol/sdk": "^1.32.1", + "openai": "^7.28.0", + "zod": "^4.6.5" }, "devDependencies": { - "@types/node": "^22.13.17", - "typescript": "^5.8.2" + "@modelcontextprotocol/inspector": "^2.9.0", + "@types/node": "^24.19.1", + "typescript": "^7.0.2" } - } +} diff --git a/lessons/07-mcp/code/src/client.ts b/lessons/07-mcp/code/src/client.ts index 9c8a5bda..491a9c76 100644 --- a/lessons/07-mcp/code/src/client.ts +++ b/lessons/07-mcp/code/src/client.ts @@ -1,184 +1,67 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js"; -import { CallToolRequest, CallToolResultSchema } from "@modelcontextprotocol/sdk/types.js"; import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"; -import { OpenAI } from 'openai'; +import { CallToolResultSchema } from "@modelcontextprotocol/sdk/types.js"; +import { fileURLToPath } from "node:url"; +import { OpenAI } from "openai"; import { z } from "zod"; -type ChatCompletionMessageParam = { - role: "system" | "user" | "assistant"; - content: string; - name?: string; - function_call?: { - name: string; - arguments: string; - }; -}; - -const transport = new StdioClientTransport({ - command: "node", - args: ["build/index.js"] -}); - -const client = new Client( - { - name: "example-client", - version: "1.0.0" - } -); - -await client.connect(transport); - -function toToolSchema(method, schema) { - return { - name: method, - description: `This is a tool that does ${method}`, - parameters: schema, - }; -} - -// list tools -const { tools } = await client.listTools(); -tools.forEach((tool) => { - console.log(`Tool: ${tool.name}`); - console.log(`Description: ${tool.description}`); - console.log(`Input schema: ${JSON.stringify(tool.inputSchema)}`); +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); } -); - -const toolsForLLM = tools.map((tool) => { - return toToolSchema(tool.name, tool.inputSchema); -}); -console.log("Schema for tool", JSON.stringify(toolsForLLM, null, 2)); - -// TODO feed this to an llm as functions - -const openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", // might need to change to this url in the future: https://models.github.ai/inference - apiKey: process.env.GITHUB_TOKEN, -}); - -const messages: ChatCompletionMessageParam[] = [ - { - role: "system", - content: `You are a helpful assistant. You can call functions to perform tasks. Make sure to parse the function call and arguments correctly.` - }, { - role: "user", - content: "Add 5 and 10", - name: "example-user" // Adding the required 'name' property for user role - } -]; - -openai.chat.completions.create({ - model: 'gpt-4o', - messages: messages, - functions: toolsForLLM -}).then((result) => { - console.log("Result", result.choices[0].message); -}).catch((error) => { - console.error("Error:", error); -}) - -const result = await openai.chat.completions.create({ - model: 'gpt-4o', - messages: messages, - functions: toolsForLLM +const openai = new OpenAI({ baseURL: endpoint, apiKey, timeout: 60000 }); +const client = new Client({ name: "example-client", version: "1.0.0" }); +const transport = new StdioClientTransport({ + command: process.execPath, + args: [fileURLToPath(new URL("./index.js", import.meta.url))] }); -for (const choice of result.choices) { - // console.log("Result", choice.message); - - let functionCall = choice.message?.function_call; - let functionName = functionCall?.name; - console.log("Function call: ", functionName); - let args = functionCall?.arguments; - - - // ALT1 - // 1. create a request - const request: CallToolRequest = { - method: "tools/call", - params: { - name: functionName ?? "", - arguments: args - } - }; - - function createRequest(name: string, args: any): CallToolRequest { - return { - method: "tools/call", - params: { - name, - arguments: args - } - }; - } - - function callTool>(name: string, args: any, schema: T): Promise> { - let request = createRequest(name ?? "", args); - - return client.request( - request, - schema - ); +try { + await client.connect(transport); + const { tools: serverTools } = await client.listTools(); + const allowedNames = new Set(serverTools.map(tool => tool.name)); + const tools: OpenAI.Chat.Completions.ChatCompletionTool[] = serverTools.map(tool => ({ + type: "function", + function: { + name: tool.name, + description: tool.description, + parameters: tool.inputSchema } - - callTool("add", args, CallToolResultSchema).then((result) => { - console.log("Result from tool: ", result.content[0].text); - return result; // Ensure the callback returns the result - }); - - // 2. make the request and cast the result to the correct type - client.request(request, CallToolResultSchema).then((result) => { - console.log("Result from tool: ", result.content[0].text); - }); - - // ALT2 - await client.callTool({ - name: functionName ?? "", - arguments: typeof args === "string" ? JSON.parse(args) : args ?? {} - }).then((result) => { - const toolResult = result as z.infer; - - console.log("Converted Result from tool: ", toolResult.content[0].text); - }) - - - - - - const AddRequest = { - name: "add", - arguments: { - a: 1, - b: 2 + })); + console.log("Available tools:", [...allowedNames]); + const messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = [ + { role: "user", content: "Use the add tool to add 5 and 10." } + ]; + const completion = await openai.chat.completions.create({ + model, messages, tools, tool_choice: "required" + }); + const message = completion.choices[0]?.message; + if (!message?.tool_calls?.length) throw new Error("The model did not request a tool."); + messages.push(message); + for (const call of message.tool_calls) { + if (call.type !== "function" || !allowedNames.has(call.function.name)) { + throw new Error("The model requested an unsupported MCP tool."); } - }; - - // Alt 3, request schema AND reply schema - await client.callTool(AddRequest, CallToolResultSchema) - .then((result) => { - console.log("Result from tool: ", result.content[0].text); + const args = z.record(z.string(), z.unknown()).parse(JSON.parse(call.function.arguments)); + const result = CallToolResultSchema.parse(await client.callTool({ + name: call.function.name, + arguments: args + })); + const text = result.content.filter(item => item.type === "text").map(item => item.text).join("\n"); + if (result.isError) throw new Error(`MCP tool failed: ${text}`); + if (!text) throw new Error("The MCP tool did not return text."); + console.log("Result from tool:", text); + messages.push({ role: "tool", tool_call_id: call.id, content: text }); + } + const followUp = await openai.chat.completions.create({ + model, messages, tools, tool_choice: "none" }); - - - // await client.callTool({ - // name: functionName?? "", - // arguments: typeof args === "string" ? JSON.parse(args) : args ?? {} - // }, CallToolResultSchema ).then((result) => { - // console.log("Result from tool: ", result); - // // TODO: figure out how to cast result to the correct type, i.e { content: [ { type: 'string', text: 'string' } ] } - // // Result from tool: { content: [ { type: 'text', text: '15' } ] }; - // }); + const answer = followUp.choices[0]?.message?.content; + if (!answer?.trim()) throw new Error("The model did not return a final answer."); + console.log(answer); +} finally { + await client.close(); } - - -// call tool -// const result = await client.callTool({ -// name: "add", -// arguments: { -// a: 5, -// b: 10 -// } -// }); -// console.log(`Result: ${JSON.stringify(result)}`); diff --git a/lessons/07-mcp/code/src/index-with-llm.ts b/lessons/07-mcp/code/src/index-with-llm.ts deleted file mode 100644 index 6ac111eb..00000000 --- a/lessons/07-mcp/code/src/index-with-llm.ts +++ /dev/null @@ -1 +0,0 @@ -git s \ No newline at end of file diff --git a/lessons/07-mcp/code/src/index.ts b/lessons/07-mcp/code/src/index.ts index 6e0a6381..3239cb61 100644 --- a/lessons/07-mcp/code/src/index.ts +++ b/lessons/07-mcp/code/src/index.ts @@ -1,54 +1,24 @@ -// simple mc server - import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; -// Create an MCP server -const server = new McpServer({ - name: "Demo", - version: "1.0.0" -}); - -// Add an addition tool -// @ts-ignore -server.tool( - "add", - { - input: z.object({ - a: z.number(), - b: z.number() - }), - output: z.object({ - content: z.array(z.object({ type: z.string(), text: z.string() })) - }) - }, - async ({ input }) => ({ - content: [{ type: "text", text: String(input.a + input.b) }] - }) -); +const server = new McpServer({ name: "Demo", version: "1.0.0" }); +server.registerTool("add", { + description: "Add two numbers", + inputSchema: { a: z.number(), b: z.number() } +}, async ({ a, b }) => ({ + content: [{ type: "text", text: String(a + b) }] +})); -// Add a dynamic greeting resource -server.resource( - "greeting", +server.registerResource("greeting", new ResourceTemplate("greeting://{name}", { list: undefined }), + { description: "Greet a named person", mimeType: "text/plain" }, async (uri, { name }) => ({ - contents: [{ - uri: uri.href, - text: `Hello, ${name}!` - }] + contents: [{ uri: uri.href, text: `Hello, ${name}!` }] }) ); -// Start receiving messages on stdin and sending messages on stdout -const transport = new StdioServerTransport(); - -async function runServer() { - await server.connect(transport); -} - -runServer().catch((err) => { - console.error("Error in server:", err); - process.exit(1); +server.connect(new StdioServerTransport()).catch(error => { + console.error("Error in server:", error instanceof Error ? error.message : String(error)); + process.exitCode = 1; }); - diff --git a/lessons/07-mcp/code/tsconfig.json b/lessons/07-mcp/code/tsconfig.json index ce7b85bc..a2c65a93 100644 --- a/lessons/07-mcp/code/tsconfig.json +++ b/lessons/07-mcp/code/tsconfig.json @@ -1,15 +1,15 @@ { "compilerOptions": { "target": "ES2022", - "module": "Node16", - "moduleResolution": "Node16", + "module": "NodeNext", + "moduleResolution": "NodeNext", "outDir": "./build", "rootDir": "./src", "strict": true, + "types": ["node"], "esModuleInterop": true, "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "noImplicitAny": false + "forceConsistentCasingInFileNames": true }, "include": ["src/**/*"], "exclude": ["node_modules"] diff --git a/lessons/07-mcp/solution/build/client.js b/lessons/07-mcp/solution/build/client.js index 9dc0d422..8c57552a 100644 --- a/lessons/07-mcp/solution/build/client.js +++ b/lessons/07-mcp/solution/build/client.js @@ -1,24 +1,19 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"; +import { fileURLToPath } from "node:url"; +const client = new Client({ name: "example-client", version: "1.0.0" }); const transport = new StdioClientTransport({ - command: "node", - args: ["build/index.js"] + command: process.execPath, + args: [fileURLToPath(new URL("./index.js", import.meta.url))] }); -const client = new Client({ - name: "example-client", - version: "1.0.0" -}); -await client.connect(transport); -// List resources -const resources = await client.listResources(); -console.log("Available resources:", resources); -// read a resource -let resource = await client.readResource({ - uri: "scrolls://tactics.txt", -}); -console.log("Resource contents:", resource.contents); -// Read a resource -resource = await client.readResource({ - uri: "echo://hello", -}); -console.log("Resource contents:", resource.contents); +try { + await client.connect(transport); + console.log("Available resources:", await client.listResources()); + const scroll = await client.readResource({ uri: "scrolls://tactics.txt" }); + console.log("Resource contents:", scroll.contents); + const echo = await client.readResource({ uri: "echo://hello" }); + console.log("Resource contents:", echo.contents); +} +finally { + await client.close(); +} diff --git a/lessons/07-mcp/solution/build/index.js b/lessons/07-mcp/solution/build/index.js index abadf4f4..53481539 100644 --- a/lessons/07-mcp/solution/build/index.js +++ b/lessons/07-mcp/solution/build/index.js @@ -1,82 +1,41 @@ import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; -import { promises as fs } from "fs"; -import path from "path"; -// Create an MCP server -const server = new McpServer({ - name: "Demo", - version: "1.0.0" +import { readdir, readFile } from "node:fs/promises"; +import { fileURLToPath } from "node:url"; +const server = new McpServer({ name: "Demo", version: "1.0.0" }); +const inputSchema = { a: z.number(), b: z.number() }; +server.registerTool("add", { description: "Add two numbers", inputSchema }, async ({ a, b }) => ({ content: [{ type: "text", text: String(a + b) }] })); +server.registerTool("subtract", { description: "Subtract two numbers", inputSchema }, async ({ a, b }) => ({ content: [{ type: "text", text: String(a - b) }] })); +server.registerTool("multiply", { description: "Multiply two numbers", inputSchema }, async ({ a, b }) => ({ content: [{ type: "text", text: String(a * b) }] })); +server.registerTool("divide", { description: "Divide two numbers", inputSchema }, async ({ a, b }) => { + if (b === 0) { + return { isError: true, content: [{ type: "text", text: "Cannot divide by zero." }] }; + } + return { content: [{ type: "text", text: String(a / b) }] }; }); -// Add an addition tool -server.tool("add", { a: z.number(), b: z.number() }, async ({ a, b }) => ({ - content: [{ type: "text", text: String(a + b) }] -})); -server.tool("subtract", { a: z.number(), b: z.number() }, async ({ a, b }) => ({ - content: [{ type: "text", text: String(a - b) }] -})); -server.tool("divide", { a: z.number(), b: z.number() }, async ({ a, b }) => ({ - content: [{ type: "text", text: String(a / b) }] +server.registerResource("echo", new ResourceTemplate("echo://{message}", { + list: async () => ({ + resources: [{ name: "echo", description: "Echo a message", mimeType: "text/plain", uri: "echo://hello" }] + }) +}), { description: "Echo a message", mimeType: "text/plain" }, async (uri, { message }) => ({ + contents: [{ uri: uri.href, text: `Resource echo: ${message}` }] })); -server.tool("multiply", { a: z.number(), b: z.number() }, async ({ a, b }) => ({ - content: [{ type: "text", text: String(a * b) }] -})); -server.resource("echo", new ResourceTemplate("echo://{message}", { list: () => { - return { - resources: [ - { - "name": "echo", - "description": "Echo a message", - "mimeType": "text/plain", - "uri": "echo://{message}" - } - ] - }; - } }), async (uri, { message }) => ({ - contents: [{ - uri: uri.href, - text: `Resource echo: ${message}` - }] -})); -// Add a dynamic greeting resource -server.resource("scrolls", new ResourceTemplate("scrolls://{name}", { list: () => { - return { - resources: [ - { - "name": "scrolls", - "description": "Scrolls resource", - "mimeType": "text/plain", - "uri": "scrolls://{name}" - } - ] - }; - } }), async (uri, { name }) => { - // open file to check if it exist - let fileContent; - let filePath = path.join(process.cwd(), "scrolls", `${name}`); - try { - console.log("File path: ", filePath); - fileContent = await fs.readFile(filePath, "utf-8"); - } - catch (err) { - fileContent = `File ${name} not found in ${filePath}`; - console.error(fileContent); +const scrollsDirectory = new URL("../scrolls/", import.meta.url); +server.registerResource("scrolls", new ResourceTemplate("scrolls://{name}", { + list: async () => ({ + resources: (await readdir(scrollsDirectory)).filter(name => name.endsWith(".txt")).map(name => ({ + name, description: "A course scroll", mimeType: "text/plain", uri: `scrolls://${encodeURIComponent(name)}` + })) + }) +}), { description: "Read a course scroll", mimeType: "text/plain" }, async (uri, { name }) => { + if (typeof name !== "string" || !/^[a-zA-Z0-9_-]+\.txt$/.test(name)) { + throw new Error("Select a named .txt scroll from the resource list."); } - // response with file content - return { - contents: [{ - uri: uri.href, - text: fileContent - }] - }; + const text = await readFile(fileURLToPath(new URL(name, scrollsDirectory)), "utf8"); + return { contents: [{ uri: uri.href, text }] }; }); -// Start receiving messages on stdin and sending messages on stdout -async function main() { - const transport = new StdioServerTransport(); - await server.connect(transport); - console.error("MCPServer started on stdin/stdout"); -} -main().catch((error) => { - console.error("Fatal error: ", error); - process.exit(1); +server.connect(new StdioServerTransport()).catch(error => { + console.error("Error in server:", error instanceof Error ? error.message : String(error)); + process.exitCode = 1; }); diff --git a/lessons/07-mcp/solution/package-lock.json b/lessons/07-mcp/solution/package-lock.json index 01a32424..933e8210 100644 --- a/lessons/07-mcp/solution/package-lock.json +++ b/lessons/07-mcp/solution/package-lock.json @@ -5,81 +5,1273 @@ "packages": { "": { "dependencies": { - "@modelcontextprotocol/sdk": "^1.8.0", - "express": "^5.0.1", - "type": "^2.7.3", - "zod": "^3.24.2" + "@modelcontextprotocol/sdk": "^1.32.1", + "zod": "^4.6.5" }, "bin": { "weather": "build/index.js" }, "devDependencies": { - "@types/node": "^22.13.17", - "typescript": "^5.8.2" + "@modelcontextprotocol/inspector": "^2.9.0", + "@types/node": "^24.19.1", + "typescript": "^7.0.2" + } + }, + "node_modules/@alcalzone/ansi-tokenize": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@alcalzone/ansi-tokenize/-/ansi-tokenize-0.2.5.tgz", + "integrity": "sha512-3NX/MpTdroi0aKz134A6RC2Gb2iXVECN4QaAXnvCIxxIm3C3AVB1mkUe8NaaiyvOpDfsrqWhYtj+Q6a62RrTsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@hono/node-server": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.1.3.tgz", + "integrity": "sha512-TA//nWMqPhbfdfneACk6t5a9eqbS9lABEPyKn0/xZTah3H3U2XaVg85rJFl0/Fyit0I552YDHgXGVSf3GwqbUw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@modelcontextprotocol/client": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/client/-/client-2.2.0.tgz", + "integrity": "sha512-LxCou/CSYQ6dwEnjhLZY0KnEuc8V4UJ3IEQCl/uR2yHobSQIEdJKUlKLRYRF5i5FqRGHy1eK7une3aAWDHLtig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@modelcontextprotocol/core": "2.2.0", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "jose": "^6.1.3", + "pkce-challenge": "^5.0.0", + "zod": "^4.2.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@modelcontextprotocol/core": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/core/-/core-2.2.0.tgz", + "integrity": "sha512-iLhmprRmWI8EcosOA3wVvww22z02NkgqhV4fBH6f/odQBsi7xnJc0HGmi21yWO+/iKw2yzqVE127Zhna5/+JXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "zod": "^4.2.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@modelcontextprotocol/ext-apps": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/ext-apps/-/ext-apps-2.0.3.tgz", + "integrity": "sha512-Tn+4+cyhO4f4cQSDxNyLiIfEE+qlTTuIbWBJB8JTinEXOhDYgCT4wDTQplxD9MBYZH5pCYGC59GaxiwIT4bu8w==", + "dev": true, + "license": "MIT", + "workspaces": [ + "examples/*" + ], + "dependencies": { + "@standard-schema/spec": "^1.1.0" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@modelcontextprotocol/client": "^2.0.0", + "@modelcontextprotocol/core": "^2.0.0", + "@modelcontextprotocol/server": "^2.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0", + "zod": "^4.2.0" + }, + "peerDependenciesMeta": { + "@modelcontextprotocol/server": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@modelcontextprotocol/inspector": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/inspector/-/inspector-2.9.0.tgz", + "integrity": "sha512-77VWBmsA18jdxQ1vqbu8SNRSC2h5uBHyUq6wTmlqEDeVIST7YEVta0OyFCDf/6VSQKbZ3ia7Qb+9bZtlTcB+tw==", + "dev": true, + "hasInstallScript": true, + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "@hono/node-server": "^2.0.12", + "@modelcontextprotocol/client": "2.2.0", + "@modelcontextprotocol/core": "2.2.0", + "@modelcontextprotocol/ext-apps": "^2.0.0", + "@modelcontextprotocol/server": "2.2.0", + "@napi-rs/keyring": "^1.3.0", + "@vitejs/plugin-react": "^6.0.0", + "ajv": "^8.17.1", + "atomically": "^2.1.1", + "chokidar": "^4.0.3", + "commander": "^13.1.0", + "hono": "^4.13.7", + "ink": "^6.0.0", + "open": "^10.2.0", + "pino": "^9.14.0", + "proper-lockfile": "^4.1.2", + "react": "^19.0.0", + "undici": "^8.11.2", + "vite": "^8.1.5", + "yaml": "^2.9.0", + "zod": "^4.4.3" + }, + "bin": { + "mcp-inspector": "clients/launcher/build/index.js" + }, + "engines": { + "node": ">=22.19.0" } }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.10.2.tgz", - "integrity": "sha512-rb6AMp2DR4SN+kc6L1ta2NCpApyA9WYNx3CrTSZvGxq9wH71bRur+zRqPfg0vQ9mjywR7qZdX2RGHOPq3ss+tA==", + "version": "1.32.1", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.32.1.tgz", + "integrity": "sha512-2DdE+SJDtzLEEWzY1ZjY7Q+VcPhcV1KisD3zI4u0XZyktsjHum1mwbMI+JaulUBi2OZk+KJAi2uPXzxichPkdw==", + "license": "MIT", + "dependencies": { + "@hono/node-server": "^1.19.9 || ^2.0.5", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "content-type": "^1.0.5", + "cors": "^2.8.5", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", + "pkce-challenge": "^5.0.0", + "raw-body": "^3.0.0", + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" + }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@modelcontextprotocol/server": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/server/-/server-2.2.0.tgz", + "integrity": "sha512-qFnltjus6Gk8Lx6J1w2RXmr3YPN22MNT6qD6zjAkaiWIlFIFxWClz0rXHNuJF/KSUyn5YGhkSvXkWDbQHVLFEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@modelcontextprotocol/core": "2.2.0", + "zod": "^4.2.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@napi-rs/keyring": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring/-/keyring-1.3.0.tgz", + "integrity": "sha512-WrOw/bcXm0f9qHkumlT1QlArXSTWqaY9sunsDpOk+yCCorCKMxvWT/a3xko4EYHVdeZoh00yI2TydXn6eyICDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/keyring-darwin-arm64": "1.3.0", + "@napi-rs/keyring-darwin-x64": "1.3.0", + "@napi-rs/keyring-freebsd-x64": "1.3.0", + "@napi-rs/keyring-linux-arm-gnueabihf": "1.3.0", + "@napi-rs/keyring-linux-arm64-gnu": "1.3.0", + "@napi-rs/keyring-linux-arm64-musl": "1.3.0", + "@napi-rs/keyring-linux-riscv64-gnu": "1.3.0", + "@napi-rs/keyring-linux-x64-gnu": "1.3.0", + "@napi-rs/keyring-linux-x64-musl": "1.3.0", + "@napi-rs/keyring-win32-arm64-msvc": "1.3.0", + "@napi-rs/keyring-win32-ia32-msvc": "1.3.0", + "@napi-rs/keyring-win32-x64-msvc": "1.3.0" + } + }, + "node_modules/@napi-rs/keyring-darwin-arm64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-arm64/-/keyring-darwin-arm64-1.3.0.tgz", + "integrity": "sha512-pl76hJvdYUBn6I24bXiOBMA9nbDapo3I5B+f3OorjDU4dUMSypXeKbOVehJe8fhgTiH24flMyTS3aAIy43xegQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-darwin-x64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-x64/-/keyring-darwin-x64-1.3.0.tgz", + "integrity": "sha512-YcJtEV5LA3cvA4z3BurgxH5IhTsW1JfIvcAAcqcecwk06Si9F9NqkxbZVIfDwQ8oRHgaBmT3zZJnLAotCrVahw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-freebsd-x64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-freebsd-x64/-/keyring-freebsd-x64-1.3.0.tgz", + "integrity": "sha512-vlLf31TGhfRAaxLDBhg8b89ss0HHD/lyNmL5F3UjSaz5CUXElsJmKYq9fqA/B+cZKUEUcLHHGhF0I/CqcFdaVw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-arm-gnueabihf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm-gnueabihf/-/keyring-linux-arm-gnueabihf-1.3.0.tgz", + "integrity": "sha512-KiWdMMu/Inz/bHHIAGrnF7r54FZDYXuHO6UFF/rhIrshUsxbMG1Rl9lEymNtqqsVo927G0VYcb02FzWQ3iBQRQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-arm64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-gnu/-/keyring-linux-arm64-gnu-1.3.0.tgz", + "integrity": "sha512-eyKGpY40lm9Jvs1aD294XRH4y7+TlJM0YVAryZeXA6TX0mb4gMkxVXwSQv7MCwgah7raeUd0dKUb4BPAYIgcMg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-arm64-musl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-musl/-/keyring-linux-arm64-musl-1.3.0.tgz", + "integrity": "sha512-iIK6JWHXAJqDrEyLY3TmswwloVyt2vj+04TZnew+uSJ9gnDO8EwRbp3/iw3LpWaXiDO7VomGO6y8I0Id8uBZSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-riscv64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-riscv64-gnu/-/keyring-linux-riscv64-gnu-1.3.0.tgz", + "integrity": "sha512-/PGqrwn6EwgtK6vccASSXJRfOSP4vN1F4ASsIQ+7MdrK6hNvAJ1FZPrIuD5gGGdxezo3F++To2Wq7DbuGIeuNQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-x64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-gnu/-/keyring-linux-x64-gnu-1.3.0.tgz", + "integrity": "sha512-2PDK1WKWTu9lBGq9VvNEkSlQD3O7YwVpmnyN2M3cy4v7NJ/8gDMd9GXv3G+FVXN13uhp4gnnPBS+ScefmEeD2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-x64-musl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-musl/-/keyring-linux-x64-musl-1.3.0.tgz", + "integrity": "sha512-oJ2HkX8YUo46QBkn0pG+HuIKQNqr523q6vBobCn+P95s4C4K6/kLBqHY/1bg5J4ap31DzsznhnFKcfBNBsjCnw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-win32-arm64-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-arm64-msvc/-/keyring-win32-arm64-msvc-1.3.0.tgz", + "integrity": "sha512-tOd3c/uAaeoE4ycVlmAdSvygz0Zt3zdca6Y7gokBeIbaRDWpjDIUOpU3MvML59XAaqyuKGsVVu0F/DZb1lHPmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-win32-ia32-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-ia32-msvc/-/keyring-win32-ia32-msvc-1.3.0.tgz", + "integrity": "sha512-sPSqeAFZMGqP1R++M2JTza7GQJJ/TpCo6JU6Vcd4jnebvOaEDs9b7eipakU1PJdSvhpC2yXMCNRk9gXfrhuwHQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-win32-x64-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-x64-msvc/-/keyring-win32-x64-msvc-1.3.0.tgz", + "integrity": "sha512-4DnCWXwDc0HRKwyRlG5y0VhKZW2tNRQfKKfyj6IX/KWfDNyq9hn4n+GL1auyDcOO/v8PwnhmYo2+rOOqCkvvOg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.152.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.152.0.tgz", + "integrity": "sha512-oM/5rLBm2tPkg0iBgkH/FOeR3PCDpY19GTgAZjMFM8h9WI9VW7cLgzp6nwtarYKmovavIQZ+Fe/RKX/8C8O/Rw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/oxc-project" + } + }, + "node_modules/@pinojs/redact": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.12.tgz", + "integrity": "sha512-dB/a1214qKfHMXCpgqR4OZT+jS4kTyEXbQGJPqzobt5EwH5rX080pxE37alt3RzvR1bf1Yz/yGqRfrYAxuPw0A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.12.tgz", + "integrity": "sha512-7KHFgQ5VJxIHcLlrwrc3Xbds7oTNQT7Pgi9gQCJKrd2VGab/UksIOYp6VD8MzCstGxOKMgNamPwUCfxPdP1OHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.12.tgz", + "integrity": "sha512-3YIhqHD96nA5SaYNRBR16HnGv4oavZvXfD/ayHM+oYZ0WD/8lBAtf6zQua4kEyAvpqrluKXl0lnOBoiNby7x9w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.12.tgz", + "integrity": "sha512-UuuJ35MFw4gmFOrE9pEqIV+K3syIKveph+Qc1/ljHZVdoDW4pz/JHR/eMVom+TZGl/5OOvGJOWaOCVt3ZfqhxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.12.tgz", + "integrity": "sha512-uMvssit0a4W+/7D8CbHUvG719mH3R2jwXAlh/XcPvuHTE0g++LymF88DCGNX0HM2rBOn0xrzgXktIB6fLSJBTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.12.tgz", + "integrity": "sha512-XcFu0R0xWnwzSf4IQgFH1rJIckPN1pLy2R+4r9IDB7Yfu/ys9cVqfa4pBrMHj7a3gl8mIR4nRNPg0e5IvEVs6g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.12.tgz", + "integrity": "sha512-260UrKgn8tz39ak+SMDOirKzr7V04M9dWPw5llW00SwBivCZoWcRBKV1d8cXnRkUmSZA3BdiUmBHWk7734Ulpw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.12.tgz", + "integrity": "sha512-5YK1I9SqDkbPgc1IA8BgDl34suqUS2q0KWnBrirm0E51YjOs6eo6dV6jbQfNE/argHRSvd0QUGgtpIoYx+WWpw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.12.tgz", + "integrity": "sha512-Rkcrmp7eFRg74yL5fXEU91JEWbdEPLevWwGtXpmhbjlD1StScbWTmO94Bhly+Mo+ketKYkdmM1vNUKeWSlx8cQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.12.tgz", + "integrity": "sha512-qvK4DuAsQc2BSjlx+Xr+IzOIvvxbGZqxFwdWfG6F518Erj0GGISyQbJ6pIappnOxlNPzNHvo/L0BwB30GZ+zVw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.12.tgz", + "integrity": "sha512-Q9uLBO53Xd4QIq1WOycVQyPP1O4HhraEV2qqb3uTrnVw6QZih9duY4vNXOivL1xoUS1/z+W8eF4NMfl2a8Sdjw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.12.tgz", + "integrity": "sha512-3IBxWFMjbOZskDPKv8Lf9BCnahlKuHthWkYnyIxOH/QcJrFcS4EmcenthApkwr/5+nEqZlLzeYbxeMaX7A5u4g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.12.tgz", + "integrity": "sha512-xtX61xg4LKPkPWilZU1ynKClz5Gj4bf74LML4r3eVLWumKnGjoEr1OSHQhMdbBDoYTi+yjrujvpZe2pUnqCrrA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.12.tgz", + "integrity": "sha512-At7fPB6PCaIjzgIhEZFxuT+BBFqiQibJDT4d3PhiR3f4E7bbMZF4aKblbFfEM3sETRDd1YiQx/+U/g/B/ou5Ew==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.12.tgz", + "integrity": "sha512-WIw2haVKwjuYdXkHaoC0mF8Le71TuCBxjrdKqLbJGctbBABj+ClfmNvtbOnzpq3RokNo5+V1qhtSzJyXorsklQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.19.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.19.1.tgz", + "integrity": "sha512-aS3/DG0oM05K0RIXXP+hKjinGG5IgSSVGzswZxW3O0sS3pH4/fycXundUC9XsszgKCk4gHXylTEK6hyFxVxnoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": ">=7.24.0 <7.24.7" + } + }, + "node_modules/@typescript/typescript-aix-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz", + "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz", + "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz", + "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz", + "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz", + "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz", + "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz", + "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-loong64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz", + "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-mips64el": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz", + "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz", + "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-riscv64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz", + "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-s390x": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz", + "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz", + "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz", + "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz", + "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-openbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz", + "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-openbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz", + "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-sunos-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz", + "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-win32-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz", + "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-win32-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz", + "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.2.tgz", + "integrity": "sha512-fhJNGUdscQa4HkI0xFxwonWyhnVReCPDbXI7FH7jmzpnVCrFQI7PRrhWecO263610vOrs9tr2Y4xcf8uAdFxbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "oxc-transform-react": "^0.152.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "oxc-transform-react": { + "optional": true + } + } + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", "license": "MIT", "dependencies": { - "content-type": "^1.0.5", - "cors": "^2.8.5", - "cross-spawn": "^7.0.3", - "eventsource": "^3.0.2", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", - "pkce-challenge": "^5.0.0", - "raw-body": "^3.0.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.24.1" + "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", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "environment": "^1.0.0" }, "engines": { "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/node": { - "version": "22.15.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.3.tgz", - "integrity": "sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==", + "node_modules/ansi-regex": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.4.0.tgz", + "integrity": "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==", "dev": true, "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=8.0.0" + } + }, + "node_modules/atomically": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.1.tgz", + "integrity": "sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "stubborn-fs": "^2.0.0", + "when-exit": "^2.1.4" + } + }, + "node_modules/auto-bind": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-5.0.1.tgz", + "integrity": "sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.0", - "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", + "content-type": "^2.0.0", + "debug": "^4.4.3", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", "on-finished": "^2.4.1", - "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/bundle-name": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.1.tgz", + "integrity": "sha512-DdH81/zPLVS11EUgWq3tEu/xn+EzljlMYooDNdzWEnFha3R3NBMpMV1UqYIpjYHV/SgpFKMIX1Oh7o06SjM/oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" }, "engines": { "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bytes": { @@ -120,16 +1312,115 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/content-disposition": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "5.2.1" + "readdirp": "^4.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", + "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^8.0.0", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/code-excerpt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", + "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "convert-to-spaces": "^2.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/content-type": { @@ -141,6 +1432,16 @@ "node": ">= 0.6" } }, + "node_modules/convert-to-spaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", + "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/cookie": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", @@ -187,9 +1488,9 @@ } }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -203,6 +1504,49 @@ } } }, + "node_modules/default-browser": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.1.tgz", + "integrity": "sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw==", + "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.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -212,6 +1556,16 @@ "node": ">= 0.8" } }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -232,6 +1586,13 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", @@ -241,6 +1602,19 @@ "node": ">= 0.8" } }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -260,9 +1634,9 @@ } }, "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -271,12 +1645,35 @@ "node": ">= 0.4" } }, + "node_modules/es-toolkit": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.52.0.tgz", + "integrity": "sha512-XTNEJQh1tY1ZJVcf6ayP/2n4ZPyaHlW2FWs7xvw5ddPuhUVjLD3olQVQS7kf58JbAB48iL0uL/jerTrjtV3lDA==", + "dev": true, + "license": "MIT", + "workspaces": [ + "docs", + "benchmarks", + "tests/types", + "tests/browser-compat" + ] + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -308,18 +1705,19 @@ } }, "node_modules/express": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", "dependencies": { "accepts": "^2.0.0", - "body-parser": "^2.2.0", + "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", + "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", @@ -349,25 +1747,69 @@ "url": "https://opencollective.com/express" } }, - "node_modules/express-rate-limit": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", - "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", + "node_modules/express-rate-limit": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.7.0.tgz", + "integrity": "sha512-hOwV7WOxXfjRpAM1DSJWZDXx3GhplwD8IfwuwvogD8i1Qnkgosw/H45s4ZnFAUHDAhPjlY9hLBvJhKmGMyY26g==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "ip-address": "^10.2.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz", + "integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/express-rate-limit" + "node": ">=12.0.0" }, "peerDependencies": { - "express": "^4.11 || 5 || ^5.0.0-beta.1" + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, "node_modules/finalhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -378,7 +1820,11 @@ "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/forwarded": { @@ -399,6 +1845,21 @@ "node": ">= 0.8" } }, + "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, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -408,6 +1869,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-east-asian-width": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.7.0.tgz", + "integrity": "sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-intrinsic": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", @@ -457,6 +1931,13 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -470,9 +1951,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -481,32 +1962,62 @@ "node": ">= 0.4" } }, + "node_modules/hono": { + "version": "4.13.13", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.13.tgz", + "integrity": "sha512-CQ46U0ZkAGmbT/4UxdzzGJpacP2IeKgY4a5/tOI9AABbpOMfK739wfDXmv1usCk+3RkKj1hQy4/fjhiwa2xlrA==", + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/inherits": { @@ -515,6 +2026,65 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, + "node_modules/ink": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/ink/-/ink-6.8.0.tgz", + "integrity": "sha512-sbl1RdLOgkO9isK42WCZlJCFN9hb++sX9dsklOvfd1YQ3bQ2AiFu12Q6tFlr0HvEUvzraJntQCCpfEoUe9DSzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alcalzone/ansi-tokenize": "^0.2.4", + "ansi-escapes": "^7.3.0", + "ansi-styles": "^6.2.1", + "auto-bind": "^5.0.1", + "chalk": "^5.6.0", + "cli-boxes": "^3.0.0", + "cli-cursor": "^4.0.0", + "cli-truncate": "^5.1.1", + "code-excerpt": "^4.0.0", + "es-toolkit": "^1.39.10", + "indent-string": "^5.0.0", + "is-in-ci": "^2.0.0", + "patch-console": "^2.0.0", + "react-reconciler": "^0.33.0", + "scheduler": "^0.27.0", + "signal-exit": "^3.0.7", + "slice-ansi": "^8.0.0", + "stack-utils": "^2.0.6", + "string-width": "^8.1.1", + "terminal-size": "^4.0.1", + "type-fest": "^5.4.1", + "widest-line": "^6.0.0", + "wrap-ansi": "^9.0.0", + "ws": "^8.18.0", + "yoga-layout": "~3.2.1" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@types/react": ">=19.0.0", + "react": ">=19.0.0", + "react-devtools-core": ">=6.1.2" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react-devtools-core": { + "optional": true + } + } + }, + "node_modules/ip-address": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.3.tgz", + "integrity": "sha512-A1kdq/tSb5QjvKvAMgIoEvDBIgL7qaqVP/jkvSwYYRZ9iEzvPpopxp2wQfu3SuZRHtpHNxMn8Fs0bS+gf5Xmwg==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -524,18 +2094,383 @@ "node": ">= 0.10" } }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "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-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-in-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-2.0.0.tgz", + "integrity": "sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w==", + "dev": true, + "license": "MIT", + "bin": { + "is-in-ci": "cli.js" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "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-promise": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, + "node_modules/jose": { + "version": "6.2.12", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.12.tgz", + "integrity": "sha512-9NiFmJEex0sy2Dk58j2UGBSHgUs2ypF9eZSu4L6vjOX3Dp96Sw1F3uL+H+D1sx02jZZdzUT0HgvCy59CuvXcWw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "license": "BSD-2-Clause" + }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -546,12 +2481,16 @@ } }, "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", + "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", "license": "MIT", "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/merge-descriptors": { @@ -576,15 +2515,29 @@ } }, "node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" } }, "node_modules/ms": { @@ -593,13 +2546,52 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, + "node_modules/nanoid": { + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", + "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", + "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/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz", + "integrity": "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==", "license": "MIT", + "dependencies": { + "content-type": "^2.1.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/negotiator/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/object-assign": { @@ -623,6 +2615,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -644,6 +2646,41 @@ "wrappy": "1" } }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -653,6 +2690,16 @@ "node": ">= 0.8" } }, + "node_modules/patch-console": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/patch-console/-/patch-console-2.0.0.tgz", + "integrity": "sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -663,14 +2710,75 @@ } }, "node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=16" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pino": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", + "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pinojs/redact": "^0.4.0", + "atomic-sleep": "^1.0.0", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" + } + }, + "node_modules/pino-abstract-transport": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" } }, + "node_modules/pino-std-serializers": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", + "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", + "dev": true, + "license": "MIT" + }, "node_modules/pkce-challenge": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", @@ -680,10 +2788,68 @@ "node": ">=16.20.0" } }, + "node_modules/postcss": { + "version": "8.5.29", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.29.tgz", + "integrity": "sha512-49cGhUbXj8Qenv0iTMxA1cFBzxXoctpC9Ujd77t1WcbJIr6nF/eI7g/8MgxrYldFRuAXvja7xQRwavoW7kgrxQ==", + "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.19", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/process-warning": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.1.0.tgz", + "integrity": "sha512-jQSaVHsPgtyw60e1rQ/A+/ArPEj/S8pS/vFnyGa/gYFXrKk/6RuDkoqVDQ5NI5MmS01698ltlAk0NoDBNLujRw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz", + "integrity": "sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==", "license": "MIT", "dependencies": { "forwarded": "0.2.0", @@ -691,15 +2857,20 @@ }, "engines": { "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.0.tgz", + "integrity": "sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.1.0" + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" }, "engines": { "node": ">=0.6" @@ -708,28 +2879,159 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "dev": true, + "license": "MIT" + }, "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", "license": "MIT", "engines": { "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/raw-body": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.6.3", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.10" + } + }, + "node_modules/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", + "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-reconciler": { + "version": "0.33.0", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.33.0.tgz", + "integrity": "sha512-KetWRytFv1epdpJc3J4G75I4WrplZE5jOL7Yq0p34+OVOKF4Se7WrdIdVC45XsSSmUTlht2FM/fM1FZb1mfQeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^19.2.0" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/rolldown": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.12.tgz", + "integrity": "sha512-8wafseiaG80xmXSfqidUNqZcylTlhmPZZt+za2m+js2sFZ8dTNlhIOV2WcbIPx2hgwPBJpEUGFAMZ9bgBBLTSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.152.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm-eabi": "1.2.12", + "@rolldown/binding-android-arm64": "1.2.12", + "@rolldown/binding-darwin-arm64": "1.2.12", + "@rolldown/binding-darwin-x64": "1.2.12", + "@rolldown/binding-freebsd-x64": "1.2.12", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.12", + "@rolldown/binding-linux-arm64-gnu": "1.2.12", + "@rolldown/binding-linux-arm64-musl": "1.2.12", + "@rolldown/binding-linux-ppc64-gnu": "1.2.12", + "@rolldown/binding-linux-s390x-gnu": "1.2.12", + "@rolldown/binding-linux-x64-gnu": "1.2.12", + "@rolldown/binding-linux-x64-musl": "1.2.12", + "@rolldown/binding-openharmony-arm64": "1.2.12", + "@rolldown/binding-win32-arm64-msvc": "1.2.12", + "@rolldown/binding-win32-x64-msvc": "1.2.12" } }, "node_modules/router": { @@ -748,25 +3050,28 @@ "node": ">= 18" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "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/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } }, "node_modules/safer-buffer": { "version": "2.1.2", @@ -774,32 +3079,43 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "dev": true, + "license": "MIT" + }, "node_modules/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "license": "MIT", "dependencies": { - "debug": "^4.3.5", + "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "mime-types": "^3.0.1", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", - "statuses": "^2.0.1" + "statuses": "^2.0.2" }, "engines": { "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "license": "MIT", "dependencies": { "encodeurl": "^2.0.0", @@ -809,6 +3125,10 @@ }, "engines": { "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/setprototypeof": { @@ -839,14 +3159,14 @@ } }, "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" }, @@ -858,13 +3178,13 @@ } }, "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" @@ -910,15 +3230,185 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/slice-ansi": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/sonic-boom": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", + "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", "engines": { "node": ">= 0.8" } }, + "node_modules/string-width": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz", + "integrity": "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/stubborn-fs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-2.0.0.tgz", + "integrity": "sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "stubborn-utils": "^1.0.1" + } + }, + "node_modules/stubborn-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stubborn-utils/-/stubborn-utils-1.0.2.tgz", + "integrity": "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tagged-tag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", + "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-size": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/terminal-size/-/terminal-size-4.0.1.tgz", + "integrity": "sha512-avMLDQpUI9I5XFrklECw1ZEUPJhqzcwSWsyyI8blhRLT+8N1jLJWLWWYQpB2q2xthq8xDvjZPISVh53T/+CLYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/thread-stream": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.2.0.tgz", + "integrity": "sha512-zLBvqpwr4Esa0kRjcrzGU6zL25lePWaCLMx0RQFrmteozIfeNdaMLpG5U7PeHzvlFkAWaRKA9/KVW4F60iB+qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -928,44 +3418,102 @@ "node": ">=0.6" } }, - "node_modules/type": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", - "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", - "license": "ISC" + "node_modules/type-fest": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.10.0.tgz", + "integrity": "sha512-NoSdpq/WEiAg5sjmBkmV/hfxv6HJH4NqPNrqjtSO5CwRmpsDfaf4begxW34KdJykH/l1yHtwBWQkCRdoXO8mPA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", "license": "MIT", "dependencies": { - "content-type": "^1.0.5", + "content-type": "^2.0.0", "media-typer": "^1.1.0", "mime-types": "^3.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/type-is/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz", + "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==", "dev": true, "license": "Apache-2.0", "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "tsc": "bin/tsc" + }, + "engines": { + "node": ">=16.20.0" }, + "optionalDependencies": { + "@typescript/typescript-aix-ppc64": "7.0.2", + "@typescript/typescript-darwin-arm64": "7.0.2", + "@typescript/typescript-darwin-x64": "7.0.2", + "@typescript/typescript-freebsd-arm64": "7.0.2", + "@typescript/typescript-freebsd-x64": "7.0.2", + "@typescript/typescript-linux-arm": "7.0.2", + "@typescript/typescript-linux-arm64": "7.0.2", + "@typescript/typescript-linux-loong64": "7.0.2", + "@typescript/typescript-linux-mips64el": "7.0.2", + "@typescript/typescript-linux-ppc64": "7.0.2", + "@typescript/typescript-linux-riscv64": "7.0.2", + "@typescript/typescript-linux-s390x": "7.0.2", + "@typescript/typescript-linux-x64": "7.0.2", + "@typescript/typescript-netbsd-arm64": "7.0.2", + "@typescript/typescript-netbsd-x64": "7.0.2", + "@typescript/typescript-openbsd-arm64": "7.0.2", + "@typescript/typescript-openbsd-x64": "7.0.2", + "@typescript/typescript-sunos-x64": "7.0.2", + "@typescript/typescript-win32-arm64": "7.0.2", + "@typescript/typescript-win32-x64": "7.0.2" + } + }, + "node_modules/undici": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-8.11.2.tgz", + "integrity": "sha512-u4UB2/IrKdU6lFxumHmmo1a3fCQO5tzQllRorfoRS63txhrB7xTpSn1PftwC4qEHkOaqP95fCWW4lJzwErwzhQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=14.17" + "node": ">=22.19.0" } }, "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", + "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", "dev": true, "license": "MIT" }, @@ -987,6 +3535,91 @@ "node": ">= 0.8" } }, + "node_modules/vite": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.2.tgz", + "integrity": "sha512-SQr1x6W5vVSbROg7vsyXIaxK9b0G7zsT68acdWWRmnBUsgDieLCRG+Rep9WdZgcposvv/GSnr4GUUBqB3vXq6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.7", + "postcss": "^8.5.28", + "rolldown": "~1.2.11", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.7.1", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "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/when-exit": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.5.tgz", + "integrity": "sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==", + "dev": true, + "license": "MIT" + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -1002,28 +3635,141 @@ "node": ">= 8" } }, + "node_modules/widest-line": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-6.0.0.tgz", + "integrity": "sha512-U89AsyEeAsyoF0zVJBkG9zBgekjgjK7yk9sje3F4IQpXBJ10TF6ByLlIfjMhcmHMJgHZI4KHt4rdNfktzxIAMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^8.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "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/wrap-ansi/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "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/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, + "node_modules/ws": { + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.22.0.tgz", + "integrity": "sha512-Ydggc987+RO0AnWtZ/7Wq9FtNvcrL1b/RO0ud9mWjUPgDrsAAwQSF51sm2hm1XofbU/4jkpGEsLFsZZxU+1DOg==", + "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/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yaml": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.1.tgz", + "integrity": "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yoga-layout": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/yoga-layout/-/yoga-layout-3.2.1.tgz", + "integrity": "sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==", + "dev": true, + "license": "MIT" + }, "node_modules/zod": { - "version": "3.24.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.3.tgz", - "integrity": "sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==", + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.5.tgz", + "integrity": "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } }, "node_modules/zod-to-json-schema": { - "version": "3.24.5", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", - "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", "license": "ISC", "peerDependencies": { - "zod": "^3.24.1" + "zod": "^3.25.28 || ^4" } } } diff --git a/lessons/07-mcp/solution/package.json b/lessons/07-mcp/solution/package.json index 3b462dc4..0e35272e 100644 --- a/lessons/07-mcp/solution/package.json +++ b/lessons/07-mcp/solution/package.json @@ -1,24 +1,25 @@ { "type": "module", "bin": { - "weather": "./build/index.js" + "weather": "./build/index.js" }, "scripts": { - "client": "tsc && node ./build/client.js", - "build": "tsc && node ./build/index.js", - "inspect": "npx @modelcontextprotocol/inspector --cli node build/index.js --method tools/list" + "client": "npm run build && node ./build/client.js", + "build": "tsc", + "start": "node build/index.js", + "inspect": "npm run build && mcp-inspector --cli node build/index.js --method tools/list", + "inspect:web": "npm run build && mcp-inspector --web node build/index.js" }, "files": [ - "build" + "build" ], "dependencies": { - "@modelcontextprotocol/sdk": "^1.8.0", - "express": "^5.0.1", - "type": "^2.7.3", - "zod": "^3.24.2" - }, - "devDependencies": { - "@types/node": "^22.13.17", - "typescript": "^5.8.2" - } + "@modelcontextprotocol/sdk": "^1.32.1", + "zod": "^4.6.5" + }, + "devDependencies": { + "@modelcontextprotocol/inspector": "^2.9.0", + "@types/node": "^24.19.1", + "typescript": "^7.0.2" + } } diff --git a/lessons/07-mcp/solution/solution-quiz.md b/lessons/07-mcp/solution/solution-quiz.md index a8661ce7..4ab8d96c 100644 --- a/lessons/07-mcp/solution/solution-quiz.md +++ b/lessons/07-mcp/solution/solution-quiz.md @@ -19,6 +19,3 @@ * **E. All of the above**

cBz1Rczl9O~zZ_`&g=_~w%f)N^B!SGa)N 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

- - - diff --git a/lessons/07-mcp/solution/src/client.ts b/lessons/07-mcp/solution/src/client.ts index 77584f0c..f84d78df 100644 --- a/lessons/07-mcp/solution/src/client.ts +++ b/lessons/07-mcp/solution/src/client.ts @@ -1,36 +1,20 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"; +import { fileURLToPath } from "node:url"; +const client = new Client({ name: "example-client", version: "1.0.0" }); const transport = new StdioClientTransport({ - command: "node", - args: ["build/index.js"] + command: process.execPath, + args: [fileURLToPath(new URL("./index.js", import.meta.url))] }); -const client = new Client( - { - name: "example-client", - version: "1.0.0" - } -); - -await client.connect(transport); - - -// List resources -const resources = await client.listResources(); -console.log("Available resources:", resources); - -// read a resource -let resource = await client.readResource({ - uri: "scrolls://tactics.txt", -}); - -console.log("Resource contents:", resource.contents); - -// Read a resource -resource = await client.readResource({ - uri: "echo://hello", -}); - -console.log("Resource contents:", resource.contents); - +try { + await client.connect(transport); + console.log("Available resources:", await client.listResources()); + const scroll = await client.readResource({ uri: "scrolls://tactics.txt" }); + console.log("Resource contents:", scroll.contents); + const echo = await client.readResource({ uri: "echo://hello" }); + console.log("Resource contents:", echo.contents); +} finally { + await client.close(); +} diff --git a/lessons/07-mcp/solution/src/index.ts b/lessons/07-mcp/solution/src/index.ts index 09cf814a..471becdc 100644 --- a/lessons/07-mcp/solution/src/index.ts +++ b/lessons/07-mcp/solution/src/index.ts @@ -1,114 +1,56 @@ import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; -import { promises as fs } from "fs"; -import path from "path"; - - -// Create an MCP server -const server = new McpServer({ - name: "Demo", - version: "1.0.0" +import { readdir, readFile } from "node:fs/promises"; +import { fileURLToPath } from "node:url"; + +const server = new McpServer({ name: "Demo", version: "1.0.0" }); +const inputSchema = { a: z.number(), b: z.number() }; +server.registerTool("add", { description: "Add two numbers", inputSchema }, + async ({ a, b }) => ({ content: [{ type: "text", text: String(a + b) }] })); +server.registerTool("subtract", { description: "Subtract two numbers", inputSchema }, + async ({ a, b }) => ({ content: [{ type: "text", text: String(a - b) }] })); +server.registerTool("multiply", { description: "Multiply two numbers", inputSchema }, + async ({ a, b }) => ({ content: [{ type: "text", text: String(a * b) }] })); +server.registerTool("divide", { description: "Divide two numbers", inputSchema }, async ({ a, b }) => { + if (b === 0) { + return { isError: true, content: [{ type: "text", text: "Cannot divide by zero." }] }; + } + return { content: [{ type: "text", text: String(a / b) }] }; }); -// Add an addition tool -server.tool("add", - { a: z.number(), b: z.number() }, - async ({ a, b }) => ({ - content: [{ type: "text", text: String(a + b) }] - }) -); - -server.tool("subtract", - { a: z.number(), b: z.number() }, - async ({ a, b }) => ({ - content: [{ type: "text", text: String(a - b) }] - }) -); - -server.tool("divide", - { a: z.number(), b: z.number() }, - async ({ a, b }) => ({ - content: [{ type: "text", text: String(a / b) }] - }) -); - -server.tool("multiply", - { a: z.number(), b: z.number() }, - async ({ a, b }) => ({ - content: [{ type: "text", text: String(a * b) }] - }) -); - -server.resource( - "echo", - new ResourceTemplate("echo://{message}", { list: () => { - return { - resources: [ - { - "name": "echo", - "description": "Echo a message", - "mimeType": "text/plain", - "uri": "echo://{message}" - } - ] - }; - } }), +server.registerResource("echo", + new ResourceTemplate("echo://{message}", { + list: async () => ({ + resources: [{ name: "echo", description: "Echo a message", mimeType: "text/plain", uri: "echo://hello" }] + }) + }), + { description: "Echo a message", mimeType: "text/plain" }, async (uri, { message }) => ({ - contents: [{ - uri: uri.href, - text: `Resource echo: ${message}` - }] + contents: [{ uri: uri.href, text: `Resource echo: ${message}` }] }) ); -// Add a dynamic greeting resource -server.resource( - "scrolls", - new ResourceTemplate("scrolls://{name}", { list: () => { - return { - resources: [ - { - "name": "scrolls", - "description": "Scrolls resource", - "mimeType": "text/plain", - "uri": "scrolls://{name}" - } - ] - }; - }}), +const scrollsDirectory = new URL("../scrolls/", import.meta.url); +server.registerResource("scrolls", + new ResourceTemplate("scrolls://{name}", { + list: async () => ({ + resources: (await readdir(scrollsDirectory)).filter(name => name.endsWith(".txt")).map(name => ({ + name, description: "A course scroll", mimeType: "text/plain", uri: `scrolls://${encodeURIComponent(name)}` + })) + }) + }), + { description: "Read a course scroll", mimeType: "text/plain" }, async (uri, { name }) => { - // open file to check if it exist - let fileContent: string; - let filePath = path.join(process.cwd(), "scrolls", `${name}`); - try { - console.log("File path: ", filePath); - - fileContent = await fs.readFile(filePath, "utf-8"); - } catch (err) { - fileContent = `File ${name} not found in ${filePath}`; - console.error(fileContent); - } - // response with file content - - return { - contents: [{ - uri: uri.href, - text: fileContent - }] + if (typeof name !== "string" || !/^[a-zA-Z0-9_-]+\.txt$/.test(name)) { + throw new Error("Select a named .txt scroll from the resource list."); } + const text = await readFile(fileURLToPath(new URL(name, scrollsDirectory)), "utf8"); + return { contents: [{ uri: uri.href, text }] }; } ); -// Start receiving messages on stdin and sending messages on stdout - -async function main() { - const transport = new StdioServerTransport(); - await server.connect(transport); - console.error("MCPServer started on stdin/stdout"); -} - -main().catch((error) => { - console.error("Fatal error: ", error); - process.exit(1); +server.connect(new StdioServerTransport()).catch(error => { + console.error("Error in server:", error instanceof Error ? error.message : String(error)); + process.exitCode = 1; }); diff --git a/lessons/07-mcp/solution/tsconfig.json b/lessons/07-mcp/solution/tsconfig.json index a14bee07..3230f00f 100644 --- a/lessons/07-mcp/solution/tsconfig.json +++ b/lessons/07-mcp/solution/tsconfig.json @@ -1,11 +1,12 @@ { "compilerOptions": { "target": "ES2022", - "module": "Node16", - "moduleResolution": "Node16", + "module": "NodeNext", + "moduleResolution": "NodeNext", "outDir": "./build", "rootDir": "./src", "strict": true, + "types": ["node"], "esModuleInterop": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true diff --git a/lessons/07-mcp/translations/README.fr.md b/lessons/07-mcp/translations/README.fr.md index 304d4e26..5d27b70f 100644 --- a/lessons/07-mcp/translations/README.fr.md +++ b/lessons/07-mcp/translations/README.fr.md @@ -65,14 +65,14 @@ Si vous souhaitez interagir avec Scipion, exécutez l'application [Characters](/ 1. Lancez un [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript). 2. Naviguez vers */app* à la racine du dépôt. -3. Localisez la console et exécutez `npm install` suivi de `npm start`. +3. Localisez la console et exécutez `npm ci` suivi de `npm start`. 4. Une fois que l'application est ouverte, sélectionnez le bouton "Ouvrir dans le navigateur". 5. Discuter avec Scipion. Pour une explication plus détaillée de l'application, voir [Explication détaillée de l'application](/lessons/01-intro-to-genai/README.md#interact-with-dinocrates). > [!NOTE] -> Si vous exécutez le projet localement sur votre machine, veuillez consulter le guide de démarrage rapide pour configurer un [token d'accès personnel GitHub](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) et remplacer la clé dans le code. +> Configurez `AI_ENDPOINT`, `AI_API_KEY` et `AI_MODEL` dans le fichier `.env` à la racine du dépôt, en local comme dans Codespaces. Consultez le [guide de configuration](/docs/setup/README.md#configure-environment-variables). ## Le besoin du Protocole de Contexte Modèle (MCP) @@ -172,8 +172,8 @@ Le code précédent effectue les actions suivantes : **Time Beetle** : "Non, pas encore. Mais nous pouvons y ajouter des ressources et des outils. Un outil est quelque chose qui peut être utilisé pour accomplir une tâche spécifique, tandis qu'une ressource est quelque chose qui peut fournir des données ou une fonctionnalité à l'outil. Ajoutons-en quelques exemples ci-dessous : ```typescript -server.tool("add", - { a: z.number(), b: z.number() }, +server.registerTool("add", + { description: "Add two numbers", inputSchema: { a: z.number(), b: z.number() } }, async ({ a, b }) => ({ content: [{ type: "text", text: String(a + b) }] }) @@ -191,9 +191,10 @@ Dans le code précédent, nous : **Time Beetle** : "Exactement ! Le client MCP peut appeler cet outil et fournir les paramètres requis. Ajoutons également une ressource au serveur : ```typescript -server.resource( +server.registerResource( "greeting", new ResourceTemplate("greeting://{name}", { list: undefined }), + { mimeType: "text/plain" }, async (uri, { name }) => ({ contents: [{ uri: uri.href, @@ -212,9 +213,10 @@ Dans ce code, nous : **Vous** : "Donc, la ressource est comme une source de données, cela pourrait être une base de données, un fichier ou même une API ? Si c'était pour un fichier, j'utiliserais un URI file:// ? Comme ceci : ```typescript -server.resource( +server.registerResource( "file", new ResourceTemplate("file://{path}", { list: undefined }), + { mimeType: "text/plain" }, async (uri, { path }) => ({ // do something with the file at path, e.g., read its contents contents: [{ @@ -253,14 +255,14 @@ Dans ce code, nous : **Time Beetle** : "Vous pouvez tester votre serveur MCP en l'exécutant dans un terminal via l'inspecteur comme suit : ```bash -npx @modelcontextprotocol/inspector node build/index.js +npm run inspect:web ``` Ici, nous utilisons le package `@modelcontextprotocol/inspector` pour exécuter le serveur MCP. Nous fournissons l'argument `node build/index.js` pour spécifier le point d'entrée du serveur. Cela démarrera le serveur MCP et vous permettra d'interagir avec lui via l'inspecteur. **Vous** : "Et comment puis-je interagir avec le serveur ?" -**Time Beetle** : "Cela démarre un serveur web sur le port 6274. Vous pouvez accéder à l'inspecteur en ouvrant votre navigateur web et en vous rendant sur `http://localhost:6274`. L'inspecteur fournit une interface conviviale pour interagir avec votre serveur MCP, vous permettant de tester les outils et les ressources que vous avez définis." +**Time Beetle** : "Exécutez cette commande dans le dossier du package de la leçon. Elle compile le serveur et lance l'inspecteur web actuel. Ouvrez l'adresse locale affichée dans le terminal. L'interface peut différer des anciennes images ci-dessous. Gardez les ports de l'inspecteur privés." ![Interface utilisateur de l'inspecteur](https://softchris.github.io/mcp-workshop/assets/images/connect-7703c67645f368d51c7b24a5d635d6a0.png) @@ -348,7 +350,7 @@ Ainsi, lorsque vous listez les outils, vous obtenez une réponse au format suiva { "name": "", - "description": "". + "description": "", "inputSchema": { "type":"object", "properties":{ @@ -370,7 +372,7 @@ ce qui signifie que, si vous avez un outil `add`, votre réponse, en listant les ```json { "name": "add", - "description": "Adding two numbers". + "description": "Adding two numbers", "inputSchema": { "type":"object", "properties":{ @@ -395,8 +397,8 @@ ce qui signifie que, si vous avez un outil `add`, votre réponse, en listant les // List tools const { tools } = await client.listTools(); -const addTool = tools[0]; // Assuming the first tool is "add" -const subtractTool = tools[1]; // Assuming the second tool is "subtract" +const addTool = tools.find(tool => tool.name === "add"); +if (!addTool) throw new Error("The server did not advertise the add tool."); // Call a tool const result = await client.callTool({ @@ -413,14 +415,10 @@ const result = await client.callTool({ **Time Beetle** : "Les ressources sont similaires, mais vous devez fournir l'URI de la ressource et les paramètres qu'elle nécessite. Voici un exemple : ```typescript -let resourceUri = "greeting://John"; // Replace with the actual resource URI - -// call resource -// Read a resource -const name = "John Doe"; // Replace with the actual name +const name = "John Doe"; const resourceResult = await client.readResource({ - uri: `greeting:///${name}`, + uri: `greeting://${encodeURIComponent(name)}`, }); console.log(resourceResult); // Hi John Doe! diff --git a/lessons/08-mcp-advanced/README.md b/lessons/08-mcp-advanced/README.md index 856de261..1ec7f8f8 100644 --- a/lessons/08-mcp-advanced/README.md +++ b/lessons/08-mcp-advanced/README.md @@ -92,14 +92,14 @@ If you want to interact with Hedy, run the [Characters](/app/README.md) app. 1. Start a [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript) 2. Navigate to _/app_ in the repo root. -3. Locate the console and run `npm install` followed by `npm start`. +3. Locate the console and run `npm ci` followed by `npm start`. 4. Once it appears, select the "Open in Browser" button. 5. Chat with Hedy. For a more detailed explanation of the app, see [Detailed app explanation](/lessons/01-intro-to-genai/README.md#interact-with-dinocrates). > [!NOTE] - > If you're running the project locally on your machine, please review the QuickStart guide to get a [GitHub personal access](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) token setup and replace the key in the code. +> Configure `AI_ENDPOINT`, `AI_API_KEY`, and `AI_MODEL` in the repository-root `.env` for both local development and Codespaces. See the [setup guide](/docs/setup/README.md#configure-environment-variables). ## Adding a Large Language Model to a Client @@ -133,76 +133,76 @@ Here's all the steps in code: ```typescript import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"; +import { CallToolResultSchema } from "@modelcontextprotocol/sdk/types.js"; +import { fileURLToPath } from "node:url"; +import { OpenAI } from "openai"; +import { z } from "zod"; + +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} - -// create client instance +const openai = new OpenAI({ baseURL: endpoint, apiKey, timeout: 60000 }); +const client = new Client({ name: "example-client", version: "1.0.0" }); const transport = new StdioClientTransport({ - command: "node", - args: ["server.js"] + command: process.execPath, + args: [fileURLToPath(new URL("./index.js", import.meta.url))] }); -const client = new Client( - { - name: "example-client", - version: "1.0.0" +try { + await client.connect(transport); + const { tools: serverTools } = await client.listTools(); + const allowedNames = new Set(serverTools.map(tool => tool.name)); + const tools: OpenAI.Chat.Completions.ChatCompletionTool[] = serverTools.map(tool => ({ + type: "function", + function: { + name: tool.name, + description: tool.description, + parameters: tool.inputSchema + } + })); + console.log("Available tools:", [...allowedNames]); + const messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = [ + { role: "user", content: "Use the add tool to add 5 and 10." } + ]; + const completion = await openai.chat.completions.create({ + model, messages, tools, tool_choice: "required" + }); + const message = completion.choices[0]?.message; + if (!message?.tool_calls?.length) throw new Error("The model did not request a tool."); + messages.push(message); + for (const call of message.tool_calls) { + if (call.type !== "function" || !allowedNames.has(call.function.name)) { + throw new Error("The model requested an unsupported MCP tool."); + } + const args = z.record(z.string(), z.unknown()).parse(JSON.parse(call.function.arguments)); + const result = CallToolResultSchema.parse(await client.callTool({ + name: call.function.name, + arguments: args + })); + const text = result.content.filter(item => item.type === "text").map(item => item.text).join("\n"); + if (result.isError) throw new Error(`MCP tool failed: ${text}`); + if (!text) throw new Error("The MCP tool did not return text."); + console.log("Result from tool:", text); + messages.push({ role: "tool", tool_call_id: call.id, content: text }); } -); - -await client.connect(transport); - -// 1. make call to server, ask it for tools -const { tools } = await client.listTools(); - -// convert function -function toToolSchema(method, schema) { - return { - name: method, - description: `This is a tool that does ${method}`, - parameters: schema, - }; + const followUp = await openai.chat.completions.create({ + model, messages, tools, tool_choice: "none" + }); + const answer = followUp.choices[0]?.message?.content; + if (!answer?.trim()) throw new Error("The model did not return a final answer."); + console.log(answer); +} finally { + await client.close(); } - -// 2. convert the tools and resources response to a tools schema -const toolsForLLM = tools.map((tool) => { - return toToolSchema(tool.method, tool.inputSchema); -}); - -// 3. instantiate openai client -const openai = new OpenAI({ - apiKey: process.env.OPENAI_API_KEY, - model: "gpt-3.5-turbo", - temperature: 0.7, -}); - -// 4. make chat completion call to openai -const response = await openai.chat.completions.create({ - messages: [ - { - role: "user", - content: `I want to add 5 and 10. Please use the tool ${toolsForLLM}`, - }, - ], - functions: toolsForLLM, - function_call: "auto", -}); - -// 5. figure out what tool to call based on the response from openai -const toolName = response.choices[0].message.function_call.name; // add -const args = response.choices[0].message.function_call.arguments; // { a: 5, b: 10 } - -// 6. call the tool on the server -const result = await client.callTool({ - name: toolName, - arguments: args, -}); - -// 7. respond to user -console.log(result); // 15 ``` In the preceding code we (focusing on our additions): -- Created a function `toToolSchema` that converts the tools and resources response to a schema that can be used by the LLM. +- Created a function `tools.map` that converts the tools and resources response to a schema that can be used by the LLM. - Asked the server for available tools and resources. - Converted the tools and resources response to a schema that can be used by the LLM. - Made a chat completion call to our AI, passing the converted tools as a parameter. @@ -235,7 +235,7 @@ In the preceding code we (focusing on our additions): ## Solution -[Solution](/lessons/08-mcp-advanced/solution/README.md) +[Solution](/lessons/08-mcp-advanced/solutions/README.md) ## Knowledge Check @@ -247,7 +247,7 @@ B. It creates a more natural conversation between the user and the server. C. It's better to have the LLM on the server. -[Solution quiz](/lessons/08-mcp-advanced/solution/solution-quiz.md) +[Solution quiz](/lessons/08-mcp-advanced/solutions/solution-quiz.md) ## Summary diff --git a/lessons/08-mcp-advanced/solutions/README.md b/lessons/08-mcp-advanced/solutions/README.md index 63b74a4d..49742760 100644 --- a/lessons/08-mcp-advanced/solutions/README.md +++ b/lessons/08-mcp-advanced/solutions/README.md @@ -1,84 +1,49 @@ +# Run the Advanced MCP Solution -# Running the solution - -In this chapter you will learn: - -- How to use the Model Context Protocol, MCP to split up your server capabilities in a server and a client -- Create tools, resources and prompts on the server. -- Consume the server using both the inspector tool and a written client. +This sample exposes `characterDetails` and `place` tools that retrieve Wikipedia summaries. The client converts MCP tool schemas to OpenAI function tools, awaits each call, sends the results back to the model, and prints its final answer. ## Setup -If you haven't already, set up your development environment. Here's how you can do it: [Setup your environment](/docs/setup/README.md). - -## Related resources - -[![Watch a short video about MCP](https://img.youtube.com/vi/YRfOiB0Im64/0.jpg)](https://www.youtube.com/watch?v=YRfOiB0Im64) +Use Node.js LTS. Configure `AI_ENDPOINT`, `AI_API_KEY`, and `AI_MODEL` in the repository-root `.env` as described in the [course setup guide](/docs/setup/README.md). -_This video explains Model Context Protocol._ +From `lessons/08-mcp-advanced/solutions`: -*🎥 Click on the image above to watch a short video about MCP* - -## Install - -```sh -npm i +```bash +npm ci +npm run build ``` -## Run the sample - -1. Build the server +`build` only compiles the TypeScript. To run the server by itself, use `npm start`. It communicates over stdin/stdout; diagnostic messages must go to stderr. - ```sh - npm run build - ``` +## Inspect the Tools - This compiles and runs the server, once you see the text "MCPServer started on stdin/stdout" you can type Ctrl-C to take it down. - -## Test the sample - -It's a good idea to check if your features are working as intended. Try below command to quickly check your server responds. - - 1. List all tools on the server like so: +```bash +npm run inspect +npm run tool +``` - ```sh - npx @modelcontextprotocol/inspector --cli node build/index.js --method tools/call --tool-name characterDetails --tool-arg name=Ada - ``` +The first command lists the tools. The second calls `characterDetails` for Ada Lovelace. Both commands build the server first. Wikipedia must be reachable. - You should see response similar to: +For the web inspector: - ```json - { - "content": [ - { - "type": "text", - "text": "Character: ...response from API" - } - ] - } - ``` +```bash +npm run inspect:web +``` - Let's proceed to running the client. +Open the local address printed by the inspector and keep its ports private. -## Running the client +## Run the Model Client -1. Run the client +```bash +npm run client +``` - ```sh - npm run client - ``` +The script builds the client and loads the root `.env` when available. It prints the available tools, the Wikipedia result, and a final model response about Ada Lovelace. It closes the transport when finished. - You should see the following tool response: +For another environment file, build first and use Node's file option: - ```text - Tool result: { - content: [ - { - type: 'text', - text: "Character: Augusta Ada King, Countess of Lovelace, also known as Ada Lovelace, was an English mathematician and writer chiefly known for her work on Charles Babbage's proposed mechanical general-purpose computer, the Analytical Engine. She was the first to recognise that the machine had applications beyond pure calculation." - } - ] - } - ``` +```bash +node --env-file="$HOME/.env" build/client.js +``` - Great, it all works as intended. +The sample only dispatches tools advertised by its own MCP server. Invalid arguments, tool failures, and missing model responses produce explicit errors. diff --git a/lessons/08-mcp-advanced/solutions/build/client.js b/lessons/08-mcp-advanced/solutions/build/client.js index 8e2e091c..ca910173 100644 --- a/lessons/08-mcp-advanced/solutions/build/client.js +++ b/lessons/08-mcp-advanced/solutions/build/client.js @@ -1,100 +1,98 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"; +import { CallToolResultSchema } from "@modelcontextprotocol/sdk/types.js"; +import { fileURLToPath } from "node:url"; +import path from "node:path"; import OpenAI from "openai"; -import { z } from "zod"; // Import zod for schema validation -class MyClient { +import { z } from "zod"; +export class MyClient { openai; client; + model; constructor() { - this.openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", // might need to change to this url in the future: https://models.github.ai/inference - apiKey: process.env.GITHUB_TOKEN, - }); - this.client = new Client({ - name: "example-client", - version: "1.0.0" - }, { - capabilities: { - prompts: {}, - resources: {}, - tools: {} - } - }); + const endpoint = process.env.AI_ENDPOINT?.trim(); + const apiKey = process.env.AI_API_KEY?.trim(); + const model = process.env.AI_MODEL?.trim(); + if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); + } + this.model = model; + this.openai = new OpenAI({ baseURL: endpoint, apiKey, timeout: 60000 }); + this.client = new Client({ name: "example-client", version: "1.0.0" }); } async connectToServer(transport) { - await this.client.connect(transport); - this.run(); - console.error("MCPClient started on stdin/stdout"); + try { + await this.client.connect(transport); + await this.run(); + } + finally { + await this.client.close(); + } } openAiToolAdapter(tool) { - // Create a zod schema based on the input_schema - const schema = z.object(tool.input_schema); return { - type: "function", // Explicitly set type to "function" + type: "function", function: { name: tool.name, description: tool.description, - parameters: { - type: "object", - properties: tool.input_schema.properties, - required: tool.input_schema.required, - }, - }, + parameters: tool.inputSchema + } }; } - async callTools(tool_calls, toolResults) { - for (const tool_call of tool_calls) { - const toolName = tool_call.function.name; - const args = tool_call.function.arguments; - console.log(`Calling tool ${toolName} with args ${JSON.stringify(args)}`); - // 2. Call the server's tool - const toolResult = await this.client.callTool({ - name: toolName, - arguments: JSON.parse(args), - }); - console.log("Tool result: ", toolResult); - // 3. Do something with the result - // TODO + async callTools(calls, allowedNames) { + const results = []; + for (const call of calls) { + if (call.type !== "function" || !allowedNames.has(call.function.name)) { + throw new Error("The model requested an unsupported MCP tool."); + } + const args = z.record(z.string(), z.unknown()).parse(JSON.parse(call.function.arguments)); + const result = CallToolResultSchema.parse(await this.client.callTool({ + name: call.function.name, + arguments: args + })); + const text = result.content.filter(item => item.type === "text").map(item => item.text).join("\n"); + if (result.isError) + throw new Error(`MCP tool failed: ${text}`); + if (!text) + throw new Error("The MCP tool did not return text."); + console.log(`Result from [${call.function.name}]:`, text); + results.push({ role: "tool", tool_call_id: call.id, content: text }); } + return results; } async run() { - console.log("Asking server for available tools"); - const toolsResult = await this.client.listTools(); - const tools = toolsResult.tools.map((tool) => { - return this.openAiToolAdapter({ - name: tool.name, - description: tool.description, - input_schema: tool.inputSchema, - }); - }); - const messages = [ - { + const { tools: serverTools } = await this.client.listTools(); + const allowedNames = new Set(serverTools.map(tool => tool.name)); + const tools = serverTools.map(tool => this.openAiToolAdapter(tool)); + console.log("Available tools:", [...allowedNames]); + const messages = [{ role: "user", - content: "Tell me about Ada Lovelace", - }, - ]; - console.log("Querying LLM: ", messages[0].content); - let response = await this.openai.chat.completions.create({ - model: "gpt-4o-mini", - max_tokens: 1000, - messages, - tools: tools, + content: "Use the characterDetails tool to tell me briefly about Ada Lovelace." + }]; + const completion = await this.openai.chat.completions.create({ + model: this.model, messages, tools, tool_choice: "required" }); - console.log("LLM response: ", response.choices[0].message.content); - let results = []; - // 1. Go through the LLM response,for each choice, check if it has tool calls - response.choices.map(async (choice) => { - const message = choice.message; - if (message.tool_calls) { - console.log("Making tool call"); - await this.callTools(message.tool_calls, results); - } + const message = completion.choices[0]?.message; + if (!message?.tool_calls?.length) + throw new Error("The model did not request a tool."); + messages.push(message, ...await this.callTools(message.tool_calls, allowedNames)); + const followUp = await this.openai.chat.completions.create({ + model: this.model, messages, tools, tool_choice: "none" }); + const answer = followUp.choices[0]?.message?.content; + if (!answer?.trim()) + throw new Error("The model did not return a final answer."); + console.log(answer); } } -let client = new MyClient(); -const transport = new StdioClientTransport({ - command: "node", - args: ["./build/index.js"] -}); -client.connectToServer(transport); +if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) { + const client = new MyClient(); + const transport = new StdioClientTransport({ + command: process.execPath, + args: [fileURLToPath(new URL("./index.js", import.meta.url))] + }); + client.connectToServer(transport).catch(error => { + console.error("Error in client:", error instanceof Error ? error.message : String(error)); + process.exitCode = 1; + }); +} diff --git a/lessons/08-mcp-advanced/solutions/build/index.js b/lessons/08-mcp-advanced/solutions/build/index.js index a6533462..e1f47574 100644 --- a/lessons/08-mcp-advanced/solutions/build/index.js +++ b/lessons/08-mcp-advanced/solutions/build/index.js @@ -1,31 +1,37 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; -// Create an MCP server -const server = new McpServer({ - name: "Demo", - version: "1.0.0" -}); -// Add an addition tool -server.tool("characterDetails", { name: z.string() }, async ({ name }) => { - console.log(`Received character name: ${name}`); - const url = `https://en.wikipedia.org/api/rest_v1/page/summary/${encodeURIComponent(name)}`; // Changed 'title' to 'name' - const response = await fetch(url); +import { fileURLToPath } from "node:url"; +import path from "node:path"; +async function summary(name) { + const response = await fetch(`https://en.wikipedia.org/api/rest_v1/page/summary/${encodeURIComponent(name)}`, { + headers: { "User-Agent": "GenerativeAIJavaScriptCourse/1.0 (https://github.com/microsoft/generative-ai-with-javascript)" }, + signal: AbortSignal.timeout(30000) + }); if (!response.ok) - throw new Error("Failed to fetch character details"); + throw new Error(`Wikipedia request failed: HTTP ${response.status}.`); const data = await response.json(); - const responseText = data.extract; // This contains the summary text - return { - content: [{ type: "text", text: `Character: ${responseText}` }] - }; -}); -// Start receiving messages on stdin and sending messages on stdout -async function main() { - const transport = new StdioServerTransport(); - await server.connect(transport); - console.error("MCPServer started on stdin/stdout"); + return z.object({ extract: z.string().min(1) }).parse(data).extract; +} +export function createServer(getSummary = summary) { + const server = new McpServer({ name: "Demo", version: "1.0.0" }); + server.registerTool("characterDetails", { + description: "Get a Wikipedia summary of a historical character", + inputSchema: { name: z.string().trim().min(1).max(200) } + }, async ({ name }) => ({ + content: [{ type: "text", text: `Character: ${await getSummary(name)}` }] + })); + server.registerTool("place", { + description: "Get a Wikipedia summary of a place", + inputSchema: { name: z.string().trim().min(1).max(200) } + }, async ({ name }) => ({ + content: [{ type: "text", text: `Place: ${await getSummary(name)}` }] + })); + return server; +} +if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) { + createServer().connect(new StdioServerTransport()).catch(error => { + console.error("Error in server:", error instanceof Error ? error.message : String(error)); + process.exitCode = 1; + }); } -main().catch((error) => { - console.error("Fatal error: ", error); - process.exit(1); -}); diff --git a/lessons/08-mcp-advanced/solutions/package-lock.json b/lessons/08-mcp-advanced/solutions/package-lock.json index ccd64b19..cef38742 100644 --- a/lessons/08-mcp-advanced/solutions/package-lock.json +++ b/lessons/08-mcp-advanced/solutions/package-lock.json @@ -5,70 +5,1099 @@ "packages": { "": { "dependencies": { - "@modelcontextprotocol/sdk": "^1.8.0", - "express": "^5.0.1", - "openai": "^4.96.2", - "type": "^2.7.3", - "zod": "^3.24.2" + "@modelcontextprotocol/sdk": "^1.32.1", + "openai": "^7.28.0", + "zod": "^4.6.5" }, "bin": { "weather": "build/index.js" }, "devDependencies": { - "@types/node": "^22.13.17", - "typescript": "^5.8.2" + "@modelcontextprotocol/inspector": "^2.9.0", + "@types/node": "^24.19.1", + "typescript": "^7.0.2" + } + }, + "node_modules/@alcalzone/ansi-tokenize": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@alcalzone/ansi-tokenize/-/ansi-tokenize-0.2.5.tgz", + "integrity": "sha512-3NX/MpTdroi0aKz134A6RC2Gb2iXVECN4QaAXnvCIxxIm3C3AVB1mkUe8NaaiyvOpDfsrqWhYtj+Q6a62RrTsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@hono/node-server": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-2.1.3.tgz", + "integrity": "sha512-TA//nWMqPhbfdfneACk6t5a9eqbS9lABEPyKn0/xZTah3H3U2XaVg85rJFl0/Fyit0I552YDHgXGVSf3GwqbUw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@modelcontextprotocol/client": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/client/-/client-2.2.0.tgz", + "integrity": "sha512-LxCou/CSYQ6dwEnjhLZY0KnEuc8V4UJ3IEQCl/uR2yHobSQIEdJKUlKLRYRF5i5FqRGHy1eK7une3aAWDHLtig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@modelcontextprotocol/core": "2.2.0", + "cross-spawn": "^7.0.5", + "eventsource": "^3.0.2", + "eventsource-parser": "^3.0.0", + "jose": "^6.1.3", + "pkce-challenge": "^5.0.0", + "zod": "^4.2.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@modelcontextprotocol/core": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/core/-/core-2.2.0.tgz", + "integrity": "sha512-iLhmprRmWI8EcosOA3wVvww22z02NkgqhV4fBH6f/odQBsi7xnJc0HGmi21yWO+/iKw2yzqVE127Zhna5/+JXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "zod": "^4.2.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@modelcontextprotocol/ext-apps": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/ext-apps/-/ext-apps-2.0.3.tgz", + "integrity": "sha512-Tn+4+cyhO4f4cQSDxNyLiIfEE+qlTTuIbWBJB8JTinEXOhDYgCT4wDTQplxD9MBYZH5pCYGC59GaxiwIT4bu8w==", + "dev": true, + "license": "MIT", + "workspaces": [ + "examples/*" + ], + "dependencies": { + "@standard-schema/spec": "^1.1.0" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@modelcontextprotocol/client": "^2.0.0", + "@modelcontextprotocol/core": "^2.0.0", + "@modelcontextprotocol/server": "^2.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0", + "zod": "^4.2.0" + }, + "peerDependenciesMeta": { + "@modelcontextprotocol/server": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@modelcontextprotocol/inspector": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/inspector/-/inspector-2.9.0.tgz", + "integrity": "sha512-77VWBmsA18jdxQ1vqbu8SNRSC2h5uBHyUq6wTmlqEDeVIST7YEVta0OyFCDf/6VSQKbZ3ia7Qb+9bZtlTcB+tw==", + "dev": true, + "hasInstallScript": true, + "license": "SEE LICENSE IN LICENSE", + "dependencies": { + "@hono/node-server": "^2.0.12", + "@modelcontextprotocol/client": "2.2.0", + "@modelcontextprotocol/core": "2.2.0", + "@modelcontextprotocol/ext-apps": "^2.0.0", + "@modelcontextprotocol/server": "2.2.0", + "@napi-rs/keyring": "^1.3.0", + "@vitejs/plugin-react": "^6.0.0", + "ajv": "^8.17.1", + "atomically": "^2.1.1", + "chokidar": "^4.0.3", + "commander": "^13.1.0", + "hono": "^4.13.7", + "ink": "^6.0.0", + "open": "^10.2.0", + "pino": "^9.14.0", + "proper-lockfile": "^4.1.2", + "react": "^19.0.0", + "undici": "^8.11.2", + "vite": "^8.1.5", + "yaml": "^2.9.0", + "zod": "^4.4.3" + }, + "bin": { + "mcp-inspector": "clients/launcher/build/index.js" + }, + "engines": { + "node": ">=22.19.0" } }, "node_modules/@modelcontextprotocol/sdk": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.11.0.tgz", - "integrity": "sha512-k/1pb70eD638anoi0e8wUGAlbMJXyvdV4p62Ko+EZ7eBe1xMx8Uhak1R5DgfoofsK5IBBnRwsYGTaLZl+6/+RQ==", + "version": "1.32.1", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.32.1.tgz", + "integrity": "sha512-2DdE+SJDtzLEEWzY1ZjY7Q+VcPhcV1KisD3zI4u0XZyktsjHum1mwbMI+JaulUBi2OZk+KJAi2uPXzxichPkdw==", "license": "MIT", "dependencies": { + "@hono/node-server": "^1.19.9 || ^2.0.5", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", "content-type": "^1.0.5", "cors": "^2.8.5", - "cross-spawn": "^7.0.3", + "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", - "express": "^5.0.1", - "express-rate-limit": "^7.5.0", + "eventsource-parser": "^3.0.0", + "express": "^5.2.1", + "express-rate-limit": "^8.2.1", + "hono": "^4.11.4", + "jose": "^6.1.3", + "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", - "zod": "^3.23.8", - "zod-to-json-schema": "^3.24.1" + "zod": "^3.25 || ^4.0", + "zod-to-json-schema": "^3.25.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@cfworker/json-schema": "^4.1.1", + "zod": "^3.25 || ^4.0" }, + "peerDependenciesMeta": { + "@cfworker/json-schema": { + "optional": true + }, + "zod": { + "optional": false + } + } + }, + "node_modules/@modelcontextprotocol/server": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/server/-/server-2.2.0.tgz", + "integrity": "sha512-qFnltjus6Gk8Lx6J1w2RXmr3YPN22MNT6qD6zjAkaiWIlFIFxWClz0rXHNuJF/KSUyn5YGhkSvXkWDbQHVLFEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@modelcontextprotocol/core": "2.2.0", + "zod": "^4.2.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@napi-rs/keyring": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring/-/keyring-1.3.0.tgz", + "integrity": "sha512-WrOw/bcXm0f9qHkumlT1QlArXSTWqaY9sunsDpOk+yCCorCKMxvWT/a3xko4EYHVdeZoh00yI2TydXn6eyICDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/keyring-darwin-arm64": "1.3.0", + "@napi-rs/keyring-darwin-x64": "1.3.0", + "@napi-rs/keyring-freebsd-x64": "1.3.0", + "@napi-rs/keyring-linux-arm-gnueabihf": "1.3.0", + "@napi-rs/keyring-linux-arm64-gnu": "1.3.0", + "@napi-rs/keyring-linux-arm64-musl": "1.3.0", + "@napi-rs/keyring-linux-riscv64-gnu": "1.3.0", + "@napi-rs/keyring-linux-x64-gnu": "1.3.0", + "@napi-rs/keyring-linux-x64-musl": "1.3.0", + "@napi-rs/keyring-win32-arm64-msvc": "1.3.0", + "@napi-rs/keyring-win32-ia32-msvc": "1.3.0", + "@napi-rs/keyring-win32-x64-msvc": "1.3.0" + } + }, + "node_modules/@napi-rs/keyring-darwin-arm64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-arm64/-/keyring-darwin-arm64-1.3.0.tgz", + "integrity": "sha512-pl76hJvdYUBn6I24bXiOBMA9nbDapo3I5B+f3OorjDU4dUMSypXeKbOVehJe8fhgTiH24flMyTS3aAIy43xegQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-darwin-x64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-darwin-x64/-/keyring-darwin-x64-1.3.0.tgz", + "integrity": "sha512-YcJtEV5LA3cvA4z3BurgxH5IhTsW1JfIvcAAcqcecwk06Si9F9NqkxbZVIfDwQ8oRHgaBmT3zZJnLAotCrVahw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-freebsd-x64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-freebsd-x64/-/keyring-freebsd-x64-1.3.0.tgz", + "integrity": "sha512-vlLf31TGhfRAaxLDBhg8b89ss0HHD/lyNmL5F3UjSaz5CUXElsJmKYq9fqA/B+cZKUEUcLHHGhF0I/CqcFdaVw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-arm-gnueabihf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm-gnueabihf/-/keyring-linux-arm-gnueabihf-1.3.0.tgz", + "integrity": "sha512-KiWdMMu/Inz/bHHIAGrnF7r54FZDYXuHO6UFF/rhIrshUsxbMG1Rl9lEymNtqqsVo927G0VYcb02FzWQ3iBQRQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-arm64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-gnu/-/keyring-linux-arm64-gnu-1.3.0.tgz", + "integrity": "sha512-eyKGpY40lm9Jvs1aD294XRH4y7+TlJM0YVAryZeXA6TX0mb4gMkxVXwSQv7MCwgah7raeUd0dKUb4BPAYIgcMg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-arm64-musl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-arm64-musl/-/keyring-linux-arm64-musl-1.3.0.tgz", + "integrity": "sha512-iIK6JWHXAJqDrEyLY3TmswwloVyt2vj+04TZnew+uSJ9gnDO8EwRbp3/iw3LpWaXiDO7VomGO6y8I0Id8uBZSw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-riscv64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-riscv64-gnu/-/keyring-linux-riscv64-gnu-1.3.0.tgz", + "integrity": "sha512-/PGqrwn6EwgtK6vccASSXJRfOSP4vN1F4ASsIQ+7MdrK6hNvAJ1FZPrIuD5gGGdxezo3F++To2Wq7DbuGIeuNQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-x64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-gnu/-/keyring-linux-x64-gnu-1.3.0.tgz", + "integrity": "sha512-2PDK1WKWTu9lBGq9VvNEkSlQD3O7YwVpmnyN2M3cy4v7NJ/8gDMd9GXv3G+FVXN13uhp4gnnPBS+ScefmEeD2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-linux-x64-musl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-linux-x64-musl/-/keyring-linux-x64-musl-1.3.0.tgz", + "integrity": "sha512-oJ2HkX8YUo46QBkn0pG+HuIKQNqr523q6vBobCn+P95s4C4K6/kLBqHY/1bg5J4ap31DzsznhnFKcfBNBsjCnw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-win32-arm64-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-arm64-msvc/-/keyring-win32-arm64-msvc-1.3.0.tgz", + "integrity": "sha512-tOd3c/uAaeoE4ycVlmAdSvygz0Zt3zdca6Y7gokBeIbaRDWpjDIUOpU3MvML59XAaqyuKGsVVu0F/DZb1lHPmw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-win32-ia32-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-ia32-msvc/-/keyring-win32-ia32-msvc-1.3.0.tgz", + "integrity": "sha512-sPSqeAFZMGqP1R++M2JTza7GQJJ/TpCo6JU6Vcd4jnebvOaEDs9b7eipakU1PJdSvhpC2yXMCNRk9gXfrhuwHQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@napi-rs/keyring-win32-x64-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@napi-rs/keyring-win32-x64-msvc/-/keyring-win32-x64-msvc-1.3.0.tgz", + "integrity": "sha512-4DnCWXwDc0HRKwyRlG5y0VhKZW2tNRQfKKfyj6IX/KWfDNyq9hn4n+GL1auyDcOO/v8PwnhmYo2+rOOqCkvvOg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.152.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.152.0.tgz", + "integrity": "sha512-oM/5rLBm2tPkg0iBgkH/FOeR3PCDpY19GTgAZjMFM8h9WI9VW7cLgzp6nwtarYKmovavIQZ+Fe/RKX/8C8O/Rw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/oxc-project" + } + }, + "node_modules/@pinojs/redact": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz", + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rolldown/binding-android-arm-eabi": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm-eabi/-/binding-android-arm-eabi-1.2.12.tgz", + "integrity": "sha512-dB/a1214qKfHMXCpgqR4OZT+jS4kTyEXbQGJPqzobt5EwH5rX080pxE37alt3RzvR1bf1Yz/yGqRfrYAxuPw0A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.2.12.tgz", + "integrity": "sha512-7KHFgQ5VJxIHcLlrwrc3Xbds7oTNQT7Pgi9gQCJKrd2VGab/UksIOYp6VD8MzCstGxOKMgNamPwUCfxPdP1OHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.2.12.tgz", + "integrity": "sha512-3YIhqHD96nA5SaYNRBR16HnGv4oavZvXfD/ayHM+oYZ0WD/8lBAtf6zQua4kEyAvpqrluKXl0lnOBoiNby7x9w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.2.12.tgz", + "integrity": "sha512-UuuJ35MFw4gmFOrE9pEqIV+K3syIKveph+Qc1/ljHZVdoDW4pz/JHR/eMVom+TZGl/5OOvGJOWaOCVt3ZfqhxA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.2.12.tgz", + "integrity": "sha512-uMvssit0a4W+/7D8CbHUvG719mH3R2jwXAlh/XcPvuHTE0g++LymF88DCGNX0HM2rBOn0xrzgXktIB6fLSJBTQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.2.12.tgz", + "integrity": "sha512-XcFu0R0xWnwzSf4IQgFH1rJIckPN1pLy2R+4r9IDB7Yfu/ys9cVqfa4pBrMHj7a3gl8mIR4nRNPg0e5IvEVs6g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.2.12.tgz", + "integrity": "sha512-260UrKgn8tz39ak+SMDOirKzr7V04M9dWPw5llW00SwBivCZoWcRBKV1d8cXnRkUmSZA3BdiUmBHWk7734Ulpw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.2.12.tgz", + "integrity": "sha512-5YK1I9SqDkbPgc1IA8BgDl34suqUS2q0KWnBrirm0E51YjOs6eo6dV6jbQfNE/argHRSvd0QUGgtpIoYx+WWpw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.2.12.tgz", + "integrity": "sha512-Rkcrmp7eFRg74yL5fXEU91JEWbdEPLevWwGtXpmhbjlD1StScbWTmO94Bhly+Mo+ketKYkdmM1vNUKeWSlx8cQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.2.12.tgz", + "integrity": "sha512-qvK4DuAsQc2BSjlx+Xr+IzOIvvxbGZqxFwdWfG6F518Erj0GGISyQbJ6pIappnOxlNPzNHvo/L0BwB30GZ+zVw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.2.12.tgz", + "integrity": "sha512-Q9uLBO53Xd4QIq1WOycVQyPP1O4HhraEV2qqb3uTrnVw6QZih9duY4vNXOivL1xoUS1/z+W8eF4NMfl2a8Sdjw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.2.12.tgz", + "integrity": "sha512-3IBxWFMjbOZskDPKv8Lf9BCnahlKuHthWkYnyIxOH/QcJrFcS4EmcenthApkwr/5+nEqZlLzeYbxeMaX7A5u4g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.2.12.tgz", + "integrity": "sha512-xtX61xg4LKPkPWilZU1ynKClz5Gj4bf74LML4r3eVLWumKnGjoEr1OSHQhMdbBDoYTi+yjrujvpZe2pUnqCrrA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.2.12.tgz", + "integrity": "sha512-At7fPB6PCaIjzgIhEZFxuT+BBFqiQibJDT4d3PhiR3f4E7bbMZF4aKblbFfEM3sETRDd1YiQx/+U/g/B/ou5Ew==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.2.12.tgz", + "integrity": "sha512-WIw2haVKwjuYdXkHaoC0mF8Le71TuCBxjrdKqLbJGctbBABj+ClfmNvtbOnzpq3RokNo5+V1qhtSzJyXorsklQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.19.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.19.1.tgz", + "integrity": "sha512-aS3/DG0oM05K0RIXXP+hKjinGG5IgSSVGzswZxW3O0sS3pH4/fycXundUC9XsszgKCk4gHXylTEK6hyFxVxnoQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": ">=7.24.0 <7.24.7" + } + }, + "node_modules/@typescript/typescript-aix-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-aix-ppc64/-/typescript-aix-ppc64-7.0.2.tgz", + "integrity": "sha512-MTKKkWB7p/0E9xi1d1tHtZ5PiLkGEMIq88pK2CubZjOsLtYTLqhgIgi6zepFa+9GHZ6h05NMCkQxGKiPXMxXtQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-arm64/-/typescript-darwin-arm64-7.0.2.tgz", + "integrity": "sha512-gowzar9MwS/aRWp6f3a4KUqzRjAZjOsmGNCM6LcTgXum+dBfgsBVMN+AgvOCCbguXyick6LJhpBszxMebJ8syA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-darwin-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-darwin-x64/-/typescript-darwin-x64-7.0.2.tgz", + "integrity": "sha512-SZ9xZInqApNlNGc9s0W1VSsktYSOe9cFqNOIqmN1Gs8SmkjKZYFt017G4VwPxASInODuAdbTW7sXiFUf893RgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-arm64/-/typescript-freebsd-arm64-7.0.2.tgz", + "integrity": "sha512-W5NH4y/J0plIIS5b2xvTEkU7JFxyqdMAOgf+Ilhl0vHQXKO5dZoxd+C/jEtq56c4F3wk71RB4BMRQ2XdI+bwYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-freebsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-freebsd-x64/-/typescript-freebsd-x64-7.0.2.tgz", + "integrity": "sha512-UMGDx5sTpzNw3WiPebH7l90IWfJggEd+egHt/q6p7/Cm3zqoV7VxkGXt+3DxPIw8CcmvAB0j3sVVfbhX+M4Tpw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm/-/typescript-linux-arm-7.0.2.tgz", + "integrity": "sha512-gffT3xPz9sR7j/YJExkyPntrI0P2EP9XbOyWzth2/Gs0RstK+90RBcO0ncXoXy/beYll1SXw846Nf2zdnEz0QQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-arm64/-/typescript-linux-arm64-7.0.2.tgz", + "integrity": "sha512-Qh4eU4/y3yDjnfjjyPYihMj5/ODIlmt+Bzu17OI+fiSRDW57QmU5SiN63exPRNJPKUzcc1INa1NXdrJ+MqHjUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-loong64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-loong64/-/typescript-linux-loong64-7.0.2.tgz", + "integrity": "sha512-uEHck9i8hoAzXPiYRib1O7miOnz23SxIeVl6F4LXox+qov1K35jHcEW6VHKvZI+pyvl7fZEP4MCU5LYvIq1GuQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-mips64el": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-mips64el/-/typescript-linux-mips64el-7.0.2.tgz", + "integrity": "sha512-R4KvAMnE43W5Qeqb0Ly56O3mWMWIAgsMyz36DCaycd5nbg/9kzm0liw3JocfRqyJY0KPmzFjbswozXyW0DnIYA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-ppc64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-ppc64/-/typescript-linux-ppc64-7.0.2.tgz", + "integrity": "sha512-DORx5b3sd/4S7eayxm4FQv+A7CrkUIGRaHiwI8oiHTAI1fAPWhF4J0vAlkC8biAlHSVVwxMQ3tjZ2/DVbnQiiA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-riscv64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-riscv64/-/typescript-linux-riscv64-7.0.2.tgz", + "integrity": "sha512-wf0jqEDOjrPRnKwYRyyJDRo11KMbvMFrU+q4zqKyChODBzvlkbhNQfKvLxQCcwTpdDaXSHZTVuh0JoCrKCUMHQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-s390x": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-s390x/-/typescript-linux-s390x-7.0.2.tgz", + "integrity": "sha512-IkwJc3L7yhytWd/ewjyxNDfOmswCm9GWMJT/ue/dU4aZNbwZeYAetq42VyLmsmSjvoX7z74X6ZaYCtzAr0EuGw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-linux-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-linux-x64/-/typescript-linux-x64-7.0.2.tgz", + "integrity": "sha512-EYdf2cNg7rgCWJnxCdJ+F3V39O8ihb37eHAu1LK8oAFizgTQbPOK7zHHXbPt8rX24COqODXeI3sIf0fCXG7H/A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-arm64/-/typescript-netbsd-arm64-7.0.2.tgz", + "integrity": "sha512-+polYF4MF04aPpO5FTkHran9yUQDSXqy5GiSDKpsll5jy3l3+g9QLhpf39T+ePtefhXLOGrLl0QIjkQP6VnelA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-netbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-netbsd-x64/-/typescript-netbsd-x64-7.0.2.tgz", + "integrity": "sha512-8YIT0EHM/3dq10ZOVF/A7pc/YSMtbcecct4rWtexrnSCHOPcpC2KTLXfTCR6vDpnSiY12heNb1GiN/wu+T/FyA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-openbsd-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-arm64/-/typescript-openbsd-arm64-7.0.2.tgz", + "integrity": "sha512-APT8+ClYnuYm1u9+kgGXoMj2VzWzcymwh2gNSQVySHfkRDGOTVkoWLjCmOQSaO+PoqQ57B0flRp9SA+7GnnkzQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=18" + "node": ">=16.20.0" } }, - "node_modules/@types/node": { - "version": "22.15.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.3.tgz", - "integrity": "sha512-lX7HFZeHf4QG/J7tBZqrCAXwz9J5RD56Y6MpP0eJkka8p+K0RY/yBTW7CYFJ4VGCclxqOLKmiGP5juQc6MKgcw==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" + "node_modules/@typescript/typescript-openbsd-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-openbsd-x64/-/typescript-openbsd-x64-7.0.2.tgz", + "integrity": "sha512-yX7s+Q0Dln0Dt9tEzZsAjXXR/+ytBM7AlglaqyeMPxQszJ1JhlJdZ6jLA+IzldHtflX81em7lDao1xXu+aRRkg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=16.20.0" } }, - "node_modules/@types/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" + "node_modules/@typescript/typescript-sunos-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-sunos-x64/-/typescript-sunos-x64-7.0.2.tgz", + "integrity": "sha512-dLJDGaLZ1D4HPQn62u1n8mBDkJREwMsAkCdkwd4Ieqw+x3TUyTsqY0YiBCtE6H6OzzgGk3iuZ3vFWRS+E8/d1g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=16.20.0" } }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/@typescript/typescript-win32-arm64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-arm64/-/typescript-win32-arm64-7.0.2.tgz", + "integrity": "sha512-Gyl1Vy6OsWesLzmq+EP0Fb7b4Nid5232AvcA2SFcdYreldpNtYFFofPjnt62y9hQy7VTaZp65ICJjuAQRaVcIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@typescript/typescript-win32-x64": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@typescript/typescript-win32-x64/-/typescript-win32-x64-7.0.2.tgz", + "integrity": "sha512-0BQ3HkAHHlKLSp1qRvf3SUhGpGsDuhB/jgFw75guyqbxJqEaS0Cw/VFO8i2nHglJUzQCRtMMR/IBAKE3ETMC4g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.1.2.tgz", + "integrity": "sha512-fhJNGUdscQa4HkI0xFxwonWyhnVReCPDbXI7FH7jmzpnVCrFQI7PRrhWecO263610vOrs9tr2Y4xcf8uAdFxbw==", + "dev": true, "license": "MIT", "dependencies": { - "event-target-shim": "^5.0.0" + "@rolldown/pluginutils": "^1.0.1" }, "engines": { - "node": ">=6.5" + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "oxc-transform-react": "^0.152.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "oxc-transform-react": { + "optional": true + } } }, "node_modules/accepts": { @@ -84,42 +1113,166 @@ "node": ">= 0.6" } }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "node_modules/ajv": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "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", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "dev": true, "license": "MIT", "dependencies": { - "humanize-ms": "^1.2.1" + "environment": "^1.0.0" }, "engines": { - "node": ">= 8.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" + "node_modules/ansi-regex": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.4.0.tgz", + "integrity": "sha512-KzTVk2tCWAHtYrvvvaP8bJKJq2pVinhLcGEQdtLIYPbmNGNyYe8QwNaTUYQp2J7/vIsUKt5QCqAfUkYyG9DkOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/atomic-sleep": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/atomically": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/atomically/-/atomically-2.1.1.tgz", + "integrity": "sha512-P4w9o2dqARji6P7MHprklbfiArZAWvo07yW7qs3pdljb3BWr12FIB7W+p0zJiuiVsUpRO0iZn1kFFcpPegg0tQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "stubborn-fs": "^2.0.0", + "when-exit": "^2.1.4" + } + }, + "node_modules/auto-bind": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/auto-bind/-/auto-bind-5.0.1.tgz", + "integrity": "sha512-ooviqdwwgfIfNmDwo94wlshcdzfO64XV0Cg6oDsDYBJfITDz1EngD2z7DkbvCWn+XIMsIqW27sEVF6qcpJrRcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz", + "integrity": "sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", - "content-type": "^1.0.5", - "debug": "^4.4.0", - "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", + "content-type": "^2.0.0", + "debug": "^4.4.3", + "http-errors": "^2.0.1", + "iconv-lite": "^0.7.2", "on-finished": "^2.4.1", - "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" + "qs": "^6.15.2", + "raw-body": "^3.0.2", + "type-is": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/body-parser/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/bundle-name": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.1.tgz", + "integrity": "sha512-DdH81/zPLVS11EUgWq3tEu/xn+EzljlMYooDNdzWEnFha3R3NBMpMV1UqYIpjYHV/SgpFKMIX1Oh7o06SjM/oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "run-applescript": "^7.0.0" }, "engines": { "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/bytes": { @@ -160,28 +1313,115 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, "license": "MIT", "dependencies": { - "delayed-stream": "~1.0.0" + "readdirp": "^4.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/content-disposition": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", - "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "node_modules/cli-boxes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", + "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "5.2.1" + "restore-cursor": "^4.0.0" }, "engines": { - "node": ">= 0.6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", + "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^8.0.0", + "string-width": "^8.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/code-excerpt": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", + "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", + "dev": true, + "license": "MIT", + "dependencies": { + "convert-to-spaces": "^2.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/commander": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-13.1.0.tgz", + "integrity": "sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/content-disposition": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.1.0.tgz", + "integrity": "sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/content-type": { @@ -193,6 +1433,16 @@ "node": ">= 0.6" } }, + "node_modules/convert-to-spaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", + "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/cookie": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", @@ -239,9 +1489,9 @@ } }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -255,13 +1505,47 @@ } } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/default-browser": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.1.tgz", + "integrity": "sha512-m1pAzaJgZ/gssEqlOhJkPJp8Xly7QyW6xcrkUa2KKcDeDSEMP7X8xipU3snUcfisTQx0w1AGae+9UtJSfVnXGw==", + "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.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/depd": { @@ -273,6 +1557,16 @@ "node": ">= 0.8" } }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/dunder-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", @@ -293,6 +1587,13 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "license": "MIT" }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, "node_modules/encodeurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", @@ -302,6 +1603,19 @@ "node": ">= 0.8" } }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/es-define-property": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", @@ -321,9 +1635,9 @@ } }, "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -332,20 +1646,18 @@ "node": ">= 0.4" } }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "node_modules/es-toolkit": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.52.0.tgz", + "integrity": "sha512-XTNEJQh1tY1ZJVcf6ayP/2n4ZPyaHlW2FWs7xvw5ddPuhUVjLD3olQVQS7kf58JbAB48iL0uL/jerTrjtV3lDA==", + "dev": true, "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } + "workspaces": [ + "docs", + "benchmarks", + "tests/types", + "tests/browser-compat" + ] }, "node_modules/escape-html": { "version": "1.0.3", @@ -353,6 +1665,16 @@ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", "license": "MIT" }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", @@ -362,15 +1684,6 @@ "node": ">= 0.6" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/eventsource": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.6.tgz", @@ -393,18 +1706,19 @@ } }, "node_modules/express": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", "dependencies": { "accepts": "^2.0.0", - "body-parser": "^2.2.0", + "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", + "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", @@ -435,10 +1749,14 @@ } }, "node_modules/express-rate-limit": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-7.5.0.tgz", - "integrity": "sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.7.0.tgz", + "integrity": "sha512-hOwV7WOxXfjRpAM1DSJWZDXx3GhplwD8IfwuwvogD8i1Qnkgosw/H45s4ZnFAUHDAhPjlY9hLBvJhKmGMyY26g==", "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "ip-address": "^10.2.0" + }, "engines": { "node": ">= 16" }, @@ -446,13 +1764,53 @@ "url": "https://github.com/sponsors/express-rate-limit" }, "peerDependencies": { - "express": "^4.11 || 5 || ^5.0.0-beta.1" + "express": ">= 4.11" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz", + "integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, "node_modules/finalhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -463,242 +1821,656 @@ "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.7.0.tgz", + "integrity": "sha512-XjH1AECxf0giL2V1aU8vKyRR2ppRUb5c0EvT7zuJTokQ74bNo52zOtghqdWIqrhUD79fo3x0WfKZdOqxF6LG1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hono": { + "version": "4.13.13", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.13.13.tgz", + "integrity": "sha512-CQ46U0ZkAGmbT/4UxdzzGJpacP2IeKgY4a5/tOI9AABbpOMfK739wfDXmv1usCk+3RkKj1hQy4/fjhiwa2xlrA==", + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz", + "integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ink": { + "version": "6.8.0", + "resolved": "https://registry.npmjs.org/ink/-/ink-6.8.0.tgz", + "integrity": "sha512-sbl1RdLOgkO9isK42WCZlJCFN9hb++sX9dsklOvfd1YQ3bQ2AiFu12Q6tFlr0HvEUvzraJntQCCpfEoUe9DSzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alcalzone/ansi-tokenize": "^0.2.4", + "ansi-escapes": "^7.3.0", + "ansi-styles": "^6.2.1", + "auto-bind": "^5.0.1", + "chalk": "^5.6.0", + "cli-boxes": "^3.0.0", + "cli-cursor": "^4.0.0", + "cli-truncate": "^5.1.1", + "code-excerpt": "^4.0.0", + "es-toolkit": "^1.39.10", + "indent-string": "^5.0.0", + "is-in-ci": "^2.0.0", + "patch-console": "^2.0.0", + "react-reconciler": "^0.33.0", + "scheduler": "^0.27.0", + "signal-exit": "^3.0.7", + "slice-ansi": "^8.0.0", + "stack-utils": "^2.0.6", + "string-width": "^8.1.1", + "terminal-size": "^4.0.1", + "type-fest": "^5.4.1", + "widest-line": "^6.0.0", + "wrap-ansi": "^9.0.0", + "ws": "^8.18.0", + "yoga-layout": "~3.2.1" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@types/react": ">=19.0.0", + "react": ">=19.0.0", + "react-devtools-core": ">=6.1.2" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "react-devtools-core": { + "optional": true + } + } + }, + "node_modules/ip-address": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.3.tgz", + "integrity": "sha512-A1kdq/tSb5QjvKvAMgIoEvDBIgL7qaqVP/jkvSwYYRZ9iEzvPpopxp2wQfu3SuZRHtpHNxMn8Fs0bS+gf5Xmwg==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "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/form-data": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", - "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "mime-types": "^2.1.12" + "get-east-asian-width": "^1.3.1" }, "engines": { - "node": ">= 6" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", - "license": "MIT" - }, - "node_modules/form-data/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/is-in-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-in-ci/-/is-in-ci-2.0.0.tgz", + "integrity": "sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w==", + "dev": true, "license": "MIT", + "bin": { + "is-in-ci": "cli.js" + }, "engines": { - "node": ">= 0.6" + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/form-data/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, "license": "MIT", "dependencies": { - "mime-db": "1.52.0" + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" }, "engines": { - "node": ">= 0.6" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/formdata-node": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", + "license": "MIT" + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dev": true, "license": "MIT", "dependencies": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.3" + "is-inside-container": "^1.0.0" }, "engines": { - "node": ">= 12.20" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fresh": { + "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/jose": { + "version": "6.2.12", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.12.tgz", + "integrity": "sha512-9NiFmJEex0sy2Dk58j2UGBSHgUs2ypF9eZSu4L6vjOX3Dp96Sw1F3uL+H+D1sx02jZZdzUT0HgvCy59CuvXcWw==", "license": "MIT", "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/panva" } }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", - "license": "MIT", + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" + }, + "node_modules/json-schema-typed": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz", + "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==", + "license": "BSD-2-Clause" + }, + "node_modules/lightningcss": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.33.0.tgz", + "integrity": "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA==", + "dev": true, + "license": "MPL-2.0", "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" + "detect-libc": "^2.0.3" }, "engines": { - "node": ">= 0.4" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.33.0", + "lightningcss-darwin-arm64": "1.33.0", + "lightningcss-darwin-x64": "1.33.0", + "lightningcss-freebsd-x64": "1.33.0", + "lightningcss-linux-arm-gnueabihf": "1.33.0", + "lightningcss-linux-arm64-gnu": "1.33.0", + "lightningcss-linux-arm64-musl": "1.33.0", + "lightningcss-linux-x64-gnu": "1.33.0", + "lightningcss-linux-x64-musl": "1.33.0", + "lightningcss-win32-arm64-msvc": "1.33.0", + "lightningcss-win32-x64-msvc": "1.33.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.33.0.tgz", + "integrity": "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.33.0.tgz", + "integrity": "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.4" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", + "node_modules/lightningcss-darwin-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.33.0.tgz", + "integrity": "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.4" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", + "node_modules/lightningcss-freebsd-x64": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.33.0.tgz", + "integrity": "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">= 0.4" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.33.0.tgz", + "integrity": "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.4" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.33.0.tgz", + "integrity": "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.4" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.33.0.tgz", + "integrity": "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.8" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.33.0.tgz", + "integrity": "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.33.0.tgz", + "integrity": "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.10.0" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.33.0.tgz", + "integrity": "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 0.10" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.33.0.tgz", + "integrity": "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } }, "node_modules/math-intrinsics": { "version": "1.1.0", @@ -710,12 +2482,16 @@ } }, "node_modules/media-typer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", - "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz", + "integrity": "sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==", "license": "MIT", "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/merge-descriptors": { @@ -740,70 +2516,83 @@ } }, "node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", - "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=6" } }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "deprecated": "Use your platform's native DOMException instead", + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.20", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz", + "integrity": "sha512-uKdg2G3GNCKQn9byYOpxbGqrT2fGO5KRt5J/8b3pok8rT6qxGWF6hxMyJiEYtAf+FVyYuD9hRaDqX5uPFYJ4ZQ==", + "dev": true, "funding": [ { "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" + "url": "https://github.com/sponsors/ai" } ], "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, "engines": { - "node": ">=10.5.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "node_modules/negotiator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz", + "integrity": "sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==", "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "content-type": "^2.1.0" }, "engines": { - "node": "4.x || >=6.0.0" + "node": ">=18" }, - "peerDependencies": { - "encoding": "^0.1.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/negotiator/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/object-assign": { @@ -827,6 +2616,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/on-exit-leak-free": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -848,28 +2647,70 @@ "wrappy": "1" } }, - "node_modules/openai": { - "version": "4.96.2", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.96.2.tgz", - "integrity": "sha512-R2XnxvMsizkROr7BV3uNp1q/3skwPZ7fmPjO1bXLnfB4Tu5xKxrT1EVwzjhxn0MZKBKAvOaGWS63jTMN6KrIXA==", - "license": "Apache-2.0", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" + "mimic-fn": "^2.1.0" }, - "bin": { - "openai": "bin/cli" + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openai": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-7.28.0.tgz", + "integrity": "sha512-HSY4fFLflQGYe2kvO0atm6/GzhD61gpyiOZZUvO4nptMUhuB1to2K3wwFpFqc5gfEK0SxyIIFiu1yE2MtygWcA==", + "license": "Apache-2.0", + "engines": { + "node": ">=22.0.0" }, "peerDependencies": { - "ws": "^8.18.0", - "zod": "^3.23.8" + "@aws-sdk/credential-provider-node": ">=3.972.0 <4", + "@smithy/hash-node": ">=4.3.0 <5", + "@smithy/signature-v4": ">=5.4.0 <6", + "undici": ">=5 <9", + "ws": "^8.21.0", + "zod": "^3.25 || ^4.0" }, "peerDependenciesMeta": { + "@aws-sdk/credential-provider-node": { + "optional": true + }, + "@smithy/hash-node": { + "optional": true + }, + "@smithy/signature-v4": { + "optional": true + }, + "undici": { + "optional": true + }, "ws": { "optional": true }, @@ -878,21 +2719,6 @@ } } }, - "node_modules/openai/node_modules/@types/node": { - "version": "18.19.87", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.87.tgz", - "integrity": "sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A==", - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/openai/node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "license": "MIT" - }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -902,6 +2728,16 @@ "node": ">= 0.8" } }, + "node_modules/patch-console": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/patch-console/-/patch-console-2.0.0.tgz", + "integrity": "sha512-0YNdUceMdaQwoKce1gatDScmMo5pu/tfABfnzEqeG0gtTmd7mh/WcwgUjtAeOU7N8nFFlbQBnFK2gXW5fGvmMA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -912,14 +2748,75 @@ } }, "node_modules/path-to-regexp": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", - "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz", + "integrity": "sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.7.tgz", + "integrity": "sha512-qcJu88Q2IWqJsDD529JKMdwGm/dvInW4HvQnRwiH9JtihJvzGOscDtHE3x1pBKeUOTysQ8kVmLnJ2kJu7yhcGA==", + "dev": true, "license": "MIT", "engines": { - "node": ">=16" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pino": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.14.0.tgz", + "integrity": "sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pinojs/redact": "^0.4.0", + "atomic-sleep": "^1.0.0", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^2.0.0", + "pino-std-serializers": "^7.0.0", + "process-warning": "^5.0.0", + "quick-format-unescaped": "^4.0.3", + "real-require": "^0.2.0", + "safe-stable-stringify": "^2.3.1", + "sonic-boom": "^4.0.1", + "thread-stream": "^3.0.0" + }, + "bin": { + "pino": "bin.js" } }, + "node_modules/pino-abstract-transport": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" + } + }, + "node_modules/pino-std-serializers": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz", + "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==", + "dev": true, + "license": "MIT" + }, "node_modules/pkce-challenge": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.0.tgz", @@ -929,10 +2826,68 @@ "node": ">=16.20.0" } }, + "node_modules/postcss": { + "version": "8.5.29", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.29.tgz", + "integrity": "sha512-49cGhUbXj8Qenv0iTMxA1cFBzxXoctpC9Ujd77t1WcbJIr6nF/eI7g/8MgxrYldFRuAXvja7xQRwavoW7kgrxQ==", + "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.19", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/process-warning": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.1.0.tgz", + "integrity": "sha512-jQSaVHsPgtyw60e1rQ/A+/ArPEj/S8pS/vFnyGa/gYFXrKk/6RuDkoqVDQ5NI5MmS01698ltlAk0NoDBNLujRw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" + } + }, "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz", + "integrity": "sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==", "license": "MIT", "dependencies": { "forwarded": "0.2.0", @@ -940,15 +2895,20 @@ }, "engines": { "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "version": "6.16.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.16.0.tgz", + "integrity": "sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==", "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.1.0" + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" }, "engines": { "node": ">=0.6" @@ -957,28 +2917,159 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/quick-format-unescaped": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "dev": true, + "license": "MIT" + }, "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", "license": "MIT", "engines": { "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/raw-body": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", - "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz", + "integrity": "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.6.3", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.10" + } + }, + "node_modules/react": { + "version": "19.3.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.3.0.tgz", + "integrity": "sha512-E8LUcbtBWt20bbl2YoHfx4ZDBdxVTfOKtCZn9cDSJ4l6/nuoApcpIBcj47t2wZoVX8g2ZHuMHbiShgCR1T5Sog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-reconciler": { + "version": "0.33.0", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.33.0.tgz", + "integrity": "sha512-KetWRytFv1epdpJc3J4G75I4WrplZE5jOL7Yq0p34+OVOKF4Se7WrdIdVC45XsSSmUTlht2FM/fM1FZb1mfQeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "scheduler": "^0.27.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^19.2.0" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/real-require": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/rolldown": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.2.12.tgz", + "integrity": "sha512-8wafseiaG80xmXSfqidUNqZcylTlhmPZZt+za2m+js2sFZ8dTNlhIOV2WcbIPx2hgwPBJpEUGFAMZ9bgBBLTSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.152.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm-eabi": "1.2.12", + "@rolldown/binding-android-arm64": "1.2.12", + "@rolldown/binding-darwin-arm64": "1.2.12", + "@rolldown/binding-darwin-x64": "1.2.12", + "@rolldown/binding-freebsd-x64": "1.2.12", + "@rolldown/binding-linux-arm-gnueabihf": "1.2.12", + "@rolldown/binding-linux-arm64-gnu": "1.2.12", + "@rolldown/binding-linux-arm64-musl": "1.2.12", + "@rolldown/binding-linux-ppc64-gnu": "1.2.12", + "@rolldown/binding-linux-s390x-gnu": "1.2.12", + "@rolldown/binding-linux-x64-gnu": "1.2.12", + "@rolldown/binding-linux-x64-musl": "1.2.12", + "@rolldown/binding-openharmony-arm64": "1.2.12", + "@rolldown/binding-win32-arm64-msvc": "1.2.12", + "@rolldown/binding-win32-x64-msvc": "1.2.12" } }, "node_modules/router": { @@ -997,25 +3088,28 @@ "node": ">= 18" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "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/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } }, "node_modules/safer-buffer": { "version": "2.1.2", @@ -1023,32 +3117,43 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "dev": true, + "license": "MIT" + }, "node_modules/send": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", - "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", "license": "MIT", "dependencies": { - "debug": "^4.3.5", + "debug": "^4.4.3", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "mime-types": "^3.0.1", + "http-errors": "^2.0.1", + "mime-types": "^3.0.2", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", - "statuses": "^2.0.1" + "statuses": "^2.0.2" }, "engines": { "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/serve-static": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", - "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", "license": "MIT", "dependencies": { "encodeurl": "^2.0.0", @@ -1058,6 +3163,10 @@ }, "engines": { "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/setprototypeof": { @@ -1088,14 +3197,14 @@ } }, "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" }, @@ -1107,13 +3216,13 @@ } }, "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" @@ -1159,15 +3268,185 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/slice-ansi": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/sonic-boom": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz", + "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "atomic-sleep": "^1.0.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz", + "integrity": "sha512-KGj/8Y43x35aZVDtt+J4mK1hoLGHULMYfSkODJNQjNDC3oW1PqPoxMwo0pLUsWM/UEGzON/NxeHywEfNXNP3Vw==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", "engines": { "node": ">= 0.8" } }, + "node_modules/string-width": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.3.0.tgz", + "integrity": "sha512-ZbmZM0JCihQN91dWnxoipT2KOEyHqEyfRXUyjuRhW8b/xnqPDoq4gWEVApTVa9db2wN8mmoikgFBbjh71+cGeQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/stubborn-fs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stubborn-fs/-/stubborn-fs-2.0.0.tgz", + "integrity": "sha512-Y0AvSwDw8y+nlSNFXMm2g6L51rBGdAQT20J3YSOqxC53Lo3bjWRtr2BKcfYoAf352WYpsZSTURrA0tqhfgudPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "stubborn-utils": "^1.0.1" + } + }, + "node_modules/stubborn-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stubborn-utils/-/stubborn-utils-1.0.2.tgz", + "integrity": "sha512-zOh9jPYI+xrNOyisSelgym4tolKTJCQd5GBhK0+0xJvcYDcwlOoxF/rnFKQ2KRZknXSG9jWAp66fwP6AxN9STg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tagged-tag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz", + "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terminal-size": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/terminal-size/-/terminal-size-4.0.1.tgz", + "integrity": "sha512-avMLDQpUI9I5XFrklECw1ZEUPJhqzcwSWsyyI8blhRLT+8N1jLJWLWWYQpB2q2xthq8xDvjZPISVh53T/+CLYQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/thread-stream": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.2.0.tgz", + "integrity": "sha512-zLBvqpwr4Esa0kRjcrzGU6zL25lePWaCLMx0RQFrmteozIfeNdaMLpG5U7PeHzvlFkAWaRKA9/KVW4F60iB+qw==", + "dev": true, + "license": "MIT", + "dependencies": { + "real-require": "^0.2.0" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", @@ -1177,50 +3456,103 @@ "node": ">=0.6" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/type": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", - "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", - "license": "ISC" + "node_modules/type-fest": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.10.0.tgz", + "integrity": "sha512-NoSdpq/WEiAg5sjmBkmV/hfxv6HJH4NqPNrqjtSO5CwRmpsDfaf4begxW34KdJykH/l1yHtwBWQkCRdoXO8mPA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "dependencies": { + "tagged-tag": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/type-is": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", - "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", "license": "MIT", "dependencies": { - "content-type": "^1.0.5", + "content-type": "^2.0.0", "media-typer": "^1.1.0", "mime-types": "^3.0.0" }, "engines": { - "node": ">= 0.6" + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/type-is/node_modules/content-type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz", + "integrity": "sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-7.0.2.tgz", + "integrity": "sha512-8FYau96o3NKOhbjKi/qNvG/W5jhzxkbdm5sj9AbZ/5T5sWqn3hJgLfGx27sRKZWTvyzCP8dLRBTf5tBTSRVUNA==", "dev": true, "license": "Apache-2.0", "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "tsc": "bin/tsc" }, "engines": { - "node": ">=14.17" + "node": ">=16.20.0" + }, + "optionalDependencies": { + "@typescript/typescript-aix-ppc64": "7.0.2", + "@typescript/typescript-darwin-arm64": "7.0.2", + "@typescript/typescript-darwin-x64": "7.0.2", + "@typescript/typescript-freebsd-arm64": "7.0.2", + "@typescript/typescript-freebsd-x64": "7.0.2", + "@typescript/typescript-linux-arm": "7.0.2", + "@typescript/typescript-linux-arm64": "7.0.2", + "@typescript/typescript-linux-loong64": "7.0.2", + "@typescript/typescript-linux-mips64el": "7.0.2", + "@typescript/typescript-linux-ppc64": "7.0.2", + "@typescript/typescript-linux-riscv64": "7.0.2", + "@typescript/typescript-linux-s390x": "7.0.2", + "@typescript/typescript-linux-x64": "7.0.2", + "@typescript/typescript-netbsd-arm64": "7.0.2", + "@typescript/typescript-netbsd-x64": "7.0.2", + "@typescript/typescript-openbsd-arm64": "7.0.2", + "@typescript/typescript-openbsd-x64": "7.0.2", + "@typescript/typescript-sunos-x64": "7.0.2", + "@typescript/typescript-win32-arm64": "7.0.2", + "@typescript/typescript-win32-x64": "7.0.2" + } + }, + "node_modules/undici": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/undici/-/undici-8.11.2.tgz", + "integrity": "sha512-u4UB2/IrKdU6lFxumHmmo1a3fCQO5tzQllRorfoRS63txhrB7xTpSn1PftwC4qEHkOaqP95fCWW4lJzwErwzhQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=22.19.0" } }, "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.24.6.tgz", + "integrity": "sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==", + "dev": true, "license": "MIT" }, "node_modules/unpipe": { @@ -1241,30 +3573,90 @@ "node": ">= 0.8" } }, - "node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "node_modules/vite": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.3.2.tgz", + "integrity": "sha512-SQr1x6W5vVSbROg7vsyXIaxK9b0G7zsT68acdWWRmnBUsgDieLCRG+Rep9WdZgcposvv/GSnr4GUUBqB3vXq6w==", + "dev": true, "license": "MIT", + "dependencies": { + "lightningcss": "^1.33.0", + "picomatch": "^4.0.7", + "postcss": "^8.5.28", + "rolldown": "~1.2.11", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, "engines": { - "node": ">= 14" + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.7.1", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "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/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } + "node_modules/when-exit": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/when-exit/-/when-exit-2.1.5.tgz", + "integrity": "sha512-VGkKJ564kzt6Ms1dbgPP/yuIoQCrsFAnRbptpC5wOEsDaNsbCB2bnfnaA8i/vRs5tjUSEOtIuvl9/MyVsvQZCg==", + "dev": true, + "license": "MIT" }, "node_modules/which": { "version": "2.0.2", @@ -1281,28 +3673,141 @@ "node": ">= 8" } }, + "node_modules/widest-line": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-6.0.0.tgz", + "integrity": "sha512-U89AsyEeAsyoF0zVJBkG9zBgekjgjK7yk9sje3F4IQpXBJ10TF6ByLlIfjMhcmHMJgHZI4KHt4rdNfktzxIAMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^8.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", + "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/wrap-ansi/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "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/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "license": "ISC" }, + "node_modules/ws": { + "version": "8.22.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.22.0.tgz", + "integrity": "sha512-Ydggc987+RO0AnWtZ/7Wq9FtNvcrL1b/RO0ud9mWjUPgDrsAAwQSF51sm2hm1XofbU/4jkpGEsLFsZZxU+1DOg==", + "devOptional": 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/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yaml": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.1.tgz", + "integrity": "sha512-3NxN8+78OdzbT7C/WjGsyfPAtJaN3FNDsWxv7Y7mcDsT/oOmgW8BpyQQFFBnvZE3j9Y2Sdz1ULFLezL7Eb2yFw==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yoga-layout": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/yoga-layout/-/yoga-layout-3.2.1.tgz", + "integrity": "sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==", + "dev": true, + "license": "MIT" + }, "node_modules/zod": { - "version": "3.24.3", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.3.tgz", - "integrity": "sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==", + "version": "4.6.5", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.6.5.tgz", + "integrity": "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/colinhacks" } }, "node_modules/zod-to-json-schema": { - "version": "3.24.5", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", - "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", + "version": "3.25.2", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz", + "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==", "license": "ISC", "peerDependencies": { - "zod": "^3.24.1" + "zod": "^3.25.28 || ^4" } } } diff --git a/lessons/08-mcp-advanced/solutions/package.json b/lessons/08-mcp-advanced/solutions/package.json index 802ecb3c..fff73e40 100644 --- a/lessons/08-mcp-advanced/solutions/package.json +++ b/lessons/08-mcp-advanced/solutions/package.json @@ -4,23 +4,24 @@ "weather": "./build/index.js" }, "scripts": { - "client": "tsc && node ./build/client.js", - "build": "tsc && node ./build/index.js", - "inspect": "npx @modelcontextprotocol/inspector --cli node build/index.js --method tools/list", - "tool": "npx @modelcontextprotocol/inspector --cli node build/index.js --method tools/call --tool-name characterDetails --tool-arg name=Ada" + "client": "npm run build && node --env-file-if-exists=../../../.env build/client.js", + "build": "tsc", + "start": "node build/index.js", + "inspect": "npm run build && mcp-inspector --cli node build/index.js --method tools/list", + "inspect:web": "npm run build && mcp-inspector --web node build/index.js", + "tool": "npm run build && mcp-inspector --cli node build/index.js --method tools/call --tool-name characterDetails --tool-arg name=\"Ada Lovelace\"" }, "files": [ "build" ], "dependencies": { - "@modelcontextprotocol/sdk": "^1.8.0", - "express": "^5.0.1", - "openai": "^4.96.2", - "type": "^2.7.3", - "zod": "^3.24.2" + "@modelcontextprotocol/sdk": "^1.32.1", + "openai": "^7.28.0", + "zod": "^4.6.5" }, "devDependencies": { - "@types/node": "^22.13.17", - "typescript": "^5.8.2" + "@modelcontextprotocol/inspector": "^2.9.0", + "@types/node": "^24.19.1", + "typescript": "^7.0.2" } } diff --git a/lessons/08-mcp-advanced/solutions/src/client.ts b/lessons/08-mcp-advanced/solutions/src/client.ts index 40ccc0b8..1d07f41e 100644 --- a/lessons/08-mcp-advanced/solutions/src/client.ts +++ b/lessons/08-mcp-advanced/solutions/src/client.ts @@ -1,134 +1,104 @@ import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"; -import { Transport } from "@modelcontextprotocol/sdk/shared/transport.js"; +import { CallToolResultSchema, type Tool } from "@modelcontextprotocol/sdk/types.js"; +import type { Transport } from "@modelcontextprotocol/sdk/shared/transport.js"; +import { fileURLToPath } from "node:url"; +import path from "node:path"; import OpenAI from "openai"; -import { z } from "zod"; // Import zod for schema validation - -class MyClient { - private openai: OpenAI; - private client: Client; - constructor(){ - this.openai = new OpenAI({ - baseURL: "https://models.inference.ai.azure.com", // might need to change to this url in the future: https://models.github.ai/inference - apiKey: process.env.GITHUB_TOKEN, - }); - - - - this.client = new Client( - { - name: "example-client", - version: "1.0.0" - }, - { - capabilities: { - prompts: {}, - resources: {}, - tools: {} - } - } - ); +import { z } from "zod"; + +export class MyClient { + private readonly openai: OpenAI; + private readonly client: Client; + private readonly model: string; + + constructor() { + const endpoint = process.env.AI_ENDPOINT?.trim(); + const apiKey = process.env.AI_API_KEY?.trim(); + const model = process.env.AI_MODEL?.trim(); + if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); } - - async connectToServer(transport: Transport) { - await this.client.connect(transport); - this.run(); - console.error("MCPClient started on stdin/stdout"); + this.model = model; + this.openai = new OpenAI({ baseURL: endpoint, apiKey, timeout: 60000 }); + this.client = new Client({ name: "example-client", version: "1.0.0" }); + } + + async connectToServer(transport: Transport): Promise { + try { + await this.client.connect(transport); + await this.run(); + } finally { + await this.client.close(); } - - openAiToolAdapter(tool: { - name: string; - description?: string; - input_schema: any; - }) { - // Create a zod schema based on the input_schema - const schema = z.object(tool.input_schema); - - return { - type: "function" as const, // Explicitly set type to "function" - function: { - name: tool.name, - description: tool.description, - parameters: { - type: "object", - properties: tool.input_schema.properties, - required: tool.input_schema.required, - }, - }, - }; + } + + private openAiToolAdapter(tool: Tool): OpenAI.Chat.Completions.ChatCompletionFunctionTool { + return { + type: "function", + function: { + name: tool.name, + description: tool.description, + parameters: tool.inputSchema + } + }; + } + + private async callTools( + calls: OpenAI.Chat.Completions.ChatCompletionMessageToolCall[], + allowedNames: Set + ): Promise { + const results: OpenAI.Chat.Completions.ChatCompletionToolMessageParam[] = []; + for (const call of calls) { + if (call.type !== "function" || !allowedNames.has(call.function.name)) { + throw new Error("The model requested an unsupported MCP tool."); + } + const args = z.record(z.string(), z.unknown()).parse(JSON.parse(call.function.arguments)); + const result = CallToolResultSchema.parse(await this.client.callTool({ + name: call.function.name, + arguments: args + })); + const text = result.content.filter(item => item.type === "text").map(item => item.text).join("\n"); + if (result.isError) throw new Error(`MCP tool failed: ${text}`); + if (!text) throw new Error("The MCP tool did not return text."); + console.log(`Result from [${call.function.name}]:`, text); + results.push({ role: "tool", tool_call_id: call.id, content: text }); } - - async callTools( - tool_calls: OpenAI.Chat.Completions.ChatCompletionMessageToolCall[], - toolResults: any[] - ) { - for (const tool_call of tool_calls) { - const toolName = tool_call.function.name; - const args = tool_call.function.arguments; - - console.log(`Calling tool ${toolName} with args ${JSON.stringify(args)}`); - - - // 2. Call the server's tool - const toolResult = await this.client.callTool({ - name: toolName, - arguments: JSON.parse(args), - }); - - console.log("Tool result: ", toolResult); - - // 3. Do something with the result - // TODO for you to implement - - } - } - - async run() { - console.log("Asking server for available tools"); - const toolsResult = await this.client.listTools(); - const tools = toolsResult.tools.map((tool) => { - return this.openAiToolAdapter({ - name: tool.name, - description: tool.description, - input_schema: tool.inputSchema, - }); - }); - - const messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = [ - { - role: "user", - content: "Tell me about Ada Lovelace", - }, - ]; - - console.log("Querying LLM: ", messages[0].content); - let response = await this.openai.chat.completions.create({ - model: "gpt-4o-mini", - max_tokens: 1000, - messages, - tools: tools, - }); - - console.log("LLM response: ", response.choices[0].message.content); - - let results: any[] = []; - - // 1. Go through the LLM response,for each choice, check if it has tool calls - response.choices.map(async (choice: { message: any; }) => { - const message = choice.message; - if (message.tool_calls) { - console.log("Making tool call") - await this.callTools(message.tool_calls, results); - } - }); - } - + return results; + } + + private async run(): Promise { + const { tools: serverTools } = await this.client.listTools(); + const allowedNames = new Set(serverTools.map(tool => tool.name)); + const tools = serverTools.map(tool => this.openAiToolAdapter(tool)); + console.log("Available tools:", [...allowedNames]); + const messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = [{ + role: "user", + content: "Use the characterDetails tool to tell me briefly about Ada Lovelace." + }]; + const completion = await this.openai.chat.completions.create({ + model: this.model, messages, tools, tool_choice: "required" + }); + const message = completion.choices[0]?.message; + if (!message?.tool_calls?.length) throw new Error("The model did not request a tool."); + messages.push(message, ...await this.callTools(message.tool_calls, allowedNames)); + const followUp = await this.openai.chat.completions.create({ + model: this.model, messages, tools, tool_choice: "none" + }); + const answer = followUp.choices[0]?.message?.content; + if (!answer?.trim()) throw new Error("The model did not return a final answer."); + console.log(answer); + } } -let client = new MyClient(); - const transport = new StdioClientTransport({ - command: "node", - args: ["./build/index.js"] - }); - -client.connectToServer(transport); +if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) { + const client = new MyClient(); + const transport = new StdioClientTransport({ + command: process.execPath, + args: [fileURLToPath(new URL("./index.js", import.meta.url))] + }); + client.connectToServer(transport).catch(error => { + console.error("Error in client:", error instanceof Error ? error.message : String(error)); + process.exitCode = 1; + }); +} diff --git a/lessons/08-mcp-advanced/solutions/src/index.ts b/lessons/08-mcp-advanced/solutions/src/index.ts index da3b7a3f..80578279 100644 --- a/lessons/08-mcp-advanced/solutions/src/index.ts +++ b/lessons/08-mcp-advanced/solutions/src/index.ts @@ -1,63 +1,40 @@ -import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js"; +import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; -import { promises as fs } from "fs"; -import path from "path"; - - -// Create an MCP server -const server = new McpServer({ - name: "Demo", - version: "1.0.0" -}); - -// Add a tool -server.tool("characterDetails", - { name: z.string() }, - async ({ name }) => { - - console.log(`Received character name: ${name}`); - - const url = `https://en.wikipedia.org/api/rest_v1/page/summary/${encodeURIComponent(name)}`; // Changed 'title' to 'name' - const response = await fetch(url); - if (!response.ok) throw new Error("Failed to fetch character details"); - const data = await response.json(); - const responseText = data.extract; // This contains the summary text - - return { - content: [{ type: "text", text: `Character: ${responseText}` }] - }; - } -); - -// Add a tool -server.tool("place", - { name: z.string() }, - async ({ name }) => { - - console.log(`Received name of place: ${name}`); - - const url = `https://en.wikipedia.org/api/rest_v1/page/summary/${encodeURIComponent(name)}`; // Changed 'title' to 'name' - const response = await fetch(url); - if (!response.ok) throw new Error("Failed to fetch place details"); - const data = await response.json(); - const responseText = data.extract; // This contains the summary text - - return { - content: [{ type: "text", text: `Place: ${responseText}` }] - }; - } -); - -// Start receiving messages on stdin and sending messages on stdout +import { fileURLToPath } from "node:url"; +import path from "node:path"; +async function summary(name: string): Promise { + const response = await fetch(`https://en.wikipedia.org/api/rest_v1/page/summary/${encodeURIComponent(name)}`, { + headers: { "User-Agent": "GenerativeAIJavaScriptCourse/1.0 (https://github.com/microsoft/generative-ai-with-javascript)" }, + signal: AbortSignal.timeout(30000) + }); + if (!response.ok) throw new Error(`Wikipedia request failed: HTTP ${response.status}.`); + const data: unknown = await response.json(); + return z.object({ extract: z.string().min(1) }).parse(data).extract; +} -async function main() { - const transport = new StdioServerTransport(); - await server.connect(transport); - console.error("MCPServer started on stdin/stdout"); +export function createServer(getSummary: (name: string) => Promise = summary): McpServer { + const server = new McpServer({ name: "Demo", version: "1.0.0" }); + server.registerTool("characterDetails", { + description: "Get a Wikipedia summary of a historical character", + inputSchema: { name: z.string().trim().min(1).max(200) } + }, async ({ name }) => ({ + content: [{ type: "text", text: `Character: ${await getSummary(name)}` }] + })); + + server.registerTool("place", { + description: "Get a Wikipedia summary of a place", + inputSchema: { name: z.string().trim().min(1).max(200) } + }, async ({ name }) => ({ + content: [{ type: "text", text: `Place: ${await getSummary(name)}` }] + })); + + return server; } -main().catch((error) => { - console.error("Fatal error: ", error); - process.exit(1); -}); +if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) { + createServer().connect(new StdioServerTransport()).catch(error => { + console.error("Error in server:", error instanceof Error ? error.message : String(error)); + process.exitCode = 1; + }); +} diff --git a/lessons/08-mcp-advanced/solutions/tsconfig.json b/lessons/08-mcp-advanced/solutions/tsconfig.json index b01bd618..3230f00f 100644 --- a/lessons/08-mcp-advanced/solutions/tsconfig.json +++ b/lessons/08-mcp-advanced/solutions/tsconfig.json @@ -1,15 +1,15 @@ { "compilerOptions": { "target": "ES2022", - "module": "Node16", - "moduleResolution": "Node16", + "module": "NodeNext", + "moduleResolution": "NodeNext", "outDir": "./build", "rootDir": "./src", "strict": true, + "types": ["node"], "esModuleInterop": true, "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "noImplicitAny": false + "forceConsistentCasingInFileNames": true }, "include": ["src/**/*"], "exclude": ["node_modules"] diff --git a/lessons/08-mcp-advanced/translations/README.fr.md b/lessons/08-mcp-advanced/translations/README.fr.md index 56d4f923..9d79a6f6 100644 --- a/lessons/08-mcp-advanced/translations/README.fr.md +++ b/lessons/08-mcp-advanced/translations/README.fr.md @@ -91,14 +91,14 @@ Si vous souhaitez interagir avec Hedy, exécutez l'application [Characters](/app 1. Lancez un [![GitHub Codespace](https://img.shields.io/badge/GitHub-Codespace-brightgreen)](https://codespaces.new/microsoft/generative-ai-with-javascript). 2. Naviguez vers */app* à la racine du dépôt. -3. Localisez la console et exécutez `npm install` suivi de `npm start`. +3. Localisez la console et exécutez `npm ci` suivi de `npm start`. 4. Une fois que l'application est ouverte, sélectionnez le bouton "Ouvrir dans le navigateur". 5. Discuter avec Hedy. Pour une explication plus détaillée de l'application, voir [Explication détaillée de l'application](/lessons/01-intro-to-genai/README.md#interact-with-dinocrates). > [!NOTE] -> Si vous exécutez le projet localement sur votre machine, veuillez consulter le guide de démarrage rapide pour configurer un [token d'accès personnel GitHub](/docs/setup/README.md#creating-a-personal-access-token-pat-for-github-model-access) et remplacer la clé dans le code. +> Configurez `AI_ENDPOINT`, `AI_API_KEY` et `AI_MODEL` dans le fichier `.env` à la racine du dépôt, en local comme dans Codespaces. Consultez le [guide de configuration](/docs/setup/README.md#configure-environment-variables). ## Ajouter un modèle de langage à grande échelle à un client @@ -131,76 +131,76 @@ Voici toutes les étapes en code : ```typescript import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"; +import { CallToolResultSchema } from "@modelcontextprotocol/sdk/types.js"; +import { fileURLToPath } from "node:url"; +import { OpenAI } from "openai"; +import { z } from "zod"; + +const endpoint = process.env.AI_ENDPOINT?.trim(); +const apiKey = process.env.AI_API_KEY?.trim(); +const model = process.env.AI_MODEL?.trim(); +if (!endpoint || !apiKey || !model) { + throw new Error("Set AI_ENDPOINT, AI_API_KEY, and AI_MODEL before running the sample."); +} - -// create client instance +const openai = new OpenAI({ baseURL: endpoint, apiKey, timeout: 60000 }); +const client = new Client({ name: "example-client", version: "1.0.0" }); const transport = new StdioClientTransport({ - command: "node", - args: ["server.js"] + command: process.execPath, + args: [fileURLToPath(new URL("./index.js", import.meta.url))] }); -const client = new Client( - { - name: "example-client", - version: "1.0.0" +try { + await client.connect(transport); + const { tools: serverTools } = await client.listTools(); + const allowedNames = new Set(serverTools.map(tool => tool.name)); + const tools: OpenAI.Chat.Completions.ChatCompletionTool[] = serverTools.map(tool => ({ + type: "function", + function: { + name: tool.name, + description: tool.description, + parameters: tool.inputSchema + } + })); + console.log("Available tools:", [...allowedNames]); + const messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[] = [ + { role: "user", content: "Use the add tool to add 5 and 10." } + ]; + const completion = await openai.chat.completions.create({ + model, messages, tools, tool_choice: "required" + }); + const message = completion.choices[0]?.message; + if (!message?.tool_calls?.length) throw new Error("The model did not request a tool."); + messages.push(message); + for (const call of message.tool_calls) { + if (call.type !== "function" || !allowedNames.has(call.function.name)) { + throw new Error("The model requested an unsupported MCP tool."); + } + const args = z.record(z.string(), z.unknown()).parse(JSON.parse(call.function.arguments)); + const result = CallToolResultSchema.parse(await client.callTool({ + name: call.function.name, + arguments: args + })); + const text = result.content.filter(item => item.type === "text").map(item => item.text).join("\n"); + if (result.isError) throw new Error(`MCP tool failed: ${text}`); + if (!text) throw new Error("The MCP tool did not return text."); + console.log("Result from tool:", text); + messages.push({ role: "tool", tool_call_id: call.id, content: text }); } -); - -await client.connect(transport); - -// 1. make call to server, ask it for tools -const { tools } = await client.listTools(); - -// convert function -function toToolSchema(method, schema) { - return { - name: method, - description: `This is a tool that does ${method}`, - parameters: schema, - }; + const followUp = await openai.chat.completions.create({ + model, messages, tools, tool_choice: "none" + }); + const answer = followUp.choices[0]?.message?.content; + if (!answer?.trim()) throw new Error("The model did not return a final answer."); + console.log(answer); +} finally { + await client.close(); } - -// 2. convert the tools and resources response to a tools schema -const toolsForLLM = tools.map((tool) => { - return toToolSchema(tool.method, tool.inputSchema); -}); - -// 3. instantiate openai client -const openai = new OpenAI({ - apiKey: process.env.OPENAI_API_KEY, - model: "gpt-3.5-turbo", - temperature: 0.7, -}); - -// 4. make chat completion call to openai -const response = await openai.chat.completions.create({ - messages: [ - { - role: "user", - content: `I want to add 5 and 10. Please use the tool ${toolsForLLM}`, - }, - ], - functions: toolsForLLM, - function_call: "auto", -}); - -// 5. figure out what tool to call based on the response from openai -const toolName = response.choices[0].message.function_call.name; // add -const args = response.choices[0].message.function_call.arguments; // { a: 5, b: 10 } - -// 6. call the tool on the server -const result = await client.callTool({ - name: toolName, - arguments: args, -}); - -// 7. respond to user -console.log(result); // 15 ``` Dans le code précédent, nous avons (en nous concentrant sur nos ajouts) : -* Créé une fonction `toToolSchema` qui convertit la réponse des outils et ressources en un schéma utilisable par le LLM. +* Créé une fonction `tools.map` qui convertit la réponse des outils et ressources en un schéma utilisable par le LLM. * Demandé au serveur les outils et ressources disponibles. * Converti la réponse des outils et ressources en un schéma utilisable par le LLM. * Effectué un appel de complétion au modèle d'IA, en passant les outils convertis en paramètre. @@ -233,7 +233,7 @@ Dans le code précédent, nous avons (en nous concentrant sur nos ajouts) : ## Solution -[Solution](/lessons/08-mcp-advanced/solution/README.md) +[Solution](/lessons/08-mcp-advanced/solutions/README.md) ## Vérification des connaissances @@ -245,7 +245,7 @@ B. Cela crée une conversation plus naturelle entre l’utilisateur et le serveu C. Il est préférable d'avoir le LLM sur le serveur. -[Solution quiz](/lessons/08-mcp-advanced/solution/solution-quiz.md) +[Solution quiz](/lessons/08-mcp-advanced/solutions/solution-quiz.md) ## Résumé diff --git a/package-lock.json b/package-lock.json index f3e62c8b..15a3854d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,17 +8,17 @@ "name": "genai-js", "version": "1.0.0", "dependencies": { - "@github/copilot-sdk": "^0.1.23", - "openai": "^4.78.1" + "@github/copilot-sdk": "1.0.16", + "openai": "^7.28.0" }, "devDependencies": { - "tsx": "^4.21.0" + "tsx": "^4.23.15" } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", - "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.2.tgz", + "integrity": "sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==", "cpu": [ "ppc64" ], @@ -33,9 +33,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", - "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.2.tgz", + "integrity": "sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==", "cpu": [ "arm" ], @@ -50,9 +50,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", - "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.2.tgz", + "integrity": "sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==", "cpu": [ "arm64" ], @@ -67,9 +67,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", - "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.2.tgz", + "integrity": "sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==", "cpu": [ "x64" ], @@ -84,9 +84,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", - "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.2.tgz", + "integrity": "sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==", "cpu": [ "arm64" ], @@ -101,9 +101,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", - "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.2.tgz", + "integrity": "sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==", "cpu": [ "x64" ], @@ -118,9 +118,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", - "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.2.tgz", + "integrity": "sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==", "cpu": [ "arm64" ], @@ -135,9 +135,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", - "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.2.tgz", + "integrity": "sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==", "cpu": [ "x64" ], @@ -152,9 +152,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", - "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.2.tgz", + "integrity": "sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==", "cpu": [ "arm" ], @@ -169,9 +169,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", - "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.2.tgz", + "integrity": "sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==", "cpu": [ "arm64" ], @@ -186,9 +186,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", - "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.2.tgz", + "integrity": "sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==", "cpu": [ "ia32" ], @@ -203,9 +203,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", - "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.2.tgz", + "integrity": "sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==", "cpu": [ "loong64" ], @@ -220,9 +220,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", - "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.2.tgz", + "integrity": "sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==", "cpu": [ "mips64el" ], @@ -237,9 +237,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", - "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.2.tgz", + "integrity": "sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==", "cpu": [ "ppc64" ], @@ -254,9 +254,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", - "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.2.tgz", + "integrity": "sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==", "cpu": [ "riscv64" ], @@ -271,9 +271,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", - "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.2.tgz", + "integrity": "sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==", "cpu": [ "s390x" ], @@ -288,9 +288,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", - "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.2.tgz", + "integrity": "sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==", "cpu": [ "x64" ], @@ -305,9 +305,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", - "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.2.tgz", + "integrity": "sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==", "cpu": [ "arm64" ], @@ -322,9 +322,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", - "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.2.tgz", + "integrity": "sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==", "cpu": [ "x64" ], @@ -339,9 +339,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", - "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.2.tgz", + "integrity": "sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==", "cpu": [ "arm64" ], @@ -356,9 +356,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", - "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.2.tgz", + "integrity": "sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==", "cpu": [ "x64" ], @@ -373,9 +373,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", - "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.2.tgz", + "integrity": "sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==", "cpu": [ "arm64" ], @@ -390,9 +390,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", - "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.2.tgz", + "integrity": "sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==", "cpu": [ "x64" ], @@ -407,9 +407,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", - "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.2.tgz", + "integrity": "sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==", "cpu": [ "arm64" ], @@ -424,9 +424,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", - "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.2.tgz", + "integrity": "sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==", "cpu": [ "ia32" ], @@ -441,9 +441,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", - "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.2.tgz", + "integrity": "sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==", "cpu": [ "x64" ], @@ -457,100 +457,133 @@ "node": ">=18" } }, - "node_modules/@github/copilot": { - "version": "0.0.403", - "resolved": "https://registry.npmjs.org/@github/copilot/-/copilot-0.0.403.tgz", - "integrity": "sha512-v5jUdtGJReLmE1rmff/LZf+50nzmYQYAaSRNtVNr9g0j0GkCd/noQExe31i1+PudvWU0ZJjltR0B8pUfDRdA9Q==", - "license": "SEE LICENSE IN LICENSE.md", - "bin": { - "copilot": "npm-loader.js" + "node_modules/@github/copilot-sdk": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@github/copilot-sdk/-/copilot-sdk-1.0.16.tgz", + "integrity": "sha512-m21UkMs8hkI6nRu2+EoP1kAGLJcEXFnNzAokEjwLcVmPojlO6fdLpfka1c1Nypxr39YZjyI3jHHAXwoe66SO2A==", + "license": "MIT", + "dependencies": { + "koffi": "3.2.1", + "vscode-jsonrpc": "8.2.1", + "zod": "4.3.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" }, "optionalDependencies": { - "@github/copilot-darwin-arm64": "0.0.403", - "@github/copilot-darwin-x64": "0.0.403", - "@github/copilot-linux-arm64": "0.0.403", - "@github/copilot-linux-x64": "0.0.403", - "@github/copilot-win32-arm64": "0.0.403", - "@github/copilot-win32-x64": "0.0.403" + "@github/copilot-sdk-darwin-arm64": "1.0.16", + "@github/copilot-sdk-darwin-x64": "1.0.16", + "@github/copilot-sdk-linux-arm64": "1.0.16", + "@github/copilot-sdk-linux-x64": "1.0.16", + "@github/copilot-sdk-linuxmusl-arm64": "1.0.16", + "@github/copilot-sdk-linuxmusl-x64": "1.0.16", + "@github/copilot-sdk-win32-arm64": "1.0.16", + "@github/copilot-sdk-win32-x64": "1.0.16" } }, - "node_modules/@github/copilot-darwin-arm64": { - "version": "0.0.403", - "resolved": "https://registry.npmjs.org/@github/copilot-darwin-arm64/-/copilot-darwin-arm64-0.0.403.tgz", - "integrity": "sha512-dOw8IleA0d1soHnbr/6wc6vZiYWNTKMgfTe/NET1nCfMzyKDt/0F0I7PT5y+DLujJknTla/ZeEmmBUmliTW4Cg==", + "node_modules/@github/copilot-sdk-darwin-arm64": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@github/copilot-sdk-darwin-arm64/-/copilot-sdk-darwin-arm64-1.0.16.tgz", + "integrity": "sha512-+ACscTN4OuSYDQL7/1yoi1FfDeI8qNlekip+dt2hvb9ZC4rz3YNVrhWkzrZsc7gX1ATD0YHGp71JDKqNAxHmBg==", "cpu": [ "arm64" ], - "license": "SEE LICENSE IN LICENSE.md", + "license": "MIT", "optional": true, "os": [ "darwin" - ], - "bin": { - "copilot-darwin-arm64": "copilot" - } + ] }, - "node_modules/@github/copilot-darwin-x64": { - "version": "0.0.403", - "resolved": "https://registry.npmjs.org/@github/copilot-darwin-x64/-/copilot-darwin-x64-0.0.403.tgz", - "integrity": "sha512-aK2jSNWgY8eiZ+TmrvGhssMCPDTKArc0ip6Ul5OaslpytKks8hyXoRbxGD0N9sKioSUSbvKUf+1AqavbDpJO+w==", + "node_modules/@github/copilot-sdk-darwin-x64": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@github/copilot-sdk-darwin-x64/-/copilot-sdk-darwin-x64-1.0.16.tgz", + "integrity": "sha512-M+R5xi4hqSrzbf+ICloMfiotuDch7URzPwL+5I4q1gy1VlY1EqpD39HW9LbqqB68iOqMRnW3anE+kzb5PYxFjA==", "cpu": [ "x64" ], - "license": "SEE LICENSE IN LICENSE.md", + "license": "MIT", "optional": true, "os": [ "darwin" - ], - "bin": { - "copilot-darwin-x64": "copilot" - } + ] }, - "node_modules/@github/copilot-linux-arm64": { - "version": "0.0.403", - "resolved": "https://registry.npmjs.org/@github/copilot-linux-arm64/-/copilot-linux-arm64-0.0.403.tgz", - "integrity": "sha512-KhoR2iR70O6vCkzf0h8/K+p82qAgOvMTgAPm9bVEHvbdGFR7Py9qL5v03bMbPxsA45oNaZAkzDhfTAqWhIAZsQ==", + "node_modules/@github/copilot-sdk-linux-arm64": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@github/copilot-sdk-linux-arm64/-/copilot-sdk-linux-arm64-1.0.16.tgz", + "integrity": "sha512-AjtL7pnhc0OajCO9NV963gwqFHiwIKIZEwpRd5tmGgB/Yc+Rr6QdRsc5ZMNe75ptagnVqViVqiTr9g/EnRspXw==", "cpu": [ "arm64" ], - "license": "SEE LICENSE IN LICENSE.md", + "license": "MIT", "optional": true, "os": [ "linux" + ] + }, + "node_modules/@github/copilot-sdk-linux-x64": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@github/copilot-sdk-linux-x64/-/copilot-sdk-linux-x64-1.0.16.tgz", + "integrity": "sha512-YLxPU1IdwH4cNvIJhawzyb6nMCbXB6ZfeebUs0kQEJbu6pzsMkyl1uSWCCv1vpAHPuhub1BgMokoY1kX9chElg==", + "cpu": [ + "x64" ], - "bin": { - "copilot-linux-arm64": "copilot" - } + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@github/copilot-linux-x64": { - "version": "0.0.403", - "resolved": "https://registry.npmjs.org/@github/copilot-linux-x64/-/copilot-linux-x64-0.0.403.tgz", - "integrity": "sha512-eoswUc9vo4TB+/9PgFJLVtzI4dPjkpJXdCsAioVuoqPdNxHxlIHFe9HaVcqMRZxUNY1YHEBZozy+IpUEGjgdfQ==", + "node_modules/@github/copilot-sdk-linuxmusl-arm64": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@github/copilot-sdk-linuxmusl-arm64/-/copilot-sdk-linuxmusl-arm64-1.0.16.tgz", + "integrity": "sha512-hkHq6WSj5ug5JdDKrLxMbDyjp5wx6zbsn3swZcC6fy6lFSJMX2kCG7PivcOq1Uj7o/POiN/DhhJqvQxOGuX1IA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@github/copilot-sdk-linuxmusl-x64": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@github/copilot-sdk-linuxmusl-x64/-/copilot-sdk-linuxmusl-x64-1.0.16.tgz", + "integrity": "sha512-JWjzUi366WXGqdY9xIJvmJRTB+sCsW8qasVwLXj12X05GxYWMdfHK+7t8CiYTs2L1NKu1NiOYd5rS7D+ChSZyw==", "cpu": [ "x64" ], - "license": "SEE LICENSE IN LICENSE.md", + "license": "MIT", "optional": true, "os": [ "linux" + ] + }, + "node_modules/@github/copilot-sdk-win32-arm64": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@github/copilot-sdk-win32-arm64/-/copilot-sdk-win32-arm64-1.0.16.tgz", + "integrity": "sha512-nQ//JXHfPfn4sfxtZ3rcLR993Mn8YQkC/RXHW9zu0W4Qtb1kyKec7XSi+VRMsKWPyzL7B7X+SHjTRSmn9AqZnQ==", + "cpu": [ + "arm64" ], - "bin": { - "copilot-linux-x64": "copilot" - } + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@github/copilot-sdk": { - "version": "0.1.23", - "resolved": "https://registry.npmjs.org/@github/copilot-sdk/-/copilot-sdk-0.1.23.tgz", - "integrity": "sha512-0by81bsBQlDKE5VbcegZfUMvPyPm1aXwSGS2rGaMAFxv3ps+dACf1Voruxik7hQTae0ziVFJjuVrlxZoRaXBLw==", + "node_modules/@github/copilot-sdk-win32-x64": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@github/copilot-sdk-win32-x64/-/copilot-sdk-win32-x64-1.0.16.tgz", + "integrity": "sha512-x9JyZks9NqmMNWkAI1wNcbvuPiMUUOvaU6tWq+nzp/TFdowW/kgaMX3jebnxeNUq/gqi2rPabRHp/cCMCma8eA==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "@github/copilot": "^0.0.403", - "vscode-jsonrpc": "^8.2.1", - "zod": "^4.3.6" - }, - "engines": { - "node": ">=24.0.0" - } + "optional": true, + "os": [ + "win32" + ] }, "node_modules/@github/copilot-sdk/node_modules/zod": { "version": "4.3.6", @@ -561,346 +594,426 @@ "url": "https://github.com/sponsors/colinhacks" } }, - "node_modules/@github/copilot-win32-arm64": { - "version": "0.0.403", - "resolved": "https://registry.npmjs.org/@github/copilot-win32-arm64/-/copilot-win32-arm64-0.0.403.tgz", - "integrity": "sha512-djWjzCsp2xPNafMyOZ/ivU328/WvWhdroGie/DugiJBTgQL2SP0quWW1fhTlDwE81a3g9CxfJonaRgOpFTJTcg==", + "node_modules/@koromix/koffi-android-arm64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-android-arm64/-/koffi-android-arm64-3.2.1.tgz", + "integrity": "sha512-1pJQ4jnZlUJduK9u9DC5CGy3aOgDUPvIXpNb6syV3+Dh5Q/ugezAIGCqvY+w+1mgXsve0pd0NVvJRjdZNHQ6MA==", "cpu": [ "arm64" ], - "license": "SEE LICENSE IN LICENSE.md", + "license": "MIT", "optional": true, "os": [ - "win32" + "android" ], - "bin": { - "copilot-win32-arm64": "copilot.exe" + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/@github/copilot-win32-x64": { - "version": "0.0.403", - "resolved": "https://registry.npmjs.org/@github/copilot-win32-x64/-/copilot-win32-x64-0.0.403.tgz", - "integrity": "sha512-lju8cHy2E6Ux7R7tWyLZeksYC2MVZu9i9ocjiBX/qfG2/pNJs7S5OlkwKJ0BSXSbZEHQYq7iHfEWp201bVfk9A==", + "node_modules/@koromix/koffi-android-x64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-android-x64/-/koffi-android-x64-3.2.1.tgz", + "integrity": "sha512-HH40xGh3gVQifjOBnhwT2tECC0lL1lYe+nxHvWNSzxDIyQNcVPXg38ta7vuONRFpD+uIrw7fqGYLzbZIagkVcg==", "cpu": [ "x64" ], - "license": "SEE LICENSE IN LICENSE.md", + "license": "MIT", "optional": true, "os": [ - "win32" + "android" ], - "bin": { - "copilot-win32-x64": "copilot.exe" + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/@types/node": { - "version": "18.19.70", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.70.tgz", - "integrity": "sha512-RE+K0+KZoEpDUbGGctnGdkrLFwi1eYKTlIHNl2Um98mUkGsm1u2Ff6Ltd0e8DktTtC98uy7rSj+hO8t/QuLoVQ==", + "node_modules/@koromix/koffi-darwin-arm64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-darwin-arm64/-/koffi-darwin-arm64-3.2.1.tgz", + "integrity": "sha512-Vj4h+xcjc5+Cn0DhPHjgRX4omKAv96Kehtcd+1YgYuY2W7FvQn9vS+3SmzVwhC5Qmg9bIwUZObYQ8T/4hBqQqA==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/@types/node-fetch": { - "version": "2.6.12", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", + "node_modules/@koromix/koffi-darwin-x64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-darwin-x64/-/koffi-darwin-x64-3.2.1.tgz", + "integrity": "sha512-gFCWxNBTZIvxo1p+PURWfsy2Ctj5FGnVVs1f03lTLhBvmxEto70pdIiFztdFLDFkAJ1pmtQmruRKapeK+E8YPA==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/@koromix/koffi-freebsd-arm64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-freebsd-arm64/-/koffi-freebsd-arm64-3.2.1.tgz", + "integrity": "sha512-qj+f1s2e6vULaUG1cdlTcCXmunCq2t+rjxku1+esaMIqVnHpOwj0QzPuInG0AFdXjwBNQhyVR/HpDj8daEwwsQ==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" + "optional": true, + "os": [ + "freebsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/agentkeepalive": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", - "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", + "node_modules/@koromix/koffi-freebsd-ia32": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-freebsd-ia32/-/koffi-freebsd-ia32-3.2.1.tgz", + "integrity": "sha512-6olHb1Qfgai0jjs6ddlDDD0ZfsCxy7SPi8rMRpuYQWH0qhgtyQu82hw5b1p7z+TJ0zZP3ZeQQ6l+U/MlM1ICHQ==", + "cpu": [ + "ia32" + ], "license": "MIT", - "dependencies": { - "humanize-ms": "^1.2.1" - }, - "engines": { - "node": ">= 8.0.0" + "optional": true, + "os": [ + "freebsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "node_modules/@koromix/koffi-freebsd-x64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-freebsd-x64/-/koffi-freebsd-x64-3.2.1.tgz", + "integrity": "sha512-Dikhw1ySYNVMkmeFvFVjnU5Wdk6mffNoOjJxm9bTG96vg7OlemylxqdEven47R1YJ3yzNVJn/MlQ207ORWfi2w==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" + "optional": true, + "os": [ + "freebsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "node_modules/@koromix/koffi-linux-arm": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-arm/-/koffi-linux-arm-3.2.1.tgz", + "integrity": "sha512-OfwUwZylidq95wQKp6ClInULrfB2giu7dqM6Rhe0zAe6lES5I2SXNw15T9+GnRHk3/9hKT2XZ37OZLaKSyWNLA==", + "cpu": [ + "arm" + ], "license": "MIT", - "engines": { - "node": ">=0.4.0" + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/esbuild": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", - "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.3", - "@esbuild/android-arm": "0.27.3", - "@esbuild/android-arm64": "0.27.3", - "@esbuild/android-x64": "0.27.3", - "@esbuild/darwin-arm64": "0.27.3", - "@esbuild/darwin-x64": "0.27.3", - "@esbuild/freebsd-arm64": "0.27.3", - "@esbuild/freebsd-x64": "0.27.3", - "@esbuild/linux-arm": "0.27.3", - "@esbuild/linux-arm64": "0.27.3", - "@esbuild/linux-ia32": "0.27.3", - "@esbuild/linux-loong64": "0.27.3", - "@esbuild/linux-mips64el": "0.27.3", - "@esbuild/linux-ppc64": "0.27.3", - "@esbuild/linux-riscv64": "0.27.3", - "@esbuild/linux-s390x": "0.27.3", - "@esbuild/linux-x64": "0.27.3", - "@esbuild/netbsd-arm64": "0.27.3", - "@esbuild/netbsd-x64": "0.27.3", - "@esbuild/openbsd-arm64": "0.27.3", - "@esbuild/openbsd-x64": "0.27.3", - "@esbuild/openharmony-arm64": "0.27.3", - "@esbuild/sunos-x64": "0.27.3", - "@esbuild/win32-arm64": "0.27.3", - "@esbuild/win32-ia32": "0.27.3", - "@esbuild/win32-x64": "0.27.3" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "node_modules/@koromix/koffi-linux-arm64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-arm64/-/koffi-linux-arm64-3.2.1.tgz", + "integrity": "sha512-K+cGUL5iBcDqxmsocrjmlASqDf24gc7artbVW3PewG2c9AqwC63lezgwvB85Nx4lZAQjB6zIFHh9A7t1yGbwhw==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/form-data-encoder": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", - "license": "MIT" + "node_modules/@koromix/koffi-linux-ia32": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-ia32/-/koffi-linux-ia32-3.2.1.tgz", + "integrity": "sha512-rxj6UYjU1qd98gxNQOSCdLpc5cPRi5Giq9rNd3jnGuSNIyMkwa6Dxw4cUjmhIBCYESMJtmNt5NWnJp5u9wTfYQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } }, - "node_modules/formdata-node": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "node_modules/@koromix/koffi-linux-loong64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-loong64/-/koffi-linux-loong64-3.2.1.tgz", + "integrity": "sha512-aHhnHzkPRmT/IHDlGvESJ/Bs32m8N6UE6Ab6kMeJzgk74IN8af2m/81/wZJtybR1M2UxCV4NmlVNUYQQvSAO3Q==", + "cpu": [ + "loong64" + ], "license": "MIT", - "dependencies": { - "node-domexception": "1.0.0", - "web-streams-polyfill": "4.0.0-beta.3" - }, - "engines": { - "node": ">= 12.20" + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "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, + "node_modules/@koromix/koffi-linux-riscv64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-riscv64/-/koffi-linux-riscv64-3.2.1.tgz", + "integrity": "sha512-qtQBsjbm3LiirLJvajWmKkNb7ARk7fvJVXdftJ7NtAnF3Xw8EbDvrtvmvtNI1yLPlYcBmlzCCD71hwhWYk0SIA==", + "cpu": [ + "riscv64" + ], "license": "MIT", "optional": true, "os": [ - "darwin" + "linux" ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/get-tsconfig": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", - "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", - "dev": true, + "node_modules/@koromix/koffi-linux-x64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-linux-x64/-/koffi-linux-x64-3.2.1.tgz", + "integrity": "sha512-c7hw7Qs/r5gnFRTQLcbifBwRU7wiocj+2pVuDQ5Ahb3r36SZmupmgYbTWcLvTW+hul1jd7SKRV0d14ZJq/tvSw==", + "cpu": [ + "x64" + ], "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "url": "https://liberapay.com/Koromix" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "node_modules/@koromix/koffi-openbsd-ia32": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-openbsd-ia32/-/koffi-openbsd-ia32-3.2.1.tgz", + "integrity": "sha512-mmY8fY8LQ/CB52+h3yrMYmVyoxzW3x08S0yI6VNfHWdfU6yJtZkKCbhjmQCYMrWbYKC4gMvwZwCywIGPAkLyeA==", + "cpu": [ + "ia32" + ], "license": "MIT", - "dependencies": { - "ms": "^2.0.0" + "optional": true, + "os": [ + "openbsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "node_modules/@koromix/koffi-openbsd-x64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-openbsd-x64/-/koffi-openbsd-x64-3.2.1.tgz", + "integrity": "sha512-k4ig6aAPbFSRATOIIOfdf/KtlOGH4SVls6L9fy0QnTxRJYvY2oSltTsQtBDANgEQldlq8Kl5WnpRa1VSibP4Lw==", + "cpu": [ + "x64" + ], "license": "MIT", - "engines": { - "node": ">= 0.6" + "optional": true, + "os": [ + "openbsd" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "node_modules/@koromix/koffi-win32-arm64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-win32-arm64/-/koffi-win32-arm64-3.2.1.tgz", + "integrity": "sha512-cTWBJGK//pDMeKQJE/79Aq9MiOAF4H8QyLZHSQ9IWm8czOfwjG4J1AhsQ9DjI9KFOykH77hhnpmQTGVMIubGig==", + "cpu": [ + "arm64" + ], "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" + "optional": true, + "os": [ + "win32" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" + "node_modules/@koromix/koffi-win32-ia32": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-win32-ia32/-/koffi-win32-ia32-3.2.1.tgz", + "integrity": "sha512-Z50EM6TAZ7CFyMmyX6thv8eNpJchqe9eenhibSIy2Eq/FQYF76gU2VK/LEoaF46L8hfC7TpTp9b10MvReHEyFA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "funding": { + "url": "https://liberapay.com/Koromix" + } }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } + "node_modules/@koromix/koffi-win32-x64": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@koromix/koffi-win32-x64/-/koffi-win32-x64-3.2.1.tgz", + "integrity": "sha512-ZmZNiBO6bkOSh3QNzgfvb1cMY0yMobn6ZQrSMqbAce21qyYL8niIbyipz9N/PIRDciGhsV0wUxnZsxIO+yWsHQ==", + "cpu": [ + "x64" ], "license": "MIT", - "engines": { - "node": ">=10.5.0" + "optional": true, + "os": [ + "win32" + ], + "funding": { + "url": "https://liberapay.com/Koromix" } }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "node_modules/esbuild": { + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.2.tgz", + "integrity": "sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==", + "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": "4.x || >=6.0.0" + "node": ">=18" }, - "peerDependencies": { - "encoding": "^0.1.0" + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.28.2", + "@esbuild/android-arm": "0.28.2", + "@esbuild/android-arm64": "0.28.2", + "@esbuild/android-x64": "0.28.2", + "@esbuild/darwin-arm64": "0.28.2", + "@esbuild/darwin-x64": "0.28.2", + "@esbuild/freebsd-arm64": "0.28.2", + "@esbuild/freebsd-x64": "0.28.2", + "@esbuild/linux-arm": "0.28.2", + "@esbuild/linux-arm64": "0.28.2", + "@esbuild/linux-ia32": "0.28.2", + "@esbuild/linux-loong64": "0.28.2", + "@esbuild/linux-mips64el": "0.28.2", + "@esbuild/linux-ppc64": "0.28.2", + "@esbuild/linux-riscv64": "0.28.2", + "@esbuild/linux-s390x": "0.28.2", + "@esbuild/linux-x64": "0.28.2", + "@esbuild/netbsd-arm64": "0.28.2", + "@esbuild/netbsd-x64": "0.28.2", + "@esbuild/openbsd-arm64": "0.28.2", + "@esbuild/openbsd-x64": "0.28.2", + "@esbuild/openharmony-arm64": "0.28.2", + "@esbuild/sunos-x64": "0.28.2", + "@esbuild/win32-arm64": "0.28.2", + "@esbuild/win32-ia32": "0.28.2", + "@esbuild/win32-x64": "0.28.2" + } + }, + "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, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/koffi": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/koffi/-/koffi-3.2.1.tgz", + "integrity": "sha512-0qE3lZ8jllRqPN4Ob6Ajl7c2bJSJDhQWuKLGP5hIEpHLllJWv1ydHFMhHmHc5p/W9GticKVDbYzZd7TBoQ4CZg==", + "hasInstallScript": true, + "license": "MIT", + "funding": { + "url": "https://liberapay.com/Koromix" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "optionalDependencies": { + "@koromix/koffi-android-arm64": "3.2.1", + "@koromix/koffi-android-x64": "3.2.1", + "@koromix/koffi-darwin-arm64": "3.2.1", + "@koromix/koffi-darwin-x64": "3.2.1", + "@koromix/koffi-freebsd-arm64": "3.2.1", + "@koromix/koffi-freebsd-ia32": "3.2.1", + "@koromix/koffi-freebsd-x64": "3.2.1", + "@koromix/koffi-linux-arm": "3.2.1", + "@koromix/koffi-linux-arm64": "3.2.1", + "@koromix/koffi-linux-ia32": "3.2.1", + "@koromix/koffi-linux-loong64": "3.2.1", + "@koromix/koffi-linux-riscv64": "3.2.1", + "@koromix/koffi-linux-x64": "3.2.1", + "@koromix/koffi-openbsd-ia32": "3.2.1", + "@koromix/koffi-openbsd-x64": "3.2.1", + "@koromix/koffi-win32-arm64": "3.2.1", + "@koromix/koffi-win32-ia32": "3.2.1", + "@koromix/koffi-win32-x64": "3.2.1" } }, "node_modules/openai": { - "version": "4.78.1", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.78.1.tgz", - "integrity": "sha512-drt0lHZBd2lMyORckOXFPQTmnGLWSLt8VK0W9BhOKWpMFBEoHMoz5gxMPmVq5icp+sOrsbMnsmZTVHUlKvD1Ow==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/openai/-/openai-7.28.0.tgz", + "integrity": "sha512-HSY4fFLflQGYe2kvO0atm6/GzhD61gpyiOZZUvO4nptMUhuB1to2K3wwFpFqc5gfEK0SxyIIFiu1yE2MtygWcA==", "license": "Apache-2.0", - "dependencies": { - "@types/node": "^18.11.18", - "@types/node-fetch": "^2.6.4", - "abort-controller": "^3.0.0", - "agentkeepalive": "^4.2.1", - "form-data-encoder": "1.7.2", - "formdata-node": "^4.3.2", - "node-fetch": "^2.6.7" - }, - "bin": { - "openai": "bin/cli" + "engines": { + "node": ">=22.0.0" }, "peerDependencies": { - "zod": "^3.23.8" + "@aws-sdk/credential-provider-node": ">=3.972.0 <4", + "@smithy/hash-node": ">=4.3.0 <5", + "@smithy/signature-v4": ">=5.4.0 <6", + "undici": ">=5 <9", + "ws": "^8.21.0", + "zod": "^3.25 || ^4.0" }, "peerDependenciesMeta": { + "@aws-sdk/credential-provider-node": { + "optional": true + }, + "@smithy/hash-node": { + "optional": true + }, + "@smithy/signature-v4": { + "optional": true + }, + "undici": { + "optional": true + }, + "ws": { + "optional": true + }, "zod": { "optional": true } } }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, "node_modules/tsx": { - "version": "4.21.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", - "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", + "version": "4.23.15", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.23.15.tgz", + "integrity": "sha512-Yiex1Ovn8z2xPpOWckIiysV1SSyRMY9BkLF++q0yKiDxCqRhosKfMg3janKkiLBwZ5c/YryloKwGZcrEmtwxKw==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "~0.27.0", - "get-tsconfig": "^4.7.5" + "esbuild": "~0.28.0" }, "bin": { "tsx": "dist/cli.mjs" @@ -912,12 +1025,6 @@ "fsevents": "~2.3.3" } }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "license": "MIT" - }, "node_modules/vscode-jsonrpc": { "version": "8.2.1", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.1.tgz", @@ -926,31 +1033,6 @@ "engines": { "node": ">=14.0.0" } - }, - "node_modules/web-streams-polyfill": { - "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } } } } diff --git a/package.json b/package.json index 4ee2d438..df344d09 100644 --- a/package.json +++ b/package.json @@ -4,13 +4,18 @@ "private": true, "type": "module", "dependencies": { - "@github/copilot-sdk": "^0.1.23", - "openai": "^4.78.1" + "@github/copilot-sdk": "1.0.16", + "openai": "^7.28.0" }, "devDependencies": { - "tsx": "^4.21.0" + "tsx": "^4.23.15" }, "scripts": { + "build": "node scripts/build-docs.mjs", + "build:samples": "npm run build --prefix lessons/07-mcp/code && npm run build --prefix lessons/07-mcp/solution && npm run build --prefix lessons/08-mcp-advanced/solutions", + "test:samples": "npm run build:samples && node --test tests/samples.test.js", + "test:docs": "node --test tests/docs.test.js", + "test": "npm test --prefix app && npm run test:samples && npm run test:docs", "genai:translate": "npx genaiscript@latest run translator \"./lessons/*/README.md\" --no-run-trace --remote https://github.com/pelikhan/action-continuous-translation --remote-install -x glossaryFile=glossary.md -x lang=fr -x \"filenameTemplate={{dirname}}/translations/{{basename}}.{{lang}}{{extname}}\"" } } diff --git a/scripts/build-docs.mjs b/scripts/build-docs.mjs new file mode 100644 index 00000000..a3e24130 --- /dev/null +++ b/scripts/build-docs.mjs @@ -0,0 +1,25 @@ +import { cp, mkdir, rm } from "node:fs/promises"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const repositoryRoot = fileURLToPath(new URL("../", import.meta.url)); +export async function buildDocs(root = repositoryRoot) { + const output = path.join(root, "dist"); + await rm(output, { recursive: true, force: true }); + await mkdir(output, { recursive: true }); + for (const entry of ["index.html", "_sidebar.md", "README.md", "README.fr.md", "LICENSE", "docs", "lessons", "app"]) { + await cp(path.join(root, entry), path.join(output, entry), { + recursive: true, + filter(source) { + const parts = path.relative(root, source).split(path.sep); + return !parts.some(part => ["node_modules", ".git", ".genaiscript", "test", "tests"].includes(part) || + ((part.startsWith(".env") || part.endsWith(".env")) && part !== ".env.example")); + } + }); + } + return output; +} +if (process.argv[1] && path.resolve(process.argv[1]) === fileURLToPath(import.meta.url)) { + await buildDocs(); + console.log("Static course documentation built in dist/."); +} diff --git a/tests/docs.test.js b/tests/docs.test.js new file mode 100644 index 00000000..4b8f94d0 --- /dev/null +++ b/tests/docs.test.js @@ -0,0 +1,81 @@ +import assert from "node:assert/strict"; +import { access, mkdir, mkdtemp, readFile, rm, writeFile } from "node:fs/promises"; +import { tmpdir } from "node:os"; +import path from "node:path"; +import { test } from "node:test"; +import vm from "node:vm"; +import { buildDocs } from "../scripts/build-docs.mjs"; + +function docsify(pathname) { + return readFile(new URL("../index.html", import.meta.url), "utf8").then(html => { + const script = [...html.matchAll(/