commit b5499bd618c39635d07e5521f0f60e125fa49be9 Author: Joel Brock Date: Tue May 26 16:29:24 2026 -0700 Initial commit: Tortugotchi sea turtle conservation PWA Vanilla HTML/CSS/JS Tamagotchi-style game with three species (green, loggerhead, leatherback), persistent idle progression, hazard QTEs (sharks, boats, ghost nets, tourists), and offline PWA support via service worker. Includes README with cited conservation resources and research. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..134f558 --- /dev/null +++ b/.gitignore @@ -0,0 +1,18 @@ +# Dependencies +node_modules/ + +# OS / editor +.DS_Store +*.swp + +# Local databases +*.db +*.db-shm +*.db-wal + +# Tooling / AI agent state (not part of the app) +.claude/ +.claude-flow/ +.swarm/ +.mcp.json +CLAUDE.md diff --git a/PLAN.md b/PLAN.md new file mode 100644 index 0000000..9eedf3d --- /dev/null +++ b/PLAN.md @@ -0,0 +1,90 @@ +# Implementation Plan - Tortugotchi (Sea Turtle PWA) + +Create a highly polished, responsive mobile Progressive Web App (PWA) called **Tortugotchi**. The game raised awareness of sea turtle conservation by making the player responsible for nesting eggs, hatchlings, an ocean-going juvenile turtle, and protecting it from human-made and natural hazards. + +## User Review Required + +> [!IMPORTANT] +> **Aesthetic Goal:** The app will use vanilla CSS with a premium glassmorphic dark UI, sunset/night gradients for the beach phase, and a bioluminescent/light-ray deep teal theme for the ocean phase. The turtle itself will be rendered as an interactive SVG containing customizable elements (custom name, facial expressions, swimming animations) rather than static or low-quality PNGs. + +> [!NOTE] +> **PWA Support:** The application will be a fully-functional PWA that can be installed on iOS/Android. It will include a service worker for offline play and asset caching, and support responsive viewport sizes locked to a phone aspect ratio with modern desktop padding. + +## Proposed Changes + +We will construct the project in the workspace `/opt/homebrew/var/www/tortugotchi`. + +### Configuration & PWA Assets + +#### [NEW] [manifest.json](file:///opt/homebrew/var/www/tortugotchi/manifest.json) +- Define metadata for installation (app name: `Tortugotchi`, theme color, display mode: `standalone`). +- Specify sizes for icons: `192x192` and `512x512`. + +#### [NEW] [sw.js](file:///opt/homebrew/var/www/tortugotchi/sw.js) +- A lightweight, reliable Service Worker to cache assets (`index.html`, `style.css`, `app.js`, sounds/images) for fast load speeds and true offline playability. + +### Core Structure + +#### [NEW] [index.html](file:///opt/homebrew/var/www/tortugotchi/index.html) +- Define a single-page app layout with three primary game views/states managed by JavaScript: + 1. **Start Screen:** Onboarding screen explaining the conservation mission, choosing a species (e.g. Green Sea Turtle vs. Loggerhead Sea Turtle), and initiating the nest phase. + 2. **Nest & Hatchling Stage:** Interactive night beach view. Guarding the nest from crabs, birds, filling holes, turning off streetlights, and getting the hatchlings to the water. + 3. **Ocean Care Stage:** Floating deep sea environment. Feeding, playing, cleaning shell, avoiding plastic bags (mimicking jellyfish), dodging motorboats, and surviving shark encounters. + 4. **Beaching Event:** Occasional alert view. The turtle beaches, and the player must ward off ignorant selfie-seeking tourists while asserting NOAA's 10-foot boundary laws. +- Implement HTML5 semantic elements and SEO tags (`description`, `title`, viewport adjustments). + +#### [NEW] [style.css](file:///opt/homebrew/var/www/tortugotchi/style.css) +- Implement a modern color system (teal, deep ocean blues, soft sandy gold, coral accent colors). +- Use CSS Variables for theme control. +- Apply modern CSS styling: + - Glassmorphic panels (`backdrop-filter: blur(10px) saturate(180%)`). + - Flex/Grid layouts optimized for mobile-first viewport dimensions (capped aspect ratios on desktop to emulate a mobile screen). + - Swimming keyframe animations for the SVG sea turtle (flipper strokes, head bobs). + - Floating animations for underwater debris (plastic bags, nets, jellyfish). + - Shake effects for damage and light pulses for night hazards. + +#### [NEW] [app.js](file:///opt/homebrew/var/www/tortugotchi/app.js) +- Build a custom clientside Game State Machine: + - **`STATE_START`**: Title screen, species select, instruction logs. + - **`STATE_NEST`**: Nest health counter, hazard generator (predator crabs, deep beach holes, light distractions). Timer counts down to hatching. Hatchlings crawl to the ocean. + - **`STATE_OCEAN`**: Core Tamagotchi care cycle. Loop monitors Stats (`Hunger`, `Happiness`, `Shell Cleanliness`, `Health`). + - **`STATE_BEACHING`**: Triggers occasionally. Spawns tourists entering the safe zone. Tapping tourists drives them away and displays quick conservation/legal facts. +- **Interactivity handlers**: + - Dragging to fill holes. + - Tapping to turn off lights/scare crabs. + - Feeding: Seagrass/crabs (based on species) and avoiding floating plastic bags. + - Shell cleaning: Drag-to-brush mini-game. + - Boat Alarm: Quick-time-event "Dive" button. + - Shark Alarm: Quick-time-event "Retract into Shell" or "Hide in Reef" button. + - Stats decrease over time; alerts occur when status is low. +- LocalStorage integration to save the turtle's progress (age, name, species, score). + +### Assets Creation + +We will generate beautiful SVG files or use the `generate_image` tool to construct a gorgeous logo/app icon (`icon-192.png` and `icon-512.png`). The primary characters and visual elements (turtle, sharks, crabs, trash, jellyfish, tourists) will be generated as custom SVG elements or inline SVGs directly inside the application files for crisp rendering, interactive state alterations, and high performance. + +--- + +## Science & Conservation Facts Integrated +The game will highlight the following realistic conservation elements through status warnings, events, and educational overlays: +1. **Light Disorientation:** Artificial lights cause hatchlings to crawl inland, exhausting their energy and leaving them exposed to land predators or cars. +2. **Marine Plastic Mimicry:** Plastic bags resemble jellyfish floating in currents. Ingesting plastic causes gut blockages and false satiety, leading to starvation. +3. **Ghost Gear:** Discarded commercial fishing nets tangle sea turtles, preventing them from surfacing to breathe, causing drowning. +4. **Lawful Distance:** Under the Endangered Species Act (ESA) and NOAA regulations, tourists must stay at least 10 feet (3 meters) away from sea turtles on beaches. Crowding and touching stress turtles, and flash photography disorients them. + +--- + +## Verification Plan + +### Automated/Code Quality Checks +- Run `./bin/brew typecheck` (Wait, this is an empty workspace not related to Homebrew Ruby code directly, but we will make sure our JavaScript code is lint-free, follows best practices, has no syntax errors, and validates locally. If there are any Ruby tools in the repository, we can ignore them as we are creating a standalone HTML PWA). +- Validate HTML semantics and CSS standards. + +### Manual Verification +- Launch a local developer server using a simple python/node server to view and play the game in the browser. +- Verify responsive layout works seamlessly on mobile viewports (simulated Chrome responsive view) and desktop views. +- Test PWA manifest compliance and verify the service worker registers successfully. +- Manually play through all three stages: + - Guarding the eggs and hatchlings. + - Feeding the turtle, brushing shell, avoiding plastic debris, diving under boat propellers, hiding from sharks. + - Driving selfie-seeking tourists back to the 10-foot boundary. diff --git a/README.md b/README.md new file mode 100644 index 0000000..56edb1f --- /dev/null +++ b/README.md @@ -0,0 +1,98 @@ +# Tortugotchi — Sea Turtle Protector + +

+ Tortugotchi logo +

+ +A Tamagotchi-style Progressive Web App that raises awareness of sea turtle conservation. Hatch a nest, raise a juvenile in the open ocean, defend it from real-world hazards (light pollution, plastic, ghost gear, boats, sharks, beachgoers), and keep it healthy long enough to grow from hatchling to adult. + +Built as a vanilla HTML / CSS / JS PWA — no build step, installable on iOS and Android, fully playable offline. + +## Play + +Open [http://localhost:8000/](http://localhost:8000/) after running a static server from the project root: + +```bash +python3 -m http.server 8000 +``` + +Then "Add to Home Screen" (iOS) or "Install app" (Chrome/Android) for the full standalone experience. + +## Gameplay + +Three species — **Green**, **Loggerhead**, **Leatherback** — each with distinct appearance and a preferred playmate. Your turtle ages roughly **one day per 15 seconds** at peak health, slowing as stats decline. Progress persists across sessions via `localStorage`, and offline time is reconciled when you return. + +| Stage | Care loop | +|------------|-----------| +| Nest | Scare crabs, fill holes, kill artificial lights, walk hatchlings to surf | +| Ocean | Feed, brush shell, play with species-specific companion, dodge hazards | +| Beaching | Hold tourists to the NOAA 10-foot boundary while the turtle rests | +| Hazard QTEs | Brace for sharks, dive under boats, cut through ghost nets | + +## Tech + +- Single-page vanilla JS state machine (`app.js`) +- Inline SVG turtle with CSS-driven species palettes and growth-stage scaling +- Service worker (`sw.js`) with cache-first offline strategy +- Web App Manifest with maskable icons, installable on Chromium, iOS Safari, Firefox Android, Samsung Internet + +## Conservation Topics Modeled in the Game + +The hazards in Tortugotchi aren't decorative — each one mirrors a documented threat to wild sea turtles: + +1. **Light pollution and hatchling disorientation.** Hatchlings orient toward the brightest horizon, which in undisturbed beaches is moonlight on the ocean. Artificial lighting pulls them inland, where they die of exhaustion, dehydration, or predation. +2. **Plastic mimicry.** Floating plastic bags resemble jellyfish, a primary food source for leatherbacks. Ingested plastic causes gut blockage and false satiation; necropsies regularly find plastic in dead turtles of every species. +3. **Ghost gear entanglement.** Lost or abandoned fishing nets and lines drift for years, tangling turtles and preventing them from surfacing to breathe. +4. **Vessel strikes.** Propeller wounds and blunt-force trauma from boats are a leading cause of injury for turtles in coastal waters. +5. **Human disturbance on beaches.** Crowding, touching, and flash photography stress nesting and basking turtles. NOAA and the U.S. Endangered Species Act establish a minimum approach distance of **10 feet (3 meters)** in U.S. waters. +6. **Defensive behavior.** Unlike freshwater turtles, sea turtles **cannot fully retract** into their shells. The in-game "brace" posture reflects how wild turtles actually respond — tucking the head and flippers tight against the carapace. + +## Resources & Citations + +Used to ground the game's mechanics, species behavior, and conservation messaging. + +### Regulatory & Government + +- **NOAA Fisheries — Sea Turtles.** Species profiles, threats, recovery plans, and viewing guidelines. +- **NOAA — Sea Turtle Viewing Guidelines.** Establishes the 10-foot / 3-meter minimum approach distance and lighting guidance. +- **U.S. Fish & Wildlife Service — Sea Turtle Program.** ESA listings, nesting beach management. +- **Endangered Species Act of 1973 (16 U.S.C. §§ 1531–1544).** Federal protection framework for all six U.S. sea turtle species. +- **Florida Fish and Wildlife Conservation Commission — Sea Turtle Lighting.** Practical guidance behind the in-game "turn off the lights" mechanic. + +### Scientific & Conservation Organizations + +- **IUCN Red List — Marine Turtles.** Current conservation status by species (Green, Loggerhead, Leatherback, Hawksbill, Kemp's ridley, Olive ridley, Flatback). +- **IUCN Marine Turtle Specialist Group (MTSG).** Global assessments, regional management units. +- **Sea Turtle Conservancy.** Public education, satellite tracking, nesting beach protection. +- **SEE Turtles.** Conservation tourism, plastic and lighting campaigns. +- **The Ocean Cleanup — Ghost Gear research.** Data on abandoned, lost, and discarded fishing gear (ALDFG). +- **Global Ghost Gear Initiative.** Cross-industry effort tracking and removing lost fishing gear. + +### Selected Research + +- Schuyler, Q. A., Wilcox, C., Townsend, K. A., et al. (2016). *Risk analysis reveals global hotspots for marine debris ingestion by sea turtles.* **Global Change Biology** 22(2): 567–576. +- Wilcox, C., Puckridge, M., Schuyler, Q. A., Townsend, K., & Hardesty, B. D. (2018). *A quantitative analysis linking sea turtle mortality and plastic debris ingestion.* **Scientific Reports** 8: 12536. +- Witherington, B. E., & Martin, R. E. (2003). *Understanding, Assessing, and Resolving Light-Pollution Problems on Sea Turtle Nesting Beaches.* Florida Marine Research Institute Technical Report TR-2. +- Stelfox, M., Hudgins, J., & Sweet, M. (2016). *A review of ghost gear entanglement amongst marine mammals, reptiles and elasmobranchs.* **Marine Pollution Bulletin** 111(1–2): 6–17. +- Lutcavage, M. E., Plotkin, P., Witherington, B., & Lutz, P. L. (1997). *Human Impacts on Sea Turtle Survival.* In Lutz & Musick (eds.), *The Biology of Sea Turtles, Vol. I*, CRC Press. + +### Species Biology References + +- Spotila, J. R. (2004). *Sea Turtles: A Complete Guide to Their Biology, Behavior, and Conservation.* Johns Hopkins University Press. +- Bjorndal, K. A., & Bolten, A. B. (eds., 2003). *Loggerhead Sea Turtles.* Smithsonian Institution Press. +- **NOAA Species Pages** for in-game species: + - Green Sea Turtle (*Chelonia mydas*): + - Loggerhead Sea Turtle (*Caretta caretta*): + - Leatherback Sea Turtle (*Dermochelys coriacea*): + +## How You Can Help (Real World) + +- Turn off or shield beachfront lighting during nesting season (roughly May–October in the U.S. Atlantic and Gulf). +- Fill in holes and remove beach furniture before sunset — hatchlings get stuck. +- Pack out all trash; cut six-pack rings and discarded line. +- Keep 10 feet (3 m) from any wild sea turtle. Never use flash. +- Report stranded, injured, or harassed turtles to your regional **NOAA Stranding Network** hotline. + +## License + +Tortugotchi is a non-commercial educational project. Cited materials remain the property of their respective authors and organizations. diff --git a/WALKTHROUGH.md b/WALKTHROUGH.md new file mode 100644 index 0000000..ad049f8 --- /dev/null +++ b/WALKTHROUGH.md @@ -0,0 +1,73 @@ +# Walkthrough: Tortugotchi Sea Turtle Conservation PWA + +We have successfully built and deployed the Progressive Web App (PWA) game **Tortugotchi** in the `/opt/homebrew/var/www/tortugotchi` workspace directory. The application educates players on sea turtle conservation by placing them in charge of a nest and then rearing an individual turtle. + +## App Icon Preview +Here is the generated application icon representing our anime-styled, cute cuddly sea turtle friend: + +![Tortugotchi App Icon](/Users/joel/.gemini/antigravity/brain/23e5834a-a966-4b39-b6d0-103828b6d683/tortugotchi_logo_1779297763562.png) + +--- + +## Created File Architecture + +The codebase contains the following core files: +1. **[index.html](file:///opt/homebrew/var/www/tortugotchi/index.html)**: Main HTML structure, layout viewport, game overlay HUD screens, and conservation science modal. +2. **[style.css](file:///opt/homebrew/var/www/tortugotchi/style.css)**: Glassmorphic UI layout design, mobile frame constraints, sunset/night sand and water gradients, and keyframe animations for characters (swimming, blinking, waddling). +3. **[app.js](file:///opt/homebrew/var/www/tortugotchi/app.js)**: State machine controller, collision logic for floating trash, drag-and-drop recycling support, touch repelling for tourists, and LocalStorage data saving. +4. **[manifest.json](file:///opt/homebrew/var/www/tortugotchi/manifest.json)**: PWA installation properties, orientation locks, theme coloring, and app identity. +5. **[sw.js](file:///opt/homebrew/var/www/tortugotchi/sw.js)**: Service worker shell caching routine, enabling offline gameplay. +6. **[icon-512.png](file:///opt/homebrew/var/www/tortugotchi/icon-512.png)** and **[icon-192.png](file:///opt/homebrew/var/www/tortugotchi/icon-192.png)**: High-resolution app launcher and splash screen icons. + +--- + +## Gameplay Mechanics Walkthrough + +### Phase 1: Nest & Hatchling Guarding (Beach) +- **Objective**: Protect a nest of 20 sea turtle eggs. +- **Hazards**: + - **Trash (🥤, 🍼, 🍿)** blocks crawling hatchlings. The user must drag and drop the trash into the **Recycle Bin** on the bottom right. + - **Sand Holes** trap hatchlings. Tapping them twice fills them in. + - **Predators (Crabs 🦀, Seagulls 🦅)** attempt to eat the hatchlings. Tapping them scares them away. + - **Streetlights 💡** confuse the hatchlings' navigation. Tapping them turns off the light pollution so hatchlings navigate towards the moonlit sea. +- **Hatching Crawl**: During the final 20 seconds, hatchlings emerge and crawl toward the sea. + - **Realistic Survival Rate**: Safely guide at least **5 out of 20 hatchlings (25%)** to proceed, representing the real-world baseline survival rate on unprotected beaches. + - **Crawling Improvements**: Hatchling movement speed is increased to allow them to cross the beach container fully within the hatching window. + - **Conservation Bonus**: Rescuing **more than 5** hatchlings (> 25%) awards a **Starting Goody Bonus** (your ocean turtle starts with +20 hunger/fullness and +20 joy, maxing them out at 100% to represent a healthier head-start). + - **Scientific Result Breakdown**: Successfully completing this phase shows an intermediate results screen showing the precise survival rate and real-world sea turtle mortality trivia (e.g. only 1 in 1,000 hatchlings survive to adulthood). + +### Phase 2: Ocean Care (Virtual Pet Room) +- **Objective**: Raise a single juvenile turtle, rename it (default: "Shelly"), and monitor stats. +- **Stats**: Hunger, Joy, Shell Cleanliness, and Health. Health decays if other stats fall low or if hazards collide. +- **Interactivity**: + - **Feed**: Choose species-accurate foods. + - *Green Turtle*: Likes **Seagrass 🌿**. + - *Loggerhead*: Likes **Crabs 🦀**. + - *Leatherback*: Likes **Jellyfish 🪼**. + - *Penalty*: Feeding incorrect food drops happiness. Swallowing **Plastic Bags 🛍️** (which float by and mimic jellyfish) causes severe sickness. Tap/swipe plastic bags away before the turtle swallows them! + - **Clean Shell**: Brushing minigame. Rub the screen over the turtle's shell to scrape away green algae spots. + - **Play**: Tickle the belly to make it spin and gain Joy. + - **Heal**: Apply medicine to cure plastic-bag toxicity and injuries. +- **QTE Hazards**: + - **Ghost Nets**: Tangled net blocks breathing. Swipe back and forth repeatedly to cut the turtle free. + - **Boat Strikes**: Motor shadow passes. Tap the "DIVE DEEP" button to escape the propeller. + - **Shark Attacks**: A Tiger shark swims in. Tap "Hide in Shell" so the turtle retracts its head and flippers. + +### Phase 3: Beaching & Tourist Control (Conservation Defense) +- **Objective**: Protect your resting, beached sea turtle from humans. +- **Hazards**: Ignorant tourists spawn and try to enter the **10-Foot Safe Zone** to take selfies. Camera flashes disorient and stress the turtle (damaging health and progress). +- **Repelling**: Tap on incoming tourists to shove them back to the screen margins. Each tap displays a federal conservation law fact or NOAA guideline. +- **Resolution**: Successfully protect the turtle until its rest progress bar reaches 100% to return it safely to the ocean. + +--- + +## How to Verify and Run + +1. We have launched a background Python HTTP server on port 8000 in the project folder. +2. **Access the Game**: Open your browser and navigate to: + [http://localhost:8000](http://localhost:8000) +3. **PWA Installation**: + - On Desktop Chrome: An install icon will appear in the URL address bar, or you can trigger installation via the floating in-game install prompt. + - On iOS Safari: Tap "Share" -> "Add to Home Screen". + - On Android Chrome: Tap the three dots -> "Install app". +4. **Offline Play**: Turn off your network/Wi-Fi connection. Reload the page to verify that the Service Worker caches the code shell and lets you play offline seamlessly. diff --git a/app.js b/app.js new file mode 100644 index 0000000..602fcfa --- /dev/null +++ b/app.js @@ -0,0 +1,2495 @@ +/** + * Tortugotchi: Sea Turtle PWA Game Engine + * Core Game Logic, State Machine, and Interactions + */ + +document.addEventListener('DOMContentLoaded', () => { + // ========================================== + // 1. STATE & CONSTANTS + // ========================================== + const STATES = { + START: 'screen-start', + BEACH: 'screen-beach', + OCEAN: 'screen-ocean', + BEACHING: 'screen-beaching' + }; + + const CONSERVATION_FACTS = [ + "Federal law prohibits touching, disturbing, or harassing sea turtles under the Endangered Species Act (ESA).", + "Fines for disturbing sea turtles or nesting sites can reach up to $25,000, along with potential jail time.", + "Always maintain a minimum distance of 10 feet (3 meters) from sea turtles on land.", + "Crowding sea turtles causes them severe stress and can disrupt their natural nesting or resting behaviors.", + "Do not use flash photography near sea turtles; the bright flash disorients them and can disrupt nesting mothers.", + "Filing in beach holes and removing beach chairs prevents hatchlings from getting trapped on their way to the ocean." + ]; + + const PREDATOR_EMOJIS = ['🦀', '🦅', '🦝']; + const TRASH_EMOJIS = ['🥤', '🍼', '🍿', '🛍️']; + + // Game state + let currentState = STATES.START; + let turtleName = 'Shelly'; + let turtleSpecies = 'green'; // 'green' | 'loggerhead' | 'leatherback' + let turtleAge = 0; // days + let hatchlingsSaved = 0; + let beachTimer = null; + let beachTimeRemaining = 45; // seconds + let beachHazardsInterval = null; + let beachHatchInterval = null; + + // Ocean Care stats + let stats = { + health: 100, + hunger: 80, // 100 = full, 0 = starving + joy: 80, + clean: 100 + }; + let oceanLoops = { + decay: null, + hazards: null, + debris: null, + age: null, + idle: null, + bubbles: null + }; + let activeQte = null; // 'net' | 'boat' | 'shark' + let isHidingInShell = false; + let isSick = false; + let startWithBonus = false; + + // Beaching Event state + let beachingProgress = 0; // 0 to 100 + let beachingInterval = null; + let beachingTouristsInterval = null; + + // ========================================== + // 2. DOM ELEMENTS + // ========================================== + const screens = { + start: document.getElementById('screen-start'), + beach: document.getElementById('screen-beach'), + ocean: document.getElementById('screen-ocean'), + beaching: document.getElementById('screen-beaching') + }; + + // Modals + const modals = { + facts: document.getElementById('modal-facts'), + rename: document.getElementById('modal-rename'), + gameover: document.getElementById('modal-gameover'), + migrationSuccess: document.getElementById('modal-migration-success') + }; + + // Migration Success Elements + const btnMigrationContinue = document.getElementById('btn-migration-continue'); + const successSavedCount = document.getElementById('success-saved-count'); + const successSavedPct = document.getElementById('success-saved-pct'); + const bonusInfoCard = document.getElementById('bonus-info-card'); + + // Interactive Sandboxes + const beachSandbox = document.getElementById('beach-sandbox'); + const beachHazardsLayer = document.getElementById('beach-hazards-layer'); + const hatchlingCrawlersLayer = document.getElementById('hatchling-crawlers-layer'); + const beachTrashCan = document.getElementById('beach-trash-can'); + const oceanPlaypen = document.getElementById('ocean-playpen'); + const floatingItemsContainer = document.getElementById('floating-items-container'); + const cleaningGameOverlay = document.getElementById('cleaning-game-overlay'); + const cleaningBrush = document.getElementById('cleaning-brush'); + const beachingSandbox = document.getElementById('beaching-sandbox'); + const touristSpawnLayer = document.getElementById('tourist-spawn-layer'); + + // Turtle SVG components + const turtleContainer = document.getElementById('sea-turtle-container'); + const algaeSpots = document.getElementById('turtle-algae-spots'); + const thoughtBubble = document.getElementById('turtle-thought-bubble'); + const thoughtText = document.getElementById('thought-text'); + + // Eye States + const eyes = { + normal: document.getElementById('turtle-eyes-normal'), + happy: document.getElementById('turtle-eyes-happy'), + dizzy: document.getElementById('turtle-eyes-dizzy'), + sleeping: document.getElementById('turtle-eyes-sleeping') + }; + + // Mouth States + const mouths = { + normal: document.getElementById('turtle-mouth-normal'), + eating: document.getElementById('turtle-mouth-eating'), + sad: document.getElementById('turtle-mouth-sad') + }; + + // Buttons + const btnStartGame = document.getElementById('btn-start-game'); + const btnShowFactsMain = document.getElementById('btn-show-facts-main'); + const btnCloseFacts = document.getElementById('btn-close-facts'); + const btnCloseFactsBottom = document.getElementById('btn-close-facts-bottom'); + const btnDismissBeachTut = document.getElementById('btn-dismiss-beach-tut'); + const btnRenameTurtle = document.getElementById('btn-rename-turtle'); + const btnSaveRename = document.getElementById('btn-save-name'); + const btnRestartGame = document.getElementById('btn-restart-game'); + + // Ocean Actions + const btnFeed = document.getElementById('btn-action-feed'); + const btnClean = document.getElementById('btn-action-clean'); + const btnPlay = document.getElementById('btn-action-play'); + const btnHeal = document.getElementById('btn-action-heal'); + const feedDrawer = document.getElementById('feed-options-drawer'); + + // HUD Outputs + const displayTurtleName = document.getElementById('display-turtle-name'); + const displayTurtleSpecies = document.getElementById('display-turtle-species'); + const turtleAgeVal = document.getElementById('turtle-age-val'); + const txtHatchlingsSaved = document.getElementById('hatchlings-saved-count'); + const beachProgressFill = document.getElementById('beach-progress-fill'); + const beachFeedbackText = document.getElementById('beach-feedback'); + const lightPollutionHud = document.getElementById('light-pollution-hud'); + + // Stat Bars + const bars = { + health: document.getElementById('bar-health'), + hunger: document.getElementById('bar-hunger'), + joy: document.getElementById('bar-joy'), + clean: document.getElementById('bar-clean') + }; + const texts = { + health: document.getElementById('stat-health-text'), + hunger: document.getElementById('stat-hunger-text'), + joy: document.getElementById('stat-joy-text'), + clean: document.getElementById('stat-clean-text') + }; + + // QTE HUD elements + const qteNet = document.getElementById('qte-net-overlay'); + const netSwipeFill = document.getElementById('net-swipe-fill'); + const qteBoat = document.getElementById('qte-boat-overlay'); + const btnQteDive = document.getElementById('btn-qte-dive'); + const qteShark = document.getElementById('qte-shark-overlay'); + const btnQteHide = document.getElementById('btn-qte-hide'); + + // Beaching Event HUD elements + const beachingProgressFill = document.getElementById('beaching-progress-fill'); + const beachingProgressText = document.getElementById('beaching-progress-text'); + const touristFactText = document.getElementById('tourist-fact-text'); + + // PWA Banner Elements + const pwaInstallBanner = document.getElementById('pwa-install-banner'); + const btnPwaInstall = document.getElementById('btn-pwa-install'); + const btnPwaClose = document.getElementById('btn-pwa-close'); + + // ========================================== + // 3. PWA INSTALLATION PROMPT + // ========================================== + // iOS Safari does NOT fire `beforeinstallprompt` and has no programmatic + // install API. Instead we detect iOS and show a manual instruction banner + // pointing the user to Share → Add to Home Screen. + const ua = navigator.userAgent || ''; + const isIos = + /iPad|iPhone|iPod/.test(ua) || + (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1); // iPad iPadOS + const isInStandalone = + window.matchMedia('(display-mode: standalone)').matches || + window.navigator.standalone === true; + const dismissedKey = 'tortugotchi_pwa_dismissed'; + const wasDismissed = localStorage.getItem(dismissedKey) === '1'; + + const bannerTextEl = pwaInstallBanner.querySelector('.banner-text'); + + let deferredPrompt = null; + + function showBanner() { + if (isInStandalone || wasDismissed) return; + pwaInstallBanner.classList.remove('hidden'); + } + + // Chromium path (desktop Chrome/Edge, Android Chrome) + window.addEventListener('beforeinstallprompt', (e) => { + e.preventDefault(); + deferredPrompt = e; + btnPwaInstall.classList.remove('hidden'); + btnPwaInstall.textContent = 'Install'; + showBanner(); + }); + + window.addEventListener('appinstalled', () => { + pwaInstallBanner.classList.add('hidden'); + deferredPrompt = null; + }); + + btnPwaInstall.addEventListener('click', async () => { + if (deferredPrompt) { + deferredPrompt.prompt(); + try { + await deferredPrompt.userChoice; + } catch (_) { /* ignore */ } + deferredPrompt = null; + pwaInstallBanner.classList.add('hidden'); + } + }); + + btnPwaClose.addEventListener('click', () => { + pwaInstallBanner.classList.add('hidden'); + localStorage.setItem(dismissedKey, '1'); + }); + + // Platform-specific manual fallbacks for browsers where + // `beforeinstallprompt` is either not supported or hasn't fired yet. + const isAndroid = /Android/i.test(ua); + const isFirefox = /Firefox|FxiOS/i.test(ua); + const isSamsung = /SamsungBrowser/i.test(ua); + const isChromiumMobile = isAndroid && /Chrome|CriOS|EdgA/i.test(ua) && !isFirefox && !isSamsung; + + function showManualBanner(headline, instructions) { + if (isInStandalone || wasDismissed) return; + if (bannerTextEl) { + const h = bannerTextEl.querySelector('h4'); + const p = bannerTextEl.querySelector('p'); + if (h) h.textContent = headline; + if (p) p.textContent = instructions; + } + btnPwaInstall.classList.add('hidden'); + showBanner(); + } + + if (isIos && !isInStandalone && !wasDismissed) { + // iOS Safari — Share → Add to Home Screen + setTimeout(() => { + showManualBanner( + 'Add Tortugotchi to Home Screen', + 'Tap the Share icon ↑ in Safari, then "Add to Home Screen" to play offline.' + ); + }, 1500); + } else if (isFirefox && isAndroid && !isInStandalone && !wasDismissed) { + // Firefox Android — no beforeinstallprompt; user must use menu + setTimeout(() => { + showManualBanner( + 'Install Tortugotchi', + 'Tap the ⋮ menu in Firefox, then "Install" or "Add to Home Screen".' + ); + }, 1500); + } else if (isSamsung && !isInStandalone && !wasDismissed) { + setTimeout(() => { + showManualBanner( + 'Install Tortugotchi', + 'Tap the ⋮ menu, then "Add page to" → "Home screen".' + ); + }, 1500); + } else if (isChromiumMobile && !isInStandalone && !wasDismissed) { + // Chrome/Edge on Android — beforeinstallprompt SHOULD fire, but engagement + // heuristics or HTTP serving can suppress it. If it hasn't fired after a + // few seconds, fall back to manual instructions so the banner still + // appears. + setTimeout(() => { + if (!deferredPrompt && pwaInstallBanner.classList.contains('hidden')) { + showManualBanner( + 'Install Tortugotchi', + 'Tap the ⋮ menu in Chrome, then "Install app" or "Add to Home screen".' + ); + } + }, 6000); + } + + // Service Worker Registration + if ('serviceWorker' in navigator) { + window.addEventListener('load', () => { + navigator.serviceWorker.register('./sw.js') + .then((reg) => console.log('Service Worker registered successfully!', reg.scope)) + .catch((err) => console.log('Service Worker registration failed:', err)); + }); + } + + // ========================================== + // 4. TRANSITIONS & STATE MACHINE + // ========================================== + function changeState(newState) { + const outgoing = document.querySelector('.game-screen.active'); + const incomingEl = screens[newState.split('-')[1]]; + + const finish = () => { + Object.values(screens).forEach(s => { + s.classList.remove('active', 'screen-exit', 'screen-enter'); + }); + currentState = newState; + incomingEl.classList.add('active'); + // Force reflow so the enter animation actually plays + void incomingEl.offsetWidth; + incomingEl.classList.add('screen-enter'); + setTimeout(() => incomingEl.classList.remove('screen-enter'), 600); + + if (newState === STATES.BEACH) initBeachPhase(); + else if (newState === STATES.OCEAN) initOceanPhase(); + else if (newState === STATES.BEACHING) initBeachingPhase(); + }; + + if (outgoing && outgoing !== incomingEl) { + outgoing.classList.add('screen-exit'); + setTimeout(finish, 320); + } else { + finish(); + } + } + + // Initialize Beach Nest Phase + function initBeachPhase() { + hatchlingsSaved = 0; + beachTimeRemaining = 45; + txtHatchlingsSaved.textContent = "0 / 20"; + beachHazardsLayer.innerHTML = ''; + hatchlingCrawlersLayer.innerHTML = ''; + beachProgressFill.style.width = "100%"; + beachProgressFill.classList.remove('warning'); + beachFeedbackText.textContent = "Guarding nest... Keep lights off and clear beach hazards!"; + lightPollutionHud.classList.add('hidden'); + + // Species assignment text + const selectedSpeciesRadio = document.querySelector('input[name="species"]:checked'); + turtleSpecies = selectedSpeciesRadio ? selectedSpeciesRadio.value : 'green'; + + // Clear existing beach intervals + clearInterval(beachTimer); + clearInterval(beachHazardsInterval); + clearInterval(beachHatchInterval); + + // Beach Phase Timer (45 seconds total) + beachTimer = setInterval(() => { + beachTimeRemaining--; + const pct = (beachTimeRemaining / 45) * 100; + beachProgressFill.style.width = `${pct}%`; + + if (beachTimeRemaining <= 15) { + beachProgressFill.classList.add('warning'); + } + + // Start Hatching during the last 20 seconds + if (beachTimeRemaining === 20) { + beachFeedbackText.textContent = "🥚 Hatching has begun! Help them reach the moonlit ocean!"; + startHatchlingsCrawl(); + } + + if (beachTimeRemaining <= 0) { + endBeachPhase(); + } + }, 1000); + + // Hazard spawning cycle (every 3.5 seconds) + beachHazardsInterval = setInterval(() => { + if (beachTimeRemaining > 15) { + spawnBeachHazard(); + } else { + // Higher intensity during crawling phase + if (Math.random() > 0.4) spawnBeachHazard(); + } + }, 3500); + } + + // Initialize Ocean Rearing Phase + function initOceanPhase() { + // Clear any beach intervals + clearInterval(beachTimer); + clearInterval(beachHazardsInterval); + clearInterval(beachHatchInterval); + + // Reset ocean stats if it's a new game (Age = 0) + if (turtleAge === 0) { + if (startWithBonus) { + stats = { health: 100, hunger: 100, joy: 100, clean: 100 }; + } else { + stats = { health: 100, hunger: 80, joy: 80, clean: 100 }; + } + isSick = false; + isHidingInShell = false; + startWithBonus = false; // Reset the flag + } + + // Set Species details in HUD + const speciesNames = { + green: "Green Sea Turtle", + loggerhead: "Loggerhead Sea Turtle", + leatherback: "Leatherback Sea Turtle" + }; + displayTurtleSpecies.textContent = speciesNames[turtleSpecies] || "Sea Turtle"; + displayTurtleName.textContent = turtleName; + turtleAgeVal.textContent = formatAge(turtleAge); + applySpeciesAppearance(); + applyGrowthStage(); + + updateStatBars(); + setEyeState('normal'); + setMouthState('normal'); + + // Core loops + startOceanLoops(); + } + + function startOceanLoops() { + clearOceanLoops(); + + // 1. Stats decay — idle-game pace. A healthy turtle lasts many hours + // between feedings, so players can come back across days/weeks. + // Decay tick is still 1s for smooth bars but rates are tuned for hours. + oceanLoops.decay = setInterval(() => { + if (activeQte) return; + + // ~0.15/s hunger ≈ depletes from 100→0 in ~11 minutes of active play, + // but with offline catch-up capped at 24h of decay, a fed turtle will + // still be alive when the player returns the next day. + stats.hunger = Math.max(0, stats.hunger - 0.15); + stats.joy = Math.max(0, stats.joy - 0.18); + stats.clean = Math.max(0, stats.clean - 0.08); + + // Health only suffers under prolonged neglect (any stat near zero) + let penaltyCount = 0; + if (stats.hunger < 20) penaltyCount++; + if (stats.joy < 20) penaltyCount++; + if (stats.clean < 25) penaltyCount++; + + if (penaltyCount > 0) { + stats.health = Math.max(0, stats.health - (penaltyCount * 0.4)); + setMouthState('sad'); + if (Math.random() > 0.85) { + triggerThoughtBubble(getRandomLowStatThought()); + } + } else { + if (stats.hunger > 60 && stats.joy > 60 && stats.clean > 60) { + stats.health = Math.min(100, stats.health + 0.15); + } + setMouthState('normal'); + } + + // Cleanliness visuals (algae visibility) + if (stats.clean < 50) { + algaeSpots.classList.remove('hidden'); + } else { + algaeSpots.classList.add('hidden'); + } + + // Check for sickness from eating plastic + if (isSick) { + stats.health = Math.max(0, stats.health - 2); + setEyeState('dizzy'); + if (Math.random() > 0.8) triggerThoughtBubble("Ouch, tummy hurts... 🩺"); + } + + updateStatBars(); + checkGameOver(); + }, 1000); + + // 2. Aging — sea turtle ages in proportion to how healthy/cared-for it is. + // A neglected turtle barely grows; a thriving one ages quickly and reaches + // adulthood over weeks of real-world play. + // Tick every 10s; ageProgress accumulates fractional days until it hits 1. + let ageProgress = 0; + oceanLoops.age = setInterval(() => { + if (activeQte) return; + const gained = computeAgeGain(10); + ageProgress += gained; + + if (ageProgress >= 1) { + const wholeDays = Math.floor(ageProgress); + ageProgress -= wholeDays; + turtleAge += wholeDays; + turtleAgeVal.textContent = formatAge(turtleAge); + applyGrowthStage(); + if (wholeDays > 0 && Math.random() > 0.7) { + triggerThoughtBubble(getGrowthThought(), 2200); + } + } + + saveProgress(); + + // Beaching happens on a regular cycle for healthy adults — roughly + // every few minutes of active play. + if (turtleAge > 7 && stats.health > 50 && Math.random() < 0.18) { + changeState(STATES.BEACHING); + } + }, 10000); + + // 3. Debris Generator — gentle idle pace + oceanLoops.debris = setInterval(() => { + if (activeQte || currentState !== STATES.OCEAN) return; + if (Math.random() > 0.55) { + spawnFloatingDebris(); + } + }, 18000); + + // 4. Random QTE Hazards — frequent rhythm. Roughly one hazard every ~45s + // on average (75% chance per 60s tick). Ignoring them is the main neglect + // risk in idle mode. + oceanLoops.hazards = setInterval(() => { + if (activeQte || currentState !== STATES.OCEAN) return; + if (Math.random() < 0.75) { + triggerQteHazard(); + } + }, 60000); + + // 5. Idle behaviors — turtle does cute things when not being interacted with + oceanLoops.idle = setInterval(() => { + if (activeQte || currentState !== STATES.OCEAN) return; + triggerIdleBehavior(); + }, 4500); + + // 6. Ambient bubble stream + oceanLoops.bubbles = setInterval(() => { + if (currentState !== STATES.OCEAN) return; + spawnAmbientBubble(); + }, 1200); + } + + function clearOceanLoops() { + Object.values(oceanLoops).forEach(loop => clearInterval(loop)); + } + + // ========================================== + // 5. LOCAL STORAGE SAVING/LOADING + // ========================================== + function saveProgress() { + const saveData = { + name: turtleName, + species: turtleSpecies, + age: turtleAge, + stats: stats, + isSick: isSick, + savedAt: Date.now() + }; + localStorage.setItem('tortugotchi_save', JSON.stringify(saveData)); + } + + // Save before the tab/window closes so progress is captured even between + // 10-second auto-save ticks. + window.addEventListener('pagehide', saveProgress); + window.addEventListener('beforeunload', saveProgress); + + function loadProgress() { + const saved = localStorage.getItem('tortugotchi_save'); + if (!saved) return false; + try { + const data = JSON.parse(saved); + turtleName = data.name || 'Shelly'; + turtleSpecies = data.species || 'green'; + turtleAge = data.age || 0; + stats = data.stats || { health: 100, hunger: 80, joy: 80, clean: 100 }; + isSick = data.isSick || false; + + // Offline progression: apply the time the player was away. + // Capped at 24h of decay so a multi-week absence doesn't kill the turtle. + if (data.savedAt) { + const elapsedSec = Math.max(0, (Date.now() - data.savedAt) / 1000); + const cappedSec = Math.min(elapsedSec, 24 * 60 * 60); + applyOfflineProgression(cappedSec); + } + return true; + } catch (e) { + console.error("Failed to load save file, resetting.", e); + return false; + } + } + + function applyOfflineProgression(seconds) { + // Mirror the per-second rates from the decay loop + stats.hunger = Math.max(0, stats.hunger - 0.15 * seconds); + stats.joy = Math.max(0, stats.joy - 0.18 * seconds); + stats.clean = Math.max(0, stats.clean - 0.08 * seconds); + + // Approximate health behavior over the elapsed window + const avgEnd = (stats.hunger + stats.joy + stats.clean) / 3; + if (avgEnd < 20) { + stats.health = Math.max(0, stats.health - 0.4 * seconds * 0.5); // gradual neglect damage + } else if (avgEnd > 60) { + stats.health = Math.min(100, stats.health + 0.05 * seconds * 0.2); + } + + // Award age progression for the healthy portion of the absence + const offlineDays = computeAgeGain(seconds); + turtleAge += Math.floor(offlineDays); + } + + // ========================================== + // AGING & GROWTH HELPERS + // ========================================== + // Returns fractional days gained for `seconds` of game time, based on how + // healthy/cared-for the turtle is. Healthy turtle: 1 day per ~3 minutes of + // active play (~480 days/day of real play if perfectly tended). + // Neglected turtle: little to no growth. + function computeAgeGain(seconds) { + const avg = (stats.hunger + stats.joy + stats.clean) / 3; + // Tiered days-per-second tuned so peak care = ~1 day every 15s. + let dps; + if (stats.health < 25 || avg < 20) dps = 0; // neglected: no growth + else if (avg < 40) dps = 1 / 120; // poor: 1 day / 2 min + else if (avg < 60) dps = 1 / 60; // mediocre: 1 day / 1 min + else if (avg < 75) dps = 1 / 35; // healthy: 1 day / 35s + else if (avg < 90) dps = 1 / 22; // very healthy: 1 day / 22s + else dps = 1 / 15; // thriving: 1 day / 15s + return seconds * dps; + } + + function formatAge(days) { + if (days < 7) return `${days} ${days === 1 ? 'Day' : 'Days'}`; + if (days < 30) return `${Math.floor(days / 7)}w ${days % 7}d`; + if (days < 365) { + const m = Math.floor(days / 30); + const d = days % 30; + return `${m}mo ${d}d`; + } + const years = Math.floor(days / 365); + const remMonths = Math.floor((days % 365) / 30); + return `${years}y ${remMonths}mo`; + } + + function growthStage(days) { + if (days < 7) return 'hatchling'; + if (days < 30) return 'juvenile'; + if (days < 120) return 'subadult'; + if (days < 365) return 'adult'; + return 'elder'; + } + + function applyGrowthStage() { + const stage = growthStage(turtleAge); + turtleContainer.classList.remove( + 'stage-hatchling', 'stage-juvenile', 'stage-subadult', 'stage-adult', 'stage-elder' + ); + turtleContainer.classList.add(`stage-${stage}`); + } + + function applySpeciesAppearance() { + turtleContainer.classList.remove('species-green', 'species-loggerhead', 'species-leatherback'); + turtleContainer.classList.add(`species-${turtleSpecies}`); + } + + function getGrowthThought() { + const thoughts = [ + "I think I grew a little! 🌱", + "Getting stronger! 💪", + "My shell feels bigger! 🐢", + "Another day in the deep blue 🌊" + ]; + return thoughts[Math.floor(Math.random() * thoughts.length)]; + } + + // ========================================== + // 6. BEACH PHASE DETAILS & HAZARDS + // ========================================== + + // Spawn Sand Hazards (Trash, Hole, Light, Predator) + function spawnBeachHazard() { + if (currentState !== STATES.BEACH) return; + + const r = Math.random(); + + if (r < 0.25) { + // Spawn Light source if one doesn't exist + if (!document.querySelector('.beach-light-source')) { + createStreetlight(); + } else { + spawnTrash(); + } + } else if (r < 0.5) { + // Spawn Deep Hole + spawnSandHole(); + } else if (r < 0.8) { + // Spawn Predator (crab, seagull) + spawnPredator(); + } else { + // Spawn Beach Trash + spawnTrash(); + } + } + + // Spawn Trash on Beach + function spawnTrash() { + const trash = document.createElement('div'); + trash.className = 'beach-trash-item'; + trash.textContent = TRASH_EMOJIS[Math.floor(Math.random() * TRASH_EMOJIS.length)]; + + // Position randomly on beach + const beachWidth = beachSandbox.clientWidth; + const beachHeight = beachSandbox.clientHeight; + + // Confine to middle/lower beach + const x = Math.random() * (beachWidth - 40) + 10; + const y = Math.random() * (beachHeight - 170) + 80; + + trash.style.left = `${x}px`; + trash.style.top = `${y}px`; + + // Make interactive (Click fallback & simple drag) + let isDragging = false; + let startX = 0, startY = 0; + let originalLeft = x, originalTop = y; + + const dragStart = (e) => { + isDragging = true; + trash.style.transition = 'none'; + const clientX = e.touches ? e.touches[0].clientX : e.clientX; + const clientY = e.touches ? e.touches[0].clientY : e.clientY; + startX = clientX - trash.offsetLeft; + startY = clientY - trash.offsetTop; + }; + + const dragMove = (e) => { + if (!isDragging) return; + e.preventDefault(); + const clientX = e.touches ? e.touches[0].clientX : e.clientX; + const clientY = e.touches ? e.touches[0].clientY : e.clientY; + + const nextX = clientX - startX; + const nextY = clientY - startY; + + trash.style.left = `${nextX}px`; + trash.style.top = `${nextY}px`; + + // Check overlay hover on recycle bin + const binRect = beachTrashCan.getBoundingClientRect(); + const trashRect = trash.getBoundingClientRect(); + + if ( + trashRect.right > binRect.left && + trashRect.left < binRect.right && + trashRect.bottom > binRect.top && + trashRect.top < binRect.bottom + ) { + beachTrashCan.classList.add('drag-hover'); + } else { + beachTrashCan.classList.remove('drag-hover'); + } + }; + + const dragEnd = () => { + if (!isDragging) return; + isDragging = false; + beachTrashCan.classList.remove('drag-hover'); + + const binRect = beachTrashCan.getBoundingClientRect(); + const trashRect = trash.getBoundingClientRect(); + + if ( + trashRect.right > binRect.left && + trashRect.left < binRect.right && + trashRect.bottom > binRect.top && + trashRect.top < binRect.bottom + ) { + // Successfully recycled! + trash.remove(); + beachFeedbackText.textContent = "♻️ Trash recycled! Path cleared (+10)"; + spawnScoreAlert(trashRect.left, trashRect.top, "♻️ Clean!"); + } else { + // Click/Tap fallback: if moved only slightly, recycle directly on click + const diffX = Math.abs(parseFloat(trash.style.left) - originalLeft); + const diffY = Math.abs(parseFloat(trash.style.top) - originalTop); + if (diffX < 5 && diffY < 5) { + // Recycle directly + trash.remove(); + beachFeedbackText.textContent = "♻️ Trash recycled! Path cleared (+10)"; + spawnScoreAlert(originalLeft, originalTop, "♻️ Clean!"); + } else { + // Snap back + trash.style.transition = 'all 0.3s ease'; + trash.style.left = `${originalLeft}px`; + trash.style.top = `${originalTop}px`; + } + } + }; + + trash.addEventListener('mousedown', dragStart); + trash.addEventListener('touchstart', dragStart, { passive: false }); + window.addEventListener('mousemove', dragMove); + window.addEventListener('touchmove', dragMove, { passive: false }); + window.addEventListener('mouseup', dragEnd); + window.addEventListener('touchend', dragEnd); + + beachHazardsLayer.appendChild(trash); + } + + // Spawn deep holes in sand + function spawnSandHole() { + const hole = document.createElement('div'); + hole.className = 'beach-hole-item'; + + const beachWidth = beachSandbox.clientWidth; + const beachHeight = beachSandbox.clientHeight; + + const x = Math.random() * (beachWidth - 60) + 10; + const y = Math.random() * (beachHeight - 180) + 90; + + hole.style.left = `${x}px`; + hole.style.top = `${y}px`; + + let clicksRequired = 2; + hole.addEventListener('click', () => { + clicksRequired--; + if (clicksRequired === 1) { + hole.classList.add('filling'); + beachFeedbackText.textContent = "⏳ Filling hole..."; + } else if (clicksRequired <= 0) { + hole.remove(); + beachFeedbackText.textContent = "⛱️ Sand hole filled! Safe to crawl."; + } + }); + + beachHazardsLayer.appendChild(hole); + } + + // Spawn beach predators (Crabs or Gulls) + function spawnPredator() { + const predator = document.createElement('div'); + predator.className = 'beach-predator-item'; + predator.textContent = PREDATOR_EMOJIS[Math.floor(Math.random() * PREDATOR_EMOJIS.length)]; + + const beachWidth = beachSandbox.clientWidth; + const beachHeight = beachSandbox.clientHeight; + + // Start at random edge + const fromLeft = Math.random() > 0.5; + const startX = fromLeft ? -40 : beachWidth + 10; + const startY = Math.random() * (beachHeight - 160) + 60; + + predator.style.left = `${startX}px`; + predator.style.top = `${startY}px`; + + beachHazardsLayer.appendChild(predator); + + // Animate moving toward nest + const nestX = beachWidth / 2; + const nestY = beachHeight - 65; + + let posX = startX; + let posY = startY; + + const speed = Math.random() * 0.8 + 0.6; + + const moveInterval = setInterval(() => { + if (currentState !== STATES.BEACH || !predator.parentNode) { + clearInterval(moveInterval); + return; + } + + // Direct path to nest + const dx = nestX - posX; + const dy = nestY - posY; + const dist = Math.sqrt(dx * dx + dy * dy); + + if (dist < 15) { + // Predator reached the nest! + clearInterval(moveInterval); + predator.remove(); + beachFeedbackText.textContent = "🦅 A predator got close! Keep them away!"; + // Screen shake to show impact + screens.beach.classList.add('shake-element'); + setTimeout(() => screens.beach.classList.remove('shake-element'), 400); + } else { + posX += (dx / dist) * speed; + posY += (dy / dist) * speed; + predator.style.left = `${posX}px`; + predator.style.top = `${posY}px`; + } + }, 30); + + // Tap to scare away + predator.addEventListener('click', (e) => { + clearInterval(moveInterval); + predator.classList.add('predator-scared'); + beachFeedbackText.textContent = "💥 Scared off the predator!"; + spawnScoreAlert(e.clientX - 10, e.clientY - 20, "💥 Shoo!"); + setTimeout(() => predator.remove(), 400); + }); + } + + // Create Streetlight/Light Pollution + function createStreetlight() { + const light = document.createElement('div'); + light.className = 'beach-light-source'; + + // Put on the right or left edge midway + const onLeft = Math.random() > 0.5; + light.style.left = onLeft ? '10px' : `${beachSandbox.clientWidth - 60}px`; + if (!onLeft) light.style.transform = 'scaleX(-1)'; + + light.innerHTML = ` +
+
+
+ `; + + beachHazardsLayer.appendChild(light); + lightPollutionHud.classList.remove('hidden'); + + // Tap bulb/light to turn off + light.addEventListener('click', () => { + if (!light.classList.contains('off')) { + light.classList.add('off'); + lightPollutionHud.classList.add('hidden'); + beachFeedbackText.textContent = "💡 Streetlight turned off! Hatchlings can see the moon."; + // Automatically delete after a few seconds + setTimeout(() => light.remove(), 5000); + } + }); + } + + // Hatchling Crawford Sequence + function startHatchlingsCrawl() { + let spawnedHatchlings = 0; + const maxHatchlings = 20; + + beachHatchInterval = setInterval(() => { + if (currentState !== STATES.BEACH || spawnedHatchlings >= maxHatchlings) { + clearInterval(beachHatchInterval); + return; + } + + spawnSingleHatchling(spawnedHatchlings); + spawnedHatchlings++; + }, 1000); + } + + function spawnSingleHatchling(index) { + const crawler = document.createElement('div'); + crawler.className = 'hatchling-crawler'; + crawler.id = `hatchling-${index}`; + + // Spawn from the nest mound center + const nestMound = document.querySelector('.nest-mound'); + const nestRect = nestMound.getBoundingClientRect(); + const sandboxRect = beachSandbox.getBoundingClientRect(); + + let startX = (nestRect.left - sandboxRect.left) + (nestRect.width / 2) - 12; + let startY = (nestRect.top - sandboxRect.top) + 10; + + crawler.style.left = `${startX}px`; + crawler.style.top = `${startY}px`; + + // Inline SVG for the cute baby turtle + crawler.innerHTML = ` + + + + + + + + + + + + + + + `; + + hatchlingCrawlersLayer.appendChild(crawler); + + // Movement loop + let posX = startX; + let posY = startY; + let isStuck = false; + let angle = 0; // heading + + const crawlInterval = setInterval(() => { + if (currentState !== STATES.BEACH || !crawler.parentNode) { + clearInterval(crawlInterval); + return; + } + + // Check collision with hazards (Trash, Holes, Predators) + const crawlerRect = crawler.getBoundingClientRect(); + + // 1. Check predators + const predators = document.querySelectorAll('.beach-predator-item'); + for (let pred of predators) { + const predRect = pred.getBoundingClientRect(); + if (checkOverlap(crawlerRect, predRect) && !pred.classList.contains('predator-scared')) { + // Predator eats hatchling! + crawler.remove(); + clearInterval(crawlInterval); + return; + } + } + + // 2. Check holes + const holes = document.querySelectorAll('.beach-hole-item'); + let stuckInHole = false; + for (let hole of holes) { + const holeRect = hole.getBoundingClientRect(); + if (checkOverlap(crawlerRect, holeRect)) { + stuckInHole = true; + break; + } + } + + // 3. Check Trash + const trashItems = document.querySelectorAll('.beach-trash-item'); + let blockedByTrash = false; + for (let tr of trashItems) { + const trashRect = tr.getBoundingClientRect(); + if (checkOverlap(crawlerRect, trashRect)) { + blockedByTrash = true; + break; + } + } + + if (stuckInHole || blockedByTrash) { + // Stuck! + isStuck = true; + // Make little struggling movement + crawler.style.transform = `scale(0.85) rotate(${Math.sin(Date.now() / 100) * 15}deg)`; + return; + } else { + isStuck = false; + } + + // Determine Target Direction + // Normal target: the sea at top (y = 0) + let targetX = posX; + let targetY = 0; + + // Check if light pollution is active + const activeLight = document.querySelector('.beach-light-source:not(.off)'); + if (activeLight) { + // Disoriented! Crawl toward the light instead + const lightRect = activeLight.getBoundingClientRect(); + const sandboxRect = beachSandbox.getBoundingClientRect(); + targetX = lightRect.left - sandboxRect.left + 25; + targetY = lightRect.top - sandboxRect.top + 45; + } + + // Move toward target + const speed = 1.6 + Math.random() * 1.2; + const dx = targetX - posX; + const dy = targetY - posY; + const dist = Math.sqrt(dx*dx + dy*dy); + + if (posY <= 40) { + // Reached the ocean! + hatchlingsSaved++; + txtHatchlingsSaved.textContent = `${hatchlingsSaved} / 20`; + crawler.remove(); + clearInterval(crawlInterval); + + // Little splash particle at water line + spawnScoreAlert(posX, 30, "💦 Safe!"); + return; + } + + // If light drawing them off-screen + if (activeLight && dist < 30) { + // Lost inland + crawler.remove(); + clearInterval(crawlInterval); + beachFeedbackText.textContent = "💡 Some hatchlings wandered inland toward light!"; + return; + } + + // Wiggle movement vector + const waddle = Math.sin(Date.now() / 150) * 0.5; + const stepX = (dx / dist) * speed + waddle; + const stepY = (dy / dist) * speed; + + posX += stepX; + posY += stepY; + + // Rotate towards movement vector + const targetAngle = Math.atan2(stepY, stepX) * (180 / Math.PI) - 90; + crawler.style.left = `${posX}px`; + crawler.style.top = `${posY}px`; + crawler.style.transform = `rotate(${targetAngle}deg)`; + }, 50); + } + + function checkOverlap(rect1, rect2) { + return !( + rect1.right < rect2.left + 5 || + rect1.left > rect2.right - 5 || + rect1.bottom < rect2.top + 5 || + rect1.top > rect2.bottom - 5 + ); + } + + function spawnScoreAlert(x, y, text) { + const alert = document.createElement('div'); + alert.style.position = 'absolute'; + alert.style.left = `${x}px`; + alert.style.top = `${y}px`; + alert.style.color = '#52b788'; + alert.style.fontWeight = 'bold'; + alert.style.fontSize = '0.9rem'; + alert.style.pointerEvents = 'none'; + alert.style.zIndex = '100'; + alert.style.transition = 'all 0.8s ease-out'; + alert.textContent = text; + + beachSandbox.appendChild(alert); + + setTimeout(() => { + alert.style.transform = 'translateY(-30px)'; + alert.style.opacity = '0'; + }, 10); + + setTimeout(() => alert.remove(), 900); + } + + function endBeachPhase() { + clearInterval(beachTimer); + clearInterval(beachHazardsInterval); + clearInterval(beachHatchInterval); + + if (hatchlingsSaved >= 5) { + // Success! Populate migration success modal + const pct = Math.round((hatchlingsSaved / 20) * 100); + successSavedCount.textContent = `${hatchlingsSaved} / 20`; + successSavedPct.textContent = `${pct}%`; + + if (hatchlingsSaved > 5) { + // Exceeds baseline average, award goodies! + startWithBonus = true; + bonusInfoCard.classList.remove('hidden'); + } else { + startWithBonus = false; + bonusInfoCard.classList.add('hidden'); + } + + modals.migrationSuccess.classList.remove('hidden'); + } else { + // Fail! Game over + showGameOver( + "Nest Vulnerability Too High!", + `Only ${hatchlingsSaved} out of 20 hatchlings reached the ocean. In the wild, coastal lighting and trash block their path, making them prey for crabs and birds. Try again to clean the beach and keep it dark!` + ); + } + } + + // ========================================== + // 7. OCEAN PHASE FUNCTIONS & CARE ACTIONS + // ========================================== + + // Update HUD progress bars + function updateStatBars() { + // Health + bars.health.style.width = `${stats.health}%`; + texts.health.textContent = `${Math.round(stats.health)}%`; + if (stats.health < 30) bars.health.classList.add('warning'); + else bars.health.classList.remove('warning'); + + // Hunger + bars.hunger.style.width = `${stats.hunger}%`; + texts.hunger.textContent = `${Math.round(stats.hunger)}%`; + + // Joy + bars.joy.style.width = `${stats.joy}%`; + texts.joy.textContent = `${Math.round(stats.joy)}%`; + + // Clean + bars.clean.style.width = `${stats.clean}%`; + texts.clean.textContent = `${Math.round(stats.clean)}%`; + } + + // Eye States Toggle + function setEyeState(state) { + Object.values(eyes).forEach(eye => eye.classList.add('hidden')); + if (eyes[state]) { + eyes[state].classList.remove('hidden'); + } + } + + // Mouth States Toggle + function setMouthState(state) { + Object.values(mouths).forEach(mouth => mouth.classList.add('hidden')); + if (mouths[state]) { + mouths[state].classList.remove('hidden'); + } + } + + // Dialog bubble + function triggerThoughtBubble(text, duration = 3000) { + thoughtText.textContent = text; + thoughtBubble.classList.remove('hidden'); + + // Position bubble directly over turtle + const turtleRect = turtleContainer.getBoundingClientRect(); + const oceanRect = oceanPlaypen.getBoundingClientRect(); + const x = (turtleRect.left - oceanRect.left) + (turtleRect.width / 2) - 80; + const y = (turtleRect.top - oceanRect.top) - 45; + + thoughtBubble.style.left = `${x}px`; + thoughtBubble.style.top = `${y}px`; + + setTimeout(() => { + thoughtBubble.classList.add('hidden'); + }, duration); + } + + function getRandomLowStatThought() { + if (stats.hunger < 40) { + return turtleSpecies === 'green' ? "Need seagrass! 🌿" : + turtleSpecies === 'loggerhead' ? "Need crabs! 🦀" : "Need jellyfish! 🪼"; + } + if (stats.clean < 45) return "Shell feels itchy... 🧼"; + if (stats.joy < 40) return "Let's play! ⚽"; + return "Feeling weak... 🩹"; + } + + // Cleanliness Brushing Mini-game + let brushCleaning = false; + btnClean.addEventListener('click', () => { + if (activeQte) return; + + if (cleaningGameOverlay.classList.contains('hidden')) { + // Activate brushing + cleaningGameOverlay.classList.remove('hidden'); + btnClean.classList.add('active'); + + // Spawn brush near turtle shell (centered horizontally inside overlay) + const initialOverlayRect = cleaningGameOverlay.getBoundingClientRect(); + cleaningBrush.style.left = `${initialOverlayRect.width / 2 - 30}px`; + cleaningBrush.style.top = `${initialOverlayRect.height / 2}px`; + + let isDraggingBrush = false; + let grabDX = 0, grabDY = 0; + // Track direction so we can count discrete "scrubs". A scrub = one + // back-and-forth swipe (direction reversal of horizontal motion) over + // the shell. Each scrub adds 3% cleanliness; rubbing in one direction + // doesn't keep adding indefinitely. + let lastMoveX = null; + let lastDir = 0; // -1, 0, +1 + let accumulatedDist = 0; // px traveled in current direction + let lastScrubAt = 0; // ms timestamp of last credited scrub + const SCRUB_MIN_TRAVEL = 40; // px in one direction before reversal counts + const SCRUB_COOLDOWN_MS = 220; + + const getPoint = (e) => { + if (e.touches && e.touches[0]) return { x: e.touches[0].clientX, y: e.touches[0].clientY }; + if (e.changedTouches && e.changedTouches[0]) return { x: e.changedTouches[0].clientX, y: e.changedTouches[0].clientY }; + return { x: e.clientX, y: e.clientY }; + }; + + const positionBrushAt = (clientX, clientY) => { + const overlayRect = cleaningGameOverlay.getBoundingClientRect(); + const localX = clientX - overlayRect.left - grabDX; + const localY = clientY - overlayRect.top - grabDY; + cleaningBrush.style.left = `${localX}px`; + cleaningBrush.style.top = `${localY}px`; + }; + + const brushStart = (e) => { + e.preventDefault(); + isDraggingBrush = true; + const { x, y } = getPoint(e); + const brushRect = cleaningBrush.getBoundingClientRect(); + // If the user tapped inside the existing brush, preserve that grab + // point. Otherwise center the brush under the finger so it snaps to + // wherever they pressed. + const tappedOnBrush = + x >= brushRect.left && x <= brushRect.right && + y >= brushRect.top && y <= brushRect.bottom; + if (tappedOnBrush) { + grabDX = x - brushRect.left; + grabDY = y - brushRect.top; + } else { + grabDX = brushRect.width / 2; + grabDY = brushRect.height / 2; + } + positionBrushAt(x, y); + lastMoveX = x; + lastDir = 0; + accumulatedDist = 0; + }; + + const brushMove = (e) => { + if (!isDraggingBrush) return; + e.preventDefault(); + const { x, y } = getPoint(e); + positionBrushAt(x, y); + + const brushRect = cleaningBrush.getBoundingClientRect(); + const turtleShell = document.getElementById('turtle-shell').getBoundingClientRect(); + const overlayRect = cleaningGameOverlay.getBoundingClientRect(); + const overShell = checkOverlap(brushRect, turtleShell); + + if (overShell) { + // Visual feedback bubbles still trail the brush continuously + if (Math.random() < 0.35) { + spawnBrushBubble(x - overlayRect.left, y - overlayRect.top); + } + } + + // Track scrub direction (horizontal axis) + if (lastMoveX !== null) { + const dx = x - lastMoveX; + const dir = dx > 0 ? 1 : dx < 0 ? -1 : 0; + if (dir !== 0) { + if (dir === lastDir) { + accumulatedDist += Math.abs(dx); + } else if (lastDir !== 0) { + // Direction reversal — count this as a completed scrub if the + // previous swipe traveled far enough and the brush was over + // the shell at the moment of reversal. + const now = Date.now(); + if ( + overShell && + accumulatedDist >= SCRUB_MIN_TRAVEL && + now - lastScrubAt > SCRUB_COOLDOWN_MS + ) { + stats.clean = Math.min(100, stats.clean + 3); + lastScrubAt = now; + updateStatBars(); + // Burst of bubbles to confirm the scrub registered + for (let i = 0; i < 5; i++) { + spawnBrushBubble( + x - overlayRect.left + (Math.random() * 30 - 15), + y - overlayRect.top + (Math.random() * 20 - 10) + ); + } + if (stats.clean >= 100) { + cleaningGameOverlay.classList.add('hidden'); + btnClean.classList.remove('active'); + isDraggingBrush = false; + algaeSpots.classList.add('hidden'); + setEyeState('happy'); + triggerThoughtBubble("Squeaky clean! ✨"); + stats.joy = Math.min(100, stats.joy + 10); + setTimeout(() => setEyeState('normal'), 2000); + } + } + accumulatedDist = Math.abs(dx); + } else { + accumulatedDist = Math.abs(dx); + } + lastDir = dir; + } + } + lastMoveX = x; + }; + + const brushEnd = () => { + isDraggingBrush = false; + }; + + // Listen on the overlay itself so a tap anywhere starts cleaning, not + // just a tap on the small brush handle. + cleaningGameOverlay.onmousedown = brushStart; + cleaningGameOverlay.ontouchstart = brushStart; + cleaningGameOverlay.onmousemove = brushMove; + cleaningGameOverlay.ontouchmove = brushMove; + window.onmouseup = brushEnd; + window.ontouchend = brushEnd; + window.ontouchcancel = brushEnd; + + } else { + cleaningGameOverlay.classList.add('hidden'); + btnClean.classList.remove('active'); + } + }); + + function spawnBrushBubble(x, y) { + const bubble = document.createElement('div'); + bubble.className = 'dirt-particle'; + bubble.textContent = '🧼'; + bubble.style.left = `${x}px`; + bubble.style.top = `${y}px`; + bubble.style.fontSize = '12px'; + bubble.style.pointerEvents = 'none'; + bubble.style.transition = 'all 0.5s ease-out'; + cleaningGameOverlay.appendChild(bubble); + + setTimeout(() => { + bubble.style.transform = `translate(${Math.random()*40 - 20}px, -40px) scale(1.5)`; + bubble.style.opacity = '0'; + }, 10); + + setTimeout(() => bubble.remove(), 550); + } + + // Play Care Action — summons a species-specific playmate the turtle chases. + // Tap the playmate as it darts around for bonus joy. Only one playmate at a + // time. Replaces the old "spin in place" animation. + let activePlaymate = null; + + btnPlay.addEventListener('click', () => { + if (activeQte) return; + if (activePlaymate) return; // already playing — don't stack + summonPlaymate(); + }); + + function getPlaymateForSpecies() { + // Each species has a different ocean friend, chosen to avoid food-conflict + // (e.g. leatherbacks don't get jellyfish here because they EAT those). + switch (turtleSpecies) { + case 'loggerhead': + return { + emoji: '🦐', + name: 'shrimp friend', + greeting: "A shrimp friend! Let's chase! 🦐", + farewell: "Bye shrimp pal! 👋", + color: 'rgba(255, 140, 120, 0.9)' + }; + case 'leatherback': + return { + emoji: '🦑', + name: 'squid buddy', + greeting: "Glowing squid buddy! Deep dive! 🦑", + farewell: "See you in the depths! 🌊", + color: 'rgba(180, 130, 255, 0.95)' + }; + case 'green': + default: + return { + emoji: '🐢', + name: 'turtle pal', + greeting: "Another turtle! Let's play! 🐢", + farewell: "Swim safe, friend! 💚", + color: 'rgba(120, 200, 160, 0.95)' + }; + } + } + + function summonPlaymate() { + const info = getPlaymateForSpecies(); + const mate = document.createElement('div'); + mate.className = 'sea-playmate'; + mate.textContent = info.emoji; + oceanPlaypen.appendChild(mate); + activePlaymate = mate; + + // Initial joy bump for triggering play + stats.joy = Math.min(100, stats.joy + 15); + updateStatBars(); + setEyeState('happy'); + setMouthState('normal'); + triggerThoughtBubble(info.greeting, 2200); + + // Random darting motion around the playpen + const pen = oceanPlaypen.getBoundingClientRect(); + let mx = pen.width * 0.15; + let my = pen.height * 0.4; + let mvx = 2.4, mvy = 1.8; + let highFives = 0; + let elapsed = 0; + const totalDuration = 7000; // 7 seconds of play + const tickMs = 30; + + mate.style.left = `${mx}px`; + mate.style.top = `${my}px`; + + const swim = setInterval(() => { + elapsed += tickMs; + // Wander with gentle direction changes + if (Math.random() < 0.08) { + mvx = (Math.random() * 5) - 2.5; + mvy = (Math.random() * 4) - 2; + } + mx += mvx; + my += mvy; + // Bounce off walls + if (mx < 10) { mx = 10; mvx = Math.abs(mvx); } + if (mx > pen.width - 50) { mx = pen.width - 50; mvx = -Math.abs(mvx); } + if (my < 10) { my = 10; mvy = Math.abs(mvy); } + if (my > pen.height - 50) { my = pen.height - 50; mvy = -Math.abs(mvy); } + mate.style.left = `${mx}px`; + mate.style.top = `${my}px`; + mate.style.transform = `scaleX(${mvx >= 0 ? 1 : -1})`; + + if (elapsed >= totalDuration) endPlaymate(info, highFives); + }, tickMs); + + const tapPlaymate = (e) => { + e.stopPropagation(); + highFives++; + stats.joy = Math.min(100, stats.joy + 6); + updateStatBars(); + spawnHeartParticle( + (e.touches && e.touches[0]) ? e.touches[0].clientX : e.clientX, + (e.touches && e.touches[0]) ? e.touches[0].clientY : e.clientY + ); + // Bounce reaction + mate.classList.add('high-five'); + setTimeout(() => mate.classList.remove('high-five'), 250); + // Sometimes the playmate darts away after a tap + mvx = (Math.random() * 6) - 3; + mvy = (Math.random() * 5) - 2.5; + }; + mate.addEventListener('click', tapPlaymate); + mate.addEventListener('touchstart', tapPlaymate, { passive: true }); + + // Store interval so endPlaymate can clear it + mate._swim = swim; + } + + function endPlaymate(info, highFives) { + if (!activePlaymate) return; + clearInterval(activePlaymate._swim); + activePlaymate.classList.add('swimming-away'); + // Bonus joy proportional to engagement + if (highFives > 0) { + stats.joy = Math.min(100, stats.joy + Math.min(15, highFives * 2)); + updateStatBars(); + } + triggerThoughtBubble(info.farewell, 1800); + setTimeout(() => setEyeState('normal'), 1200); + const m = activePlaymate; + activePlaymate = null; + setTimeout(() => m.remove(), 1200); + } + + // Heal Care Action + btnHeal.addEventListener('click', () => { + if (activeQte) return; + if (isSick) { + isSick = false; + stats.health = Math.min(100, stats.health + 30); + setEyeState('happy'); + triggerThoughtBubble("All healed up! 💊"); + setTimeout(() => setEyeState('normal'), 2000); + } else if (stats.health < 80) { + stats.health = Math.min(100, stats.health + 20); + triggerThoughtBubble("Applying salve... 🩹"); + } else { + triggerThoughtBubble("I feel great! 🐢"); + } + updateStatBars(); + }); + + // Feed Options Drawer Toggle + btnFeed.addEventListener('click', () => { + if (activeQte) return; + feedDrawer.classList.toggle('hidden'); + btnFeed.classList.toggle('active'); + }); + + // Feed selection + document.querySelectorAll('.food-btn').forEach(btn => { + btn.addEventListener('click', () => { + const foodType = btn.getAttribute('data-food'); + feedDrawer.classList.add('hidden'); + btnFeed.classList.remove('active'); + + spawnFoodDrifting(foodType); + }); + }); + + // Spawn Food in Ocean + function spawnFoodDrifting(foodType) { + const food = document.createElement('div'); + food.className = 'floating-item food-item'; + food.setAttribute('role', 'button'); + food.setAttribute('aria-label', `Tap to feed ${foodType}`); + + const emojis = { + seagrass: '🌿', + crabs: '🦀', + jellyfish: '🪼' + }; + + food.textContent = emojis[foodType]; + + // Spawn at random location near top + const playpenWidth = oceanPlaypen.clientWidth; + const x = Math.random() * (playpenWidth - 40) + 10; + + food.style.left = `${x}px`; + food.style.top = '10px'; + + floatingItemsContainer.appendChild(food); + + let posY = 10; + let posX = x; + let consumed = false; + let chasingTurtle = false; + + const eatFood = () => { + if (consumed) return; + consumed = true; + clearInterval(drift); + food.classList.add('eating'); + setMouthState('eating'); + + if (foodType === 'seagrass' && turtleSpecies === 'green') { + stats.hunger = Math.min(100, stats.hunger + 30); + stats.joy = Math.min(100, stats.joy + 10); + triggerThoughtBubble("Yummy seagrass! 🌿"); + setEyeState('happy'); + } else if (foodType === 'crabs' && turtleSpecies === 'loggerhead') { + stats.hunger = Math.min(100, stats.hunger + 30); + stats.joy = Math.min(100, stats.joy + 10); + triggerThoughtBubble("Crunchy crab! 🦀"); + setEyeState('happy'); + } else if (foodType === 'jellyfish' && turtleSpecies === 'leatherback') { + stats.hunger = Math.min(100, stats.hunger + 30); + stats.joy = Math.min(100, stats.joy + 10); + triggerThoughtBubble("Soft jellyfish! 🪼"); + setEyeState('happy'); + } else { + stats.hunger = Math.min(100, stats.hunger + 12); + stats.joy = Math.max(0, stats.joy - 15); + triggerThoughtBubble("Yuck, not my favorite! 🤢"); + setEyeState('dizzy'); + } + + updateStatBars(); + setTimeout(() => { + setMouthState('normal'); + setEyeState('normal'); + food.remove(); + }, 900); + }; + + // Tap food to send it directly to the turtle's mouth + const tapHandler = (e) => { + e.stopPropagation(); + if (consumed || chasingTurtle) return; + chasingTurtle = true; + food.classList.add('chasing'); + + const oceanRect = oceanPlaypen.getBoundingClientRect(); + const headRect = document.getElementById('turtle-head').getBoundingClientRect(); + const targetX = (headRect.left - oceanRect.left) + headRect.width / 2 - 20; + const targetY = (headRect.top - oceanRect.top) + headRect.height / 2 - 20; + + food.style.transition = 'left 0.45s cubic-bezier(.45,.05,.55,.95), top 0.45s cubic-bezier(.45,.05,.55,.95), transform 0.45s ease'; + food.style.left = `${targetX}px`; + food.style.top = `${targetY}px`; + food.style.transform = 'scale(1.25)'; + + setTimeout(eatFood, 430); + }; + food.addEventListener('click', tapHandler); + food.addEventListener('touchstart', tapHandler, { passive: true }); + + // Gravity drift downward + const drift = setInterval(() => { + if (currentState !== STATES.OCEAN || !food.parentNode) { + clearInterval(drift); + return; + } + if (chasingTurtle) return; + + posY += 1.5; + // Gentle sideways sway so food is easier to tap and looks alive + posX = x + Math.sin(posY / 30) * 18; + food.style.top = `${posY}px`; + food.style.left = `${posX}px`; + + // Passive collision with turtle head still feeds (lucky drift) + const foodRect = food.getBoundingClientRect(); + const turtleHead = document.getElementById('turtle-head').getBoundingClientRect(); + if (checkOverlap(foodRect, turtleHead)) { + eatFood(); + return; + } + + if (posY > oceanPlaypen.clientHeight - 30) { + clearInterval(drift); + triggerThoughtBubble("Aw, I missed it! 😔", 1500); + food.remove(); + } + }, 30); + } + + // Spawn Drifting Marine Debris (Plastic bags or real jelly) + function spawnFloatingDebris() { + const debris = document.createElement('div'); + debris.className = 'floating-item'; + + // 70% chance of plastic bag, 30% chance of neutral floating seaweed/driftwood + const isPlastic = Math.random() > 0.3; + debris.textContent = isPlastic ? '🛍️' : '🪵'; + if (isPlastic) debris.style.filter = 'opacity(0.85)'; // Transparent bag look + + const playpenWidth = oceanPlaypen.clientWidth; + const x = Math.random() * (playpenWidth - 40) + 10; + + debris.style.left = `${x}px`; + debris.style.top = '10px'; + + floatingItemsContainer.appendChild(debris); + + let posY = 10; + const drift = setInterval(() => { + if (currentState !== STATES.OCEAN || !debris.parentNode) { + clearInterval(drift); + return; + } + + posY += 1.2; + debris.style.top = `${posY}px`; + + // Check collision with head/mouth + const debrisRect = debris.getBoundingClientRect(); + const turtleHead = document.getElementById('turtle-head').getBoundingClientRect(); + + if (checkOverlap(debrisRect, turtleHead)) { + clearInterval(drift); + debris.remove(); + + if (isPlastic) { + // Turtle ate plastic bag! + isSick = true; + stats.health = Math.max(0, stats.health - 25); + stats.joy = Math.max(0, stats.joy - 20); + setEyeState('dizzy'); + setMouthState('sad'); + triggerThoughtBubble("Ate a bag... toxic! 🤢🛍️", 4000); + updateStatBars(); + + screens.ocean.classList.add('shake-element'); + setTimeout(() => { + screens.ocean.classList.remove('shake-element'); + setEyeState('normal'); + }, 1500); + + checkGameOver(); + } else { + // neutral driftwood bump + stats.joy = Math.max(0, stats.joy - 5); + triggerThoughtBubble("Bumped driftwood! 🪵"); + } + } + + if (posY > oceanPlaypen.clientHeight - 30) { + clearInterval(drift); + debris.remove(); + } + }, 40); + + // Tap to recycle plastic bag before turtle eats it! + debris.addEventListener('click', () => { + clearInterval(drift); + debris.remove(); + if (isPlastic) { + triggerThoughtBubble("Thanks for catching that bag! ♻️"); + stats.joy = Math.min(100, stats.joy + 5); + } + }); + } + + // ========================================== + // 8. QTE CRITICAL HAZARDS (Nets, Boats, Sharks) + // ========================================== + function triggerQteHazard() { + const hazardsList = ['net', 'boat', 'shark']; + activeQte = hazardsList[Math.floor(Math.random() * hazardsList.length)]; + + // Play warning pulse + screens.ocean.classList.add('shake-element'); + setTimeout(() => screens.ocean.classList.remove('shake-element'), 500); + + if (activeQte === 'net') { + triggerNetQte(); + } else if (activeQte === 'boat') { + triggerBoatQte(); + } else if (activeQte === 'shark') { + triggerSharkQte(); + } + } + + // GHOST NET SWIPE QTE — each completed swipe (direction reversal) snaps + // another strand of the net. 8 swipes required total. Net visibly breaks + // as you progress. + function triggerNetQte() { + qteNet.classList.remove('hidden'); + setEyeState('dizzy'); + setMouthState('sad'); + + const netGrid = document.querySelector('#qte-net-overlay .net-grid-graphics'); + if (netGrid) { + while (netGrid.firstChild) netGrid.removeChild(netGrid.firstChild); + netGrid.classList.remove('snapping'); + for (let i = 0; i < 16; i++) { + const strand = document.createElement('span'); + strand.className = 'net-strand'; + netGrid.appendChild(strand); + } + } + const TOTAL_SWIPES = 8; + let swipes = 0; + netSwipeFill.style.width = '0%'; + + let isSwiping = false; + let lastX = 0; + let lastSwipeDir = 0; + let travelInDir = 0; + let lastCutAt = 0; + const MIN_TRAVEL = 60; + const CUT_COOLDOWN = 250; + + const handleSwipeStart = (e) => { + isSwiping = true; + const clientX = e.touches ? e.touches[0].clientX : e.clientX; + lastX = clientX; + lastSwipeDir = 0; + travelInDir = 0; + }; + + const creditCut = () => { + const now = Date.now(); + if (now - lastCutAt < CUT_COOLDOWN) return; + lastCutAt = now; + swipes++; + const pct = (swipes / TOTAL_SWIPES) * 100; + netSwipeFill.style.width = `${Math.min(100, pct)}%`; + + if (netGrid) { + const strands = netGrid.querySelectorAll('.net-strand:not(.cut)'); + if (strands.length) { + const idx = Math.floor(Math.random() * strands.length); + strands[idx].classList.add('cut'); + } + if (swipes >= TOTAL_SWIPES / 2) netGrid.classList.add('snapping'); + } + + if (swipes >= TOTAL_SWIPES) { + resolveNetQte(true); + } + }; + + const handleSwipeMove = (e) => { + if (!isSwiping) return; + const clientX = e.touches ? e.touches[0].clientX : e.clientX; + const dx = clientX - lastX; + lastX = clientX; + const dir = dx > 0 ? 1 : dx < 0 ? -1 : 0; + if (dir === 0) return; + + if (dir === lastSwipeDir) { + travelInDir += Math.abs(dx); + } else { + if (lastSwipeDir !== 0 && travelInDir >= MIN_TRAVEL) creditCut(); + travelInDir = Math.abs(dx); + lastSwipeDir = dir; + } + }; + + const handleSwipeEnd = () => { + if (travelInDir >= MIN_TRAVEL) creditCut(); + isSwiping = false; + lastSwipeDir = 0; + travelInDir = 0; + }; + + qteNet.onmousedown = handleSwipeStart; + qteNet.ontouchstart = handleSwipeStart; + qteNet.onmousemove = handleSwipeMove; + qteNet.ontouchmove = handleSwipeMove; + window.onmouseup = handleSwipeEnd; + window.ontouchend = handleSwipeEnd; + + qteNet.timer = setTimeout(() => { + resolveNetQte(false); + }, 12000); + } + + function resolveNetQte(success) { + // Clear event listeners + qteNet.onmousedown = null; + qteNet.ontouchstart = null; + qteNet.onmousemove = null; + qteNet.ontouchmove = null; + clearTimeout(qteNet.timer); + + qteNet.classList.add('hidden'); + activeQte = null; + + if (success) { + stats.joy = Math.min(100, stats.joy + 15); + setEyeState('happy'); + setMouthState('normal'); + triggerThoughtBubble("Cut free! Thank goodness! 🛡️"); + } else { + // Failed net QTE + stats.health = Math.max(0, stats.health - 40); + stats.clean = Math.max(0, stats.clean - 25); + setEyeState('dizzy'); + triggerThoughtBubble("Stressed in net... Drowning hazard! 🌊🕸️", 4000); + + screens.ocean.classList.add('shake-element'); + setTimeout(() => { + screens.ocean.classList.remove('shake-element'); + setEyeState('normal'); + }, 1000); + } + updateStatBars(); + checkGameOver(); + } + + // BOAT STRIKE DIVE QTE + function triggerBoatQte() { + qteBoat.classList.remove('hidden'); + setEyeState('dizzy'); + + // 4 seconds to click dive + qteBoat.timer = setTimeout(() => { + resolveBoatQte(false); + }, 4500); + } + + btnQteDive.onclick = () => { + resolveBoatQte(true); + }; + + function resolveBoatQte(success) { + clearTimeout(qteBoat.timer); + qteBoat.classList.add('hidden'); + activeQte = null; + + if (success) { + setEyeState('normal'); + // Dive animation + turtleContainer.style.transform = 'translateY(150px) scale(0.6)'; + triggerThoughtBubble("Dived deep! Safe. 🌊"); + + setTimeout(() => { + turtleContainer.style.transform = 'none'; + }, 2000); + } else { + // Boat strike impact! + stats.health = Math.max(0, stats.health - 45); + setEyeState('dizzy'); + setMouthState('sad'); + triggerThoughtBubble("Propeller strike! Fatal wounds! 🚢💥", 4000); + + screens.ocean.classList.add('shake-element'); + setTimeout(() => { + screens.ocean.classList.remove('shake-element'); + setEyeState('normal'); + }, 1000); + } + updateStatBars(); + checkGameOver(); + } + + // SHARK SPOT SHELL-HIDE QTE + function triggerSharkQte() { + qteShark.classList.remove('hidden'); + isHidingInShell = false; + + // Automatic alarm reaction — turtle senses the predator and flinches into + // an alert posture BEFORE the user reacts. Wide eyes, sad mouth, slight + // pull toward shell. + turtleContainer.classList.add('predator-alert'); + setEyeState('normal'); + setMouthState('sad'); + triggerThoughtBubble("Something's coming! 😨", 1800); + setTimeout(() => { + // Stay in alert until QTE resolves; cleanup happens in resolveSharkQte + }, 100); + + // Spawn Shark sprite swimming across screen + const shark = document.createElement('div'); + shark.className = 'shark-graphic'; + shark.textContent = '🦈'; + shark.style.left = '-100px'; + shark.style.top = '140px'; + oceanPlaypen.appendChild(shark); + + // Animate shark movement + let sharkX = -100; + const sharkSwim = setInterval(() => { + sharkX += 6; + shark.style.left = `${sharkX}px`; + + if (sharkX > oceanPlaypen.clientWidth + 50) { + clearInterval(sharkSwim); + shark.remove(); + } + }, 30); + + // 4.5 seconds to react + qteShark.timer = setTimeout(() => { + resolveSharkQte(sharkSwim, shark); + }, 4500); + } + + btnQteHide.onclick = () => { + isHidingInShell = true; + + // Realistic sea turtle defensive posture — they CAN'T fully retract like land + // turtles. They pull their head close to the shell, tuck flippers tight to + // their body, and angle the shell toward the threat to take any hit on the + // hardest armor. + const head = document.getElementById('turtle-head'); + const flL = document.getElementById('flipper-left'); + const flR = document.getElementById('flipper-right'); + const flBL = document.getElementById('flipper-back-left'); + const flBR = document.getElementById('flipper-back-right'); + + turtleContainer.classList.add('defensive-posture'); + head.style.transition = 'transform 0.35s ease-out'; + flL.style.transition = 'transform 0.35s ease-out'; + flR.style.transition = 'transform 0.35s ease-out'; + flBL.style.transition = 'transform 0.35s ease-out'; + flBR.style.transition = 'transform 0.35s ease-out'; + + // Head pulled close to shell rim (not into it), tucked downward + head.style.transform = 'translateY(12px) scale(0.85)'; + // Front flippers folded tight against the body + flL.style.transform = 'translate(18px, 6px) rotate(35deg) scale(0.78)'; + flR.style.transform = 'translate(-18px, 6px) rotate(-35deg) scale(0.78)'; + // Rear flippers tucked in + flBL.style.transform = 'translate(10px, -4px) scale(0.85)'; + flBR.style.transform = 'translate(-10px, -4px) scale(0.85)'; + + setEyeState('sleeping'); // squinting / bracing + setMouthState('normal'); + btnQteHide.textContent = "🛡️ Bracing — Shell First!"; + }; + + function resolveSharkQte(swimInterval, sharkElement) { + clearTimeout(qteShark.timer); + clearInterval(swimInterval); + if (sharkElement) sharkElement.remove(); + + qteShark.classList.add('hidden'); + activeQte = null; + + // Reset turtle visuals + const head = document.getElementById('turtle-head'); + const flL = document.getElementById('flipper-left'); + const flR = document.getElementById('flipper-right'); + const flBL = document.getElementById('flipper-back-left'); + const flBR = document.getElementById('flipper-back-right'); + head.style.transform = 'none'; + flL.style.transform = 'none'; + flR.style.transform = 'none'; + flBL.style.transform = 'none'; + flBR.style.transform = 'none'; + turtleContainer.classList.remove('defensive-posture'); + turtleContainer.classList.remove('predator-alert'); + btnQteHide.textContent = "🛡️ Brace (Shell First)"; + + if (isHidingInShell) { + stats.health = Math.max(0, stats.health - 8); // Minor shield bump damage + stats.joy = Math.max(0, stats.joy - 15); + setEyeState('normal'); + triggerThoughtBubble("Bitten shell, but okay! 🛡️🦈"); + } else { + // Exposed shark bite + stats.health = Math.max(0, stats.health - 50); + stats.joy = Math.max(0, stats.joy - 40); + setEyeState('dizzy'); + setMouthState('sad'); + triggerThoughtBubble("Predator attack! Deep bite! 🦈💥", 4000); + + screens.ocean.classList.add('shake-element'); + setTimeout(() => { + screens.ocean.classList.remove('shake-element'); + setEyeState('normal'); + }, 1000); + } + + isHidingInShell = false; + updateStatBars(); + checkGameOver(); + } + + // ========================================== + // 9. BEACHING / TOURIST SHIELD EVENT + // ========================================== + function initBeachingPhase() { + beachingProgress = 0; + beachingProgressFill.style.width = '0%'; + beachingProgressText.textContent = '0%'; + touristSpawnLayer.innerHTML = ''; + + // Clear ocean active processes + clearOceanLoops(); + + // Spawning interval (Tourists walk in every 4 seconds) + beachingTouristsInterval = setInterval(() => { + if (currentState === STATES.BEACHING) { + spawnTourist(); + } + }, 3800); + + // Resting recovery tracker (Ticks up every 1.5 seconds if tourists are kept away) + beachingInterval = setInterval(() => { + // Check if any tourists are inside the 10-foot boundary ring + const safeZone = document.querySelector('.turtle-zone-ring').getBoundingClientRect(); + const touristsList = document.querySelectorAll('.tourist-sprite'); + + let isDisturbed = false; + + touristsList.forEach(tourist => { + const touristRect = tourist.getBoundingClientRect(); + if (checkOverlap(safeZone, touristRect)) { + isDisturbed = true; + // Trigger camera flash + triggerFlash(tourist); + } + }); + + if (isDisturbed) { + // Stress! Slow progress and minor health penalty + stats.health = Math.max(10, stats.health - 1.5); + beachingProgress = Math.max(0, beachingProgress - 2); + updateStatBars(); + + // Show stress thought + setEyeState('sleeping'); + touristFactText.textContent = "⚠️ Disoriented by camera flash! Harassment stresses resting turtles."; + } else { + // Rest success increments + beachingProgress = Math.min(100, beachingProgress + 5); + } + + beachingProgressFill.style.width = `${beachingProgress}%`; + beachingProgressText.textContent = `${beachingProgress}%`; + + if (beachingProgress >= 100) { + resolveBeachingPhase(true); + } + }, 1500); + } + + function spawnTourist() { + const tourist = document.createElement('div'); + tourist.className = 'tourist-sprite'; + + const touristEmojis = ['🧑‍🚀', '👩‍💼', '👨‍🎨', '🏃', '📸', '🤳']; + tourist.innerHTML = ` + ${touristEmojis[Math.floor(Math.random() * touristEmojis.length)]} +
+ `; + + const sandboxWidth = beachingSandbox.clientWidth; + const sandboxHeight = beachingSandbox.clientHeight; + + // Spawn on random boundaries (Left, Right, Top) + const side = Math.floor(Math.random() * 3); + let startX = 0, startY = 0; + + if (side === 0) { // Left + startX = -40; + startY = Math.random() * (sandboxHeight - 200) + 50; + } else if (side === 1) { // Right + startX = sandboxWidth + 10; + startY = Math.random() * (sandboxHeight - 200) + 50; + } else { // Top + startX = Math.random() * (sandboxWidth - 60) + 10; + startY = -40; + } + + tourist.style.left = `${startX}px`; + tourist.style.top = `${startY}px`; + touristSpawnLayer.appendChild(tourist); + + // Target the turtle center + const targetX = sandboxWidth / 2 - 25; + const targetY = sandboxHeight / 2 - 30; + + let posX = startX; + let posY = startY; + const speed = 0.5 + Math.random() * 0.4; + + const moveInterval = setInterval(() => { + if (currentState !== STATES.BEACHING || !tourist.parentNode) { + clearInterval(moveInterval); + return; + } + + const dx = targetX - posX; + const dy = targetY - posY; + const dist = Math.sqrt(dx*dx + dy*dy); + + if (dist < 40) { + // Halted near turtle + clearInterval(moveInterval); + } else { + posX += (dx / dist) * speed; + posY += (dy / dist) * speed; + tourist.style.left = `${posX}px`; + tourist.style.top = `${posY}px`; + } + }, 40); + + // Repel Tourist Click + tourist.addEventListener('click', () => { + clearInterval(moveInterval); + + // Knockback animation + tourist.style.transform = 'scale(0.8) translateY(-40px)'; + tourist.style.opacity = '0'; + tourist.style.transition = 'all 0.4s ease-out'; + + // Display random educational fact + touristFactText.textContent = CONSERVATION_FACTS[Math.floor(Math.random() * CONSERVATION_FACTS.length)]; + + setTimeout(() => tourist.remove(), 400); + }); + } + + function triggerFlash(touristElement) { + const flash = touristElement.querySelector('.tourist-camera-flash'); + if (flash && !flash.classList.contains('flash-active')) { + flash.classList.add('flash-active'); + setTimeout(() => flash.classList.remove('flash-active'), 800); + } + } + + function resolveBeachingPhase(success) { + clearInterval(beachingInterval); + clearInterval(beachingTouristsInterval); + + if (success) { + stats.health = 100; + stats.joy = Math.min(100, stats.joy + 20); + isSick = false; + + alert("🐢 Rest complete! You successfully kept tourists away. The turtle returns safely to the ocean!"); + changeState(STATES.OCEAN); + } + } + + // ========================================== + // 10. GAME OVER & PROGRESS RESET + // ========================================== + function checkGameOver() { + if (stats.health <= 0) { + clearOceanLoops(); + showGameOver( + "Turtle Lost!", + `${turtleName} has perished due to poor health, pollution ingestion, or predator attacks. In the wild, sea turtles struggle against boat collisions, trash, and fishing nets. Keep playing to learn how we can defend them!` + ); + } + } + + function showGameOver(title, desc) { + document.getElementById('gameover-title').textContent = title; + document.getElementById('gameover-desc').textContent = desc; + document.getElementById('gameover-name').textContent = turtleName; + document.getElementById('gameover-age').textContent = `${turtleAge} Days`; + modals.gameover.classList.remove('hidden'); + } + + function resetGameSession() { + // Clear Local Storage + localStorage.removeItem('tortugotchi_save'); + + // Clear variables + turtleAge = 0; + stats = { health: 100, hunger: 80, joy: 80, clean: 100 }; + isSick = false; + isHidingInShell = false; + + // Reset modals + modals.gameover.classList.add('hidden'); + modals.rename.classList.add('hidden'); + modals.migrationSuccess.classList.add('hidden'); + + changeState(STATES.START); + } + + // ========================================== + // 11. BUTTON ATTACHMENTS & MODALS + // ========================================== + + // Start Conservation Game + btnStartGame.addEventListener('click', () => { + changeState(STATES.BEACH); + }); + + // Fact Modals + btnShowFactsMain.addEventListener('click', () => modals.facts.classList.remove('hidden')); + btnCloseFacts.addEventListener('click', () => modals.facts.classList.add('hidden')); + btnCloseFactsBottom.addEventListener('click', () => modals.facts.classList.add('hidden')); + + // Dismiss beach tutorial + btnDismissBeachTut.addEventListener('click', () => { + document.getElementById('beach-tutorial-overlay').classList.add('hidden'); + }); + + // Migration Success Continue Action + btnMigrationContinue.addEventListener('click', () => { + modals.migrationSuccess.classList.add('hidden'); + modals.rename.classList.remove('hidden'); + }); + + // Rename Turtle Action + btnRenameTurtle.addEventListener('click', () => { + modals.rename.classList.remove('hidden'); + }); + + btnSaveRename.addEventListener('click', () => { + const inputName = document.getElementById('input-turtle-name').value.trim(); + if (inputName.length > 0) { + turtleName = inputName; + } else { + turtleName = 'Shelly'; + } + + modals.rename.classList.add('hidden'); + + // Save state + saveProgress(); + + // Go to Ocean View + changeState(STATES.OCEAN); + }); + + // Restart after gameover + btnRestartGame.addEventListener('click', () => { + resetGameSession(); + }); + + // ========================================== + // TURTLE TOUCH INTERACTION (rubs, tickles, pats) + // ========================================== + let lastTickleAt = 0; + let rubCount = 0; + let rubTimer = null; + + function handleTurtleTouch(e) { + if (activeQte || currentState !== STATES.OCEAN) return; + if (cleaningGameOverlay && !cleaningGameOverlay.classList.contains('hidden')) return; + + const now = Date.now(); + rubCount++; + + // Gentle joy per rub, cap to avoid spamming + if (now - lastTickleAt > 120) { + stats.joy = Math.min(100, stats.joy + 2); + updateStatBars(); + lastTickleAt = now; + } + + // Heart particle from touch point + let touchX, touchY; + if (e.touches && e.touches[0]) { + touchX = e.touches[0].clientX; + touchY = e.touches[0].clientY; + } else { + touchX = e.clientX; + touchY = e.clientY; + } + spawnHeartParticle(touchX, touchY); + + // Happy face + wiggle + turtleContainer.classList.add('being-tickled'); + setEyeState('happy'); + setMouthState('normal'); + + clearTimeout(rubTimer); + rubTimer = setTimeout(() => { + turtleContainer.classList.remove('being-tickled'); + setEyeState('normal'); + if (rubCount >= 3) { + const thoughts = ["Hehe that tickles! ✨", "More please! 💕", "Best human ever! 🥰", "Hehehehe! 😆"]; + triggerThoughtBubble(thoughts[Math.floor(Math.random() * thoughts.length)], 1800); + stats.joy = Math.min(100, stats.joy + 5); + updateStatBars(); + } + rubCount = 0; + }, 600); + } + + turtleContainer.addEventListener('pointerdown', handleTurtleTouch); + turtleContainer.addEventListener('pointermove', (e) => { + if (e.buttons === 1 || e.pointerType === 'touch') handleTurtleTouch(e); + }); + + function spawnHeartParticle(clientX, clientY) { + const oceanRect = oceanPlaypen.getBoundingClientRect(); + const heart = document.createElement('div'); + heart.className = 'tickle-heart'; + heart.textContent = ['💕', '✨', '💖', '⭐'][Math.floor(Math.random() * 4)]; + heart.style.left = `${clientX - oceanRect.left - 10}px`; + heart.style.top = `${clientY - oceanRect.top - 10}px`; + oceanPlaypen.appendChild(heart); + setTimeout(() => heart.remove(), 900); + } + + // ========================================== + // IDLE BEHAVIORS — turtle does adorable things on its own + // ========================================== + const IDLE_BEHAVIORS = ['blink', 'bubbles', 'flap', 'lookAround', 'roll', 'yawn']; + + function triggerIdleBehavior() { + // Don't interrupt if turtle is being interacted with or unhappy/sick + if (turtleContainer.classList.contains('being-tickled')) return; + if (turtleContainer.classList.contains('idle-active')) return; + if (isSick) return; + + const behavior = IDLE_BEHAVIORS[Math.floor(Math.random() * IDLE_BEHAVIORS.length)]; + turtleContainer.classList.add('idle-active'); + + const cleanup = (ms) => setTimeout(() => turtleContainer.classList.remove('idle-active'), ms); + + switch (behavior) { + case 'blink': + setEyeState('sleeping'); + setTimeout(() => setEyeState('normal'), 250); + cleanup(400); + break; + case 'bubbles': + for (let i = 0; i < 4; i++) { + setTimeout(() => spawnTurtleBubble(), i * 150); + } + cleanup(900); + break; + case 'flap': + turtleContainer.classList.add('idle-flap'); + setTimeout(() => turtleContainer.classList.remove('idle-flap'), 1200); + cleanup(1300); + break; + case 'lookAround': + turtleContainer.classList.add('idle-look'); + setTimeout(() => turtleContainer.classList.remove('idle-look'), 1600); + cleanup(1700); + break; + case 'roll': + turtleContainer.classList.add('idle-roll'); + setEyeState('happy'); + setTimeout(() => { + turtleContainer.classList.remove('idle-roll'); + setEyeState('normal'); + }, 1400); + cleanup(1500); + break; + case 'yawn': + setMouthState('eating'); + setEyeState('sleeping'); + setTimeout(() => { + setMouthState('normal'); + setEyeState('normal'); + }, 800); + cleanup(900); + break; + } + } + + function spawnTurtleBubble() { + const turtleRect = turtleContainer.getBoundingClientRect(); + const oceanRect = oceanPlaypen.getBoundingClientRect(); + const bubble = document.createElement('div'); + bubble.className = 'turtle-bubble'; + const cx = (turtleRect.left - oceanRect.left) + turtleRect.width / 2 + (Math.random() * 20 - 10); + const cy = (turtleRect.top - oceanRect.top) + 30; + bubble.style.left = `${cx}px`; + bubble.style.top = `${cy}px`; + bubble.style.width = `${6 + Math.random() * 10}px`; + bubble.style.height = bubble.style.width; + oceanPlaypen.appendChild(bubble); + setTimeout(() => bubble.remove(), 2400); + } + + function spawnAmbientBubble() { + const oceanRect = oceanPlaypen.getBoundingClientRect(); + const bubble = document.createElement('div'); + bubble.className = 'ambient-bubble'; + bubble.style.left = `${Math.random() * (oceanRect.width - 10)}px`; + bubble.style.bottom = '-10px'; + const size = 4 + Math.random() * 8; + bubble.style.width = `${size}px`; + bubble.style.height = `${size}px`; + bubble.style.animationDuration = `${4 + Math.random() * 3}s`; + oceanPlaypen.appendChild(bubble); + setTimeout(() => bubble.remove(), 7500); + } + + // Initialize: attempt to load progress + const hasSave = loadProgress(); + if (hasSave && turtleAge > 0) { + // Jump straight to Ocean Phase + changeState(STATES.OCEAN); + } else { + // Start screen + changeState(STATES.START); + } +}); diff --git a/icon-192.png b/icon-192.png new file mode 100644 index 0000000..6ca09e8 Binary files /dev/null and b/icon-192.png differ diff --git a/icon-512.png b/icon-512.png new file mode 100644 index 0000000..aea0728 Binary files /dev/null and b/icon-512.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..e0f269b --- /dev/null +++ b/index.html @@ -0,0 +1,639 @@ + + + + + + Tortugotchi - Sea Turtle Conservation Game + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+ + +
+

+ Sea turtles have navigated our oceans for over 100 million years, but today they face extinction due to plastic pollution, light disorientation, coastal development, and boat collisions. +

+

Choose a species to begin your conservation journey:

+ +
+ + + + + + + + +
+ + +
+ + +
+ + + + +
+
+
+ Nest Status + Guarding Eggs +
+
+ Hatchlings Safe + 0 / 20 +
+
+ + +
+ +
+ +
+ + +
+
+
NEST
+ +
+
+
+
+
+
+ + +
+
+ + +
+ 🗑️ + Recycle Bin +
+ + + + + +
+

Clear beach trash, fill holes, scare crabs/gulls, and turn off blinding lights before hatching!

+ +
+
+ + + +
+ + + + +
+ +
+
+ 🐢 +
+

Shelly

+

Green Sea Turtle

+
+ +
+
+ Turtle Age + 0 Days +
+
+ + +
+ +
+
+ ❤️ Health + 100% +
+
+
+
+
+ + +
+
+ 😋 Fullness + 80% +
+
+
+
+
+ + +
+
+ ✨ Happiness + 90% +
+
+
+
+
+ + +
+
+ 🛡️ Shell Clean + 100% +
+
+
+
+
+
+ + +
+ +
+
+ + + + + + + + + +
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + +
+ + + + +
+
+
+ CRITICAL STATE + Turtle Beached! +
+
+ Resting Progress + 0% +
+
+ + +
+ +
+ +
+ + +
+
+ 10 FEET SAFE ZONE + + + + + + + + + + + +
+ + +
+ + +
+

💤 Shelly has beached to rest and digest. Ignorant tourists are trying to crowd closer for selfies!

+

Tap tourists to push them back outside the 10-foot boundary!

+
+
+ + + +
+ +
+ + + + + + + + + + + + + + + + + + + + diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..b8322be --- /dev/null +++ b/manifest.json @@ -0,0 +1,27 @@ +{ + "id": "/", + "short_name": "Tortugotchi", + "name": "Tortugotchi: Sea Turtle Protector", + "description": "A Tamagotchi-style game to protect nests, raise sea turtles, and advocate for sea turtle conservation.", + "icons": [ + { + "src": "icon-192.png", + "type": "image/png", + "sizes": "192x192", + "purpose": "any maskable" + }, + { + "src": "icon-512.png", + "type": "image/png", + "sizes": "512x512", + "purpose": "any maskable" + } + ], + "scope": "./", + "start_url": "./index.html", + "background_color": "#0d1b2a", + "theme_color": "#008080", + "display": "standalone", + "orientation": "portrait-primary", + "categories": ["games", "education"] +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ce2646f --- /dev/null +++ b/package-lock.json @@ -0,0 +1,9315 @@ +{ + "name": "tortugotchi", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "claude-flow": "^3.7.0-alpha.72" + } + }, + "node_modules/@anthropic-ai/claude-agent-sdk": { + "version": "0.1.77", + "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk/-/claude-agent-sdk-0.1.77.tgz", + "integrity": "sha512-ZEjWQtkoB2MEY6K16DWMmF+8OhywAynH0m08V265cerbZ8xPD/2Ng2jPzbbO40mPeFSsMDJboShL+a3aObP0Jg==", + "license": "SEE LICENSE IN README.md", + "optional": true, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "^0.33.5", + "@img/sharp-darwin-x64": "^0.33.5", + "@img/sharp-linux-arm": "^0.33.5", + "@img/sharp-linux-arm64": "^0.33.5", + "@img/sharp-linux-x64": "^0.33.5", + "@img/sharp-linuxmusl-arm64": "^0.33.5", + "@img/sharp-linuxmusl-x64": "^0.33.5", + "@img/sharp-win32-x64": "^0.33.5" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + }, + "node_modules/@anthropic-ai/sdk": { + "version": "0.65.0", + "resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.65.0.tgz", + "integrity": "sha512-zIdPOcrCVEI8t3Di40nH4z9EoeyGZfXbYSvWdDLsB/KkaSYMnEgC7gmcgWu83g2NTn1ZTpbMvpdttWDGGIk6zw==", + "license": "MIT", + "optional": true, + "dependencies": { + "json-schema-to-ts": "^3.1.1" + }, + "bin": { + "anthropic-ai-sdk": "bin/cli" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@borewit/text-codec": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.2.tgz", + "integrity": "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==", + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@claude-flow/cli-core": { + "version": "3.7.0-alpha.5", + "resolved": "https://registry.npmjs.org/@claude-flow/cli-core/-/cli-core-3.7.0-alpha.5.tgz", + "integrity": "sha512-WbhpxGpxhRoVmjtizIdt2IGlcX0nPmGktXe3JDtII4MeVTgifHuBYpx4cX4EQiBqGCt4cxxM4nDOFQUUqAK9Aw==", + "license": "MIT", + "bin": { + "claude-flow-core": "dist/src/index.js" + } + }, + "node_modules/@claude-flow/codex": { + "version": "3.0.0-alpha.12", + "resolved": "https://registry.npmjs.org/@claude-flow/codex/-/codex-3.0.0-alpha.12.tgz", + "integrity": "sha512-8ouFWhK42nwtn166bdfgcAFqNS/ZcWdqEmUkmIZee1kUwvYIAgOM5LpmPPe0UyFhTwjDv9ztEizhBBRwYbQ+4w==", + "license": "MIT", + "optional": true, + "dependencies": { + "@iarna/toml": "^2.2.5", + "chalk": "^5.3.0", + "commander": "^12.0.0", + "fs-extra": "^11.2.0", + "inquirer": "^9.2.0", + "toml": "^3.0.0", + "yaml": "^2.4.0" + }, + "bin": { + "claude-flow-codex": "dist/cli.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@claude-flow/cli": "^3.0.0-alpha.1" + }, + "peerDependenciesMeta": { + "@claude-flow/cli": { + "optional": true + } + } + }, + "node_modules/@claude-flow/mcp": { + "version": "3.0.0-alpha.9", + "resolved": "https://registry.npmjs.org/@claude-flow/mcp/-/mcp-3.0.0-alpha.9.tgz", + "integrity": "sha512-bbDxG9vqfOVbc3/KBSI+Fsr3tUSrCCCeYLk12dCx0c6Xa0SaF1hkO3OXI2J6xiK7vlXgVmaAToncunC1Mx2dXw==", + "dependencies": { + "ajv": "^8.12.0", + "cors": "^2.8.5", + "express": "^4.18.2", + "helmet": "^7.1.0", + "ws": "^8.14.2" + } + }, + "node_modules/@claude-flow/memory": { + "version": "3.0.0-alpha.18", + "resolved": "https://registry.npmjs.org/@claude-flow/memory/-/memory-3.0.0-alpha.18.tgz", + "integrity": "sha512-luvw+8Re5MfKhMdKU0gto0v7HA1dN/I4bEsY0rHYRfBxLiYwuFmtMcLd9H8nkwl2HJ4dAZ+0Z/6VJ9ZmDSiitA==", + "cpu": [ + "x64", + "arm64" + ], + "os": [ + "darwin", + "linux", + "win32" + ], + "dependencies": { + "agentdb": "^3.0.0-alpha.14", + "sql.js": "^1.10.3" + }, + "optionalDependencies": { + "better-sqlite3": "^12.9.0" + } + }, + "node_modules/@claude-flow/neural": { + "version": "3.0.0-alpha.9", + "resolved": "https://registry.npmjs.org/@claude-flow/neural/-/neural-3.0.0-alpha.9.tgz", + "integrity": "sha512-u7mx6rQxHrpCyKVtP600QorSJrEhoqYEyGZgYVU1kGWwYitScJH3rzWzss95Dn+RazcCAk7yElEG/iSbhtxU6g==", + "license": "MIT", + "dependencies": { + "@claude-flow/memory": "^3.0.0-alpha.16", + "@ruvector/sona": "0.1.5" + }, + "optionalDependencies": { + "agentdb": "^2.0.0 || ^3.0.0-alpha.1" + } + }, + "node_modules/@claude-flow/neural/node_modules/@ruvector/sona": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@ruvector/sona/-/sona-0.1.5.tgz", + "integrity": "sha512-XHQbphnWsRzWRWGK/HxK+RreY6OdlggMrOvrfkWlEq8EctHVy2ASwps7hk25Somx8Umj7+CkNuyQEbHcNcl/oQ==", + "license": "MIT OR Apache-2.0", + "engines": { + "node": ">= 16" + }, + "optionalDependencies": { + "@ruvector/sona-darwin-arm64": "0.1.5", + "@ruvector/sona-darwin-x64": "0.1.5", + "@ruvector/sona-linux-arm64-gnu": "0.1.5", + "@ruvector/sona-linux-x64-gnu": "0.1.5", + "@ruvector/sona-linux-x64-musl": "0.1.5", + "@ruvector/sona-win32-arm64-msvc": "0.1.5", + "@ruvector/sona-win32-x64-msvc": "0.1.5" + } + }, + "node_modules/@claude-flow/neural/node_modules/@ruvector/sona-darwin-arm64": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@ruvector/sona-darwin-arm64/-/sona-darwin-arm64-0.1.5.tgz", + "integrity": "sha512-+bXB7+WdbkiNbcw0Xh5VENNILgDVpuma7fyx8NwGylWaYRe1niM03k/rezdM3zbpf4qGSqp6fVKIIDU8/H9lHw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@claude-flow/neural/node_modules/@ruvector/sona-darwin-x64": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@ruvector/sona-darwin-x64/-/sona-darwin-x64-0.1.5.tgz", + "integrity": "sha512-wnr1oxeZqaHomjRevdqvciy8BSLyxF9pjkcZ7G5rszmmNNQf+YcM9IUUEbxno4b4MXj1HJC/ZtS602PBNvf5PA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@claude-flow/neural/node_modules/@ruvector/sona-linux-arm64-gnu": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@ruvector/sona-linux-arm64-gnu/-/sona-linux-arm64-gnu-0.1.5.tgz", + "integrity": "sha512-Kp895NJC52HfRlSjg+vZ32/8+v9eIDSbJXKMrjZNdA7aep4tsFTcE5bQG2Iru+zoIeFi+jcx0AVeqDPBS/9HHA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@claude-flow/neural/node_modules/@ruvector/sona-linux-x64-gnu": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@ruvector/sona-linux-x64-gnu/-/sona-linux-x64-gnu-0.1.5.tgz", + "integrity": "sha512-fmYlrJx9IQBHxeNX2Tu0ihHr3xsb3NwhgMmasOTOHBv/42fnxuuYrwhfHtMA6J6JtjyVxoBw1XLD6QJy4Y9BsA==", + "cpu": [ + "x64" + ], + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@claude-flow/neural/node_modules/@ruvector/sona-linux-x64-musl": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@ruvector/sona-linux-x64-musl/-/sona-linux-x64-musl-0.1.5.tgz", + "integrity": "sha512-q0hzfilUUCQNsx2QTZ0H07FKuwdfaxh7mNuv01oq5fGCC/0beBENiL5UKxm0YHtTmMPNze83Vwp1fGT9ObOQ3g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@claude-flow/neural/node_modules/@ruvector/sona-win32-arm64-msvc": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@ruvector/sona-win32-arm64-msvc/-/sona-win32-arm64-msvc-0.1.5.tgz", + "integrity": "sha512-kk7aiedLw/Z8Xogv+sQfoYQp8Y+om7/X4Ycbl830RSNpVBXEKkQpI7vMbK55eaQ9zjBbqjtgcoZNWXzGUmbTeA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@claude-flow/neural/node_modules/@ruvector/sona-win32-x64-msvc": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/@ruvector/sona-win32-x64-msvc/-/sona-win32-x64-msvc-0.1.5.tgz", + "integrity": "sha512-ifB2meo3GeguivC5Dcq50UZEupc+F/yFZ1+cg2mVgUpoqNN9lzJ+k3IdGgdYyMu7YAM8CrgTswfp/krUwx8BLQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@claude-flow/plugin-gastown-bridge": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@claude-flow/plugin-gastown-bridge/-/plugin-gastown-bridge-0.1.4.tgz", + "integrity": "sha512-MSxrTGkQoSlt6rcgg7p3/oayuvDH8uD2411ysrzitHThwCapW1f/SWNaN3gF0MHC6TIduuk611r2tXAtesJdrA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@iarna/toml": "^2.2.5", + "uuid": "^9.0.0", + "zod": "^3.22.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@claude-flow/memory": ">=3.0.0-alpha.1" + }, + "peerDependenciesMeta": { + "@claude-flow/memory": { + "optional": true + } + } + }, + "node_modules/@claude-flow/shared": { + "version": "3.0.0-alpha.8", + "resolved": "https://registry.npmjs.org/@claude-flow/shared/-/shared-3.0.0-alpha.8.tgz", + "integrity": "sha512-v5zzFnvJI2tfkaDNqRO7R1M4/PxFYa73hHXCKRN2Ec4MPKpTcAS9qhgAEAI/6hL4F66gW+2udUdQJzjwZGcXMg==", + "dependencies": { + "sql.js": "^1.10.3" + } + }, + "node_modules/@epic-web/invariant": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@epic-web/invariant/-/invariant-1.0.0.tgz", + "integrity": "sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==", + "license": "MIT", + "optional": true + }, + "node_modules/@google/genai": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/@google/genai/-/genai-1.52.0.tgz", + "integrity": "sha512-gwSvbpiN/17O9TbsqSsE/OzZcpv5Fo4RQjdngGgogtuB9RsyJ8ZHhX5KjHj1bp5N9snN2eK8LDGXSaWW2hof8Q==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "google-auth-library": "^10.3.0", + "p-retry": "^4.6.2", + "protobufjs": "^7.5.4", + "ws": "^8.18.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@modelcontextprotocol/sdk": "^1.25.2" + }, + "peerDependenciesMeta": { + "@modelcontextprotocol/sdk": { + "optional": true + } + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.14.4.tgz", + "integrity": "sha512-k9Dj3DV/itK9D06Y8f190Qgop7/Ui+D0njFV3LHMPwPT75DpXLQohE9Wmz0QElrJnzsjB7KPWiKJbOl7IPDArQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@grpc/proto-loader": "^0.8.0", + "@js-sdsl/ordered-map": "^4.4.2" + }, + "engines": { + "node": ">=12.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.8.1.tgz", + "integrity": "sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "lodash.camelcase": "^4.3.0", + "long": "^5.0.0", + "protobufjs": "^7.5.5", + "yargs": "^17.7.2" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@hono/node-server": { + "version": "1.19.14", + "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.14.tgz", + "integrity": "sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==", + "license": "MIT", + "engines": { + "node": ">=18.14.1" + }, + "peerDependencies": { + "hono": "^4" + } + }, + "node_modules/@huggingface/jinja": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@huggingface/jinja/-/jinja-0.2.2.tgz", + "integrity": "sha512-/KPde26khDUIPkTGU82jdtTW9UAuvUTumCAbFs/7giR0SxsvZC4hru51PBvpijH6BVkHcROcvZM/lpy5h1jRRA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@iarna/toml": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz", + "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==", + "license": "ISC", + "optional": true + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "license": "MIT", + "optional": true, + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor/node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@js-sdsl/ordered-map": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz", + "integrity": "sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==", + "license": "MIT", + "optional": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "node_modules/@modelcontextprotocol/sdk": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz", + "integrity": "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==", + "license": "MIT", + "dependencies": { + "@hono/node-server": "^1.19.9", + "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/sdk/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/@modelcontextprotocol/sdk/node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/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/@modelcontextprotocol/sdk/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/@modelcontextprotocol/sdk/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": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/express": { + "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.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/@modelcontextprotocol/sdk/node_modules/finalhandler": { + "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", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/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/@modelcontextprotocol/sdk/node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "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/@modelcontextprotocol/sdk/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@modelcontextprotocol/sdk/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": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/mime-db": { + "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/@modelcontextprotocol/sdk/node_modules/mime-types": { + "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": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/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/@modelcontextprotocol/sdk/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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "dependencies": { + "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": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/serve-static": { + "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": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/type-is": { + "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": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@modelcontextprotocol/sdk/node_modules/type-is/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@noble/ed25519": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@noble/ed25519/-/ed25519-2.3.0.tgz", + "integrity": "sha512-M7dvXL2B92/M7dw9+gzuydL8qn/jiqNHaoR3Q+cb1q1GHV7uwE17WCyFMG+Y+TZb5izcaXk5TdJRrDUxHXL78A==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz", + "integrity": "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/api-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.52.1.tgz", + "integrity": "sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/context-async-hooks": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.25.1.tgz", + "integrity": "sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/core": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.30.1.tgz", + "integrity": "sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/core/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.52.1.tgz", + "integrity": "sha512-pVkSH20crBwMTqB3nIN4jpQKUEoB0Z94drIHpYyEqs7UBr+I0cpYyOR3bqjA/UasQUMROb3GX8ZX4/9cVRqGBQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-grpc-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-grpc/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.52.1.tgz", + "integrity": "sha512-05HcNizx0BxcFKKnS5rwOV+2GevLTVIRA0tRgWYyw4yCgR53Ic/xk83toYKts7kbzcI+dswInUg/4s8oyA+tqg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-http/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.52.1.tgz", + "integrity": "sha512-pt6uX0noTQReHXNeEslQv7x311/F1gJzMnp1HD2qgypLRPbXDeMzzeTngRTUaUbP6hqWNtPxuLr4DEoZG+TcEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-trace-otlp-proto/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/exporter-zipkin": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.25.1.tgz", + "integrity": "sha512-RmOwSvkimg7ETwJbUOPTMhJm9A9bG1U8s7Zo3ajDh4zM7eYcycQ0dM7FbLD6NXWbI2yj7UY4q8BKinKYBQksyw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/exporter-zipkin/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/instrumentation": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.52.1.tgz", + "integrity": "sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "^1.8.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.52.1.tgz", + "integrity": "sha512-z175NXOtX5ihdlshtYBe5RpGeBoTXVCKPPLiQlD6FHvpM4Ch+p2B0yWKYSrBfLH24H9zjJiBdTrtD+hLlfnXEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-transformer": "0.52.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/otlp-exporter-base/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-exporter-base/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/otlp-grpc-exporter-base": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.52.1.tgz", + "integrity": "sha512-zo/YrSDmKMjG+vPeA9aBBrsQM9Q/f2zo6N04WMB3yNldJRsgpRBeLLwvAt/Ba7dpehDLOEFBd1i2JCoaFtpCoQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/otlp-exporter-base": "0.52.1", + "@opentelemetry/otlp-transformer": "0.52.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" + } + }, + "node_modules/@opentelemetry/otlp-grpc-exporter-base/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-grpc-exporter-base/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/otlp-transformer": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.52.1.tgz", + "integrity": "sha512-I88uCZSZZtVa0XniRqQWKbjAUm73I8tpEy/uJYPPYw5d7BRdVk0RfTBQw8kSUl01oVWEuqxLDa802222MYyWHg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-logs": "0.52.1", + "@opentelemetry/sdk-metrics": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "protobufjs": "^7.3.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/otlp-transformer/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/propagator-b3": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.25.1.tgz", + "integrity": "sha512-p6HFscpjrv7//kE+7L+3Vn00VEDUJB0n6ZrjkTYHrJ58QZ8B3ajSJhRbCcY6guQ3PDjTbxWklyvIN2ojVbIb1A==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/propagator-b3/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/propagator-b3/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/propagator-jaeger": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.25.1.tgz", + "integrity": "sha512-nBprRf0+jlgxks78G/xq72PipVK+4or9Ypntw0gVZYNTCSK8rg5SeaGV19tV920CMqBD/9UIOiFr23Li/Q8tiA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/propagator-jaeger/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/propagator-jaeger/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/resources": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.30.1.tgz", + "integrity": "sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.30.1", + "@opentelemetry/semantic-conventions": "1.28.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/resources/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.28.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.28.0.tgz", + "integrity": "sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sdk-logs": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.52.1.tgz", + "integrity": "sha512-MBYh+WcPPsN8YpRHRmK1Hsca9pVlyyKd4BxOC4SsgHACnl/bPp4Cri9hWhVm5+2tiQ9Zf4qSc1Jshw9tOLGWQA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-logs/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sdk-metrics": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.25.1.tgz", + "integrity": "sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "lodash.merge": "^4.6.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sdk-node": { + "version": "0.52.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.52.1.tgz", + "integrity": "sha512-uEG+gtEr6eKd8CVWeKMhH2olcCHM9dEK68pe0qE0be32BcCRsvYURhHaD1Srngh1SQcnQzZ4TP324euxqtBOJA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/api-logs": "0.52.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/exporter-trace-otlp-grpc": "0.52.1", + "@opentelemetry/exporter-trace-otlp-http": "0.52.1", + "@opentelemetry/exporter-trace-otlp-proto": "0.52.1", + "@opentelemetry/exporter-zipkin": "1.25.1", + "@opentelemetry/instrumentation": "0.52.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/sdk-logs": "0.52.1", + "@opentelemetry/sdk-metrics": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "@opentelemetry/sdk-trace-node": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-node/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-node/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-node/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.25.1.tgz", + "integrity": "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/resources": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/resources": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.25.1.tgz", + "integrity": "sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/core": "1.25.1", + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-base/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/sdk-trace-node": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.25.1.tgz", + "integrity": "sha512-nMcjFIKxnFqoez4gUmihdBrbpsEnAX/Xj16sGvZm+guceYE0NE00vLhpDVK6f3q8Q4VFI5xG8JjlXKMB/SkTTQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/context-async-hooks": "1.25.1", + "@opentelemetry/core": "1.25.1", + "@opentelemetry/propagator-b3": "1.25.1", + "@opentelemetry/propagator-jaeger": "1.25.1", + "@opentelemetry/sdk-trace-base": "1.25.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-node/node_modules/@opentelemetry/core": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.25.1.tgz", + "integrity": "sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.25.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-node/node_modules/@opentelemetry/semantic-conventions": { + "version": "1.25.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.25.1.tgz", + "integrity": "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.41.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.41.1.tgz", + "integrity": "sha512-/UhIkaZgPutTFmQ7RnIJGgDXZmtEJ7Dvi86xNTFWcnRxVRNk/aotsqDJYeEvDP+FSMB2SdW+pQzNMcWP0rwuNA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.7.0.tgz", + "integrity": "sha512-W8ZfWzLmQnrcky+eh3tni4IozMdqBDiHWU0N+vve/UGjMaUs8c0L7A2oEdkBXS8rTpWDpK/aoI3DG/L/hxmxPg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/json-schema": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@peculiar/utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@peculiar/utils/-/utils-2.0.3.tgz", + "integrity": "sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/webcrypto": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.7.1.tgz", + "integrity": "sha512-ODOov0sGMJMf3jPonOkgGqPknTsu+DdQ7kD++gz8aI+aFMOMHFbWAA2taqXXVTdP+OTOQR/znGvSpmkeI0WTYQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/json-schema": "^1.1.12", + "@peculiar/utils": "^2.0.2", + "tslib": "^2.8.1", + "webcrypto-core": "^1.9.2" + }, + "engines": { + "node": ">=14.18.0" + } + }, + "node_modules/@phc/format": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@phc/format/-/format-1.0.0.tgz", + "integrity": "sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.5.tgz", + "integrity": "sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.1.tgz", + "integrity": "sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.1" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.2.tgz", + "integrity": "sha512-pa0vFRuws4wkvaXKK1uXZMAwAX4/t8ANaJo45iw/oQHNQ9q5xUzwgFmVJGXiga2BeN+zpX7Vf9vmsiIa2J+MUw==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.1.tgz", + "integrity": "sha512-oOAWABowe8EAbMyWKM0tYDKi8Yaox52D+HWZhAIJqQXbqe0xI/GV7FhLWqlEKreMkfDjshR5FKgi3mnle0h6Eg==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.4.tgz", + "integrity": "sha512-tua0TaJxMOB1R0V0RS1jFZ/RpURFDJIOR2A6jWwQeawuFyS4gBW+rntLRaQd0EQ4bd6Vp44Z2rXW+YYDBsj6IA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@ruvector/attention": { + "version": "0.1.32", + "resolved": "https://registry.npmjs.org/@ruvector/attention/-/attention-0.1.32.tgz", + "integrity": "sha512-7ePEASX4+Y8qVU2p2CszL/fgP+E3BRSZm7oukDaTwED5HSrw1jdQk75LijR488s3dYYeHdgoSv67P+WWHbM98A==", + "license": "MIT", + "optional": true, + "optionalDependencies": { + "@ruvector/attention-darwin-arm64": "0.1.32", + "@ruvector/attention-darwin-x64": "0.1.32", + "@ruvector/attention-linux-arm64-gnu": "0.1.32", + "@ruvector/attention-linux-x64-gnu": "0.1.32", + "@ruvector/attention-win32-x64-msvc": "0.1.32" + } + }, + "node_modules/@ruvector/attention-darwin-arm64": { + "version": "0.1.32", + "resolved": "https://registry.npmjs.org/@ruvector/attention-darwin-arm64/-/attention-darwin-arm64-0.1.32.tgz", + "integrity": "sha512-CQ/oftq9o9t2EEBwCfUfdZsxuzHRXrHhtdZk05GZfvPxiDbsuw3NLgDQRR3cvg+8xU9lAmzer+8WCGdxbgX7vQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@ruvector/attention-darwin-x64": { + "version": "0.1.32", + "resolved": "https://registry.npmjs.org/@ruvector/attention-darwin-x64/-/attention-darwin-x64-0.1.32.tgz", + "integrity": "sha512-S11zMfLn+nZJlozLE4b8zVERdSTzD4DJ4Xb+bAUavTLrptYdIhJ0EzqPvCjF1XcSyAgAAkE9+u0oLEjVmAhT3Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@ruvector/attention-linux-arm64-gnu": { + "version": "0.1.32", + "resolved": "https://registry.npmjs.org/@ruvector/attention-linux-arm64-gnu/-/attention-linux-arm64-gnu-0.1.32.tgz", + "integrity": "sha512-eySb6dYHy1WZ3RWuR80PP9r3X6wDWrTZ26bzZ7jEhg3o61bYwoRJ9BphSj0cSUdz1OMwcu163M/ddR1SM8/Ieg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@ruvector/attention-linux-x64-gnu": { + "version": "0.1.32", + "resolved": "https://registry.npmjs.org/@ruvector/attention-linux-x64-gnu/-/attention-linux-x64-gnu-0.1.32.tgz", + "integrity": "sha512-Xch9eOJVMPouOB3L05VUHVA8RofzRnXh6tpEpIScSrkG6oqHwWaVf4Ku8SHe5YZ3FIsM+Oj1jrv11jtN56rpDg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@ruvector/attention-win32-x64-msvc": { + "version": "0.1.32", + "resolved": "https://registry.npmjs.org/@ruvector/attention-win32-x64-msvc/-/attention-win32-x64-msvc-0.1.32.tgz", + "integrity": "sha512-KMeo9ruZySGtyw1NFIE/6wWoGgPa07FhUplCVP75Y3y5JSFXrd6NjgEIfSItQOZ0RVRzTeXuUglkOzMo0kb/6Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@ruvector/core": { + "version": "0.1.31", + "resolved": "https://registry.npmjs.org/@ruvector/core/-/core-0.1.31.tgz", + "integrity": "sha512-DLyWGgSFislyXglfODFwpysZdOoh+eWILF18ecgd6HNPgOylBUNoObW32odqJScmmrX+7150ndWFtdFHO9nGqw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "ruvector-core-darwin-arm64": "0.1.29", + "ruvector-core-darwin-x64": "0.1.29", + "ruvector-core-linux-arm64-gnu": "0.1.29", + "ruvector-core-linux-x64-gnu": "0.1.29", + "ruvector-core-win32-x64-msvc": "0.1.29" + } + }, + "node_modules/@ruvector/edge-full": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@ruvector/edge-full/-/edge-full-0.1.0.tgz", + "integrity": "sha512-GSvq2bB+aTNXpISTqccdZwOroRLSdQhi33L7569QUVi9P7a03hEtdZSX/Gk5aWtDufp230T57uLXQUA1Q0uBeQ==", + "license": "MIT", + "optional": true + }, + "node_modules/@ruvector/gnn": { + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@ruvector/gnn/-/gnn-0.1.25.tgz", + "integrity": "sha512-4q9HRHzA6IzCi2gXkppCuj8+y5jBN9xw9ea3nLq0WwtOc7zSK2x0n+zsNPiQVAeuGFO8CBTPjRyIDbXAOPvtsQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@ruvector/gnn-darwin-arm64": "0.1.25", + "@ruvector/gnn-darwin-x64": "0.1.25", + "@ruvector/gnn-linux-arm64-gnu": "0.1.25", + "@ruvector/gnn-linux-arm64-musl": "0.1.25", + "@ruvector/gnn-linux-x64-gnu": "0.1.25", + "@ruvector/gnn-linux-x64-musl": "0.1.25", + "@ruvector/gnn-win32-x64-msvc": "0.1.25" + } + }, + "node_modules/@ruvector/gnn-darwin-arm64": { + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@ruvector/gnn-darwin-arm64/-/gnn-darwin-arm64-0.1.25.tgz", + "integrity": "sha512-/MfLrqsIGxcMVHRW5ZyaU+0w+tnoEw+sLrQCYj/o3E7Gu0Cc+5QFE84p9CJUtaJLO/T+x5kEYLLC4iBwbYjkNg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ruvector/gnn-darwin-x64": { + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@ruvector/gnn-darwin-x64/-/gnn-darwin-x64-0.1.25.tgz", + "integrity": "sha512-Zw8HGUEFzWFVkTpMP4D9zoLMh5Tn6ztZsa74o6sMLKkXjWLIOhRIBBUXNtiJ6fv8QMXqqJyhNmBFNRXlglmLzA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ruvector/gnn-linux-arm64-gnu": { + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@ruvector/gnn-linux-arm64-gnu/-/gnn-linux-arm64-gnu-0.1.25.tgz", + "integrity": "sha512-Nran7u3oAth3eXS0hq0cQiYr85wAJDM9tdVGApa5LhI1RqSgXlvC2g+AjCBA+074TUfQboKcH38hpnfuF2hpRA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 18" + } + }, + "node_modules/@ruvector/gnn-linux-arm64-musl": { + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@ruvector/gnn-linux-arm64-musl/-/gnn-linux-arm64-musl-0.1.25.tgz", + "integrity": "sha512-Xih6WQ9frA4VpFtQSHWj0frk+fCuEzFDzeMme0QWzUcQZvMUzqiRiSRSRB8jatas7Skbzl+4ZRi6C6THMlccJg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ruvector/gnn-linux-x64-gnu": { + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@ruvector/gnn-linux-x64-gnu/-/gnn-linux-x64-gnu-0.1.25.tgz", + "integrity": "sha512-CwEk4cQ/whmHtAPu6b9hnUAgQiK1DrUDPumXGLh9O4b/WmwjddFfswfoRvacbSMMqwyXGLnAnidjhDZFBx06EQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ruvector/gnn-linux-x64-musl": { + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@ruvector/gnn-linux-x64-musl/-/gnn-linux-x64-musl-0.1.25.tgz", + "integrity": "sha512-4nVcUFeN7dES6/mJ3e00FpZvZVZpGOQFFwWotHENFgNwIQc8XLqbbyeI3/rwhC1HJxxwf0oR+ianYoWKQptI/Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ruvector/gnn-win32-x64-msvc": { + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@ruvector/gnn-win32-x64-msvc/-/gnn-win32-x64-msvc-0.1.25.tgz", + "integrity": "sha512-tJNwffB5jzb6g+5r2H9r8X2oa1q0dSHWN7pXDV9JLh6kYmsk55v6vjaYe7H7M3fP51BCrUGu+vVTiBlBoVvrYA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ruvector/graph-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@ruvector/graph-node/-/graph-node-2.0.4.tgz", + "integrity": "sha512-pPUbQBF+Otnpd5YNgiQl3eaRsivi6NougS0hSmYbCd5i9gMJrr5u7oXL8pHwL/D9YbNKEkeIclhN6zu1rg5aUA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "@ruvector/graph-node-darwin-arm64": "2.0.4", + "@ruvector/graph-node-darwin-x64": "2.0.4", + "@ruvector/graph-node-linux-arm64-gnu": "2.0.4", + "@ruvector/graph-node-linux-x64-gnu": "2.0.4", + "@ruvector/graph-node-win32-x64-msvc": "2.0.4" + } + }, + "node_modules/@ruvector/graph-node-darwin-arm64": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@ruvector/graph-node-darwin-arm64/-/graph-node-darwin-arm64-2.0.4.tgz", + "integrity": "sha512-9YBCI4JFDNCGSDzSApZng3yjdAb7u3Rq2Fn4yyuGbHy26fEie9TqfFDNQ7d+uK6mPcxDVJDCPnIOKcHnFsyMBQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@ruvector/graph-node-darwin-x64": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@ruvector/graph-node-darwin-x64/-/graph-node-darwin-x64-2.0.4.tgz", + "integrity": "sha512-WW07+HmIdbv3jij2tqRWbkJt5m6uR76PXDosIwOkwBjyLbV3Ck5kSW5DONctA6cOQuTEeCcOo9sIKqr3J/f2pQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@ruvector/graph-node-linux-arm64-gnu": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@ruvector/graph-node-linux-arm64-gnu/-/graph-node-linux-arm64-gnu-2.0.4.tgz", + "integrity": "sha512-Z5OatE8CzaVCq5vgGOmowVSKOLxYvO1Dn0rvFL4d63fEvVONDpsVAMkR7rxRGHrgzMZMfpZ9EjZ0vu0KR08tRQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@ruvector/graph-node-linux-x64-gnu": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@ruvector/graph-node-linux-x64-gnu/-/graph-node-linux-x64-gnu-2.0.4.tgz", + "integrity": "sha512-RAdkLcB1gjEQcIsCxmSGHSOBbnUbCn7If8H9YrOqy5xxvmTVE25tkM49fpRRK3oINWJ9oQDBsAZr7GXKQZoLig==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@ruvector/graph-node-win32-x64-msvc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@ruvector/graph-node-win32-x64-msvc/-/graph-node-win32-x64-msvc-2.0.4.tgz", + "integrity": "sha512-+z2uyfiPmbELGjwvo5RfDSjHTJWZWQQDxDYLAnnfqV9a0oM1VklRe34t97pvGg7tdCXgEpnR6yWk3OZRemQUEQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@ruvector/graph-transformer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@ruvector/graph-transformer/-/graph-transformer-2.0.4.tgz", + "integrity": "sha512-Ep7nCq4vwJ41CR/yl+isYXZAxi1qOLoDIJPVrM//zDx9aixRm4n1TWu9PSsv7GSXizSusQwv+n9hUeZrJ2muTg==", + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@ruvector/graph-transformer-darwin-arm64": "2.0.4", + "@ruvector/graph-transformer-darwin-x64": "2.0.4", + "@ruvector/graph-transformer-linux-arm64-gnu": "2.0.4", + "@ruvector/graph-transformer-linux-arm64-musl": "2.0.4", + "@ruvector/graph-transformer-linux-x64-gnu": "2.0.4", + "@ruvector/graph-transformer-linux-x64-musl": "2.0.4", + "@ruvector/graph-transformer-win32-x64-msvc": "2.0.4" + } + }, + "node_modules/@ruvector/graph-transformer-darwin-arm64": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@ruvector/graph-transformer-darwin-arm64/-/graph-transformer-darwin-arm64-2.0.4.tgz", + "integrity": "sha512-VbPWnJHN//1MD5SIn5tEbgV+AUOUtEXpN6q648J+OKjEqJykGVyCg7TKrMOgNtAsAY3vU1S3BlaKIcj2O3ijEw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ruvector/graph-transformer-darwin-x64": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@ruvector/graph-transformer-darwin-x64/-/graph-transformer-darwin-x64-2.0.4.tgz", + "integrity": "sha512-Ol4HYLHV93Scy7GT3kSFFPCmnYiZvDigUaq2l4sVLrGav8BGLMfFcnSRrY9imL3Pq5zFw8bilfaFCg1GF6ntxw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ruvector/graph-transformer-linux-arm64-gnu": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@ruvector/graph-transformer-linux-arm64-gnu/-/graph-transformer-linux-arm64-gnu-2.0.4.tgz", + "integrity": "sha512-f8GatsWNtQWGkYQ4ZXsqnQZ1//5S/sH+5j2Kc6sC2DLIgN0PJamhNN4f2VBwu3toIZHbvk/O/3SQhlIYgBGtAg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ruvector/graph-transformer-linux-arm64-musl": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@ruvector/graph-transformer-linux-arm64-musl/-/graph-transformer-linux-arm64-musl-2.0.4.tgz", + "integrity": "sha512-AMrLREncC4RBQqWMGSZRAaXyP9BrbZG7DDKbSBI86ov1+NvzJs8uoCI1U+x/vSnFcAGB4rq/Z3lDnrj2NP6fpg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ruvector/graph-transformer-linux-x64-gnu": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@ruvector/graph-transformer-linux-x64-gnu/-/graph-transformer-linux-x64-gnu-2.0.4.tgz", + "integrity": "sha512-daXYvA8eG6kKM42gQYvVXUKdgOq6mJmvqHbf024E8M68dFLQaQP6RepAn6CrhUo+dth7AC/pCzcl0YPf2yTVyg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ruvector/graph-transformer-linux-x64-musl": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@ruvector/graph-transformer-linux-x64-musl/-/graph-transformer-linux-x64-musl-2.0.4.tgz", + "integrity": "sha512-w2lbMFm0cBKP12/cheGs16Yb+QQldRS79iBGeaWUnGfUBSZxQS2XryVUMnq60B8R807y6Kv8y5JIOx1ZAeKfRA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ruvector/graph-transformer-win32-x64-msvc": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@ruvector/graph-transformer-win32-x64-msvc/-/graph-transformer-win32-x64-msvc-2.0.4.tgz", + "integrity": "sha512-dPnAdkr9n9g2FttFpmxtoffHNQVHxkbvZbEn3diot2IqTjXHHMJQYizVxTdZ6Dtur0T95PLpMz+XoW/qxus2xQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@ruvector/rabitq-wasm": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@ruvector/rabitq-wasm/-/rabitq-wasm-0.1.0.tgz", + "integrity": "sha512-Uu7fupcJw8x+QBhJLKAfIK0CyH55fQ8niexJwbnSrYEtSX93ScWSOJBr/zTLR/hd0Md9Dq7ZaatzIDB7uJqazg==", + "license": "MIT OR Apache-2.0" + }, + "node_modules/@ruvector/router": { + "version": "0.1.30", + "resolved": "https://registry.npmjs.org/@ruvector/router/-/router-0.1.30.tgz", + "integrity": "sha512-gtZAdxp0UYrOJd3Kz+kNtFNfG53aW2xkZ7u3XNT+JdViTEVnpYMEdDfpc2ByQBy+kf600Cp5xVMQR3qVXajWtw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "@ruvector/router-darwin-arm64": "0.1.30", + "@ruvector/router-darwin-x64": "0.1.30", + "@ruvector/router-linux-arm64-gnu": "0.1.30", + "@ruvector/router-linux-x64-gnu": "0.1.30", + "@ruvector/router-win32-x64-msvc": "0.1.30" + } + }, + "node_modules/@ruvector/router-darwin-arm64": { + "version": "0.1.30", + "resolved": "https://registry.npmjs.org/@ruvector/router-darwin-arm64/-/router-darwin-arm64-0.1.30.tgz", + "integrity": "sha512-TWC8ei18jlODekVwSyzEC55XUnmgU+br1cD/w7I3iEW6FL6Vbl3neZU8b03cHtgEN9xxnrKDRr7jq3T41UY40A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@ruvector/router-darwin-x64": { + "version": "0.1.30", + "resolved": "https://registry.npmjs.org/@ruvector/router-darwin-x64/-/router-darwin-x64-0.1.30.tgz", + "integrity": "sha512-nxnPGUx2BYAgSzJ3bC/hiCOVAPnAORvJToKnwRV3V+b/KhuUd09qSEP1ykUjbT4Y8oxnA4DklTvVTMwKRFFE1w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 18" + } + }, + "node_modules/@ruvector/router-linux-arm64-gnu": { + "version": "0.1.30", + "resolved": "https://registry.npmjs.org/@ruvector/router-linux-arm64-gnu/-/router-linux-arm64-gnu-0.1.30.tgz", + "integrity": "sha512-7FD16wlCVgQ+4Zvd3d5noTRrCpbT2SvEzmhVj+L9HVV3u8NHCfHVLSb8gObf9RS9PW1X4pm60b5X39SgxKbDTg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 18" + } + }, + "node_modules/@ruvector/router-linux-x64-gnu": { + "version": "0.1.30", + "resolved": "https://registry.npmjs.org/@ruvector/router-linux-x64-gnu/-/router-linux-x64-gnu-0.1.30.tgz", + "integrity": "sha512-NHognWMJBEfoRt5+22TvYAoA+XPzZpd1DHP3z4fLAoKI85SZOqYy9sxyZo/oyYVsMDPrrBJKi3wdufPzgLFeOQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 18" + } + }, + "node_modules/@ruvector/router-win32-x64-msvc": { + "version": "0.1.30", + "resolved": "https://registry.npmjs.org/@ruvector/router-win32-x64-msvc/-/router-win32-x64-msvc-0.1.30.tgz", + "integrity": "sha512-E9j57ZMVS9CvHYwlPyBEZfmbMoMySWePUcqlhktglZbA22BD1soYUgIKPf2jUkEJTLfxvwLDqBjtyNThXAojiQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 18" + } + }, + "node_modules/@ruvector/ruvllm": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@ruvector/ruvllm/-/ruvllm-2.5.5.tgz", + "integrity": "sha512-3WDQkN1EiRlmln6Y3qHIOwIRaRUWwagT1OG+AxohyFgr2UuvWCD5tsiPFtlgwUze4X01lgvBCiHdOsV3u81UWA==", + "license": "MIT OR Apache-2.0", + "optional": true, + "dependencies": { + "chalk": "^4.1.2", + "commander": "^12.0.0", + "ora": "^5.4.1" + }, + "bin": { + "ruvllm": "bin/cli.js" + }, + "engines": { + "node": ">= 18" + }, + "optionalDependencies": { + "@ruvector/ruvllm-darwin-arm64": "2.0.1", + "@ruvector/ruvllm-darwin-x64": "2.0.1", + "@ruvector/ruvllm-linux-arm64-gnu": "2.0.1", + "@ruvector/ruvllm-linux-x64-gnu": "2.0.1", + "@ruvector/ruvllm-win32-x64-msvc": "2.0.1" + } + }, + "node_modules/@ruvector/ruvllm-darwin-arm64": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@ruvector/ruvllm-darwin-arm64/-/ruvllm-darwin-arm64-2.0.1.tgz", + "integrity": "sha512-giZb+TbErKLgURLC3CSmJKJl0bnJn+jFZk488ppyzrR6YGft6kO329Twnd+TiJNDxVOMgZefwVdsbF9jrUIgAQ==", + "cpu": [ + "arm64" + ], + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 18" + } + }, + "node_modules/@ruvector/ruvllm-darwin-x64": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@ruvector/ruvllm-darwin-x64/-/ruvllm-darwin-x64-2.0.1.tgz", + "integrity": "sha512-DpVKFBXFxVPBiCGBw1AeiwsY1YVWfaCh+Eq0+pVLqD4kwwXKhRIWLnTQcuZVE5Gnt1Ku8MxhH2Zs++vKiuq3mA==", + "cpu": [ + "x64" + ], + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 18" + } + }, + "node_modules/@ruvector/ruvllm-linux-arm64-gnu": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@ruvector/ruvllm-linux-arm64-gnu/-/ruvllm-linux-arm64-gnu-2.0.1.tgz", + "integrity": "sha512-+u6Fe/Dsy4Y11m9IUmuoUeFtoUWc1ZVXxGB4JYomNDll63D03a0cpeKKaslgwOfFlfXlrFcs/eDrsYr07tQP5g==", + "cpu": [ + "arm64" + ], + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 18" + } + }, + "node_modules/@ruvector/ruvllm-linux-x64-gnu": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@ruvector/ruvllm-linux-x64-gnu/-/ruvllm-linux-x64-gnu-2.0.1.tgz", + "integrity": "sha512-GH9u/SPUZm9KXjSoQZx5PRtJui0hO/OK+OmRHLZc8+IYrlgona6UQAw6uKHJ3cSEZp9f+XBRYgIrLmsEJW3HXA==", + "cpu": [ + "x64" + ], + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 18" + } + }, + "node_modules/@ruvector/ruvllm-win32-x64-msvc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@ruvector/ruvllm-win32-x64-msvc/-/ruvllm-win32-x64-msvc-2.0.1.tgz", + "integrity": "sha512-sRGNOMAcyC5p/nITnR0HLFUEObZ9Mh/T1erNiqhKrNUqIPZM1qAYBgN3xmZp02isdiTilRpxQihz3j4EzGPXIw==", + "cpu": [ + "x64" + ], + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 18" + } + }, + "node_modules/@ruvector/ruvllm/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@ruvector/rvf": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/@ruvector/rvf/-/rvf-0.1.9.tgz", + "integrity": "sha512-W40NLeSj/+FwIHT0+v3soFrtk4pnAZL5Ghx93qAsZkuwriNw2y6vGPnsapflQyp34WgMN362syIRiACXx3KW8g==", + "license": "MIT", + "optional": true, + "dependencies": { + "@ruvector/rvf-node": "^0.1.7" + }, + "optionalDependencies": { + "@ruvector/rvf-solver": "^0.1.0", + "@ruvector/rvf-wasm": "^0.1.5" + } + }, + "node_modules/@ruvector/rvf-node": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@ruvector/rvf-node/-/rvf-node-0.1.8.tgz", + "integrity": "sha512-1rbSr9XAiq69wnEPs36FW93ZEfFMYEiI2fANZ0bfQcEH4uNWlwxaZFgKs47PNQPhCgx/cbONpnVsnyX+uOTagw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 16" + }, + "optionalDependencies": { + "@ruvector/rvf-node-darwin-arm64": "0.1.7", + "@ruvector/rvf-node-darwin-x64": "0.1.7", + "@ruvector/rvf-node-linux-arm64-gnu": "0.1.7", + "@ruvector/rvf-node-linux-x64-gnu": "0.1.7", + "@ruvector/rvf-node-win32-x64-msvc": "0.1.7" + } + }, + "node_modules/@ruvector/rvf-node-darwin-arm64": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@ruvector/rvf-node-darwin-arm64/-/rvf-node-darwin-arm64-0.1.7.tgz", + "integrity": "sha512-vll3WJwDn3oOfy1PB10IG7/f3zBpFiMNHL2/2tdJmeRR8La/rSPJ0ZH5MDIsfleiVtaWzh9bvVCtVkZ6uo2jeg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@ruvector/rvf-node-darwin-x64": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@ruvector/rvf-node-darwin-x64/-/rvf-node-darwin-x64-0.1.7.tgz", + "integrity": "sha512-Qi/l2bVuVz5YQ2RcYPYF0LNZVkytiIZHzvWhS71+Tt5GEIrsToauHQIcnJQmDNypvwxO8wYk+EeT2xcHR3ZSQQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@ruvector/rvf-node-linux-arm64-gnu": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@ruvector/rvf-node-linux-arm64-gnu/-/rvf-node-linux-arm64-gnu-0.1.7.tgz", + "integrity": "sha512-oZwrtfs7XqRVaDP6iiw6G52l7+NdP3NbTwR2iM+EP8r8X4e1+p4opwV2Ig+lyT7wAz72wcyOpkzpu1MlbK4NKA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@ruvector/rvf-node-linux-x64-gnu": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@ruvector/rvf-node-linux-x64-gnu/-/rvf-node-linux-x64-gnu-0.1.7.tgz", + "integrity": "sha512-CRq9nc7dIj8QbcY9sSXvVau7cr1ESh3VnYUPp1IodzZ4SegN0H3oeieF5nUMNYyq+43MkBR4yrEwFgDBZ00QHQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@ruvector/rvf-node-win32-x64-msvc": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@ruvector/rvf-node-win32-x64-msvc/-/rvf-node-win32-x64-msvc-0.1.7.tgz", + "integrity": "sha512-sgnoNphOnbD4d3+YyQ83MlGO7sX4kbcDwsFNz7p2mlTaDR8coQXoudSaPrMeMpeUojFUqoxeDvVly/un3jADig==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@ruvector/rvf-solver": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@ruvector/rvf-solver/-/rvf-solver-0.1.8.tgz", + "integrity": "sha512-YM7L6TvhVoC5w0kUMl8ASback2ka3MesPvuf+lRYSJEcaf6bncPX7YGzcrsheOe4BBwyiyx39vAijVPx1nZkWA==", + "license": "MIT", + "optional": true + }, + "node_modules/@ruvector/rvf-wasm": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@ruvector/rvf-wasm/-/rvf-wasm-0.1.6.tgz", + "integrity": "sha512-hdxRgMJqqDR5jsYBepYrdc0odGGjlwE7QsKOfKlrIWN3kC/pNulCppqKwropJsME0/ZzlLBF90YmWmSXw1AXkg==", + "license": "MIT", + "optional": true + }, + "node_modules/@ruvector/sona": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@ruvector/sona/-/sona-0.1.6.tgz", + "integrity": "sha512-LW40r28yQxXz3vt1fOLRWVV5nln4rzw6a/Yy11EJJdeEN9q4wZG1Glwf9leTp4SjQjuIJ5hklNW8OVMwgyzd5w==", + "license": "MIT OR Apache-2.0", + "optional": true, + "engines": { + "node": ">= 16" + }, + "optionalDependencies": { + "@ruvector/sona-darwin-arm64": "0.1.4", + "@ruvector/sona-darwin-x64": "0.1.4", + "@ruvector/sona-linux-arm64-gnu": "0.1.4", + "@ruvector/sona-linux-x64-gnu": "0.1.4", + "@ruvector/sona-linux-x64-musl": "0.1.4", + "@ruvector/sona-win32-arm64-msvc": "0.1.4", + "@ruvector/sona-win32-x64-msvc": "0.1.4" + } + }, + "node_modules/@ruvector/sona-darwin-arm64": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@ruvector/sona-darwin-arm64/-/sona-darwin-arm64-0.1.4.tgz", + "integrity": "sha512-XLXGnlcrrVM00cTsq7VyGhWu2Fvr4zJQD1bktthR3j0r4Y1PXwnw1QPHVtdcKzKmZ5WKPDGxsgRNPUKAIT/PRA==", + "cpu": [ + "arm64" + ], + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@ruvector/sona-darwin-x64": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@ruvector/sona-darwin-x64/-/sona-darwin-x64-0.1.4.tgz", + "integrity": "sha512-8bUvmQHn/N7zcD5Zf/u+lsggl6ql0NiuwPPYxitimJKAV+8oT7Zt4zE7kgnx8wqO2YCD4GPxw5laqhRz6IWwQQ==", + "cpu": [ + "x64" + ], + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@ruvector/sona-linux-arm64-gnu": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@ruvector/sona-linux-arm64-gnu/-/sona-linux-arm64-gnu-0.1.4.tgz", + "integrity": "sha512-QyGIK++wbdRDTF2oio1Ikq1QjS5KKUKJx4Z/rRjxJu29TGXigEdJmwTnPDtsKKzVwXahrEi1mI4Ri/ALMJID9w==", + "cpu": [ + "arm64" + ], + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@ruvector/sona-linux-x64-gnu": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@ruvector/sona-linux-x64-gnu/-/sona-linux-x64-gnu-0.1.4.tgz", + "integrity": "sha512-lh4HYZUag0yiFpooFxAF6TTx/SVDnh/OPD1yY6G2KH9UaIPgLzw0l/dGv4DaVtv6qjeQMMrxrI8y6vFHUOBvuw==", + "cpu": [ + "x64" + ], + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@ruvector/sona-linux-x64-musl": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@ruvector/sona-linux-x64-musl/-/sona-linux-x64-musl-0.1.4.tgz", + "integrity": "sha512-+g+5px2k4lztba8wqxuoNnOU1tFWEdCJHMXqU0Tqn5rq06YoGCGpzoDI55jo1OKtCgCbPLBVT8KiUHIKxT1L/g==", + "cpu": [ + "x64" + ], + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@ruvector/sona-win32-arm64-msvc": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@ruvector/sona-win32-arm64-msvc/-/sona-win32-arm64-msvc-0.1.4.tgz", + "integrity": "sha512-xQkFe5x8SBcg+IM/I5EtDz7gQYdznG1GZnAqt9zKbY/xEOqPmJFlk9A8ab3w9QMBgXTCmlZKkWKDGQgqg3RQ5w==", + "cpu": [ + "arm64" + ], + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@ruvector/sona-win32-x64-msvc": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@ruvector/sona-win32-x64-msvc/-/sona-win32-x64-msvc-0.1.4.tgz", + "integrity": "sha512-kox5tXvKiTtZaSw0fyo7fvAIp/VK5XAtnoN8C8BuERcqOgrcwY6CS8z5M1hEH1XUR9CHBNpiL6+wURsLXwq4/g==", + "cpu": [ + "x64" + ], + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@ruvector/tiny-dancer": { + "version": "0.1.18", + "resolved": "https://registry.npmjs.org/@ruvector/tiny-dancer/-/tiny-dancer-0.1.18.tgz", + "integrity": "sha512-rgkHJl/RIwIuFc+kYV8eULY+N/cDsEcxseURRcPA4vfU8TUKca0e3ENN8Fuc8Vm/bka8tzyY1TF8G2/DvFQAPA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "@ruvector/tiny-dancer-darwin-arm64": "0.1.15", + "@ruvector/tiny-dancer-darwin-x64": "0.1.15", + "@ruvector/tiny-dancer-linux-arm64-gnu": "0.1.17", + "@ruvector/tiny-dancer-linux-x64-gnu": "0.1.15", + "@ruvector/tiny-dancer-win32-x64-msvc": "0.1.15" + } + }, + "node_modules/@ruvector/tiny-dancer-darwin-arm64": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/@ruvector/tiny-dancer-darwin-arm64/-/tiny-dancer-darwin-arm64-0.1.15.tgz", + "integrity": "sha512-99vy9OLjppPj3kjusQnirgLvOnBt6Jrt2pij3Fvs5pzyp+zh04gb1np0tFR4JCxftKnuoKYqN7bCtQvgQbBBSg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@ruvector/tiny-dancer-darwin-x64": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/@ruvector/tiny-dancer-darwin-x64/-/tiny-dancer-darwin-x64-0.1.15.tgz", + "integrity": "sha512-KxxhkiJwjRoUBeK0pwxuY8dKYpMrxpItss7CfNYhsbJc1YLmUzw1TG2Klga4vO1X7dsg/CYuHC+KKrgfSvEVwA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@ruvector/tiny-dancer-linux-arm64-gnu": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/@ruvector/tiny-dancer-linux-arm64-gnu/-/tiny-dancer-linux-arm64-gnu-0.1.17.tgz", + "integrity": "sha512-bvjYL0/tyonot6KFQPAbtOdw3TGL6fIxakmn8ED6gRRcwPJ3V6VZ0WgLZfOlXiWc4I/eQvcNldgJ+3QOXurgMw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@ruvector/tiny-dancer-linux-x64-gnu": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/@ruvector/tiny-dancer-linux-x64-gnu/-/tiny-dancer-linux-x64-gnu-0.1.15.tgz", + "integrity": "sha512-lEknFh2p73KkHz6d51cP/Y5D10AATiXRsoQEDRkOjrO0Eb5blyxal4wzdqbylyXEH7UbRePCBrCCk5BkfZD1fA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@ruvector/tiny-dancer-win32-x64-msvc": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/@ruvector/tiny-dancer-win32-x64-msvc/-/tiny-dancer-win32-x64-msvc-0.1.15.tgz", + "integrity": "sha512-f465GiIh+CWv58d3eixWKJOi8kSqcRk5heH2SRwj2Q4wWjWru4esr96NXb1VCj0EKFfDWs9D+aPW2OU4xFeoPQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "license": "MIT", + "optional": true + }, + "node_modules/@sindresorhus/merge-streams": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz", + "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "optional": true + }, + "node_modules/@supabase/auth-js": { + "version": "2.106.1", + "resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.106.1.tgz", + "integrity": "sha512-7eyheXfAGwkB9bZewJPs+N3UYt6kra2JG6mIxNEgbkvcO15PLD1e75PTIUEYYl3zrifm3GrpShVl7QZxKrXO/w==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "2.8.1" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@supabase/functions-js": { + "version": "2.106.1", + "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.106.1.tgz", + "integrity": "sha512-XbOPnR2mW7jp/EcW447xmGwCa+/Wc00Hkw8t4tUIJjRsHQ4xAESsLKcyLRhRJjJoUnJVXUlC+w0wUxUCM7CG2A==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "2.8.1" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@supabase/phoenix": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@supabase/phoenix/-/phoenix-0.4.2.tgz", + "integrity": "sha512-YSAGnmDAfuleFCVt3CeurQZAhxRfXWeZIIkwp7NhYzQ1UwW6ePSnzsFAiUm/mbCkfoCf70QQHKW/K6RKh52a4A==", + "license": "MIT", + "optional": true + }, + "node_modules/@supabase/postgrest-js": { + "version": "2.106.1", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-2.106.1.tgz", + "integrity": "sha512-Qbn6d2lqiqeaBX1Uko0e/hL90dtQGRN6CG2wMVQtJpRFstlVW45qmUTyTOsiB8dYUWu1fWYo4YzJuDbokGv3tQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "2.8.1" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@supabase/realtime-js": { + "version": "2.106.1", + "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.106.1.tgz", + "integrity": "sha512-eQCYri5E8KsjpDgC7g28cOOS2britjUWdNSJluFMainqrMRepzjOnaxqXc3RoAz7H0dxmBrfLUNF6NGP8C+YaA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@supabase/phoenix": "^0.4.2", + "tslib": "2.8.1" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@supabase/storage-js": { + "version": "2.106.1", + "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.106.1.tgz", + "integrity": "sha512-HWcLIhqinhWKpOQ3WzglR2unjW0eh9J7yOu3IZrZNIEkraK4La/HDvTqndljGsNw0itPtyHhuKBxRoPG1VUARw==", + "license": "MIT", + "optional": true, + "dependencies": { + "iceberg-js": "^0.8.1", + "tslib": "2.8.1" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@supabase/supabase-js": { + "version": "2.106.1", + "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.106.1.tgz", + "integrity": "sha512-gP4HurGkGu7Z3xoOCjtAI17BKKp7jpsmwY0Ssbsks9XQRzJ7ZhK7LxfLdBSYgUdgZCQgjRK+Mr7+cl4Gxrk0Rw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@supabase/auth-js": "2.106.1", + "@supabase/functions-js": "2.106.1", + "@supabase/postgrest-js": "2.106.1", + "@supabase/realtime-js": "2.106.1", + "@supabase/storage-js": "2.106.1" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@tokenizer/inflate": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.4.1.tgz", + "integrity": "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^4.4.3", + "token-types": "^6.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/inflate/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@tokenizer/inflate/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", + "optional": true + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/node": { + "version": "25.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.9.1.tgz", + "integrity": "sha512-xfrlY7UD5rMJk3ZVJP8BNzS28J36YJg+xp+LPXV1TdWxr8uMH5A860QNxYDGQe/ylDSgjxE52Q9VnO7p75tJxg==", + "license": "MIT", + "optional": true, + "dependencies": { + "undici-types": ">=7.24.0 <7.24.7" + } + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/shimmer": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.2.0.tgz", + "integrity": "sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==", + "license": "MIT", + "optional": true + }, + "node_modules/@xenova/transformers": { + "version": "2.17.2", + "resolved": "https://registry.npmjs.org/@xenova/transformers/-/transformers-2.17.2.tgz", + "integrity": "sha512-lZmHqzrVIkSvZdKZEx7IYY51TK0WDrC8eR0c5IMnBsO8di8are1zzw8BlLhyO2TklZKLN5UffNGs1IJwT6oOqQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@huggingface/jinja": "^0.2.2", + "onnxruntime-web": "1.14.0", + "sharp": "^0.32.0" + }, + "optionalDependencies": { + "onnxruntime-node": "1.14.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "license": "MIT", + "optional": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "license": "MIT", + "optional": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/adm-zip": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.17.tgz", + "integrity": "sha512-+Ut8d9LLqwEvHHJl1+PIHqoyDxFgVN847JTVM3Izi3xHDWPE4UtzzXysMZQs64DMcrJfBeS/uoEP4AD3HQHnQQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/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", + "optional": true + }, + "node_modules/agentdb": { + "version": "3.0.0-alpha.14", + "resolved": "https://registry.npmjs.org/agentdb/-/agentdb-3.0.0-alpha.14.tgz", + "integrity": "sha512-aQzFndfdXTeFTjCOFjPQbax3Shjwu0P3zEFyrnQK06AD3N4BseDYf/yPttVE4VFcGc8BYfNj36VxU7+Y2yYzmg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@modelcontextprotocol/sdk": "^1.20.1", + "@opentelemetry/api": "^1.9.0", + "@ruvector/graph-transformer": "^2.0.4", + "ajv": "^8.18.0", + "jsonwebtoken": "^9.0.2", + "sql.js": "^1.13.0" + }, + "bin": { + "agentdb": "dist/src/cli/agentdb-cli.js" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "@opentelemetry/resources": "^1.25.0", + "@opentelemetry/sdk-node": "^0.52.0", + "@opentelemetry/semantic-conventions": "^1.25.0", + "@ruvector/attention": "^0.1.2", + "@ruvector/gnn": "^0.1.23", + "@ruvector/graph-node": "^2.0.2", + "@ruvector/router": "^0.1.15", + "@ruvector/ruvllm": "^2.5.1", + "@ruvector/rvf": "^0.1.9", + "@ruvector/rvf-node": "^0.1.7", + "@ruvector/rvf-solver": "^0.1.7", + "@ruvector/rvf-wasm": "^0.1.6", + "@ruvector/sona": "^0.1.4", + "@xenova/transformers": "^2.17.2", + "argon2": "^0.44.0", + "better-sqlite3": "^11.8.1", + "chalk": "^5.3.0", + "commander": "^12.1.0", + "hnswlib-node": "^3.0.0", + "inquirer": "^9.3.8", + "ruvector": "^0.1.30", + "ruvector-attention-wasm": "^0.1.32", + "ruvector-graph-transformer-wasm": "^2.0.4" + } + }, + "node_modules/agentdb/node_modules/better-sqlite3": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.10.0.tgz", + "integrity": "sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.1" + } + }, + "node_modules/agentic-flow": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/agentic-flow/-/agentic-flow-2.0.13.tgz", + "integrity": "sha512-VN3OVYUweVtCE4ARzxwf0Qf22Z3+6dgYWukKvnE5qlBIa5FEPjD5rRN4Fz5mecQ+88+0fnFgJ/00lb6MVhWsNQ==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@anthropic-ai/claude-agent-sdk": "^0.1.5", + "@anthropic-ai/sdk": "^0.65.0", + "@google/genai": "^1.22.0", + "@ruvector/core": "^0.1.29", + "@ruvector/edge-full": "^0.1.0", + "@ruvector/router": "^0.1.25", + "@ruvector/ruvllm": "^0.2.3", + "@ruvector/tiny-dancer": "^0.1.17", + "@supabase/supabase-js": "^2.78.0", + "axios": "^1.12.2", + "dotenv": "^16.4.5", + "express": "^5.1.0", + "fastmcp": "^3.19.0", + "glob": "^13.0.0", + "gun": "^0.2020.1241", + "http-proxy-middleware": "^3.0.5", + "ruvector": "^0.1.85", + "ruvector-onnx-embeddings-wasm": "^0.1.2", + "tiktoken": "^1.0.22", + "ulid": "^3.0.1", + "ws": "^8.18.3", + "yaml": "^2.8.1", + "zod": "^3.25.76" + }, + "bin": { + "agentdb": "dist/agentdb/cli/agentdb-cli.js", + "agentic-flow": "dist/cli-proxy.js" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-darwin-arm64": "^4.59.0", + "@ruvector/attention": "^0.1.4", + "@ruvector/sona": "^0.1.4", + "@xenova/transformers": "^2.17.2", + "agentdb": "^3.0.0-alpha.14", + "better-sqlite3": "^11.10.0", + "onnxruntime-node": "^1.23.2", + "sharp": "^0.32.6", + "sql.js": "^1.11.0" + } + }, + "node_modules/agentic-flow/node_modules/@ruvector/ruvllm": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@ruvector/ruvllm/-/ruvllm-0.2.4.tgz", + "integrity": "sha512-cNAkcKZIqqy+3fxOb1z8bS1cJzJgsUpqNIdMk29RDr+a5g/fLgmHTVEzdBW6kHfDTc5tFUr10Juh9K6w0cKufg==", + "license": "MIT OR Apache-2.0", + "optional": true, + "dependencies": { + "chalk": "^4.1.2", + "commander": "^12.0.0", + "ora": "^5.4.1" + }, + "bin": { + "ruvllm": "bin/cli.js" + }, + "engines": { + "node": ">= 18" + }, + "optionalDependencies": { + "@ruvector/ruvllm-darwin-arm64": "0.2.0", + "@ruvector/ruvllm-darwin-x64": "0.2.0", + "@ruvector/ruvllm-linux-arm64-gnu": "0.2.0", + "@ruvector/ruvllm-linux-x64-gnu": "0.2.0", + "@ruvector/ruvllm-win32-x64-msvc": "0.2.0" + } + }, + "node_modules/agentic-flow/node_modules/@ruvector/ruvllm-darwin-arm64": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@ruvector/ruvllm-darwin-arm64/-/ruvllm-darwin-arm64-0.2.0.tgz", + "integrity": "sha512-3oEMNEoGJqfTJXf1Th49HPTlETMxLzlBc1yBY1RqCMoqSrNKsM66+3Npx0O/GdYfFnKRU2wa/mlLPuBY2lUqYQ==", + "cpu": [ + "arm64" + ], + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 18" + } + }, + "node_modules/agentic-flow/node_modules/@ruvector/ruvllm-darwin-x64": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@ruvector/ruvllm-darwin-x64/-/ruvllm-darwin-x64-0.2.0.tgz", + "integrity": "sha512-Niu9oG9hkbDJ1IpfXluRRfO4vwPwCdISW+ff1H+NjmIk8028CIg2w5iq3qbIaj6WzTQ9YqA68V5aMD9t0w8A6g==", + "cpu": [ + "x64" + ], + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 18" + } + }, + "node_modules/agentic-flow/node_modules/@ruvector/ruvllm-linux-arm64-gnu": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@ruvector/ruvllm-linux-arm64-gnu/-/ruvllm-linux-arm64-gnu-0.2.0.tgz", + "integrity": "sha512-ykOqwiqRbf29idXYMmuDdZqOsRMbYgzpWhmk/BcSRVBMUsO4W2Q0UkgLZgt6PIKxSf1k2qt8x8uSmO5tYTD8Iw==", + "cpu": [ + "arm64" + ], + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 18" + } + }, + "node_modules/agentic-flow/node_modules/@ruvector/ruvllm-linux-x64-gnu": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@ruvector/ruvllm-linux-x64-gnu/-/ruvllm-linux-x64-gnu-0.2.0.tgz", + "integrity": "sha512-8JHH7ft00rqCRyiP0wuAThOVwSodj0gaTZcG1jBBqtnwApmdmTWN8EpuffrHHhhRO+Uvny6T5r7TiAh+Xu+QuQ==", + "cpu": [ + "x64" + ], + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 18" + } + }, + "node_modules/agentic-flow/node_modules/@ruvector/ruvllm-win32-x64-msvc": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@ruvector/ruvllm-win32-x64-msvc/-/ruvllm-win32-x64-msvc-0.2.0.tgz", + "integrity": "sha512-ksm+AZVqkkYLVq2Rbc7Rx+gSH7egFWlcH3E5dQpro98Oslc7jUH+uNDRjDVUS3lZXchV+Ot5WPLM4pClRxFm9w==", + "cpu": [ + "x64" + ], + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 18" + } + }, + "node_modules/agentic-flow/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", + "optional": true, + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agentic-flow/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/agentic-flow/node_modules/better-sqlite3": { + "version": "11.10.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.10.0.tgz", + "integrity": "sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.1" + } + }, + "node_modules/agentic-flow/node_modules/body-parser": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.2.tgz", + "integrity": "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==", + "license": "MIT", + "optional": true, + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.3", + "http-errors": "^2.0.0", + "iconv-lite": "^0.7.0", + "on-finished": "^2.4.1", + "qs": "^6.14.1", + "raw-body": "^3.0.1", + "type-is": "^2.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/agentic-flow/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/agentic-flow/node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/agentic-flow/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", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/agentic-flow/node_modules/cookie-signature": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz", + "integrity": "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6.6.0" + } + }, + "node_modules/agentic-flow/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agentic-flow/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==", + "license": "MIT", + "optional": true + }, + "node_modules/agentic-flow/node_modules/express": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", + "license": "MIT", + "optional": true, + "dependencies": { + "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/agentic-flow/node_modules/fastmcp": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/fastmcp/-/fastmcp-3.35.0.tgz", + "integrity": "sha512-bcyAaVa3Zw5f4xighGg6fNNgEzZoP6tX/O+ZfS2lIhbEULWe/zUWG533JyFEUOjZT7EB+tiZW1ot4eWKmYJ6DA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@modelcontextprotocol/sdk": "^1.24.3", + "@standard-schema/spec": "^1.0.0", + "execa": "^9.6.1", + "file-type": "^21.1.1", + "fuse.js": "^7.1.0", + "hono": "^4.11.5", + "mcp-proxy": "^6.4.0", + "strict-event-emitter-types": "^2.0.0", + "undici": "^7.16.0", + "uri-templates": "^0.2.0", + "xsschema": "^0.4.3", + "yargs": "^18.0.0", + "zod": "^4.1.13", + "zod-to-json-schema": "^3.25.0" + }, + "bin": { + "fastmcp": "dist/bin/fastmcp.js" + }, + "peerDependencies": { + "jose": "^5.0.0" + }, + "peerDependenciesMeta": { + "jose": { + "optional": true + } + } + }, + "node_modules/agentic-flow/node_modules/fastmcp/node_modules/xsschema": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/xsschema/-/xsschema-0.4.4.tgz", + "integrity": "sha512-TMhbk8AhxO+YuDOn3rXBjGXQ+Vja3T13UPQkHx/FemhusaOzRfCSj2seykt0mdnFPsOtO9l3ANf4adcp+4NRGw==", + "license": "MIT", + "optional": true, + "peerDependencies": { + "@valibot/to-json-schema": "^1.0.0", + "arktype": "^2.1.20", + "effect": "^3.16.0", + "sury": "^10.0.0", + "zod": "^3.25.0 || ^4.0.0", + "zod-to-json-schema": "^3.25.0" + }, + "peerDependenciesMeta": { + "@valibot/to-json-schema": { + "optional": true + }, + "arktype": { + "optional": true + }, + "effect": { + "optional": true + }, + "sury": { + "optional": true + }, + "zod": { + "optional": true + }, + "zod-to-json-schema": { + "optional": true + } + } + }, + "node_modules/agentic-flow/node_modules/fastmcp/node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "optional": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/agentic-flow/node_modules/finalhandler": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", + "license": "MIT", + "optional": true, + "dependencies": { + "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": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/agentic-flow/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", + "optional": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/agentic-flow/node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "license": "MIT", + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/agentic-flow/node_modules/jose": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", + "integrity": "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==", + "license": "MIT", + "optional": true, + "peer": true, + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/agentic-flow/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/agentic-flow/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", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/agentic-flow/node_modules/mime-db": { + "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", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agentic-flow/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "optional": true, + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/agentic-flow/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", + "optional": true + }, + "node_modules/agentic-flow/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==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agentic-flow/node_modules/onnxruntime-common": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.26.0.tgz", + "integrity": "sha512-qVyMR4lcWgbkc4getFV+GQijsTnbg/siteoqcDwa3sI/LxbrMSNw4ePyvCq/ymdQaRomCA7YuWmhzsswxvymdw==", + "license": "MIT", + "optional": true + }, + "node_modules/agentic-flow/node_modules/onnxruntime-node": { + "version": "1.26.0", + "resolved": "https://registry.npmjs.org/onnxruntime-node/-/onnxruntime-node-1.26.0.tgz", + "integrity": "sha512-OHl6PiOEOqxaLHL0N9eFrbzS7IGmu3BtJNH3RTEnRAheCIkfc3gjcjl4sGcjp9C22ZC9YTquDOxSdT/stBQ6BQ==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "win32", + "darwin", + "linux" + ], + "dependencies": { + "adm-zip": "^0.5.16", + "global-agent": "^4.1.3", + "onnxruntime-common": "1.26.0" + } + }, + "node_modules/agentic-flow/node_modules/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.1.tgz", + "integrity": "sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "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": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/agentic-flow/node_modules/serve-static": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz", + "integrity": "sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==", + "license": "MIT", + "optional": true, + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/agentic-flow/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==", + "license": "MIT", + "optional": true, + "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/agentic-flow/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==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/agentic-flow/node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "license": "MIT", + "optional": true, + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/agentic-flow/node_modules/type-is/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/agentic-flow/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==", + "license": "MIT", + "optional": true, + "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/agentic-flow/node_modules/wrap-ansi/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==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/agentic-flow/node_modules/yargs": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "license": "MIT", + "optional": true, + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/agentic-flow/node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", + "optional": true, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "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": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argon2": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/argon2/-/argon2-0.44.0.tgz", + "integrity": "sha512-zHPGN3S55sihSQo0dBbK0A5qpi2R31z7HZDZnry3ifOyj8bZZnpZND2gpmhnRGO1V/d555RwBqIK5W4Mrmv3ig==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@phc/format": "^1.0.0", + "cross-env": "^10.0.0", + "node-addon-api": "^8.5.0", + "node-gyp-build": "^4.8.4" + }, + "engines": { + "node": ">=16.17.0" + } + }, + "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/asn1js": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.10.tgz", + "integrity": "sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.5", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=12.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", + "optional": true + }, + "node_modules/axios": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.16.1.tgz", + "integrity": "sha512-caYkukvroVPO8KrzuJEb50Hm07KwfBZPEC3VeFHTsqWHvKTsy54hjJz9BS/cdaypROE2rH6xvm9mHX4fgWkr3A==", + "license": "MIT", + "optional": true, + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/b4a": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.8.1.tgz", + "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==", + "license": "Apache-2.0", + "optional": true, + "peerDependencies": { + "react-native-b4a": "*" + }, + "peerDependenciesMeta": { + "react-native-b4a": { + "optional": true + } + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "optional": true, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/bare-events": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.8.3.tgz", + "integrity": "sha512-HdUm8EMQBLaJvGUdidNNbqpA1kYkwNcb+MYxkxCLAPJGQzlv9J0C24h8V65Z4c5GLd/JEALDvpFCQgpLJqc0zw==", + "license": "Apache-2.0", + "optional": true, + "peerDependencies": { + "bare-abort-controller": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + } + } + }, + "node_modules/bare-fs": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.1.tgz", + "integrity": "sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-events": "^2.5.4", + "bare-path": "^3.0.0", + "bare-stream": "^2.6.4", + "bare-url": "^2.2.2", + "fast-fifo": "^1.3.2" + }, + "engines": { + "bare": ">=1.16.0" + }, + "peerDependencies": { + "bare-buffer": "*" + }, + "peerDependenciesMeta": { + "bare-buffer": { + "optional": true + } + } + }, + "node_modules/bare-os": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.9.1.tgz", + "integrity": "sha512-6M5XjcnsygQNPMCMPXSK379xrJFiZ/AEMNBmFEmQW8d/789VQATvriyi5r0HYTL9TkQ26rn3kgdTG3aisbrXkQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "bare": ">=1.14.0" + } + }, + "node_modules/bare-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-3.0.0.tgz", + "integrity": "sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-os": "^3.0.1" + } + }, + "node_modules/bare-stream": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.13.1.tgz", + "integrity": "sha512-Vp0cnjYyrEC4whYTymQ+YZi6pBpfiICZO3cfRG8sy67ZNWe951urv1x4eW1BKNngw3U+3fPYb5JQvHbCtxH7Ow==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "streamx": "^2.25.0", + "teex": "^1.0.1" + }, + "peerDependencies": { + "bare-abort-controller": "*", + "bare-buffer": "*", + "bare-events": "*" + }, + "peerDependenciesMeta": { + "bare-abort-controller": { + "optional": true + }, + "bare-buffer": { + "optional": true + }, + "bare-events": { + "optional": true + } + } + }, + "node_modules/bare-url": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bare-url/-/bare-url-2.4.3.tgz", + "integrity": "sha512-Kccpc7ACfXaxfeInfqKcZtW4pT5YBn1mesc4sCsun6sRwtbJ4h+sNOaksUpYEJUKfN65YWC6Bw2OJEFiKxq8nQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-path": "^3.0.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "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", + "optional": true + }, + "node_modules/better-sqlite3": { + "version": "12.10.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.10.0.tgz", + "integrity": "sha512-CyzaZRQKyHkB2ZInfTTl2nvT33EbDpjkLEbE8/Zck3Ll6O0qqvuGdrJ45HgtH+HykRg88ITY3AdreBGN70aBSQ==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.1" + }, + "engines": { + "node": "20.x || 22.x || 23.x || 24.x || 25.x || 26.x" + } + }, + "node_modules/bignumber.js": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz", + "integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "optional": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.5", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.5.tgz", + "integrity": "sha512-3grm+/2tUOvu2cjJkvsIxrv/wVpfXQW4PsQHYm7yk4vfpu7Ekl6nEsYBoJUL6qDwZUx8wUhQ8tR2qz+ad9c9OA==", + "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.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.15.1", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "license": "MIT", + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/brace-expansion": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.6.tgz", + "integrity": "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==", + "license": "MIT", + "optional": true, + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "optional": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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", + "optional": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "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/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "optional": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", + "license": "MIT", + "optional": true + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC", + "optional": true + }, + "node_modules/cjs-module-lexer": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz", + "integrity": "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==", + "license": "MIT", + "optional": true + }, + "node_modules/claude-flow": { + "version": "3.7.0-alpha.72", + "resolved": "https://registry.npmjs.org/claude-flow/-/claude-flow-3.7.0-alpha.72.tgz", + "integrity": "sha512-BdM3G/d0XmjdYCEeNCyd6qYVORsJmFhWU68A9rMRpW0JYiM/6NEpo8+q0EfD/+LYZBWNwe8MZOZXtP1X80dwjA==", + "license": "MIT", + "dependencies": { + "@claude-flow/cli-core": "^3.7.0-alpha.5", + "@claude-flow/mcp": "^3.0.0-alpha.8", + "@claude-flow/neural": "^3.0.0-alpha.8", + "@claude-flow/shared": "^3.0.0-alpha.7", + "@noble/ed25519": "^2.1.0", + "@ruvector/rabitq-wasm": "^0.1.0", + "semver": "^7.6.0", + "zod": "^3.22.4" + }, + "bin": { + "claude-flow": "bin/cli.js" + }, + "engines": { + "node": ">=20.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ruvnet" + }, + "optionalDependencies": { + "@claude-flow/codex": "^3.0.0-alpha.8", + "@claude-flow/plugin-gastown-bridge": "^0.1.3", + "@ruvector/attention": "^0.1.3", + "@ruvector/core": "^0.1.30", + "@ruvector/router": "^0.1.30", + "@ruvector/router-linux-x64-gnu": "^0.1.30", + "@ruvector/sona": "^0.1.5", + "agentdb": "^3.0.0-alpha.14", + "agentic-flow": "^2.0.13" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "license": "MIT", + "optional": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "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==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "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", + "optional": true + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "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", + "optional": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "license": "MIT" + }, + "node_modules/cookies": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz", + "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==", + "license": "MIT", + "optional": true, + "dependencies": { + "depd": "~2.0.0", + "keygrip": "~1.1.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cors": { + "version": "2.8.6", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.6.tgz", + "integrity": "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cross-env": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-10.1.0.tgz", + "integrity": "sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw==", + "license": "MIT", + "optional": true, + "dependencies": { + "@epic-web/invariant": "^1.0.0", + "cross-spawn": "^7.0.6" + }, + "bin": { + "cross-env": "dist/bin/cross-env.js", + "cross-env-shell": "dist/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", + "license": "MIT", + "optional": true + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "license": "MIT", + "optional": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "optional": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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", + "optional": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "license": "MIT", + "optional": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "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/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz", + "integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==", + "license": "BSD-2-Clause", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "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/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT", + "optional": true + }, + "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_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "optional": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "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", + "optional": true, + "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/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "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": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT", + "optional": true + }, + "node_modules/events-universal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/events-universal/-/events-universal-1.0.1.tgz", + "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bare-events": "^2.7.0" + } + }, + "node_modules/eventsource": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz", + "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==", + "license": "MIT", + "dependencies": { + "eventsource-parser": "^3.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/eventsource-parser": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.8.tgz", + "integrity": "sha512-70QWGkr4snxr0OXLRWsFLeRBIRPuQOvt4s8QYjmUlmlkyTZkRqS7EDVRZtzU3TiyDbXSzaOeF0XUKy8PchzukQ==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/execa": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz", + "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@sindresorhus/merge-streams": "^4.0.0", + "cross-spawn": "^7.0.6", + "figures": "^6.1.0", + "get-stream": "^9.0.0", + "human-signals": "^8.0.1", + "is-plain-obj": "^4.1.0", + "is-stream": "^4.0.1", + "npm-run-path": "^6.0.0", + "pretty-ms": "^9.2.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^4.0.0", + "yoctocolors": "^2.1.1" + }, + "engines": { + "node": "^18.19.0 || >=20.5.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/express": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.2.tgz", + "integrity": "sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.5", + "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.15.1", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express-rate-limit": { + "version": "8.5.2", + "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.5.2.tgz", + "integrity": "sha512-5Kb34ipNX694DH48vN9irak1Qx30nb0PLYHXfJgw4YEjiC3ZEmZJhwOp+VfiCYwFzvFTdB9QkArYS5kXa2cx2A==", + "license": "MIT", + "dependencies": { + "ip-address": "^10.2.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/express-rate-limit" + }, + "peerDependencies": { + "express": ">= 4.11" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT", + "optional": true + }, + "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-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "license": "MIT", + "optional": true + }, + "node_modules/fast-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/figures": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz", + "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-unicode-supported": "^2.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-type": { + "version": "21.3.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.3.4.tgz", + "integrity": "sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==", + "license": "MIT", + "optional": true, + "dependencies": { + "@tokenizer/inflate": "^0.4.1", + "strtok3": "^10.3.4", + "token-types": "^6.1.1", + "uint8array-extras": "^1.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "license": "MIT", + "optional": true + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "optional": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "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.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/flatbuffers": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.12.0.tgz", + "integrity": "sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==", + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "optional": true, + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "optional": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "optional": true, + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "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": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT", + "optional": true + }, + "node_modules/fs-extra": { + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.5.tgz", + "integrity": "sha512-eKpRKAovdpZtR1WopLHxlBWvAgPny3c4gX1G5Jhwmmw4XJj0ifSD5qB5TOo8hmA0wlRKDAOAhEE1yVPgs6Fgcg==", + "license": "MIT", + "optional": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "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/fuse.js": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.3.0.tgz", + "integrity": "sha512-plz8RVjfcDedTGfVngWH1jmJvBvAwi1v2jecfDerbEnMcmOYUEEwKFTHbNoCiYyzaK2Ws8lABkTCcRSqCY1q4w==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/krisk" + } + }, + "node_modules/gaxios": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-7.1.4.tgz", + "integrity": "sha512-bTIgTsM2bWn3XklZISBTQX7ZSddGW+IO3bMdGaemHZ3tbqExMENHLx6kKZ/KlejgrMtj8q7wBItt51yegqalrA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "node-fetch": "^3.3.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/gaxios/node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/gaxios/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/gaxios/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "optional": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/gaxios/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", + "optional": true + }, + "node_modules/gcp-metadata": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-8.1.2.tgz", + "integrity": "sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "gaxios": "^7.0.0", + "google-logging-utils": "^1.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "optional": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.6.0.tgz", + "integrity": "sha512-QRbvDIbx6YklUe6RxeTeleMR0yv3cYH6PsPZHcnVn7xv7zO1BHN8r0XETu8n6Ye3Q+ahtSarc3WgtNWmehIBfA==", + "license": "MIT", + "optional": true, + "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/get-stream": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT", + "optional": true + }, + "node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "license": "BlueOak-1.0.0", + "optional": true, + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global-agent": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-4.1.3.tgz", + "integrity": "sha512-KUJEViiuFT3I97t+GYMikLPJS2Lfo/S2F+DQuBWzuzaMPnvt5yyZePzArx36fBzpGTxZjIpDbXLeySLgh+k76g==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "globalthis": "^1.0.2", + "matcher": "^4.0.0", + "semver": "^7.3.5", + "serialize-error": "^8.1.0" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/google-auth-library": { + "version": "10.6.2", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-10.6.2.tgz", + "integrity": "sha512-e27Z6EThmVNNvtYASwQxose/G57rkRuaRbQyxM2bvYLLX/GqWZ5chWq2EBoUchJbCc57eC9ArzO5wMsEmWftCw==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^7.1.4", + "gcp-metadata": "8.1.2", + "google-logging-utils": "1.1.3", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/google-logging-utils": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-1.1.3.tgz", + "integrity": "sha512-eAmLkjDjAFCVXg7A1unxHsLf961m6y17QFqXqAXGj/gVkKFrEICfStRfwUlGNfeCEjNRa32JEWOUTlYXPyyKvA==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "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==", + "license": "ISC", + "optional": true + }, + "node_modules/guid-typescript": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz", + "integrity": "sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==", + "license": "ISC", + "optional": true + }, + "node_modules/gun": { + "version": "0.2020.1241", + "resolved": "https://registry.npmjs.org/gun/-/gun-0.2020.1241.tgz", + "integrity": "sha512-rmGqLuJj4fAuZ/0lddCvXHbENPkEnBOBYpq+kXHrwQ5RdNtQ5p0Io99lD1qUXMFmtwNacQ/iqo3VTmjmMyAYZg==", + "license": "(Zlib OR MIT OR Apache-2.0)", + "optional": true, + "dependencies": { + "ws": "^7.2.1" + }, + "engines": { + "node": ">=0.8.4" + }, + "optionalDependencies": { + "@peculiar/webcrypto": "^1.1.1" + } + }, + "node_modules/gun/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "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", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "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", + "optional": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/helmet": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-7.2.0.tgz", + "integrity": "sha512-ZRiwvN089JfMXokizgqEPXsl2Guk094yExfoDXR0cBYWxtBbaSww/w+vT4WEJsBW2iTUi1GgZ6swmoug3Oy4Xw==", + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/hnswlib-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hnswlib-node/-/hnswlib-node-3.0.0.tgz", + "integrity": "sha512-fypn21qvVORassppC8/qNfZ5KAOspZpm/IbUkAtlqvbtDNnF5VVk5RWF7O5V6qwr7z+T3s1ePej6wQt5wRQ4Cg==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "bindings": "^1.5.0", + "node-addon-api": "^8.0.0" + } + }, + "node_modules/hono": { + "version": "4.12.21", + "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.21.tgz", + "integrity": "sha512-uV63apnb0kyPtAUwoWgaGh9HyIFcv8lgmzPZSiTBQAFOFGIzka5EZ1dZocmGnn0XdX0+XTqJ6Tqv7selMuGLRQ==", + "license": "MIT", + "engines": { + "node": ">=16.9.0" + } + }, + "node_modules/http-assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", + "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", + "license": "MIT", + "optional": true, + "dependencies": { + "deep-equal": "~1.0.1", + "http-errors": "~1.8.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-assert/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-assert/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "license": "MIT", + "optional": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-assert/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "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/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.5.tgz", + "integrity": "sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/http-proxy": "^1.17.15", + "debug": "^4.3.6", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.3", + "is-plain-object": "^5.0.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-middleware/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", + "optional": true + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "optional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/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", + "optional": true + }, + "node_modules/human-readable-ids": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/human-readable-ids/-/human-readable-ids-1.0.4.tgz", + "integrity": "sha512-h1zwThTims8A/SpqFGWyTx+jG1+WRMJaEeZgbtPGrIpj2AZjsOgy8Y+iNzJ0yAyN669Q6F02EK66WMWcst+2FA==", + "license": "Apache2", + "optional": true, + "dependencies": { + "knuth-shuffle": "^1.0.0" + } + }, + "node_modules/human-signals": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz", + "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==", + "license": "Apache-2.0", + "optional": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/iceberg-js": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/iceberg-js/-/iceberg-js-0.8.1.tgz", + "integrity": "sha512-1dhVQZXhcHje7798IVM+xoo/1ZdVfzOMIc8/rgVSijRK38EDqOJoGula9N/8ZI5RD8QTxNQtK/Gozpr+qUqRRA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=20.0.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/import-in-the-middle": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.15.0.tgz", + "integrity": "sha512-bpQy+CrsRmYmoPMAE/0G33iwRqwW4ouqdRg8jgbH3aKuCtOc8lxgmYXg2dMM92CRiGP660EtBcymH/eVUpCSaA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "acorn": "^8.14.0", + "acorn-import-attributes": "^1.9.5", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" + } + }, + "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/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC", + "optional": true + }, + "node_modules/inquirer": { + "version": "9.3.8", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.3.8.tgz", + "integrity": "sha512-pFGGdaHrmRKMh4WoDDSowddgjT1Vkl90atobmTeSmcPGdYiwikch/m/Ef5wRaiamHejtw0cUUMMerzDUXCci2w==", + "license": "MIT", + "optional": true, + "dependencies": { + "@inquirer/external-editor": "^1.0.2", + "@inquirer/figures": "^1.0.3", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "1.0.0", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/ip-address": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", + "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", + "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-arrayish": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.4.tgz", + "integrity": "sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==", + "license": "MIT", + "optional": true + }, + "node_modules/is-core-module": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", + "license": "MIT", + "optional": true, + "dependencies": { + "hasown": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + }, + "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.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.3.tgz", + "integrity": "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "bignumber.js": "^9.0.0" + } + }, + "node_modules/json-schema-to-ts": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/json-schema-to-ts/-/json-schema-to-ts-3.1.1.tgz", + "integrity": "sha512-+DWg8jCJG2TEnpy7kOm/7/AxaYoaRbjVB4LFZLySZlWn8exGs3A4OLJR966cVvU26N7X9TWxl+Jsw7dzAqKT6g==", + "license": "MIT", + "optional": true, + "dependencies": { + "@babel/runtime": "^7.18.3", + "ts-algebra": "^2.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "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/jsonfile": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", + "license": "MIT", + "dependencies": { + "jws": "^4.0.1", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/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/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "license": "MIT", + "dependencies": { + "jwa": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keygrip": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", + "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "tsscmp": "1.0.6" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/knuth-shuffle": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/knuth-shuffle/-/knuth-shuffle-1.0.8.tgz", + "integrity": "sha512-IdC4Hpp+mx53zTt6VAGsAtbGM0g4BV9fP8tTcviCosSwocHcRDw9uG5Rnv6wLWckF4r72qeXFoK9NkvV1gUJCQ==", + "license": "(MIT OR Apache-2.0)", + "optional": true + }, + "node_modules/koa": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/koa/-/koa-3.2.0.tgz", + "integrity": "sha512-TrM4/tnNY7uJ1aW55sIIa+dqBvc4V14WRIAlGcWat9wV5pRS9Wr5Zk2ZTjQP1jtfIHDoHiSbPuV08P0fUZo2pg==", + "license": "MIT", + "optional": true, + "dependencies": { + "accepts": "^1.3.8", + "content-disposition": "~1.0.1", + "content-type": "^1.0.5", + "cookies": "~0.9.1", + "delegates": "^1.0.0", + "destroy": "^1.2.0", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "fresh": "~0.5.2", + "http-assert": "^1.5.0", + "http-errors": "^2.0.0", + "koa-compose": "^4.1.0", + "mime-types": "^3.0.1", + "on-finished": "^2.4.1", + "parseurl": "^1.3.3", + "statuses": "^2.0.1", + "type-is": "^2.0.1", + "vary": "^1.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/koa-compose": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", + "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", + "license": "MIT", + "optional": true + }, + "node_modules/koa-router": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/koa-router/-/koa-router-14.0.0.tgz", + "integrity": "sha512-Ue8f/PRsLLNm6b7y+eS6xkqvsG2xH11d2VB1HPcfdfW6p5736kCHf2pXaq8q9XPQ01x0Dk7V/P5Il9pe+tGTxA==", + "deprecated": "Please use @koa/router instead, starting from v9! ", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^4.4.1", + "http-errors": "^2.0.0", + "koa-compose": "^4.1.0", + "path-to-regexp": "^8.2.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/koa-router/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/koa-router/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", + "optional": true + }, + "node_modules/koa-router/node_modules/path-to-regexp": { + "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", + "optional": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/koa/node_modules/content-disposition": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.1.tgz", + "integrity": "sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/koa/node_modules/media-typer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-1.1.0.tgz", + "integrity": "sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/koa/node_modules/mime-db": { + "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", + "optional": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/koa/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "optional": true, + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/koa/node_modules/type-is": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz", + "integrity": "sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==", + "license": "MIT", + "optional": true, + "dependencies": { + "content-type": "^2.0.0", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/koa/node_modules/type-is/node_modules/content-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-2.0.0.tgz", + "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT", + "optional": true + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "license": "MIT", + "optional": true + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "license": "MIT", + "optional": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/long": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz", + "integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/lru-cache": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.0.tgz", + "integrity": "sha512-5YgH9UJd7wVb9hIouI2adWpgqrrICkt070Dnj8EUY1+B4B2P9eRLPAkAAo6NICA7CEhOIeBHl46u9zSNpNu7zA==", + "license": "BlueOak-1.0.0", + "optional": true, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/matcher": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-4.0.0.tgz", + "integrity": "sha512-S6x5wmcDmsDRRU/c2dkccDwQPXoFczc5+HpQ2lON8pnvHlnvHAHj5WlLVvw6n6vNyHuVugYrFohYxbS+pvFpKQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/mcp-proxy": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/mcp-proxy/-/mcp-proxy-6.5.1.tgz", + "integrity": "sha512-N/V131Y269ns9oM2/AUMnjAcghsMEENYt0E3B+Ehc5uRVMpBX3p4tsncvQIkN2EzTE5feoQetN+qQq/4HrCa0g==", + "license": "MIT", + "optional": true, + "dependencies": { + "pipenet": "^1.3.0" + }, + "bin": { + "mcp-proxy": "dist/bin/mcp-proxy.mjs" + } + }, + "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==", + "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", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "optional": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.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" + }, + "engines": { + "node": ">=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/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "license": "BlueOak-1.0.0", + "optional": true, + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "optional": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", + "optional": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT", + "optional": true + }, + "node_modules/module-details-from-path": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz", + "integrity": "sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==", + "license": "MIT", + "optional": true + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", + "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "license": "ISC", + "optional": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT", + "optional": true + }, + "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-abi": { + "version": "3.92.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.92.0.tgz", + "integrity": "sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-addon-api": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.7.0.tgz", + "integrity": "sha512-9MdFxmkKaOYVTV+XVRG8ArDwwQ77XIgIPyKASB1k3JPq3M8fGQQQE3YpMOrKm6g//Ktx8ivZr8xo1Qmtqub+GA==", + "license": "MIT", + "optional": true, + "engines": { + "node": "^18 || ^20 || >= 21" + } + }, + "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", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "optional": true, + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "license": "MIT", + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/npm-run-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", + "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==", + "license": "MIT", + "optional": true, + "dependencies": { + "path-key": "^4.0.0", + "unicorn-magic": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "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/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "optional": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/onnx-proto": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/onnx-proto/-/onnx-proto-4.0.4.tgz", + "integrity": "sha512-aldMOB3HRoo6q/phyB6QRQxSt895HNNw82BNyZ2CMh4bjeKv7g/c+VpAFtJuEMVfYLMbRx61hbuqnKceLeDcDA==", + "license": "MIT", + "optional": true, + "dependencies": { + "protobufjs": "^6.8.8" + } + }, + "node_modules/onnx-proto/node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/onnx-proto/node_modules/protobufjs": { + "version": "6.11.6", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.6.tgz", + "integrity": "sha512-k8BHqgPBOtrlougZZqF2uUk5Z7bN8f0wj+3e8M3hvtSv0NBAz4VBy5f6R5Nxq/l+i7mRFTgNZb2trxqTpHNY/A==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, + "node_modules/onnxruntime-common": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.14.0.tgz", + "integrity": "sha512-3LJpegM2iMNRX2wUmtYfeX/ytfOzNwAWKSq1HbRrKc9+uqG/FsEA0bbKZl1btQeZaXhC26l44NWpNUeXPII7Ew==", + "license": "MIT", + "optional": true + }, + "node_modules/onnxruntime-node": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/onnxruntime-node/-/onnxruntime-node-1.14.0.tgz", + "integrity": "sha512-5ba7TWomIV/9b6NH/1x/8QEeowsb+jBEvFzU6z0T4mNsFwdPqXeFUM7uxC6QeSRkEbWu3qEB0VMjrvzN/0S9+w==", + "license": "MIT", + "optional": true, + "os": [ + "win32", + "darwin", + "linux" + ], + "dependencies": { + "onnxruntime-common": "~1.14.0" + } + }, + "node_modules/onnxruntime-web": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.14.0.tgz", + "integrity": "sha512-Kcqf43UMfW8mCydVGcX9OMXI2VN17c0p6XvR7IPSZzBf/6lteBzXHvcEVWDPmCKuGombl997HgLqj91F11DzXw==", + "license": "MIT", + "optional": true, + "dependencies": { + "flatbuffers": "^1.12.0", + "guid-typescript": "^1.0.9", + "long": "^4.0.0", + "onnx-proto": "^4.0.4", + "onnxruntime-common": "~1.14.0", + "platform": "^1.3.6" + } + }, + "node_modules/onnxruntime-web/node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "license": "Apache-2.0", + "optional": true + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/parse-ms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz", + "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==", + "license": "MIT", + "optional": true, + "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", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT", + "optional": true + }, + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", + "license": "BlueOak-1.0.0", + "optional": true, + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz", + "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pipenet": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/pipenet/-/pipenet-1.4.2.tgz", + "integrity": "sha512-mPPqygXr7ccwImeaa8zReY9GubH/1r+kBNfqPVfKREQ1s8bKE3XlOqBMONxJAW4d3ZBNGzP9AZp9Axnhi5uOyw==", + "optional": true, + "dependencies": { + "axios": "^1.7.3", + "debug": "^4.3.6", + "human-readable-ids": "^1.0.4", + "koa": "^3.1.1", + "koa-router": "^14.0.0", + "pump": "^3.0.3", + "tldjs": "^2.3.2", + "yargs": "^18.0.0" + }, + "bin": { + "pipenet": "dist/cli.js" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "node_modules/pipenet/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/pipenet/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==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pipenet/node_modules/cliui": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", + "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "license": "ISC", + "optional": true, + "dependencies": { + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/pipenet/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/pipenet/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==", + "license": "MIT", + "optional": true + }, + "node_modules/pipenet/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", + "optional": true + }, + "node_modules/pipenet/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==", + "license": "MIT", + "optional": true, + "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/pipenet/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==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/pipenet/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==", + "license": "MIT", + "optional": true, + "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/pipenet/node_modules/yargs": { + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", + "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "license": "MIT", + "optional": true, + "dependencies": { + "cliui": "^9.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "string-width": "^7.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^22.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/pipenet/node_modules/yargs-parser": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", + "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "license": "ISC", + "optional": true, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=23" + } + }, + "node_modules/pkce-challenge": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz", + "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==", + "license": "MIT", + "engines": { + "node": ">=16.20.0" + } + }, + "node_modules/platform": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", + "license": "MIT", + "optional": true + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pretty-ms": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz", + "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "parse-ms": "^4.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/protobufjs": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.6.0.tgz", + "integrity": "sha512-LtESOsMPTZgyYtwxhvdgdjGL0HmXEaRA/hVD6sol4zA60hVXXXP/SGmxnqDbgGE8gy7pYex7cym+5vYPcmaXBQ==", + "hasInstallScript": true, + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.5", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.1", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.2", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.1", + "@types/node": ">=13.7.0", + "long": "^5.3.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "license": "MIT", + "optional": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/pvutils": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.5.tgz", + "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/qs": { + "version": "6.15.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz", + "integrity": "sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "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.1", + "iconv-lite": "~0.7.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "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/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "optional": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.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/require-in-the-middle": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.5.2.tgz", + "integrity": "sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "debug": "^4.3.5", + "module-details-from-path": "^1.0.3", + "resolve": "^1.22.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/require-in-the-middle/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/require-in-the-middle/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", + "optional": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT", + "optional": true + }, + "node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "license": "MIT", + "optional": true, + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "license": "MIT", + "optional": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 4" + } + }, + "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", + "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/router/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": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/router/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/router/node_modules/path-to-regexp": { + "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/run-async": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/ruvector": { + "version": "0.1.100", + "resolved": "https://registry.npmjs.org/ruvector/-/ruvector-0.1.100.tgz", + "integrity": "sha512-goVV/mB28sQmai+eU1DMAtZEg2qQSKes3NtIHjyjN53hHWqwCdIyjZwBEd1WKDysL9mJ4CnSCVC9uaJyStzBIA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@modelcontextprotocol/sdk": "^1.0.0", + "@ruvector/attention": "^0.1.3", + "@ruvector/core": "^0.1.25", + "@ruvector/gnn": "^0.1.22", + "@ruvector/sona": "^0.1.4", + "chalk": "^4.1.2", + "commander": "^11.1.0", + "ora": "^5.4.1" + }, + "bin": { + "ruvector": "bin/cli.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@ruvector/rvf": "^0.1.0" + } + }, + "node_modules/ruvector-attention-wasm": { + "version": "0.1.32", + "resolved": "https://registry.npmjs.org/ruvector-attention-wasm/-/ruvector-attention-wasm-0.1.32.tgz", + "integrity": "sha512-2pt5dhcpHXXhNEVXeeDPzshXlGo3X8vWVuMfLA+fjUuXYFsW2YYrmUSgHOvEuqVxxow2Rgn9sZpxWQSBuT470g==", + "license": "MIT OR Apache-2.0", + "optional": true, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/ruvector-core-darwin-arm64": { + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/ruvector-core-darwin-arm64/-/ruvector-core-darwin-arm64-0.1.29.tgz", + "integrity": "sha512-gjZ1/J/0Nh9Mn74VdifIIkPLP/M4FqD/g+QVxWcfWcNFWhHVz+zHyxGjc6gJgrfYBquiMyP5jLfvyR3TffLanQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/ruvector-core-darwin-x64": { + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/ruvector-core-darwin-x64/-/ruvector-core-darwin-x64-0.1.29.tgz", + "integrity": "sha512-SNq2DrIBWM53qG3YSYcNV/BnBbAoJouafAADOjG3PkM8+RPrIucTeUDBavf148DNo5ZI337IS8TK1/0HpJEwFg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/ruvector-core-linux-arm64-gnu": { + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/ruvector-core-linux-arm64-gnu/-/ruvector-core-linux-arm64-gnu-0.1.29.tgz", + "integrity": "sha512-gcA2qSQD9nEeHR8pIXr5SKpQAiHMxu4EyBUwUSG4UnWOxVQnnU0l2kA/Z2NZ6B+JWLrb5+nhkkv7AaSmb8YAsg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/ruvector-core-linux-x64-gnu": { + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/ruvector-core-linux-x64-gnu/-/ruvector-core-linux-x64-gnu-0.1.29.tgz", + "integrity": "sha512-GcYCVNRbAmiXmEaMNvVnA78ZIM469H0VwP2JFGfibwiSASBgWGX3BT+mqflX+gtBynbtQqslj8XcqVdDxEkEBg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/ruvector-core-win32-x64-msvc": { + "version": "0.1.29", + "resolved": "https://registry.npmjs.org/ruvector-core-win32-x64-msvc/-/ruvector-core-win32-x64-msvc-0.1.29.tgz", + "integrity": "sha512-nqHrlUAKpTreGO87jQLtFVrQUBT/7J/dBsPD5/mV9Fet/shncN0QMij7YqBTrlhR9qtQ2gAUGrG0zw69T60AiQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/ruvector-graph-transformer-wasm": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/ruvector-graph-transformer-wasm/-/ruvector-graph-transformer-wasm-2.0.4.tgz", + "integrity": "sha512-O2u2OnE89YCa/0y2wmo6EkxXOFAPagDcjZ2HSx8kV7rvDLsgk+CQgoYGk4L/X8FM06Moiu09/P8/sWnjEv16/A==", + "license": "MIT", + "optional": true + }, + "node_modules/ruvector-onnx-embeddings-wasm": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ruvector-onnx-embeddings-wasm/-/ruvector-onnx-embeddings-wasm-0.1.2.tgz", + "integrity": "sha512-U1Xx7BivMkbAns+bXl1J3b2bey4HZzdOwL3CCElxkNXKqP5BMZDYiVnzHmcaYwQ74Qg3iPNpPH5LHR4UOoUMIQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/ruvector/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ruvector/node_modules/commander": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=16" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "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", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.0.tgz", + "integrity": "sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "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/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/serialize-error": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz", + "integrity": "sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "license": "(MIT OR CC0-1.0)", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/sharp": { + "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.2", + "node-addon-api": "^6.1.0", + "prebuild-install": "^7.1.1", + "semver": "^7.5.4", + "simple-get": "^4.0.1", + "tar-fs": "^3.0.4", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/sharp/node_modules/node-addon-api": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", + "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", + "license": "MIT", + "optional": true + }, + "node_modules/sharp/node_modules/tar-fs": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.1.2.tgz", + "integrity": "sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==", + "license": "MIT", + "optional": true, + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^4.0.1", + "bare-path": "^3.0.0" + } + }, + "node_modules/sharp/node_modules/tar-stream": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.2.0.tgz", + "integrity": "sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==", + "license": "MIT", + "optional": true, + "dependencies": { + "b4a": "^1.6.4", + "bare-fs": "^4.5.5", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==", + "license": "BSD-2-Clause", + "optional": true + }, + "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==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.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.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC", + "optional": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "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", + "optional": true + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "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", + "optional": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.4.tgz", + "integrity": "sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/sql.js": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/sql.js/-/sql.js-1.14.1.tgz", + "integrity": "sha512-gcj8zBWU5cFsi9WUP+4bFNXAyF1iRpA3LLyS/DP5xlrNzGmPIizUeBggKa8DbDwdqaKwUcTEnChtd2grWo/x/A==", + "license": "MIT" + }, + "node_modules/statuses": { + "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/streamx": { + "version": "2.25.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.25.0.tgz", + "integrity": "sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==", + "license": "MIT", + "optional": true, + "dependencies": { + "events-universal": "^1.0.0", + "fast-fifo": "^1.3.2", + "text-decoder": "^1.1.0" + } + }, + "node_modules/strict-event-emitter-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-event-emitter-types/-/strict-event-emitter-types-2.0.0.tgz", + "integrity": "sha512-Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA==", + "license": "ISC", + "optional": true + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "optional": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz", + "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strtok3": { + "version": "10.3.5", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.5.tgz", + "integrity": "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "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", + "optional": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "license": "MIT", + "optional": true, + "dependencies": { + "streamx": "^2.12.5" + } + }, + "node_modules/text-decoder": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.7.tgz", + "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/tiktoken": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/tiktoken/-/tiktoken-1.0.22.tgz", + "integrity": "sha512-PKvy1rVF1RibfF3JlXBSP0Jrcw2uq3yXdgcEXtKTYn3QJ/cBRBHDnrJ5jHky+MENZ6DIPwNUGWpkVx+7joCpNA==", + "license": "MIT", + "optional": true + }, + "node_modules/tldjs": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/tldjs/-/tldjs-2.3.2.tgz", + "integrity": "sha512-EORDwFMSZKrHPUVDhejCMDeAovRS5d8jZKiqALFiPp3cjKjEldPkxBY39ZSx3c45awz3RpKwJD1cCgGxEfy8/A==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "punycode": "^2.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-types": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz", + "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==", + "license": "MIT", + "optional": true, + "dependencies": { + "@borewit/text-codec": "^0.2.1", + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/toml": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/toml/-/toml-3.0.0.tgz", + "integrity": "sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==", + "license": "MIT", + "optional": true + }, + "node_modules/ts-algebra": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-algebra/-/ts-algebra-2.0.0.tgz", + "integrity": "sha512-FPAhNPFMrkwz76P7cdjdmiShwMynZYN6SgOujD1urY4oNm80Ou9oMdmbR45LotcKOXoy7wSmHkRFE6Mxbrhefw==", + "license": "MIT", + "optional": true + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD", + "optional": true + }, + "node_modules/tsscmp": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", + "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.6.x" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/uint8array-extras": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", + "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ulid": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/ulid/-/ulid-3.0.2.tgz", + "integrity": "sha512-yu26mwteFYzBAot7KVMqFGCVpsF6g8wXfJzQUHvu1no3+rRRSFcSV2nKeYvNPLD2J4b08jYBDhHUjeH0ygIl9w==", + "license": "MIT", + "optional": true, + "bin": { + "ulid": "dist/cli.js" + } + }, + "node_modules/undici": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.25.0.tgz", + "integrity": "sha512-xXnp4kTyor2Zq+J1FfPI6Eq3ew5h6Vl0F/8d9XU5zZQf1tX9s2Su1/3PiMmUANFULpmksxkClamIZcaUqryHsQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "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==", + "license": "MIT", + "optional": true + }, + "node_modules/unicorn-magic": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", + "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uri-templates": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/uri-templates/-/uri-templates-0.2.0.tgz", + "integrity": "sha512-EWkjYEN0L6KOfEoOH6Wj4ghQqU7eBZMJqRHQnxQAq+dSEzRPClkWjf8557HkWQXF6BrAUoLSAyy9i3RVTliaNg==", + "license": "http://geraintluff.github.io/tv4/LICENSE.txt", + "optional": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT", + "optional": true + }, + "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/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "license": "MIT", + "optional": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/webcrypto-core": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.9.2.tgz", + "integrity": "sha512-gsXecm82UQNlTBURJGuqOWy1Ww08S3kZUcr3aOJS02Pk0xLtkfeUAVC0u0xhgdonFme80edSJUIJyuvL/7250Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "@peculiar/asn1-schema": "^2.7.0", + "@peculiar/json-schema": "^1.1.12", + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "optional": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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.20.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.1.tgz", + "integrity": "sha512-It4dO0K5v//JtTXuPkfEOaI3uUN87iYPnqo/ZzqCoG3g8uhA66QUMs/SrM0YK7/NAu+r4LMh/9dq2A7k+rHs+w==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.9.0.tgz", + "integrity": "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==", + "license": "ISC", + "optional": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "optional": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yoctocolors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz", + "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "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.25.28 || ^4" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..f8c2f04 --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "claude-flow": "^3.7.0-alpha.72" + } +} diff --git a/style.css b/style.css new file mode 100644 index 0000000..05f72fe --- /dev/null +++ b/style.css @@ -0,0 +1,1993 @@ +/* ========================================================================== + DESIGN TOKENS & SYSTEM ROOT + ========================================================================== */ +:root { + --font-primary: 'Outfit', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + + /* Color Palette */ + --color-bg-dark: #070b12; + --color-bg-light: #16222f; + + --color-primary: #00b4d8; + --color-primary-dark: #0077b6; + --color-secondary: #52b788; + --color-accent: #e9c46a; + + --color-danger: #ff5c8a; + --color-danger-dark: #ff0054; + --color-warning: #f4a261; + --color-warning-dark: #e76f51; + + --color-text: #f8f9fa; + --color-text-muted: #a0aec0; + + /* Glassmorphism */ + --glass-bg: rgba(22, 34, 47, 0.7); + --glass-bg-accent: rgba(0, 180, 216, 0.1); + --glass-border: rgba(255, 255, 255, 0.08); + --glass-border-accent: rgba(0, 180, 216, 0.3); + --glass-shadow: 0 10px 30px 0 rgba(0, 0, 0, 0.4); + --glass-blur: blur(12px) saturate(180%); + + /* Animation Timers */ + --transition-speed: 0.3s; +} + +/* ========================================================================== + BASE & LAYOUT STYLES (MOBILE-FIRST FRAME) + ========================================================================== */ +* { + box-sizing: border-box; + margin: 0; + padding: 0; + -webkit-tap-highlight-color: transparent; + user-select: none; +} + +body { + font-family: var(--font-primary); + background-color: var(--color-bg-dark); + color: var(--color-text); + min-height: 100vh; + min-height: 100dvh; + display: flex; + justify-content: center; + align-items: center; + overflow: hidden; + padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left); +} + +/* Standard Mobile Frame on Desktop, full screen on Mobile */ +.app-frame { + position: relative; + width: 100%; + max-width: 480px; + height: 100vh; + height: 100dvh; + background-color: var(--color-bg-dark); + overflow: hidden; + display: flex; + flex-direction: column; + box-shadow: 0 0 40px rgba(0, 0, 0, 0.8); + border-left: 1px solid rgba(255, 255, 255, 0.05); + border-right: 1px solid rgba(255, 255, 255, 0.05); +} + +@media (min-width: 481px) { + .app-frame { + height: 90vh; + max-height: 850px; + border-radius: 28px; + border: 2px solid rgba(255, 255, 255, 0.08); + } +} + +/* ========================================================================== + GAME SCREENS STRUCTURE + ========================================================================== */ +.game-screen { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: none; + flex-direction: column; + opacity: 0; + transition: opacity var(--transition-speed) ease-in-out; + z-index: 1; +} + +.game-screen.active { + display: flex; + opacity: 1; + z-index: 10; +} + +.hidden { + display: none !important; +} + +/* ========================================================================== + GLASSMORPHISM & GENERAL STYLES + ========================================================================== */ +.glass-panel { + background: var(--glass-bg); + backdrop-filter: var(--glass-blur); + -webkit-backdrop-filter: var(--glass-blur); + border: 1px solid var(--glass-border); + border-radius: 20px; + box-shadow: var(--glass-shadow); + padding: 20px; +} + +.text-center { text-align: center; } +.text-accent { color: var(--color-accent); } +.text-success { color: var(--color-secondary); } +.text-danger { color: var(--color-danger); } +.text-warning { color: var(--color-warning); } +.text-white { color: #ffffff; } + +/* Buttons */ +button { + font-family: var(--font-primary); + font-weight: 600; + border: none; + cursor: pointer; + outline: none; + transition: all 0.2s cubic-bezier(0.175, 0.885, 0.32, 1.275); +} + +button:active { + transform: scale(0.95); +} + +.btn-primary { + background: linear-gradient(135deg, var(--color-primary), var(--color-primary-dark)); + color: #ffffff; + padding: 14px 28px; + border-radius: 12px; + font-size: 1.1rem; + box-shadow: 0 4px 15px rgba(0, 180, 216, 0.3); +} + +.btn-primary:hover { + box-shadow: 0 6px 20px rgba(0, 180, 216, 0.5); + filter: brightness(1.1); +} + +.btn-primary-mini { + background: linear-gradient(135deg, var(--color-primary), var(--color-primary-dark)); + color: #ffffff; + padding: 8px 16px; + border-radius: 8px; + font-size: 0.9rem; +} + +.btn-secondary-text { + background: transparent; + color: var(--color-primary); + font-size: 1rem; + padding: 10px; +} + +.btn-text { + background: transparent; + color: var(--color-text-muted); + font-size: 0.9rem; + padding: 5px; +} + +.btn-close-text { + background: transparent; + color: var(--color-text); + font-size: 1.5rem; + border-radius: 50%; + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; +} + +.btn-close-text:hover { + background: rgba(255, 255, 255, 0.1); +} + +.btn-pulse { + animation: pulse-button 2s infinite; +} + +@keyframes pulse-button { + 0% { transform: scale(1); box-shadow: 0 4px 15px rgba(0, 180, 216, 0.3); } + 50% { transform: scale(1.03); box-shadow: 0 4px 25px rgba(0, 180, 216, 0.6); } + 100% { transform: scale(1); box-shadow: 0 4px 15px rgba(0, 180, 216, 0.3); } +} + +/* Screen HUD general */ +.screen-header { + display: flex; + justify-content: space-between; + padding: 20px 20px 15px; + z-index: 10; +} + +.hud-item { + display: flex; + flex-direction: column; +} + +.hud-label { + font-size: 0.75rem; + color: var(--color-text-muted); + text-transform: uppercase; + letter-spacing: 0.05em; +} + +.hud-value { + font-size: 1.2rem; + font-weight: 800; +} + +/* ========================================================================== + 1. START / ONBOARDING SCREEN STYLING + ========================================================================== */ +#screen-start { + background: linear-gradient(135deg, #0b132b, #1c2541, #070b12); + justify-content: space-between; + padding: 40px 20px 20px; + overflow-y: auto; +} + +.header-logo { + text-align: center; + margin-bottom: 20px; +} + +.logo-turtle-svg { + width: 90px; + height: 90px; + animation: logo-swim 4s ease-in-out infinite; +} + +@keyframes logo-swim { + 0%, 100% { transform: translateY(0) rotate(0deg); } + 50% { transform: translateY(-8px) rotate(3deg); } +} + +.app-title { + font-size: 2.2rem; + font-weight: 800; + background: linear-gradient(135deg, var(--color-text), var(--color-primary)); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + margin-top: 10px; +} + +.app-subtitle { + font-size: 0.95rem; + color: var(--color-primary); + text-transform: uppercase; + letter-spacing: 0.15em; + margin-top: 2px; +} + +.onboard-card { + display: flex; + flex-direction: column; + gap: 15px; + margin-bottom: 20px; +} + +.intro-text { + font-size: 0.95rem; + line-height: 1.5; + color: var(--color-text-muted); +} + +.intro-action { + font-size: 0.9rem; +} + +.species-selector { + display: flex; + flex-direction: column; + gap: 12px; + margin-bottom: 5px; +} + +.species-option input[type="radio"] { + display: none; +} + +.species-card { + display: flex; + align-items: center; + gap: 15px; + padding: 12px 15px; + border-radius: 12px; + background: rgba(255, 255, 255, 0.03); + border: 1px solid rgba(255, 255, 255, 0.05); + transition: all var(--transition-speed) ease; +} + +.species-icon { + font-size: 1.8rem; + background: rgba(255, 255, 255, 0.05); + border-radius: 10px; + width: 44px; + height: 44px; + display: flex; + align-items: center; + justify-content: center; + transition: all var(--transition-speed) ease; +} + +.species-details h3 { + font-size: 1rem; + font-weight: 700; +} + +.species-diet { + font-size: 0.75rem; + color: var(--color-primary); + font-weight: 600; +} + +.species-desc { + font-size: 0.75rem; + color: var(--color-text-muted); + line-height: 1.3; + margin-top: 2px; +} + +/* Checked styling for Species Selection */ +.species-option input[type="radio"]:checked + .species-card { + background: var(--glass-bg-accent); + border-color: var(--glass-border-accent); +} + +.species-option input[type="radio"]:checked + .species-card .species-icon { + background: var(--color-primary); + transform: scale(1.08); +} + +/* ========================================================================== + 2. BEACH & NEST STAGE STYLING + ========================================================================== */ +#screen-beach { + background: linear-gradient(to bottom, #070913 0%, #16182c 40%, #2f2a41 80%, #6e483b 100%); +} + +.beach-area { + position: relative; + flex: 1; + overflow: hidden; + cursor: pointer; + /* Sandy shore look */ + background: radial-gradient(circle at bottom, #b48a6a 0%, #3e334a 100%); + border-top: 1px solid rgba(255, 255, 255, 0.05); +} + +/* Old simple wave bar replaced by .tide-layer SVG; keep keyframe for legacy refs */ +@keyframes beach-wave { + 0% { transform: translateY(-5px) scaleY(0.9); opacity: 0.7; } + 100% { transform: translateY(5px) scaleY(1.1); opacity: 0.9; } +} + +/* Nest */ +.nest-site { + position: absolute; + bottom: 60px; + left: 50%; + transform: translateX(-50%); + text-align: center; + z-index: 5; +} + +.nest-mound { + width: 80px; + height: 35px; + background: #926d52; + border-radius: 50%; + box-shadow: inset 0 3px 10px rgba(0,0,0,0.4), 0 4px 10px rgba(0,0,0,0.3); + margin: 0 auto; +} + +.nest-label { + font-size: 0.65rem; + color: rgba(255, 255, 255, 0.6); + font-weight: 800; + letter-spacing: 0.1em; + margin-top: 5px; +} + +.eggs-visual { + position: absolute; + top: 8px; + left: 50%; + transform: translateX(-50%); + display: flex; + gap: 2px; + pointer-events: none; +} + +.egg { + width: 14px; + height: 16px; + background: #fdfdfd; + border-radius: 50% 50% 50% 50% / 60% 60% 40% 40%; + box-shadow: inset -2px -2px 4px rgba(0,0,0,0.1), 1px 1px 2px rgba(0,0,0,0.2); + transform: rotate(15deg); +} + +.egg:nth-child(2) { transform: rotate(-25deg) translate(3px, -3px); } +.egg:nth-child(3) { transform: rotate(5deg) translate(-3px, 2px); } + +/* Beach Trash Can Zone */ +.beach-trash-can-zone { + position: absolute; + bottom: 20px; + right: 20px; + width: 70px; + height: 70px; + border-radius: 50%; + background: var(--glass-bg); + border: 2px dashed rgba(255, 255, 255, 0.2); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + z-index: 10; + box-shadow: var(--glass-shadow); + transition: all var(--transition-speed) ease; +} + +.beach-trash-can-zone.drag-hover { + transform: scale(1.15); + border-color: var(--color-secondary); + background: rgba(82, 183, 136, 0.15); +} + +.trash-icon { font-size: 1.4rem; } +.trash-label { font-size: 0.6rem; color: var(--color-text-muted); font-weight: 600; text-align: center; } + +/* Beach tutorial and feedback */ +.game-tutorial-bubble { + position: absolute; + top: 50px; + left: 20px; + right: 20px; + background: rgba(11, 19, 43, 0.95); + border: 1px solid var(--glass-border-accent); + border-radius: 12px; + padding: 12px 15px; + z-index: 15; + box-shadow: 0 10px 25px rgba(0,0,0,0.5); + display: flex; + flex-direction: column; + gap: 10px; + animation: bounce-in 0.5s cubic-bezier(0.175, 0.885, 0.32, 1.275); +} + +@keyframes bounce-in { + 0% { transform: translateY(20px) scale(0.9); opacity: 0; } + 100% { transform: translateY(0) scale(1); opacity: 1; } +} + +.game-tutorial-bubble p { + font-size: 0.85rem; + line-height: 1.4; +} + +.beach-footer { + padding: 20px; + border-radius: 20px 20px 0 0; + display: flex; + flex-direction: column; + gap: 12px; + z-index: 10; +} + +.progress-bar-container { + display: flex; + flex-direction: column; + gap: 6px; +} + +.progress-bar-label { + font-size: 0.75rem; + color: var(--color-text-muted); +} + +.progress-bar-bg { + width: 100%; + height: 8px; + background: rgba(255, 255, 255, 0.1); + border-radius: 4px; + overflow: hidden; +} + +.progress-bar-fill { + height: 100%; + background: var(--color-primary); + transition: width 0.1s linear; +} + +.progress-bar-fill.warning { + background: var(--color-warning); +} + +.action-feedback-text { + font-size: 0.85rem; + text-align: center; + font-weight: 600; + color: var(--color-text); + min-height: 20px; +} + +/* Light Pollution warnings */ +.light-alert-card { + position: absolute; + top: 15px; + left: 20px; + right: 20px; + background: rgba(231, 111, 81, 0.95); + border-radius: 10px; + padding: 10px 15px; + display: flex; + align-items: center; + gap: 12px; + z-index: 15; + box-shadow: 0 8px 20px rgba(0,0,0,0.3); +} + +.light-warning-icon { font-size: 1.4rem; } +.light-warning-text h5 { font-size: 0.85rem; color: #ffffff; } +.light-warning-text p { font-size: 0.75rem; color: rgba(255,255,255,0.9); } + +/* Draggable / Clickable Hazards */ +.beach-trash-item { + position: absolute; + font-size: 1.8rem; + cursor: grab; + z-index: 8; + filter: drop-shadow(0 2px 4px rgba(0,0,0,0.4)); + transition: transform 0.1s ease; +} + +.beach-trash-item:active { + cursor: grabbing; + transform: scale(1.2); +} + +.beach-hole-item { + position: absolute; + width: 44px; + height: 25px; + background: rgba(0, 0, 0, 0.5); + border: 2px solid #5a4231; + border-radius: 50%; + box-shadow: inset 0 2px 8px rgba(0,0,0,0.8); + cursor: pointer; + z-index: 7; +} + +.beach-hole-item.filling { + transform: scale(0.6); + opacity: 0.5; + transition: all 0.2s ease; +} + +.beach-predator-item { + position: absolute; + font-size: 2rem; + cursor: pointer; + z-index: 9; + filter: drop-shadow(0 4px 6px rgba(0,0,0,0.4)); + transition: all 0.3s ease; +} + +.predator-scared { + transform: scale(1.4) translateY(-30px); + opacity: 0; + pointer-events: none; +} + +.beach-light-source { + position: absolute; + top: 60px; + width: 50px; + height: 90px; + cursor: pointer; + z-index: 8; +} + +.light-pole { + position: absolute; + left: 22px; + top: 15px; + width: 6px; + height: 75px; + background: #334155; +} + +.light-bulb { + position: absolute; + left: 15px; + top: 0; + width: 20px; + height: 20px; + border-radius: 50%; + background: #fef08a; + box-shadow: 0 0 15px #fef08a; +} + +.light-beam { + position: absolute; + top: 20px; + left: -50px; + width: 150px; + height: 300px; + background: fill; + background: linear-gradient(to bottom, rgba(254, 240, 138, 0.4), transparent); + clip-path: polygon(33% 0%, 66% 0%, 100% 100%, 0% 100%); + pointer-events: none; +} + +.beach-light-source.off .light-bulb { + background: #64748b; + box-shadow: none; +} + +.beach-light-source.off .light-beam { + display: none; +} + +/* Hatchling crawling */ +.hatchling-crawler { + position: absolute; + width: 24px; + height: 24px; + pointer-events: none; + z-index: 6; + transition: left 0.1s linear, top 0.1s linear; +} + +.hatchling-crawler-svg { + width: 100%; + height: 100%; + animation: hatchling-waddle 0.3s ease-in-out infinite alternate; +} + +@keyframes hatchling-waddle { + 0% { transform: rotate(-5deg); } + 100% { transform: rotate(5deg); } +} + +/* ========================================================================== + 3. OCEAN TAMAGOTCHI CARE STAGE STYLING + ========================================================================== */ +#screen-ocean { + background: linear-gradient(180deg, #102a43 0%, #014f86 40%, #012a4a 100%); +} + +.ocean-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 20px 20px 10px; + z-index: 10; +} + +.turtle-identity { + display: flex; + align-items: center; + gap: 10px; +} + +#turtle-avatar-indicator { + font-size: 2rem; + background: rgba(255, 255, 255, 0.05); + width: 46px; + height: 46px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 50%; + border: 1px solid rgba(255, 255, 255, 0.1); +} + +.turtle-identity h2 { + font-size: 1.1rem; + font-weight: 800; +} + +.species-subtext { + font-size: 0.7rem; + color: var(--color-primary); + font-weight: 600; +} + +.btn-edit-icon { + background: transparent; + font-size: 0.9rem; + opacity: 0.6; + padding: 5px; +} + +.btn-edit-icon:hover { opacity: 1; } + +.turtle-age-score { + text-align: right; +} + +/* HUD Stat Bars */ +.stats-grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 10px; + padding: 0 20px 10px; + z-index: 10; +} + +.stat-bar-card { + background: rgba(0, 0, 0, 0.2); + border: 1px solid rgba(255, 255, 255, 0.05); + border-radius: 12px; + padding: 8px 12px; +} + +.stat-bar-header { + display: flex; + justify-content: space-between; + font-size: 0.75rem; + font-weight: 600; + margin-bottom: 5px; + color: var(--color-text-muted); +} + +.stat-val { + color: var(--color-text); + font-weight: 800; +} + +.stat-progress-bg { + width: 100%; + height: 6px; + background: rgba(255, 255, 255, 0.08); + border-radius: 3px; + overflow: hidden; +} + +.stat-progress-fill { + height: 100%; + border-radius: 3px; + transition: width var(--transition-speed) ease; +} + +.stat-progress-fill.health { background: var(--color-danger); } +.stat-progress-fill.hunger { background: var(--color-primary); } +.stat-progress-fill.joy { background: var(--color-secondary); } +.stat-progress-fill.clean { background: var(--color-accent); } + +/* Playpen Area */ +.ocean-playpen-container { + flex: 1; + display: flex; + flex-direction: column; +} + +.ocean-area { + position: relative; + flex: 1; + overflow: hidden; + display: flex; + justify-content: center; + align-items: center; + background: radial-gradient(circle at center, rgba(1, 79, 134, 0.5) 0%, rgba(1, 42, 74, 0.8) 100%); + border-top: 1px solid rgba(255, 255, 255, 0.05); + border-bottom: 1px solid rgba(255, 255, 255, 0.05); +} + +/* Light rays from top */ +.ocean-light-rays { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-image: + repeating-linear-gradient(45deg, rgba(255, 255, 255, 0.02) 0px, rgba(255, 255, 255, 0.02) 20px, transparent 20px, transparent 40px), + repeating-linear-gradient(-45deg, rgba(255, 255, 255, 0.02) 0px, rgba(255, 255, 255, 0.02) 20px, transparent 20px, transparent 40px); + pointer-events: none; + opacity: 0.4; + animation: ray-shimmer 15s linear infinite; +} + +@keyframes ray-shimmer { + 0% { transform: scale(1.0) rotate(0deg); } + 50% { transform: scale(1.1) rotate(2deg); } + 100% { transform: scale(1.0) rotate(0deg); } +} + +/* Water floating dust */ +.ocean-water-particles { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + pointer-events: none; + z-index: 1; +} + +/* Sea Turtle SVG Container & Animations */ +.sea-turtle-sprite { + width: 180px; + height: 180px; + z-index: 5; + filter: drop-shadow(0 12px 25px rgba(0, 0, 0, 0.5)); + animation: swim-body 5s ease-in-out infinite; + transform-origin: center center; + transition: transform 0.5s ease-in-out; +} + +/* Keyframes for full body movement */ +@keyframes swim-body { + 0%, 100% { transform: translateY(0) rotate(0deg); } + 33% { transform: translateY(-10px) rotate(1deg); } + 66% { transform: translateY(8px) rotate(-1deg); } +} + +/* Flippers animation */ +.fl-left { + transform-origin: 60px 100px; + animation: swim-flipper-l 2.5s ease-in-out infinite; +} + +.fl-right { + transform-origin: 140px 100px; + animation: swim-flipper-r 2.5s ease-in-out infinite; +} + +.fl-back-left { + transform-origin: 80px 150px; + animation: steer-flipper-l 5s ease-in-out infinite; +} + +.fl-back-right { + transform-origin: 120px 150px; + animation: steer-flipper-r 5s ease-in-out infinite; +} + +@keyframes swim-flipper-l { + 0%, 100% { transform: rotate(0deg); } + 50% { transform: rotate(-25deg) translateY(-2px); } +} + +@keyframes swim-flipper-r { + 0%, 100% { transform: rotate(0deg); } + 50% { transform: rotate(25deg) translateY(-2px); } +} + +@keyframes steer-flipper-l { + 0%, 100% { transform: rotate(0deg); } + 50% { transform: rotate(10deg); } +} + +@keyframes steer-flipper-r { + 0%, 100% { transform: rotate(0deg); } + 50% { transform: rotate(-10deg); } +} + +/* Thought bubble */ +.thought-bubble { + position: absolute; + top: 30px; + background: rgba(255, 255, 255, 0.95); + color: #121212; + border-radius: 15px; + padding: 8px 15px; + font-size: 0.85rem; + font-weight: 700; + box-shadow: 0 4px 15px rgba(0,0,0,0.3); + z-index: 10; + pointer-events: none; + animation: float-bubble 4s ease-in-out infinite; +} + +.thought-bubble::after { + content: ''; + position: absolute; + bottom: -6px; + left: 50%; + transform: translateX(-50%) rotate(45deg); + width: 12px; + height: 12px; + background: rgba(255, 255, 255, 0.95); +} + +@keyframes float-bubble { + 0%, 100% { transform: translateY(0); } + 50% { transform: translateY(-5px); } +} + +/* Dialog screens shake for damage */ +.shake-element { + animation: screen-shake 0.4s ease-in-out; +} + +@keyframes screen-shake { + 0%, 100% { transform: translateX(0); } + 20%, 60% { transform: translateX(-8px); } + 40%, 80% { transform: translateX(8px); } +} + +/* Floating food or trash items in the ocean */ +.floating-item { + position: absolute; + font-size: 2rem; + cursor: pointer; + z-index: 6; + filter: drop-shadow(0 4px 8px rgba(0,0,0,0.3)); + transition: transform 0.2s ease, opacity 0.2s ease; +} + +.floating-item.eating { + transform: scale(0.1) rotate(180deg); + opacity: 0; + pointer-events: none; +} + +/* Shell Cleaning Game overlay */ +.cleaning-layer { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 79, 134, 0.2); + z-index: 8; + pointer-events: auto; +} + +.cleaning-instructions { + position: absolute; + top: 15px; + left: 20px; + right: 20px; + text-align: center; + background: rgba(11, 19, 43, 0.85); + border-radius: 8px; + padding: 8px; + font-size: 0.8rem; + font-weight: 600; + border: 1px solid rgba(255, 255, 255, 0.1); +} + +.interactive-brush { + position: absolute; + width: 64px; + height: 36px; + background: var(--color-accent); + color: #121212; + border-radius: 8px; + display: flex; + align-items: center; + justify-content: center; + font-size: 0.75rem; + font-weight: 800; + cursor: grab; + z-index: 10; + box-shadow: 0 4px 10px rgba(0,0,0,0.4); + touch-action: none; +} + +.interactive-brush:active { cursor: grabbing; } + +/* QTE overlays (Nets, Boats, Sharks) */ +.qte-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(19, 15, 38, 0.85); + z-index: 9; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding: 20px; + text-align: center; +} + +.qte-warning-title { + font-size: 1.25rem; + font-weight: 800; + color: var(--color-danger); + margin-bottom: 10px; + text-transform: uppercase; + animation: flash-red 1s infinite alternate; +} + +@keyframes flash-red { + 0% { text-shadow: 0 0 5px rgba(255,92,138,0.2); } + 100% { text-shadow: 0 0 20px rgba(255,92,138,0.9); } +} + +.qte-instructions { + font-size: 0.9rem; + color: var(--color-text-muted); + margin-bottom: 20px; + line-height: 1.4; +} + +.swipe-progress-container { + width: 80%; + height: 12px; + background: rgba(255,255,255,0.1); + border-radius: 6px; + overflow: hidden; + border: 1px solid rgba(255,255,255,0.2); +} + +.swipe-progress-fill { + height: 100%; + background: var(--color-secondary); + transition: width 0.1s ease; +} + +.net-grid-graphics { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-image: + linear-gradient(rgba(255,255,255,0.1) 1px, transparent 1px), + linear-gradient(90deg, rgba(255,255,255,0.1) 1px, transparent 1px); + background-size: 40px 40px; + pointer-events: none; +} + +.btn-large { + padding: 16px 32px; + font-size: 1.2rem; + border-radius: 16px; + width: 80%; +} + +.shark-btn-row { + width: 100%; + display: flex; + justify-content: center; + margin-top: 20px; +} + +.shark-graphic { + position: absolute; + font-size: 4.5rem; + z-index: 2; + transition: left 0.1s linear, top 0.1s linear; + animation: shark-swim-anim 1.5s ease-in-out infinite alternate; +} + +@keyframes shark-swim-anim { + 0% { transform: scaleX(-1) rotate(-3deg); } + 100% { transform: scaleX(-1) rotate(3deg); } +} + +/* Ocean Footer Drawer Controls */ +.ocean-footer { + padding: 15px 20px; + border-radius: 20px 20px 0 0; + display: flex; + flex-direction: column; + gap: 10px; + z-index: 10; +} + +.button-row { + display: flex; + justify-content: space-between; + gap: 10px; +} + +.action-btn { + flex: 1; + height: 70px; + border-radius: 14px; + background: rgba(255, 255, 255, 0.04); + border: 1px solid rgba(255, 255, 255, 0.08); + color: var(--color-text); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 4px; +} + +.action-btn:hover, .action-btn.active { + background: var(--glass-bg-accent); + border-color: var(--glass-border-accent); +} + +.btn-emoji { font-size: 1.5rem; } +.btn-lbl { font-size: 0.75rem; font-weight: 600; color: var(--color-text-muted); } +.action-btn:hover .btn-lbl, .action-btn.active .btn-lbl { color: var(--color-text); } + +.drawer-panel { + background: rgba(0, 0, 0, 0.3); + border-radius: 12px; + padding: 12px; + display: flex; + flex-direction: column; + gap: 8px; + animation: slide-up-drawer 0.25s ease-out; +} + +@keyframes slide-up-drawer { + 0% { transform: translateY(10px); opacity: 0; } + 100% { transform: translateY(0); opacity: 1; } +} + +.drawer-panel h4 { + font-size: 0.8rem; + color: var(--color-text-muted); + text-align: center; +} + +.food-options-row { + display: flex; + gap: 8px; +} + +.food-btn { + flex: 1; + padding: 10px; + background: rgba(255,255,255,0.06); + border: 1px solid rgba(255,255,255,0.1); + color: var(--color-text); + border-radius: 8px; + font-size: 0.85rem; +} + +.food-btn:hover { + background: var(--color-primary-dark); + border-color: var(--color-primary); +} + +.drawer-warning { + font-size: 0.7rem; + color: var(--color-warning); + text-align: center; + margin-top: 4px; +} + +/* ========================================================================== + 4. BEACHING / TOURIST SHIELD EVENT STYLING + ========================================================================== */ +#screen-beaching { + background: linear-gradient(180deg, #1c2a38 0%, #3e5066 40%, #c49a75 100%); +} + +.warning-bg { + background: linear-gradient(90deg, #9b2c2c, #742a2a); +} + +.beaching-area { + position: relative; + flex: 1; + overflow: hidden; + background: radial-gradient(circle at center, #d8b28f 0%, #a77c57 100%); + border-top: 1px solid rgba(255, 255, 255, 0.05); +} + +.beached-turtle-resting { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 140px; + height: 140px; + display: flex; + align-items: center; + justify-content: center; + z-index: 5; +} + +.resting-turtle-svg { + width: 90px; + height: 90px; + animation: resting-breathing 4s ease-in-out infinite; +} + +/* Very slow, calm breathing — sea turtles rest motionless on the sand */ +.resting-turtle-svg { + animation: resting-breathing 9s ease-in-out infinite !important; +} +@keyframes resting-breathing { + 0%, 100% { transform: scale(1.0) translateY(0); } + 50% { transform: scale(1.035) translateY(-1px); } +} + +/* 10-foot boundary rings */ +.turtle-zone-ring { + position: absolute; + width: 180px; + height: 180px; + border-radius: 50%; + border: 3px dashed rgba(229, 62, 62, 0.6); + background: rgba(229, 62, 62, 0.05); + animation: pulse-ring 2s infinite; + pointer-events: none; +} + +@keyframes pulse-ring { + 0% { transform: scale(0.95); opacity: 0.5; } + 50% { transform: scale(1.05); opacity: 0.8; } + 100% { transform: scale(0.95); opacity: 0.5; } +} + +.safe-zone-label { + position: absolute; + top: -24px; + width: 150px; + text-align: center; + background: rgba(229, 62, 62, 0.9); + color: #ffffff; + font-size: 0.6rem; + font-weight: 800; + padding: 2px 6px; + border-radius: 4px; + letter-spacing: 0.05em; + pointer-events: none; +} + +/* Tourist Sprites */ +.tourist-sprite { + position: absolute; + width: 50px; + height: 60px; + display: flex; + flex-direction: column; + align-items: center; + cursor: pointer; + z-index: 7; + transition: left 0.1s linear, top 0.1s linear, transform 0.2s cubic-bezier(0.18, 0.89, 0.32, 1.28); +} + +.tourist-avatar { + font-size: 2.2rem; + filter: drop-shadow(0 4px 6px rgba(0,0,0,0.3)); +} + +.tourist-camera-flash { + position: absolute; + top: 0; + width: 30px; + height: 30px; + border-radius: 50%; + background: #ffffff; + box-shadow: 0 0 20px 10px #ffffff; + opacity: 0; + pointer-events: none; +} + +.flash-active { + animation: flash-trigger 0.8s ease-out; +} + +@keyframes flash-trigger { + 0% { opacity: 0; transform: scale(0.5); } + 10% { opacity: 1; transform: scale(1.5); } + 25% { opacity: 0; } + 50% { opacity: 1; transform: scale(1.5); } + 65% { opacity: 0; } +} + +.beaching-instructions-card { + position: absolute; + top: 15px; + left: 20px; + right: 20px; + background: rgba(11, 19, 43, 0.9); + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 12px; + padding: 12px; + z-index: 10; + box-shadow: var(--glass-shadow); + text-align: center; +} + +.beaching-instructions-card p { + font-size: 0.8rem; + line-height: 1.4; + margin-bottom: 4px; +} + +.beaching-footer { + padding: 20px; + border-radius: 20px 20px 0 0; + display: flex; + flex-direction: column; + gap: 15px; + z-index: 10; +} + +.educational-pop-box { + background: rgba(255, 255, 255, 0.05); + border-left: 4px solid var(--color-primary); + padding: 8px 12px; + border-radius: 0 8px 8px 0; + display: flex; + align-items: flex-start; + gap: 10px; + min-height: 52px; +} + +.fact-icon { font-size: 1.2rem; } +.fact-text { font-size: 0.75rem; line-height: 1.4; color: var(--color-text); } + +/* ========================================================================== + MODALS AND OVERLAYS + ========================================================================== */ +.modal-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.85); + z-index: 100; + display: flex; + align-items: center; + justify-content: center; + padding: 20px; + backdrop-filter: blur(5px); +} + +.modal-card { + width: 100%; + max-width: 400px; + max-height: 80vh; + display: flex; + flex-direction: column; + gap: 20px; + border: 1px solid rgba(255, 255, 255, 0.15); + box-shadow: 0 20px 50px rgba(0,0,0,0.6); + animation: modal-zoom 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275); +} + +@keyframes modal-zoom { + 0% { transform: scale(0.9); opacity: 0; } + 100% { transform: scale(1); opacity: 1; } +} + +.small-modal { + max-height: 350px; +} + +.modal-header { + display: flex; + justify-content: space-between; + align-items: center; + border-bottom: 1px solid rgba(255,255,255,0.1); + padding-bottom: 10px; +} + +.modal-header h2 { + font-size: 1.2rem; + font-weight: 800; +} + +.modal-body { + flex: 1; + overflow-y: auto; + display: flex; + flex-direction: column; + gap: 15px; +} + +.scrollable-content { + padding-right: 5px; +} + +/* Custom Scrollbar for Modal content */ +.scrollable-content::-webkit-scrollbar { + width: 4px; +} +.scrollable-content::-webkit-scrollbar-track { + background: rgba(255,255,255,0.02); +} +.scrollable-content::-webkit-scrollbar-thumb { + background: var(--color-primary); + border-radius: 2px; +} + +.modal-body h3 { + font-size: 0.95rem; + color: var(--color-primary); + margin-top: 5px; +} + +.modal-body p { + font-size: 0.85rem; + color: var(--color-text-muted); + line-height: 1.5; +} + +.citation-box { + background: rgba(0, 0, 0, 0.2); + border-radius: 8px; + padding: 8px 10px; + margin-top: 10px; + border: 1px dashed rgba(255, 255, 255, 0.05); +} + +.citation-box p { + font-size: 0.7rem; + color: var(--color-primary); + text-align: center; +} + +.text-input { + background: rgba(0, 0, 0, 0.3); + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 8px; + padding: 12px; + color: #ffffff; + font-size: 1rem; + font-family: var(--font-primary); + width: 100%; +} + +.text-input:focus { + outline: none; + border-color: var(--color-primary); +} + +.modal-buttons { + display: flex; + justify-content: flex-end; + gap: 10px; +} + +.gameover-stats { + background: rgba(255,255,255,0.03); + border-radius: 10px; + padding: 15px; + margin: 10px 0; + display: flex; + flex-direction: column; + gap: 8px; +} + +.gameover-stats p { + font-size: 0.9rem; +} + +/* PWA Installer banner */ +.install-banner { + position: absolute; + bottom: 20px; + left: 50%; + transform: translateX(-50%); + width: 90%; + max-width: 440px; + background: rgba(22, 34, 47, 0.95); + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + border: 1px solid var(--glass-border-accent); + border-radius: 16px; + box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5); + z-index: 1000; + padding: 12px 15px; + animation: slide-up-banner 0.4s cubic-bezier(0.18, 0.89, 0.32, 1.28); +} + +@keyframes slide-up-banner { + 0% { transform: translate(-50%, 50px); opacity: 0; } + 100% { transform: translate(-50%, 0); opacity: 1; } +} + +.banner-content { + display: flex; + align-items: center; + gap: 12px; +} + +.banner-icon { + font-size: 1.8rem; +} + +.banner-text { + flex: 1; +} + +.banner-text h4 { + font-size: 0.85rem; + font-weight: 700; +} + +.banner-text p { + font-size: 0.7rem; + color: var(--color-text-muted); +} + +/* ========================================================================== + UTILITY STYLES FOR DYNAMIC SPANNING + ========================================================================== */ +.dirt-particle { + position: absolute; + background: rgba(255, 255, 255, 0.1); + border-radius: 50%; + pointer-events: none; +} + +/* ========================================================================== + MIGRATION SUCCESS MODAL STYLING + ========================================================================== */ +.migration-results-card { + background: rgba(255, 255, 255, 0.05); + border-radius: 12px; + padding: 15px; + text-align: center; + border: 1px solid rgba(255, 255, 255, 0.08); +} +.migration-results-card p { + font-size: 0.95rem; + margin: 5px 0; +} +.conservation-trivia-card { + background: rgba(0, 180, 216, 0.08); + border-left: 4px solid var(--color-primary); + border-radius: 4px 12px 12px 4px; + padding: 12px 15px; + text-align: left; +} +.conservation-trivia-card h3 { + font-size: 0.95rem; + font-weight: 700; + margin-bottom: 5px; + color: var(--color-primary); +} +.conservation-trivia-card p { + font-size: 0.8rem; + line-height: 1.4; + color: var(--color-text-muted); +} +.bonus-box { + background: rgba(82, 183, 136, 0.1); + border: 1px solid rgba(82, 183, 136, 0.2); + border-radius: 12px; + padding: 12px 15px; + text-align: left; + color: #fff; +} +.bonus-box h4 { + color: var(--color-secondary); + font-size: 0.9rem; + font-weight: 700; + margin-bottom: 4px; +} +.bonus-box p { + font-size: 0.8rem; + line-height: 1.3; +} + +/* ============================================ + FEEDING — tap-to-feed visual cues + ============================================ */ +.floating-item.food-item { + cursor: grab; + animation: food-tap-hint 1.6s ease-in-out infinite; + filter: drop-shadow(0 0 8px rgba(255, 255, 200, 0.7)) drop-shadow(0 4px 8px rgba(0,0,0,0.3)); +} +.floating-item.food-item:hover, +.floating-item.food-item:active { + transform: scale(1.2); + filter: drop-shadow(0 0 14px rgba(255, 255, 200, 1)) drop-shadow(0 4px 8px rgba(0,0,0,0.4)); +} +.floating-item.food-item.chasing { + pointer-events: none; + filter: drop-shadow(0 0 18px rgba(255, 230, 120, 1)); +} +@keyframes food-tap-hint { + 0%, 100% { transform: scale(1); } + 50% { transform: scale(1.08); } +} + +/* ============================================ + TURTLE — tickle/rub interactivity + ============================================ */ +.sea-turtle-sprite { + cursor: grab; + touch-action: none; +} +.sea-turtle-sprite:active { + cursor: grabbing; +} +.sea-turtle-sprite.being-tickled { + animation: tickle-wiggle 0.25s ease-in-out infinite, swim-body 5s ease-in-out infinite; +} +@keyframes tickle-wiggle { + 0%, 100% { transform: translateX(0) rotate(0); } + 25% { transform: translateX(-4px) rotate(-3deg); } + 75% { transform: translateX(4px) rotate(3deg); } +} + +.tickle-heart { + position: absolute; + font-size: 1.4rem; + pointer-events: none; + z-index: 20; + animation: heart-float 0.9s ease-out forwards; +} +@keyframes heart-float { + 0% { transform: translateY(0) scale(0.5); opacity: 0; } + 20% { transform: translateY(-10px) scale(1.2); opacity: 1; } + 100% { transform: translateY(-50px) scale(0.8); opacity: 0; } +} + +/* ============================================ + IDLE BEHAVIORS — flap, roll, look around + ============================================ */ +.sea-turtle-sprite.idle-flap { + animation: idle-flap-anim 1.2s ease-in-out, swim-body 5s ease-in-out infinite; +} +@keyframes idle-flap-anim { + 0%, 100% { transform: translateY(0) rotate(0); } + 25% { transform: translateY(-18px) rotate(-4deg); } + 50% { transform: translateY(-8px) rotate(4deg); } + 75% { transform: translateY(-22px) rotate(-2deg); } +} + +.sea-turtle-sprite.idle-look { + animation: idle-look-anim 1.6s ease-in-out, swim-body 5s ease-in-out infinite; +} +@keyframes idle-look-anim { + 0%, 100% { transform: rotate(0); } + 30% { transform: rotate(-8deg); } + 70% { transform: rotate(8deg); } +} + +.sea-turtle-sprite.idle-roll { + animation: idle-roll-anim 1.4s ease-in-out, swim-body 5s ease-in-out infinite; +} +@keyframes idle-roll-anim { + 0% { transform: rotate(0) scale(1); } + 50% { transform: rotate(360deg) scale(1.05); } + 100% { transform: rotate(720deg) scale(1); } +} + +/* Bubbles emitted by turtle */ +.turtle-bubble { + position: absolute; + background: radial-gradient(circle at 30% 30%, rgba(255,255,255,0.9), rgba(180, 220, 255, 0.4)); + border: 1px solid rgba(255,255,255,0.7); + border-radius: 50%; + pointer-events: none; + z-index: 4; + animation: bubble-rise 2.2s ease-out forwards; +} +@keyframes bubble-rise { + 0% { transform: translate(0, 0) scale(0.5); opacity: 0; } + 20% { opacity: 0.9; } + 100% { transform: translate(var(--bx, 10px), -120px) scale(1.1); opacity: 0; } +} + +.ambient-bubble { + position: absolute; + background: radial-gradient(circle at 30% 30%, rgba(255,255,255,0.6), rgba(180, 220, 255, 0.2)); + border: 1px solid rgba(255,255,255,0.35); + border-radius: 50%; + pointer-events: none; + z-index: 2; + animation: ambient-bubble-rise 5s linear forwards; +} +@keyframes ambient-bubble-rise { + 0% { transform: translateY(0) translateX(0); opacity: 0; } + 15% { opacity: 0.7; } + 100% { transform: translateY(-100vh) translateX(20px); opacity: 0; } +} + +/* ============================================ + DYNAMIC LIQUID TIDE (beach + beaching scenes) + ============================================ */ +.tide-layer { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 170px; + overflow: hidden; + pointer-events: none; + z-index: 1; +} +.tide-layer.beaching-tide { + height: 210px; + /* slightly stronger color presence where water meets warm sand */ + filter: saturate(1.15); + background: linear-gradient(to bottom, #0a4a72 0%, #1d7ab5 40%, transparent 100%); +} +/* Beach scene: water against night-sand backdrop */ +#beach-sandbox > .tide-layer { + background: linear-gradient(to bottom, #0a3a63 0%, #1d7ab5 45%, transparent 100%); +} +.tide-svg { + position: absolute; + top: 0; + left: -10%; + width: 220%; /* extra width allows horizontal drift without exposing edges */ + height: 100%; + display: block; + /* Flip vertically so deep water sits at the TOP (under the banner) and + foam/crest meets the sand at the bottom of the tide layer */ + transform: scaleY(-1); + transform-origin: center center; +} + +/* Each wave layer drifts at its own speed for a liquid parallax look */ +.tide-wave { + transform-origin: center; + will-change: transform; +} +.tide-back { + animation: tide-drift-slow 11s ease-in-out infinite alternate, + tide-bob 5s ease-in-out infinite; +} +.tide-mid { + animation: tide-drift-med 7s ease-in-out infinite alternate, + tide-bob 4s ease-in-out infinite reverse; + opacity: 0.85; +} +.tide-front { + animation: tide-drift-fast 4.5s ease-in-out infinite alternate, + tide-bob 3s ease-in-out infinite; + mix-blend-mode: screen; +} +.tide-foam { + animation: tide-foam-shimmer 2.8s ease-in-out infinite alternate, + tide-drift-fast 5s linear infinite alternate; + opacity: 0.85; +} + +@keyframes tide-drift-slow { + 0% { transform: translateX(-4%); } + 100% { transform: translateX(4%); } +} +@keyframes tide-drift-med { + 0% { transform: translateX(3%); } + 100% { transform: translateX(-5%); } +} +@keyframes tide-drift-fast { + 0% { transform: translateX(-2%) translateY(0); } + 100% { transform: translateX(5%) translateY(-2px); } +} +@keyframes tide-bob { + 0%, 100% { transform: translateY(0); } + 50% { transform: translateY(-4px); } +} +@keyframes tide-foam-shimmer { + 0% { opacity: 0.55; } + 50% { opacity: 0.95; } + 100% { opacity: 0.7; } +} + +/* Make sure nest/hazards float above tide */ +.nest-site, .hazards-layer, .hatchlings-layer, .beach-trash-can-zone { + z-index: 5; +} + +/* ============================================ + PREDATOR ALERT + DEFENSIVE POSTURE (Ocean QTE) + ============================================ */ +.sea-turtle-sprite.predator-alert { + animation: predator-flinch 0.6s ease-in-out 2, swim-body 5s ease-in-out infinite; + filter: drop-shadow(0 0 16px rgba(255, 80, 80, 0.65)) drop-shadow(0 12px 25px rgba(0,0,0,0.5)); +} +@keyframes predator-flinch { + 0%, 100% { transform: translateY(0) rotate(0); } + 20% { transform: translateY(-6px) rotate(-2deg); } + 40% { transform: translateY(2px) rotate(3deg); } + 60% { transform: translateY(-3px) rotate(-1deg); } +} + +.sea-turtle-sprite.defensive-posture { + /* turtle stops swimming freely and angles shell toward threat (rotates slightly) */ + animation: defensive-brace 0.5s ease-out forwards; + filter: drop-shadow(0 0 18px rgba(255, 200, 80, 0.6)) drop-shadow(0 12px 25px rgba(0,0,0,0.5)); +} +@keyframes defensive-brace { + 0% { transform: translateY(0) rotate(0) scale(1); } + 100% { transform: translateY(4px) rotate(-8deg) scale(0.96); } +} +/* Freeze flipper paddling while braced — pulled in tight */ +.sea-turtle-sprite.defensive-posture .flipper { + animation: none !important; +} + +/* ============================================ + GROWTH STAGES — turtle visibly grows with age + ============================================ */ +.sea-turtle-sprite.stage-hatchling { transform: scale(0.55); } +.sea-turtle-sprite.stage-juvenile { transform: scale(0.72); } +.sea-turtle-sprite.stage-subadult { transform: scale(0.88); } +.sea-turtle-sprite.stage-adult { transform: scale(1.05); } +.sea-turtle-sprite.stage-elder { transform: scale(1.18); filter: drop-shadow(0 12px 25px rgba(0,0,0,0.5)) sepia(0.12); } + +/* Growth scale is preserved during interactive transforms by applying it via + a wrapper transform — re-establish so swim animations still compose. */ +.sea-turtle-sprite[class*="stage-"] { + transform-origin: center center; + transition: transform 0.8s cubic-bezier(.45,.05,.55,.95), filter 0.8s ease; +} + +/* ============================================ + SPECIES PALETTES & TRAITS + ============================================ */ +/* GREEN SEA TURTLE — vibrant green grazer, smaller head */ +.sea-turtle-sprite.species-green #turtle-shell ellipse { fill: #1b4332; stroke: #2d6a4f; } +.sea-turtle-sprite.species-green #turtle-shell path[fill="#40916c"] { fill: #40916c; } +.sea-turtle-sprite.species-green .flipper path { fill: #2d6a4f; } +.sea-turtle-sprite.species-green .fl-back-left path, +.sea-turtle-sprite.species-green .fl-back-right path { fill: #1b4332; } +.sea-turtle-sprite.species-green #turtle-head ellipse { fill: #2d6a4f; } +.sea-turtle-sprite.species-green #turtle-head path { fill: #2d6a4f; } + +/* LOGGERHEAD — reddish-brown shell, oversized head, stockier */ +.sea-turtle-sprite.species-loggerhead #turtle-shell ellipse:first-child { + fill: #6b3410; stroke: #8b4513; +} +.sea-turtle-sprite.species-loggerhead #turtle-shell path[fill="#40916c"] { fill: #a0522d; } +.sea-turtle-sprite.species-loggerhead #turtle-shell circle[fill="#52b788"] { fill: #cd853f; } +.sea-turtle-sprite.species-loggerhead .flipper path { fill: #8b4513; } +.sea-turtle-sprite.species-loggerhead .fl-back-left path, +.sea-turtle-sprite.species-loggerhead .fl-back-right path { fill: #6b3410; } +.sea-turtle-sprite.species-loggerhead #turtle-head ellipse { + fill: #8b4513; + /* signature oversized head */ + transform: scale(1.25); + transform-origin: 100px 55px; + transform-box: fill-box; +} +.sea-turtle-sprite.species-loggerhead #turtle-head path { fill: #8b4513; } +.sea-turtle-sprite.species-loggerhead .flipper { + /* slower, more powerful strokes */ + animation-duration: 3.4s !important; +} + +/* LEATHERBACK — dark blue-gray, largest, with ridged shell stripes */ +.sea-turtle-sprite.species-leatherback #turtle-shell ellipse:first-child { + fill: #1a1d2e; stroke: #2c3e50; +} +.sea-turtle-sprite.species-leatherback #turtle-shell path[fill="#40916c"] { fill: #2c3e50; } +.sea-turtle-sprite.species-leatherback #turtle-shell circle[fill="#52b788"] { fill: #4a6072; } +.sea-turtle-sprite.species-leatherback #turtle-shell path[stroke="#1b4332"] { + /* exaggerate the longitudinal ridges characteristic of leatherbacks */ + stroke: #5b7a8c; + stroke-width: 4 !important; +} +.sea-turtle-sprite.species-leatherback .flipper path { fill: #2c3e50; } +.sea-turtle-sprite.species-leatherback .fl-back-left path, +.sea-turtle-sprite.species-leatherback .fl-back-right path { fill: #1a1d2e; } +.sea-turtle-sprite.species-leatherback #turtle-head ellipse { fill: #2c3e50; } +.sea-turtle-sprite.species-leatherback #turtle-head path { fill: #2c3e50; } +.sea-turtle-sprite.species-leatherback .flipper { + /* longer, gliding strokes — leatherbacks are deep-divers */ + animation-duration: 3.8s !important; +} +.sea-turtle-sprite.species-leatherback { + /* additional size boost — leatherbacks are the largest sea turtles */ + filter: drop-shadow(0 16px 28px rgba(0,0,0,0.55)); +} +.sea-turtle-sprite.species-leatherback.stage-adult { transform: scale(1.18); } +.sea-turtle-sprite.species-leatherback.stage-elder { transform: scale(1.32); } + +/* Quick visual cue for sickness — slight green tint */ +.sea-turtle-sprite.sick { filter: drop-shadow(0 12px 25px rgba(0,0,0,0.5)) hue-rotate(40deg) saturate(0.7); } + +/* ============================================ + PLAYMATE — species-specific sea friend (Play action) + ============================================ */ +.sea-playmate { + position: absolute; + font-size: 2.2rem; + z-index: 7; + cursor: pointer; + filter: drop-shadow(0 0 12px rgba(255, 255, 200, 0.7)) drop-shadow(0 4px 8px rgba(0,0,0,0.35)); + transition: filter 0.2s ease; + animation: playmate-wiggle 0.6s ease-in-out infinite; + pointer-events: auto; + will-change: transform, left, top; +} +.sea-playmate:hover { filter: drop-shadow(0 0 18px rgba(255,255,200,1)) drop-shadow(0 4px 8px rgba(0,0,0,0.5)); } +.sea-playmate.high-five { + animation: playmate-highfive 0.25s ease-out; +} +.sea-playmate.swimming-away { + animation: playmate-leave 1.2s ease-in forwards; +} +@keyframes playmate-wiggle { + 0%, 100% { transform: translateY(0) rotate(-3deg); } + 50% { transform: translateY(-4px) rotate(3deg); } +} +@keyframes playmate-highfive { + 0% { transform: scale(1) rotate(0); } + 50% { transform: scale(1.4) rotate(15deg); } + 100% { transform: scale(1) rotate(0); } +} +@keyframes playmate-leave { + 0% { opacity: 1; transform: scale(1); } + 100% { opacity: 0; transform: scale(0.6) translateY(-30px); } +} + +/* ============================================ + GHOST NET — strand grid breaks as you cut + ============================================ */ +.net-grid-graphics { + position: relative; + display: grid; + grid-template-columns: repeat(4, 1fr); + grid-template-rows: repeat(4, 1fr); + gap: 6px; + width: 220px; + height: 220px; + margin: 16px auto 0; + padding: 8px; + background: + repeating-linear-gradient(45deg, rgba(255,255,255,0.15) 0 2px, transparent 2px 12px), + repeating-linear-gradient(-45deg, rgba(255,255,255,0.15) 0 2px, transparent 2px 12px); + border: 2px solid rgba(255,255,255,0.4); + border-radius: 10px; +} +.net-grid-graphics.snapping { + animation: net-shake 0.35s ease-in-out infinite; +} +.net-strand { + display: block; + background: rgba(220, 220, 220, 0.85); + border: 1px solid rgba(0,0,0,0.35); + border-radius: 3px; + box-shadow: inset 0 0 4px rgba(255,255,255,0.4); + transition: opacity 0.25s ease, transform 0.4s ease; +} +.net-strand.cut { + animation: strand-snap 0.4s ease-out forwards; + pointer-events: none; +} +@keyframes strand-snap { + 0% { opacity: 1; transform: scale(1) rotate(0); } + 40% { opacity: 0.9; transform: scale(1.15) rotate(8deg); background: #ffd166; } + 100% { opacity: 0; transform: scale(0.4) rotate(-25deg) translateY(20px); } +} +@keyframes net-shake { + 0%, 100% { transform: translate(0, 0); } + 25% { transform: translate(-3px, 2px); } + 75% { transform: translate(3px, -2px); } +} + +/* ============================================ + SCREEN TRANSITIONS — fade + slide between scenes + ============================================ */ +.game-screen.screen-exit { + display: flex !important; + z-index: 9; + animation: screen-exit-anim 0.32s ease-in forwards; + pointer-events: none; +} +.game-screen.screen-enter { + animation: screen-enter-anim 0.55s cubic-bezier(.2,.7,.3,1) both; +} +@keyframes screen-exit-anim { + 0% { opacity: 1; transform: translateY(0) scale(1); filter: blur(0); } + 100% { opacity: 0; transform: translateY(-18px) scale(0.985); filter: blur(4px); } +} +@keyframes screen-enter-anim { + 0% { opacity: 0; transform: translateY(24px) scale(1.02); filter: blur(6px); } + 60% { opacity: 1; filter: blur(0); } + 100% { opacity: 1; transform: translateY(0) scale(1); filter: blur(0); } +} diff --git a/sw.js b/sw.js new file mode 100644 index 0000000..4f05b21 --- /dev/null +++ b/sw.js @@ -0,0 +1,51 @@ +const CACHE_NAME = 'tortugotchi-v10'; +const ASSETS = [ + './', + './index.html', + './style.css', + './app.js', + './manifest.json', + './icon-192.png', + './icon-512.png' +]; + +// Install Event +self.addEventListener('install', (e) => { + e.waitUntil( + caches.open(CACHE_NAME).then((cache) => { + console.log('[Service Worker] Caching all app shell assets'); + return cache.addAll(ASSETS); + }).then(() => self.skipWaiting()) + ); +}); + +// Activate Event +self.addEventListener('activate', (e) => { + e.waitUntil( + caches.keys().then((keys) => { + return Promise.all( + keys.map((key) => { + if (key !== CACHE_NAME) { + console.log('[Service Worker] Removing old cache', key); + return caches.delete(key); + } + }) + ); + }).then(() => self.clients.claim()) + ); +}); + +// Fetch Event +self.addEventListener('fetch', (e) => { + e.respondWith( + caches.match(e.request).then((cachedResponse) => { + // Return cached version or fetch from network + return cachedResponse || fetch(e.request).catch(() => { + // Fallback for document requests if completely offline + if (e.request.destination === 'document') { + return caches.match('./index.html'); + } + }); + }) + ); +}); diff --git a/tortugotchi_logo_1779297763562.png b/tortugotchi_logo_1779297763562.png new file mode 100644 index 0000000..aea0728 Binary files /dev/null and b/tortugotchi_logo_1779297763562.png differ