From d295b2370c9b6ffcb90b51da0c873cfe91b22223 Mon Sep 17 00:00:00 2001 From: pothead1 Date: Wed, 9 Jul 2025 22:05:19 +0000 Subject: [PATCH 01/20] added --- .devcontainer/setup.sh | 100 ++++++++++++++++++++++ readme.md | 190 ++++++++++++++++++++++++++++------------- 2 files changed, 230 insertions(+), 60 deletions(-) create mode 100644 .devcontainer/setup.sh diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh new file mode 100644 index 00000000..b91c0eda --- /dev/null +++ b/.devcontainer/setup.sh @@ -0,0 +1,100 @@ +#!/bin/bash + +# GanjaGuru Setup Script - Oracle Ready + +# ---- Setup Variables ---- +PROJECT_NAME="GanjaGuru" +BASE_DIR="$HOME/$PROJECT_NAME" +ENV_FILE="$BASE_DIR/.env" +BASHRC_FILE="$HOME/.bashrc" + +echo "🚀 Starting GanjaGuru setup..." + +# ---- Create Folder Structure ---- +mkdir -p "$BASE_DIR"/{src,models,config,data,public,logs,temp,bin,assets/fonts,assets/images,assets/audio,docs,tests,build,ai,vr,nlp,voice,ecommerce} + +# ---- Create Root Files with Actual Content ---- +echo "# $PROJECT_NAME" > "$BASE_DIR/README.md" +echo "node_modules/" > "$BASE_DIR/.gitignore" +echo "VIRTUAL_ENV=.venv" >> "$BASE_DIR/.gitignore" + +cat < "$BASE_DIR/.env" +# 🌿 GanjaGuru .env file +PROJECT_NAME=$PROJECT_NAME +ENV=development +PORT=8080 +AI_MODE=true +VR_ENABLED=true +NLP_ENABLED=true +VOICE_ENABLED=true +DATA_TRACKING=true +EOF + +cat < "$BASE_DIR/config/settings.json" +{ +  "app": "GanjaGuru", +  "version": "1.0.0", +  "features": { +    "ai": true, +    "ml": true, +    "llm": true, +    "nlp": true, +    "vr": true, +    "ar": true, +    "voice": true, +    "ecommerce": true, +    "behaviorTracking": true +  } +} +EOF + +echo "console.log('🔥 Welcome to GanjaGuru');" > "$BASE_DIR/src/index.js" +echo "print('🌿 GanjaGuru Python module')" > "$BASE_DIR/src/main.py" + +# ---- Add Environment Variables to .bashrc ---- +if ! grep -q "GANJAGURU_HOME=" "$BASHRC_FILE"; then +  echo "export GANJAGURU_HOME=$BASE_DIR" >> "$BASHRC_FILE" +  echo "export PATH=\$GANJAGURU_HOME/bin:\$PATH" >> "$BASHRC_FILE" +  echo "export PYTHONPATH=\$GANJAGURU_HOME/src" >> "$BASHRC_FILE" + +# ---- Install Developer Tools ---- +sudo apt update && sudo apt upgrade -y + +# Core tools +sudo apt install -y git curl wget build-essential unzip zip + +# Node.js & npm +curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - +sudo apt install -y nodejs + +# Python & pip & venv +sudo apt install -y python3 python3-pip python3-venv python3-dev + +# ML/AI tools +pip3 install --upgrade pip +pip3 install numpy pandas scikit-learn flask fastapi uvicorn jupyter + +# NLP/LLM tools +pip3 install nltk spacy transformers openai + +# AR/VR/Voice tools +sudo apt install -y ffmpeg libsm6 libxext6 +pip3 install opencv-python pyttsx3 speechrecognition + +# E-Commerce / Web / Analytics +npm install express body-parser dotenv mongoose axios cors + +# Git init +cd "$BASE_DIR" && git init + +# ---- Set Full Permissions ---- +chmod -R 777 "$BASE_DIR" + +# ---- Done ---- +echo "✅ GanjaGuru project structure created at $BASE_DIR" +echo "✅ Dev tools installed: Git, Node.js, Python, AI/ML/NLP, AR/VR, Voice" +echo "✅ Permissions granted (777)" +echo "✅ .env and environment paths configured" + +# Load the env +source "$BASHRC_FILE" diff --git a/readme.md b/readme.md index 6a0b6a26..07b8fd4c 100644 --- a/readme.md +++ b/readme.md @@ -1,61 +1,131 @@ -# GitHub Codespaces ♥️ .NET +🌿💨 The Ganjaguru: Your Cosmic Cannabis Concierge 🌌🚀 +"From Seed to Smoke, We've Got You Covered – Eco-Friendly, Tech-Driven, and Always Lit." +Overview: Plugging into the Cannabis Future +Welcome to The Ganjaguru—the "Socket" for all things cannabis. This isn't just an e-commerce platform; it's an AI-powered, gamified, fully-automated, interactive cannabis metaverse designed to revolutionize how the world connects with cannabis. We're mixing the wisdom of Willie, the flow of Snoop, the hustle of TuPac, the precision of Bruce Lee, and the vision of John Lennon into an AI-flavored blunt wrap, smoked by the swagger-filled college kid who just leveled up their entire experience. +The Ganjaguru is the Amazon, Netflix, and Uber of weed, all rolled into one cyberpunk-futuristic, AI-driven beast of a platform. Immersive. Monetized. Sustainable. Interactive. Animated. AI-Powered. Every element feeds into a self-sustaining revenue engine—no inventory, all automation, passive income on autopilot. +Whether you're 18 or older, anywhere in the world, if you're thinking about anything cannabis-related, you type, you speak, and BOOM! You're plugged into our "Gravity-Gone" universe. +✨ Features & Capabilities: The GanjaGuru Unleashed ✨ +1. The Gravity-Gone User Interface & Experience + * GanjaGroot Landing Page: A dynamic, animated loading screen featuring a Groot-like female cannabis figure, meticulously rendered from cannabis bud, smoking a blunt. Each puff of smoke unfurls into ephemeral, holographic information bubbles (mission, menu, services, facts, tips, gamification chances). + * Anti-Gravity Layout: Defying traditional web design, elements float, move, and interact in a fluid, non-linear space, creating an immersive, interactive cannabis cosmos. + * Advanced Multi-Modal Chatbot: + * Voice & Text Control: Seamlessly switch between speaking your desires or typing your queries. + * Hyper-Realistic AI Budtender: A highly advanced, conversational AI assistant with the personality of a "stoner zen master meets AI tutor"—relaxed, wise, witty, funky, and futuristic. + * Personalized Recommendations: Strain recommendations based on mood, desired effects, medical needs, flavor, terpene profiles, and even matching playlists or rituals. + * Grow Advice: Tailored cultivation tips for indoor/outdoor, hydro/soil, stealth setups, and auto vs. photoperiod, acting as your personal grow coach. + * Gamified Wisdom Drops: Delivers fun facts, hacks, tips, and historical insights during conversation, making learning an edutainment experience. +2. The HempPimp: Automated E-commerce & Logistics Backend +This is the silent, efficient engine driving the entire platform—your personal "HempPimp." + * Zero Inventory Model: We maintain no physical inventory. Everything is sourced, procured, and fulfilled on-demand. + * Automatic Product Procurement: AI intelligently searches online for products users want, always prioritizing eco-friendly, sustainable, and biodegradable options, sourcing from the lowest price points globally. + * Automated Dropshipping: Seamlessly handles product procurement, order fulfillment, and tracking by connecting directly with suppliers. + * Auto Customer Acquisition & Marketing: AI actively identifies potential buyers, creates targeted advertising campaigns, and markets products (including custom designs) at optimized price points for profitability. + * Auto Upselling & Sales Finalization: Intelligently upsells related items or premium services and automates the entire sales process from payment to confirmation. + * Map-Dot Delivery & Ride Share Integration: Facilitates 24/7 pinpoint location delivery globally by integrating with ride-share and specialized delivery services, ensuring "Kush delivered to your Tush." + * AI-Powered Business Coaching: Provides entrepreneurs with tips on branding, compliance (user-side), marketing, and drop-shipping strategies, and can even source workers for specific needs. +3. Immersive Design Studio: AR, VR, and 3DPoD Creativity +Unleash your inner cannabis artist and designer. + * 3DPoD & PoD Product Customization: Design and generate blueprints for 3D-printable and print-on-demand items, including: + * Custom bongs, pipes, dab rigs, grinders, rolling papers. + * Unique cannabis-themed stickers, decals, coloring pages, books, apparel (shirts, hats). + * Grow room components (shelves, brackets, full grow room designs to spec). + * Novelty items, toys, broken accessory parts, screens, etc. + * Augmented Reality (AR) & Virtual Reality (VR) Integration: + * Virtual Try-On: See how custom apparel or decals look on your own body or surfaces in your physical space via AR. + * 3D Interaction: Impressively interact with 3D models of bongs, grow rooms, or accessories. Spin, rotate, change colors, add/remove features (like a carb or stem position), all as if it's right in front of you. + * Spatial Visualization: Virtually place your designed grow room, bong, or shelf into your own space (e.g., your living room table, your garage) using AR/VR to ensure perfect fit and aesthetics. + * Automated Blueprinting & Shopping List Generation: Once a design is finalized, the AI generates comprehensive blueprints, a shopping list of eco-friendly products needed, and DIY instructions. +🚀 The Philosophy: The "Socket" They All Plug Into 🚀 +We built The Ganjaguru to be the ultimate connector. Think of the traditional "street dealer goes to his plug, who goes to his plug..." – We will be the "Socket" they all plug into. This decentralized, AI-driven model allows us to grow without limits, without physical inventory, and with an inherent focus on sustainability and user empowerment. +Legal Considerations: Our platform facilitates connections and designs, with the ultimate responsibility for local legal compliance resting with the user. This strategic approach allows us to operate globally, navigating the complex and ever-evolving cannabis legal landscape. +🎨 Aesthetics & Vibe: Retro-Futuristic Hues & Flow 🎨 +The Ganjaguru experience is defined by its unique visual and auditory signature: + * Color Palette: A rich blend of organic and digital: + * Spectrum of Marijuana Greens (deep forests to vibrant limes) + * Spectrum of Browns (earthy, rich, organic) + * Spectrum of Oranges and Reds (energetic, fiery accents) + * Spectrum of Purples (mystical, high-end strains) + * Spectrum of Yellows (uplifting, sunny vibes) + * Black, Silver, Gold, Grey (cyberpunk-futuristic, sleek, premium tech accents) + * Typography: A harmonious blend of classic and cutting-edge: + * Roboto (Modern, clean, legible) + * Futura (Sleek, geometric, futuristic) + * Sans (Versatile, accessible) + * Jazzy (Expressive, personality-driven accents) + * Poppin' (Dynamic, attention-grabbing) + * Times (Subtle classic touch for depth) +🛠️ Technologies & Frameworks (Conceptual) +The Ganjaguru is built on a foundation of cutting-edge technologies: + * AI/ML Core: Advanced Large Language Models (LLMs) fine-tuned for cannabis, Natural Language Understanding (NLU), Natural Language Generation (NLG), and Reinforcement Learning from Human Feedback (RLHF). + * Data Science: Massive, curated cannabis datasets, vector databases (for RAG), predictive analytics. + * E-commerce & Logistics: Custom e-commerce engine, automated drop-shipping APIs, IoT integration (for grow room automation), ride-share & delivery APIs, smart home connectivity. + * 3D/AR/VR: 3D modeling tools, WebGL, AR/VR frameworks (e.g., AR.js, A-Frame, Three.js), 3D printing APIs, Print-on-Demand (PoD) integrations. + * Voice Control: Speech-to-text and text-to-speech APIs, advanced voice recognition. + * Backend: Scalable microservices architecture, cloud infrastructure, robust database systems. + * Frontend: Immersive web technologies, possibly using frameworks like React or Vue.js with advanced animation libraries. +⚡️ Getting Started: Plug In and Elevate ⚡️ +To get the Ganjaguru Nexus up and running locally, follow these steps: +Prerequisites + * Node.js: v18.x or higher + * npm: v9.x or higher + * Docker & Docker Compose: For containerized services (PostgreSQL, Redis) + * Git: For cloning the repository +Installation + * Clone the Repository: + git clone https://github.com/your-org/ganjaguru-ai-platform.git ganjaguru-nexus +cd ganjaguru-nexus + + * Environment Setup: + * Create .env.development by copying .env.example: + cp .env.example .env.development + + * Edit .env.development and fill in your API keys, database credentials, and other necessary configurations. + * Install Root Dependencies: + npm install + + This will install dependencies for the root and all manifests and nexus-core packages. + * Start Dockerized Services: + docker-compose up -d + + This will bring up your local PostgreSQL database and Redis server. + * Database Migrations & Seeding: + npm run db:migrate +npm run db:seed + +Running in Development +To run all services (Frontend, Backend, AI Core) concurrently in development mode: +npm run dev + + * Frontend (Genesis Portal): Accessible typically at http://localhost:3000 or http://localhost:5173 (Vite default). + * Backend API (HempPimp Engine): Accessible typically at http://localhost:8080. + * AI Core Service (Oracle AI Mind): Runs internally, often listening on http://localhost:8081. +Building for Production +To build all production-ready artifacts: +npm run build + +Running Tests +To run all unit, integration, and API tests: +npm test + +🌐 Project Structure: The Ganjaguru Nexus Cosmology 🌐 +The project is organized as a monorepo, divided into two primary realms: + * nexus-core/: Houses the Core Intelligence & Shared Wisdom. These are reusable packages and libraries shared across all manifestations, including AI model interfaces, common types, universal utilities, and centralized database schemas. + * manifests/: Contains the Deployable Realms of Ganjaguru Power. Each sub-directory here represents an independent microservice or application: + * genesis-portal/: The dynamic, anti-gravity Frontend Web Application. + * hemp-pimp-engine/: The robust Backend API and automated E-commerce & Logistics Hub. + * oracle-ai-mind/: The dedicated AI Inference and Training Service. + * asset-forge-engine/: The 3D/AR/VR Asset Generation and Management Service. + * Additional microservices as the metaverse expands. +🤝 Contributing: Build the Cannabis Future 🤝 +We welcome contributions from visionaries, developers, and cannabis enthusiasts alike. + * Fork the Repository: Create your own branch from main. + * Follow the Git Flow: Adhere to our .git-flow/ conventions for branching and commit messages. + * Code Standards: Ensure your code passes npm run lint and npm run format. + * Tests: Write comprehensive tests for new features (npm test). + * Documentation: Update the docs/ as necessary to reflect changes. + * Submit a Pull Request: Describe your changes clearly and concisely. +📜 License & Legal +This project is currently UNLICENSED and intended for private development. All use of this platform requires adherence to local and international cannabis regulations. The Ganjaguru facilitates connections and designs; ultimate responsibility for legal compliance rests with the user. +Join the Revolution! +The Ganjaguru is more than a platform; it's a movement. We're breaking boundaries, defying gravity, and creating the future of cannabis. Get ready to plug in. -Want to try out the latest performance improvements coming with .NET for web development? - -This repo builds a Weather API, OpenAPI integration to test with [Scalar](https://learn.microsoft.com/aspnet/core/fundamentals/openapi/using-openapi-documents?view=aspnetcore-9.0#use-scalar-for-interactive-api-documentation), and displays the data in a web application using Blazor with .NET. - -We've given you both a frontend and backend to play around with and where you go from here is up to you! - -Everything you do here is contained within this one codespace. There is no repository on GitHub yet. If and when you’re ready you can click "Publish Branch" and we’ll create your repository and push up your project. If you were just exploring then and have no further need for this code then you can simply delete your codespace and it's gone forever. - -### Run Options - -[![Open in GitHub Codespaces](https://img.shields.io/static/v1?style=for-the-badge&label=GitHub+Codespaces&message=Open&color=lightgrey&logo=github)](https://codespaces.new/github/dotnet-codespaces) -[![Open in Dev Container](https://img.shields.io/static/v1?style=for-the-badge&label=Dev+Container&message=Open&color=blue&logo=visualstudiocode)](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/github/dotnet-codespaces) - -You can also run this repository locally by following these instructions: -1. Clone the repo to your local machine `git clone https://github.com/github/dotnet-codespaces` -1. Open repo in VS Code - -## Getting started - -1. **📤 One-click setup**: [Open a new Codespace](https://codespaces.new/github/dotnet-codespaces), giving you a fully configured cloud developer environment. -2. **▶️ Run all, one-click again**: Use VS Code's built-in *Run* command and open the forwarded ports *8080* and *8081* in your browser. - -![Debug menu in VS Code showing Run All](images/RunAll.png) - -3. The Blazor web app and Scalar can be open by heading to **/scalar** in your browser. On Scalar, head to the backend API and click "Test Request" to call and test the API. - -![A website showing weather](images/BlazorApp.png) - -!["UI showing testing an API"](images/scalar.png) - - -4. **🔄 Iterate quickly:** Codespaces updates the server on each save, and VS Code's debugger lets you dig into the code execution. - -5. To stop running, return to VS Code, and click Stop twice in the debug toolbar. - -![VS Code stop debuggin on both backend and frontend](images/StopRun.png) - - -## Contributing - -This project welcomes contributions and suggestions. Most contributions require you to agree to a -Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us -the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com. - -When you submit a pull request, a CLA bot will automatically determine whether you need to provide -a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions -provided by the bot. You will only need to do this once across all repos using our CLA. - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). -For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or -contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. - -## Trademarks - -This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft -trademarks or logos is subject to and must follow -[Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general). -Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. -Any use of third-party trademarks or logos are subject to those third-party's policies. From 1c2e3ce6299ac688d94e16bac5679fc4f983155e Mon Sep 17 00:00:00 2001 From: pothead1 Date: Wed, 9 Jul 2025 22:30:38 +0000 Subject: [PATCH 02/20] delete --- .devcontainer/setup.sh | 100 ----------------------------------------- 1 file changed, 100 deletions(-) delete mode 100644 .devcontainer/setup.sh diff --git a/.devcontainer/setup.sh b/.devcontainer/setup.sh deleted file mode 100644 index b91c0eda..00000000 --- a/.devcontainer/setup.sh +++ /dev/null @@ -1,100 +0,0 @@ -#!/bin/bash - -# GanjaGuru Setup Script - Oracle Ready - -# ---- Setup Variables ---- -PROJECT_NAME="GanjaGuru" -BASE_DIR="$HOME/$PROJECT_NAME" -ENV_FILE="$BASE_DIR/.env" -BASHRC_FILE="$HOME/.bashrc" - -echo "🚀 Starting GanjaGuru setup..." - -# ---- Create Folder Structure ---- -mkdir -p "$BASE_DIR"/{src,models,config,data,public,logs,temp,bin,assets/fonts,assets/images,assets/audio,docs,tests,build,ai,vr,nlp,voice,ecommerce} - -# ---- Create Root Files with Actual Content ---- -echo "# $PROJECT_NAME" > "$BASE_DIR/README.md" -echo "node_modules/" > "$BASE_DIR/.gitignore" -echo "VIRTUAL_ENV=.venv" >> "$BASE_DIR/.gitignore" - -cat < "$BASE_DIR/.env" -# 🌿 GanjaGuru .env file -PROJECT_NAME=$PROJECT_NAME -ENV=development -PORT=8080 -AI_MODE=true -VR_ENABLED=true -NLP_ENABLED=true -VOICE_ENABLED=true -DATA_TRACKING=true -EOF - -cat < "$BASE_DIR/config/settings.json" -{ -  "app": "GanjaGuru", -  "version": "1.0.0", -  "features": { -    "ai": true, -    "ml": true, -    "llm": true, -    "nlp": true, -    "vr": true, -    "ar": true, -    "voice": true, -    "ecommerce": true, -    "behaviorTracking": true -  } -} -EOF - -echo "console.log('🔥 Welcome to GanjaGuru');" > "$BASE_DIR/src/index.js" -echo "print('🌿 GanjaGuru Python module')" > "$BASE_DIR/src/main.py" - -# ---- Add Environment Variables to .bashrc ---- -if ! grep -q "GANJAGURU_HOME=" "$BASHRC_FILE"; then -  echo "export GANJAGURU_HOME=$BASE_DIR" >> "$BASHRC_FILE" -  echo "export PATH=\$GANJAGURU_HOME/bin:\$PATH" >> "$BASHRC_FILE" -  echo "export PYTHONPATH=\$GANJAGURU_HOME/src" >> "$BASHRC_FILE" - -# ---- Install Developer Tools ---- -sudo apt update && sudo apt upgrade -y - -# Core tools -sudo apt install -y git curl wget build-essential unzip zip - -# Node.js & npm -curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - -sudo apt install -y nodejs - -# Python & pip & venv -sudo apt install -y python3 python3-pip python3-venv python3-dev - -# ML/AI tools -pip3 install --upgrade pip -pip3 install numpy pandas scikit-learn flask fastapi uvicorn jupyter - -# NLP/LLM tools -pip3 install nltk spacy transformers openai - -# AR/VR/Voice tools -sudo apt install -y ffmpeg libsm6 libxext6 -pip3 install opencv-python pyttsx3 speechrecognition - -# E-Commerce / Web / Analytics -npm install express body-parser dotenv mongoose axios cors - -# Git init -cd "$BASE_DIR" && git init - -# ---- Set Full Permissions ---- -chmod -R 777 "$BASE_DIR" - -# ---- Done ---- -echo "✅ GanjaGuru project structure created at $BASE_DIR" -echo "✅ Dev tools installed: Git, Node.js, Python, AI/ML/NLP, AR/VR, Voice" -echo "✅ Permissions granted (777)" -echo "✅ .env and environment paths configured" - -# Load the env -source "$BASHRC_FILE" From aa9d0d0a7929f1ea2057809b32ddc0bce4601617 Mon Sep 17 00:00:00 2001 From: pothead1 Date: Wed, 9 Jul 2025 22:40:32 +0000 Subject: [PATCH 03/20] feat: Initialize GanjaGuru project with setup script and package.json - Added package.json with essential dependencies for the project. - Created setup.sh script to automate project setup, including folder structure, environment variables, and installation of necessary tools. - Configured .env file and settings.json for application configuration. - Included installation commands for Node.js, Python, and various libraries for AI, ML, NLP, AR/VR, and E-Commerce functionalities. --- package-lock.json | 1196 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 10 + setup.sh | 101 ++++ 3 files changed, 1307 insertions(+) create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 setup.sh diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..b99998b1 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1196 @@ +{ + "name": "dotnet-codespaces", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "axios": "^1.10.0", + "body-parser": "^2.2.0", + "cors": "^2.8.5", + "dotenv": "^17.2.0", + "express": "^5.1.0", + "mongoose": "^8.16.2" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.3.0.tgz", + "integrity": "sha512-zlayKCsIjYb7/IdfqxorK5+xUMyi4vOKcFy10wKJYc63NSdKI8mNME+uJqfatkPmOSMMUiojrL58IePKBm3gvQ==", + "license": "MIT", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==", + "license": "MIT" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "license": "MIT", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "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/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", + "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/body-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", + "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "license": "MIT", + "dependencies": { + "bytes": "^3.1.2", + "content-type": "^1.0.5", + "debug": "^4.4.0", + "http-errors": "^2.0.0", + "iconv-lite": "^0.6.3", + "on-finished": "^2.4.1", + "qs": "^6.14.0", + "raw-body": "^3.0.0", + "type-is": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/bson": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.10.4.tgz", + "integrity": "sha512-WIsKqkSC0ABoBJuT1LEX+2HEvNmNKKgnTAyd0fL8qzK4SH2i9NXg+t08YtdZp/V9IZ33cxe3iV4yM0qg8lMQng==", + "license": "Apache-2.0", + "engines": { + "node": ">=16.20.1" + } + }, + "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/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/content-disposition": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-1.0.0.tgz", + "integrity": "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==", + "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.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/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/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/dotenv": { + "version": "17.2.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.0.tgz", + "integrity": "sha512-Q4sgBT60gzd0BB0lSyYD3xM4YxrXA9y4uBDof1JNYGzOXrQdQ6yX+7XIAqoFOGQFOTK1D3Hts5OllpxMDZFONQ==", + "license": "BSD-2-Clause", + "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/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/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/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/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/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/express": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", + "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "license": "MIT", + "dependencies": { + "accepts": "^2.0.0", + "body-parser": "^2.2.0", + "content-disposition": "^1.0.0", + "content-type": "^1.0.5", + "cookie": "^0.7.1", + "cookie-signature": "^1.2.1", + "debug": "^4.4.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/finalhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", + "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "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": ">= 0.8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.3.tgz", + "integrity": "sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==", + "license": "MIT", + "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/form-data/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/form-data/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", + "integrity": "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "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/kareem": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", + "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/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/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", + "license": "MIT" + }, + "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/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/mime-types": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", + "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "license": "MIT", + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mongodb": { + "version": "6.17.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.17.0.tgz", + "integrity": "sha512-neerUzg/8U26cgruLysKEjJvoNSXhyID3RvzvdcpsIi2COYM3FS3o9nlH7fxFtefTb942dX3W9i37oPfCVj4wA==", + "license": "Apache-2.0", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.9", + "bson": "^6.10.4", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0 || ^2.0.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz", + "integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==", + "license": "Apache-2.0", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^14.1.0 || ^13.0.0" + } + }, + "node_modules/mongoose": { + "version": "8.16.2", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.16.2.tgz", + "integrity": "sha512-52T4XPhDgJL4cqooBsOORzYBH3ddMwABMEF/LV7TgvD2DEKZlnYTc2HF9ch1U2lcKjhE4pQ+WuInfLFJbguGcQ==", + "license": "MIT", + "dependencies": { + "bson": "^6.10.4", + "kareem": "2.6.3", + "mongodb": "~6.17.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "17.1.3" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "license": "MIT", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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/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/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-to-regexp": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.2.0.tgz", + "integrity": "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==", + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "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": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "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", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "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.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-3.0.0.tgz", + "integrity": "sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.6.3", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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/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/send": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/send/-/send-1.2.0.tgz", + "integrity": "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.5", + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "fresh": "^2.0.0", + "http-errors": "^2.0.0", + "mime-types": "^3.0.1", + "ms": "^2.1.3", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "statuses": "^2.0.1" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/serve-static": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-2.2.0.tgz", + "integrity": "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==", + "license": "MIT", + "dependencies": { + "encodeurl": "^2.0.0", + "escape-html": "^1.0.3", + "parseurl": "^1.3.3", + "send": "^1.2.0" + }, + "engines": { + "node": ">= 18" + } + }, + "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/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.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "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/sift": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", + "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==", + "license": "MIT" + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "license": "MIT", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "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/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/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/type-is": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-2.0.1.tgz", + "integrity": "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==", + "license": "MIT", + "dependencies": { + "content-type": "^1.0.5", + "media-typer": "^1.1.0", + "mime-types": "^3.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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/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/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..5128e38d --- /dev/null +++ b/package.json @@ -0,0 +1,10 @@ +{ + "dependencies": { + "axios": "^1.10.0", + "body-parser": "^2.2.0", + "cors": "^2.8.5", + "dotenv": "^17.2.0", + "express": "^5.1.0", + "mongoose": "^8.16.2" + } +} diff --git a/setup.sh b/setup.sh new file mode 100644 index 00000000..a23dc26c --- /dev/null +++ b/setup.sh @@ -0,0 +1,101 @@ + #!/bin/bash + +# GanjaGuru Setup Script - Oracle Ready + +# ---- Setup Variables ---- +PROJECT_NAME="GanjaGuru" +BASE_DIR="$HOME/$PROJECT_NAME" +ENV_FILE="$BASE_DIR/.env" +BASHRC_FILE="$HOME/.bashrc" + +echo "🚀 Starting GanjaGuru setup..." + +# ---- Create Folder Structure ---- +mkdir -p "$BASE_DIR"/{src,models,config,data,public,logs,temp,bin,assets/fonts,assets/images,assets/audio,docs,tests,build,ai,vr,nlp,voice,ecommerce} + +# ---- Create Root Files with Actual Content ---- +echo "# $PROJECT_NAME" > "$BASE_DIR/README.md" +echo "node_modules/" > "$BASE_DIR/.gitignore" +echo "VIRTUAL_ENV=.venv" >> "$BASE_DIR/.gitignore" + +cat < "$BASE_DIR/.env" +# 🌿 GanjaGuru .env file +PROJECT_NAME=$PROJECT_NAME +ENV=development +PORT=8080 +AI_MODE=true +VR_ENABLED=true +NLP_ENABLED=true +VOICE_ENABLED=true +DATA_TRACKING=true +EOF + +cat < "$BASE_DIR/config/settings.json" +{ + "app": "GanjaGuru", + "version": "1.0.0", + "features": { + "ai": true, + "ml": true, + "llm": true, + "nlp": true, + "vr": true, + "ar": true, + "voice": true, + "ecommerce": true, + "behaviorTracking": true + } +} +EOF + +echo "console.log('🔥 Welcome to GanjaGuru');" > "$BASE_DIR/src/index.js" +echo "print('🌿 GanjaGuru Python module')" > "$BASE_DIR/src/main.py" + +# ---- Add Environment Variables to .bashrc ---- +if ! grep -q "GANJAGURU_HOME=" "$BASHRC_FILE"; then + echo "export GANJAGURU_HOME=$BASE_DIR" >> "$BASHRC_FILE" + echo "export PATH=\$GANJAGURU_HOME/bin:\$PATH" >> "$BASHRC_FILE" + echo "export PYTHONPATH=\$GANJAGURU_HOME/src" >> "$BASHRC_FILE" +fi + +# ---- Install Developer Tools ---- +sudo apt update && sudo apt upgrade -y + +# Core tools +sudo apt install -y git curl wget build-essential unzip zip + +# Node.js & npm +curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - +sudo apt install -y nodejs + +# Python & pip & venv +sudo apt install -y python3 python3-pip python3-venv python3-dev + +# ML/AI tools +pip3 install --upgrade pip +pip3 install numpy pandas scikit-learn flask fastapi uvicorn jupyter + +# NLP/LLM tools +pip3 install nltk spacy transformers openai + +# AR/VR/Voice tools +sudo apt install -y ffmpeg libsm6 libxext6 +pip3 install opencv-python pyttsx3 speechrecognition + +# E-Commerce / Web / Analytics +npm install express body-parser dotenv mongoose axios cors + +# Git init +cd "$BASE_DIR" && git init + +# ---- Set Full Permissions ---- +chmod -R 777 "$BASE_DIR" + +# ---- Done ---- +echo "✅ GanjaGuru project structure created at $BASE_DIR" +echo "✅ Dev tools installed: Git, Node.js, Python, AI/ML/NLP, AR/VR, Voice" +echo "✅ Permissions granted (777)" +echo "✅ .env and environment paths configured" + +# Load the env +source "$BASHRC_FILE" From c25cd3a16b8236f25a7a2817c67174735a7262c1 Mon Sep 17 00:00:00 2001 From: pothead1 Date: Wed, 9 Jul 2025 22:50:47 +0000 Subject: [PATCH 04/20] update --- GanjaGuru/intents.json | 0 ganjaguru/intents.json | 519 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 519 insertions(+) create mode 100644 GanjaGuru/intents.json create mode 100644 ganjaguru/intents.json diff --git a/GanjaGuru/intents.json b/GanjaGuru/intents.json new file mode 100644 index 00000000..e69de29b diff --git a/ganjaguru/intents.json b/ganjaguru/intents.json new file mode 100644 index 00000000..85f0f0c5 --- /dev/null +++ b/ganjaguru/intents.json @@ -0,0 +1,519 @@ +{ + "intents": [ + { + "name": "GetWeatherForecast", + "description": "Retrieve the weather forecast for a specific date, range, or location, including advanced options.", + "parameters": [ + { + "name": "date", + "type": "date", + "required": false, + "description": "The date for which to get the weather forecast." + }, + { + "name": "startDate", + "type": "date", + "required": false, + "description": "Start date for a range forecast." + }, + { + "name": "endDate", + "type": "date", + "required": false, + "description": "End date for a range forecast." + }, + { + "name": "location", + "type": "string", + "required": false, + "description": "The location for the weather forecast." + }, + { + "name": "units", + "type": "string", + "required": false, + "description": "Units for temperature (Celsius, Fahrenheit, Kelvin)." + }, + { + "name": "detailed", + "type": "boolean", + "required": false, + "description": "Whether to include detailed hourly or daily breakdowns." + }, + { + "name": "language", + "type": "string", + "required": false, + "description": "Preferred language for the response." + } + ], + "responses": [ + "The weather on {date} in {location} will be {summary} with a temperature of {temperatureC}°C ({temperatureF}°F).", + "Forecast for {date} in {location}: {summary}, {temperatureC}°C / {temperatureF}°F.", + "From {startDate} to {endDate} in {location}, expect {summary}. High: {maxTemperatureC}°C, Low: {minTemperatureC}°C.", + "Detailed forecast for {location} on {date}: {details}" + ], + "examples": [ + "What's the weather like tomorrow?", + "Show me the forecast for New York on Friday.", + "Weather in Amsterdam next week.", + "Give me a detailed hourly forecast for Tokyo in Japanese.", + "What will the weather be in Paris from July 10 to July 15 in Fahrenheit?" + ] + }, + { + "name": "SummarizeWeather", + "description": "Summarize the weather forecast for a given period, location, or trend analysis.", + "parameters": [ + { + "name": "startDate", + "type": "date", + "required": true, + "description": "Start date of the period." + }, + { + "name": "endDate", + "type": "date", + "required": true, + "description": "End date of the period." + }, + { + "name": "location", + "type": "string", + "required": false, + "description": "The location for the summary." + }, + { + "name": "trendAnalysis", + "type": "boolean", + "required": false, + "description": "Whether to include weather trends and anomalies." + }, + { + "name": "units", + "type": "string", + "required": false, + "description": "Units for temperature (Celsius, Fahrenheit, Kelvin)." + } + ], + "responses": [ + "From {startDate} to {endDate} in {location}, the weather will be mostly {summary}. Average temperature: {avgTemperatureC}°C ({avgTemperatureF}°F).", + "Trend analysis: {trendDetails}" + ], + "examples": [ + "Summarize the weather for this week.", + "Give me a weather summary for Paris from Monday to Friday.", + "Show weather trends for Berlin in June.", + "Was there any unusual weather in London last month?" + ] + }, + { + "name": "GetCannabisStrainInfo", + "description": "Retrieve detailed information about a specific cannabis strain, including effects, flavors, and medical uses.", + "parameters": [ + { + "name": "strainName", + "type": "string", + "required": true, + "description": "The name of the cannabis strain." + }, + { + "name": "infoType", + "type": "string", + "required": false, + "description": "Type of information (effects, flavors, medical, grow, genetics, etc.)." + }, + { + "name": "language", + "type": "string", + "required": false, + "description": "Preferred language for the response." + } + ], + "responses": [ + "{strainName}: {description} Effects: {effects}. Flavors: {flavors}. Medical uses: {medicalUses}.", + "Strain {strainName} details: {details}" + ], + "examples": [ + "Tell me about Blue Dream.", + "What are the effects of OG Kush?", + "Describe the flavor profile of Gelato.", + "Medical uses for Harlequin?" + ] + }, + { + "name": "FindDispensaries", + "description": "Find nearby cannabis dispensaries based on location, product, or rating.", + "parameters": [ + { + "name": "location", + "type": "string", + "required": true, + "description": "The location to search for dispensaries." + }, + { + "name": "productType", + "type": "string", + "required": false, + "description": "Type of product (flower, edibles, concentrates, etc.)." + }, + { + "name": "minRating", + "type": "number", + "required": false, + "description": "Minimum rating for dispensaries." + }, + { + "name": "openNow", + "type": "boolean", + "required": false, + "description": "Whether to only show currently open dispensaries." + } + ], + "responses": [ + "Here are dispensaries near {location}: {dispensaryList}", + "Top-rated dispensaries in {location}: {topDispensaries}" + ], + "examples": [ + "Find dispensaries near me.", + "Show me dispensaries in Denver with edibles.", + "Best rated dispensaries in Los Angeles open now." + ] + }, + { + "name": "GetCannabisLaws", + "description": "Provide up-to-date cannabis laws and regulations for a specific location.", + "parameters": [ + { + "name": "location", + "type": "string", + "required": true, + "description": "The location to get cannabis laws for." + }, + { + "name": "lawType", + "type": "string", + "required": false, + "description": "Type of law (possession, cultivation, medical, recreational, etc.)." + }, + { + "name": "language", + "type": "string", + "required": false, + "description": "Preferred language for the response." + } + ], + "responses": [ + "Cannabis laws in {location}: {lawSummary}", + "In {location}, {lawType} laws: {lawDetails}" + ], + "examples": [ + "What are the cannabis laws in California?", + "Is recreational cannabis legal in Canada?", + "Medical marijuana laws in Florida." + ] + }, + { + "name": "SuggestCannabisProducts", + "description": "Suggest cannabis products based on user preferences, effects, or medical needs.", + "parameters": [ + { + "name": "desiredEffects", + "type": "string", + "required": false, + "description": "Desired effects (relaxation, focus, pain relief, etc.)." + }, + { + "name": "flavorProfile", + "type": "string", + "required": false, + "description": "Preferred flavor profile (citrus, earthy, sweet, etc.)." + }, + { + "name": "medicalCondition", + "type": "string", + "required": false, + "description": "Medical condition to address." + }, + { + "name": "productType", + "type": "string", + "required": false, + "description": "Type of product (flower, edible, tincture, etc.)." + } + ], + "responses": [ + "Based on your preferences, try: {productList}", + "Recommended products for {medicalCondition}: {productList}" + ], + "examples": [ + "Suggest a strain for anxiety.", + "What edible is good for sleep?", + "Best products for pain relief with citrus flavor." + ] + }, + { + "name": "GetCannabisEvents", + "description": "Find cannabis-related events, expos, or festivals by location and date.", + "parameters": [ + { + "name": "location", + "type": "string", + "required": false, + "description": "Location to search for events." + }, + { + "name": "date", + "type": "date", + "required": false, + "description": "Date or date range for events." + }, + { + "name": "eventType", + "type": "string", + "required": false, + "description": "Type of event (expo, festival, seminar, etc.)." + } + ], + "responses": [ + "Upcoming cannabis events in {location} on {date}: {eventList}", + "No events found for your criteria." + ], + "examples": [ + "Are there any cannabis expos in Las Vegas this month?", + "Find festivals in California this summer." + ] + }, + { + "name": "GetGrowAdvice", + "description": "Provide advice for growing cannabis, including tips for indoor/outdoor, nutrients, and troubleshooting.", + "parameters": [ + { + "name": "growType", + "type": "string", + "required": false, + "description": "Indoor or outdoor growing." + }, + { + "name": "strainName", + "type": "string", + "required": false, + "description": "Strain to get specific advice for." + }, + { + "name": "issue", + "type": "string", + "required": false, + "description": "Specific problem or question (e.g., yellow leaves, pests)." + } + ], + "responses": [ + "Advice for {growType} growing {strainName}: {advice}", + "Troubleshooting {issue}: {solution}" + ], + "examples": [ + "How do I grow OG Kush indoors?", + "Why are my cannabis leaves turning yellow?" + ] + }, + { + "name": "GetProductReviews", + "description": "Retrieve reviews for cannabis products or dispensaries.", + "parameters": [ + { + "name": "productName", + "type": "string", + "required": true, + "description": "Name of the product or dispensary." + }, + { + "name": "reviewType", + "type": "string", + "required": false, + "description": "Type of review (user, expert, etc.)." + } + ], + "responses": [ + "Reviews for {productName}: {reviewList}", + "No reviews found for {productName}." + ], + "examples": [ + "Show reviews for Blue Dream flower.", + "What do people say about Green Leaf Dispensary?" + ] + }, + { + "name": "GetCannabisNews", + "description": "Get the latest news about cannabis, legalization, research, and industry trends.", + "parameters": [ + { + "name": "topic", + "type": "string", + "required": false, + "description": "Topic to filter news (legalization, research, business, etc.)." + }, + { + "name": "location", + "type": "string", + "required": false, + "description": "Location to filter news." + } + ], + "responses": [ + "Latest news on {topic} in {location}: {newsList}", + "No recent news found for your criteria." + ], + "examples": [ + "What's new in cannabis research?", + "Show me cannabis legalization news in Germany." + ] + }, + { + "name": "GetCannabisRecipes", + "description": "Suggest recipes for cannabis edibles, tinctures, or infusions.", + "parameters": [ + { + "name": "recipeType", + "type": "string", + "required": false, + "description": "Type of recipe (edible, tincture, beverage, etc.)." + }, + { + "name": "mainIngredient", + "type": "string", + "required": false, + "description": "Main ingredient to include." + }, + { + "name": "dietaryPreference", + "type": "string", + "required": false, + "description": "Dietary preference (vegan, gluten-free, etc.)." + } + ], + "responses": [ + "Here's a {recipeType} recipe: {recipeDetails}", + "Try this {dietaryPreference} edible: {recipeDetails}" + ], + "examples": [ + "Give me a vegan cannabis brownie recipe.", + "How do I make a cannabis tincture?" + ] + }, + { + "name": "GetWellnessTips", + "description": "Provide wellness and harm reduction tips for cannabis users.", + "parameters": [ + { + "name": "topic", + "type": "string", + "required": false, + "description": "Wellness topic (sleep, anxiety, dosage, etc.)." + } + ], + "responses": [ + "Wellness tip for {topic}: {tip}", + "General cannabis wellness advice: {tip}" + ], + "examples": [ + "How can I use cannabis for better sleep?", + "Tips for safe cannabis consumption." + ] + }, + { + "name": "GetStrainComparison", + "description": "Compare two or more cannabis strains by effects, flavors, and medical uses.", + "parameters": [ + { + "name": "strainNames", + "type": "array", + "required": true, + "description": "List of strains to compare." + }, + { + "name": "criteria", + "type": "string", + "required": false, + "description": "Comparison criteria (effects, flavor, grow, etc.)." + } + ], + "responses": [ + "Comparison of {strainNames}: {comparisonDetails}" + ], + "examples": [ + "Compare Blue Dream and Sour Diesel.", + "Which is better for pain: Harlequin or ACDC?" + ] + }, + { + "name": "GetCannabisHistory", + "description": "Provide historical information about cannabis, its uses, and legalization timeline.", + "parameters": [ + { + "name": "topic", + "type": "string", + "required": false, + "description": "Specific aspect of history (legalization, medical, cultural, etc.)." + }, + { + "name": "location", + "type": "string", + "required": false, + "description": "Location to focus the history on." + } + ], + "responses": [ + "History of cannabis in {location}: {historyDetails}", + "Timeline for {topic}: {timelineDetails}" + ], + "examples": [ + "Tell me about the history of cannabis in India.", + "When was cannabis legalized in Canada?" + ] + }, + { + "name": "GetCannabisSlang", + "description": "Explain cannabis-related slang or terminology.", + "parameters": [ + { + "name": "term", + "type": "string", + "required": true, + "description": "Slang term or phrase to explain." + }, + { + "name": "language", + "type": "string", + "required": false, + "description": "Preferred language for the explanation." + } + ], + "responses": [ + "{term}: {definition}" + ], + "examples": [ + "What does 'dank' mean?", + "Explain the term '710'." + ] + }, + { + "name": "GetCannabisScience", + "description": "Provide scientific information about cannabinoids, terpenes, and the endocannabinoid system.", + "parameters": [ + { + "name": "topic", + "type": "string", + "required": false, + "description": "Scientific topic (THC, CBD, terpenes, ECS, etc.)." + } + ], + "responses": [ + "Scientific info on {topic}: {scienceDetails}" + ], + "examples": [ + "What is the endocannabinoid system?", + "Tell me about terpenes in cannabis." + ] + } + ] +} From a384f9debf03151a5c20b214b3498ee6f4bba216 Mon Sep 17 00:00:00 2001 From: pothead1 Date: Wed, 9 Jul 2025 23:09:43 +0000 Subject: [PATCH 05/20] new --- ganjaguru/cannabis_training.json | 105 +++++++++++++++++++++++ ganjaguru/weather_forecast_training.json | 58 +++++++++++++ ganjaguru/weather_training.json | 0 3 files changed, 163 insertions(+) create mode 100644 ganjaguru/cannabis_training.json create mode 100644 ganjaguru/weather_forecast_training.json create mode 100644 ganjaguru/weather_training.json diff --git a/ganjaguru/cannabis_training.json b/ganjaguru/cannabis_training.json new file mode 100644 index 00000000..74771a1b --- /dev/null +++ b/ganjaguru/cannabis_training.json @@ -0,0 +1,105 @@ +{ + "training_examples": [ + { + "intent": "GetCannabisStrainInfo", + "input": "Tell me about Blue Dream.", + "parameters": { "strainName": "Blue Dream" }, + "expectedApiCall": "GET /strains/info?strainName=Blue%20Dream", + "expectedResponse": { + "strainName": "Blue Dream", + "description": "A popular hybrid strain known for its balanced effects.", + "effects": ["Relaxed", "Happy", "Creative"], + "flavors": ["Berry", "Sweet", "Earthy"], + "medicalUses": ["Stress", "Depression", "Pain"] + } + }, + { + "intent": "FindDispensaries", + "input": "Show me dispensaries in Denver with edibles.", + "parameters": { "location": "Denver", "productType": "edibles" }, + "expectedApiCall": "GET /dispensaries?location=Denver&productType=edibles", + "expectedResponse": [ + { "name": "Green Leaf", "rating": 4.8, "address": "123 Main St, Denver" }, + { "name": "Mile High Edibles", "rating": 4.6, "address": "456 Broadway, Denver" } + ] + }, + { + "intent": "GetCannabisLaws", + "input": "What are the cannabis laws in California?", + "parameters": { "location": "California" }, + "expectedApiCall": "GET /laws?location=California", + "expectedResponse": { + "location": "California", + "lawSummary": "Recreational and medical cannabis are legal for adults 21+ with possession limits." + } + }, + { + "intent": "SuggestCannabisProducts", + "input": "Suggest a strain for anxiety.", + "parameters": { "desiredEffects": "anxiety" }, + "expectedApiCall": "GET /products/suggest?desiredEffects=anxiety", + "expectedResponse": [ + { "name": "Harlequin", "type": "flower", "effects": ["Calm", "Focused"] }, + { "name": "ACDC", "type": "flower", "effects": ["Relaxed", "Uplifted"] } + ] + }, + { + "intent": "GetCannabisEvents", + "input": "Are there any cannabis expos in Las Vegas this month?", + "parameters": { "location": "Las Vegas", "eventType": "expo" }, + "expectedApiCall": "GET /events?location=Las%20Vegas&eventType=expo", + "expectedResponse": [ + { "name": "Vegas Cannabis Expo", "date": "2025-07-20", "venue": "Convention Center" } + ] + }, + { + "intent": "GetGrowAdvice", + "input": "Why are my cannabis leaves turning yellow?", + "parameters": { "issue": "yellow leaves" }, + "expectedApiCall": "GET /grow/advice?issue=yellow%20leaves", + "expectedResponse": { + "issue": "yellow leaves", + "solution": "Check for overwatering, nutrient deficiencies, or pH imbalance." + } + }, + { + "intent": "GetProductReviews", + "input": "Show reviews for Blue Dream flower.", + "parameters": { "productName": "Blue Dream flower" }, + "expectedApiCall": "GET /reviews?productName=Blue%20Dream%20flower", + "expectedResponse": [ + { "user": "420fan", "rating": 5, "comment": "Great balanced high!" }, + { "user": "medicinalMike", "rating": 4, "comment": "Helped with my pain." } + ] + }, + { + "intent": "GetCannabisNews", + "input": "Show me cannabis legalization news in Germany.", + "parameters": { "topic": "legalization", "location": "Germany" }, + "expectedApiCall": "GET /news?topic=legalization&location=Germany", + "expectedResponse": [ + { "headline": "Germany Moves Forward with Legalization", "date": "2025-07-01" } + ] + }, + { + "intent": "GetCannabisRecipes", + "input": "Give me a vegan cannabis brownie recipe.", + "parameters": { "recipeType": "edible", "dietaryPreference": "vegan" }, + "expectedApiCall": "GET /recipes?recipeType=edible&dietaryPreference=vegan", + "expectedResponse": { + "name": "Vegan Cannabis Brownies", + "ingredients": ["cannabis-infused coconut oil", "flour", "cocoa powder", "sugar", "almond milk"], + "instructions": "Mix ingredients, bake at 180C for 25 minutes." + } + }, + { + "intent": "GetWellnessTips", + "input": "How can I use cannabis for better sleep?", + "parameters": { "topic": "sleep" }, + "expectedApiCall": "GET /wellness/tips?topic=sleep", + "expectedResponse": { + "tip": "Try indica strains with higher myrcene content and avoid screens before bed." + } + } + ] +} diff --git a/ganjaguru/weather_forecast_training.json b/ganjaguru/weather_forecast_training.json new file mode 100644 index 00000000..e7c6d146 --- /dev/null +++ b/ganjaguru/weather_forecast_training.json @@ -0,0 +1,58 @@ +{ + "training_examples": [ + { + "intent": "GetWeatherForecast", + "input": "Show me the weather forecast starting July 10.", + "parameters": { + "startDate": "2025-07-10" + }, + "expectedApiCall": "GET WeatherForecast?startDate=2025-07-10", + "expectedResponse": [ + { + "Date": "2025-07-10", + "TemperatureC": 23, + "TemperatureF": 73, + "Summary": "Sunny" + }, + { + "Date": "2025-07-11", + "TemperatureC": 21, + "TemperatureF": 70, + "Summary": "Cloudy" + } + ] + }, + { + "intent": "GetWeatherForecast", + "input": "Weather forecast for next week?", + "parameters": { + "startDate": "2025-07-14" + }, + "expectedApiCall": "GET WeatherForecast?startDate=2025-07-14", + "expectedResponse": "[ ...array of WeatherForecast objects for the week... ]" + }, + { + "intent": "GetWeatherForecast", + "input": "Give me the forecast for today.", + "parameters": { + "startDate": "2025-07-09" + }, + "expectedApiCall": "GET WeatherForecast?startDate=2025-07-09", + "expectedResponse": [ + { + "Date": "2025-07-09", + "TemperatureC": 25, + "TemperatureF": 77, + "Summary": "Partly cloudy" + } + ] + }, + { + "intent": "GetWeatherForecast", + "input": "What is the weather if I don't specify a date?", + "parameters": {}, + "expectedApiCall": "GET WeatherForecast?startDate=", + "expectedResponse": "[ ...default forecast array... ]" + } + ] +} diff --git a/ganjaguru/weather_training.json b/ganjaguru/weather_training.json new file mode 100644 index 00000000..e69de29b From 88a9685e07b96f651114bb37963f49492a40fd27 Mon Sep 17 00:00:00 2001 From: pothead1 Date: Wed, 9 Jul 2025 23:13:11 +0000 Subject: [PATCH 06/20] add --- ret.sh | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 ret.sh diff --git a/ret.sh b/ret.sh new file mode 100644 index 00000000..36ea406f --- /dev/null +++ b/ret.sh @@ -0,0 +1,55 @@ + #!/bin/bash + +echo "🚀 Setting up GanjaGuru training suite..." + +# Base directory +BASE_DIR="$HOME/ganjaguru/training" +mkdir -p "$BASE_DIR" + +# File list +FILES=( + "intents.json" + "stories.md" + "responses.yml" + "domain.yml" + "nlu.yml" + "rules.yml" + "forms.yml" + "entities.json" + "slots.json" + "lookup_tables.json" + "synonyms.json" + "example_chats.md" + "prompts.yml" + "conversation_flows.md" + "utterances.json" + "training_data.md" + "context_examples.json" + "fallback_patterns.yml" + "dialogue_patterns.md" + "mood_templates.yml" + "question_templates.yml" + "story_graph.json" +) + +# Generate files +for FILE in "${FILES[@]}"; do + touch "$BASE_DIR/$FILE" + chmod 777 "$BASE_DIR/$FILE" + echo "🌿 Created $FILE" +done + +# Set environment variables +echo "📦 Exporting environment variables..." +echo "export GANJAGURU_HOME=$HOME/ganjaguru" >> ~/.bashrc +echo "export TRAINING_DIR=$BASE_DIR" >> ~/.bashrc +echo "export PATH=\$GANJAGURU_HOME/bin:\$PATH" >> ~/.bashrc +source ~/.bashrc + +# Git init +cd "$HOME/ganjaguru" +git init +git add . +git commit -m "Initial commit of GanjaGuru training structure" + +echo "✅ GanjaGuru training suite ready at: $BASE_DIR" \ No newline at end of file From b1676527452a4e1f459ce2ac33398bf2641c0323 Mon Sep 17 00:00:00 2001 From: pothead1 Date: Wed, 9 Jul 2025 23:19:09 +0000 Subject: [PATCH 07/20] feat: Add GanjaGuru training suite setup script --- readme.md | 131 ----------------------------------------------- ret.sh => run.sh | 6 +-- 2 files changed, 3 insertions(+), 134 deletions(-) delete mode 100644 readme.md rename ret.sh => run.sh (89%) diff --git a/readme.md b/readme.md deleted file mode 100644 index 07b8fd4c..00000000 --- a/readme.md +++ /dev/null @@ -1,131 +0,0 @@ -🌿💨 The Ganjaguru: Your Cosmic Cannabis Concierge 🌌🚀 -"From Seed to Smoke, We've Got You Covered – Eco-Friendly, Tech-Driven, and Always Lit." -Overview: Plugging into the Cannabis Future -Welcome to The Ganjaguru—the "Socket" for all things cannabis. This isn't just an e-commerce platform; it's an AI-powered, gamified, fully-automated, interactive cannabis metaverse designed to revolutionize how the world connects with cannabis. We're mixing the wisdom of Willie, the flow of Snoop, the hustle of TuPac, the precision of Bruce Lee, and the vision of John Lennon into an AI-flavored blunt wrap, smoked by the swagger-filled college kid who just leveled up their entire experience. -The Ganjaguru is the Amazon, Netflix, and Uber of weed, all rolled into one cyberpunk-futuristic, AI-driven beast of a platform. Immersive. Monetized. Sustainable. Interactive. Animated. AI-Powered. Every element feeds into a self-sustaining revenue engine—no inventory, all automation, passive income on autopilot. -Whether you're 18 or older, anywhere in the world, if you're thinking about anything cannabis-related, you type, you speak, and BOOM! You're plugged into our "Gravity-Gone" universe. -✨ Features & Capabilities: The GanjaGuru Unleashed ✨ -1. The Gravity-Gone User Interface & Experience - * GanjaGroot Landing Page: A dynamic, animated loading screen featuring a Groot-like female cannabis figure, meticulously rendered from cannabis bud, smoking a blunt. Each puff of smoke unfurls into ephemeral, holographic information bubbles (mission, menu, services, facts, tips, gamification chances). - * Anti-Gravity Layout: Defying traditional web design, elements float, move, and interact in a fluid, non-linear space, creating an immersive, interactive cannabis cosmos. - * Advanced Multi-Modal Chatbot: - * Voice & Text Control: Seamlessly switch between speaking your desires or typing your queries. - * Hyper-Realistic AI Budtender: A highly advanced, conversational AI assistant with the personality of a "stoner zen master meets AI tutor"—relaxed, wise, witty, funky, and futuristic. - * Personalized Recommendations: Strain recommendations based on mood, desired effects, medical needs, flavor, terpene profiles, and even matching playlists or rituals. - * Grow Advice: Tailored cultivation tips for indoor/outdoor, hydro/soil, stealth setups, and auto vs. photoperiod, acting as your personal grow coach. - * Gamified Wisdom Drops: Delivers fun facts, hacks, tips, and historical insights during conversation, making learning an edutainment experience. -2. The HempPimp: Automated E-commerce & Logistics Backend -This is the silent, efficient engine driving the entire platform—your personal "HempPimp." - * Zero Inventory Model: We maintain no physical inventory. Everything is sourced, procured, and fulfilled on-demand. - * Automatic Product Procurement: AI intelligently searches online for products users want, always prioritizing eco-friendly, sustainable, and biodegradable options, sourcing from the lowest price points globally. - * Automated Dropshipping: Seamlessly handles product procurement, order fulfillment, and tracking by connecting directly with suppliers. - * Auto Customer Acquisition & Marketing: AI actively identifies potential buyers, creates targeted advertising campaigns, and markets products (including custom designs) at optimized price points for profitability. - * Auto Upselling & Sales Finalization: Intelligently upsells related items or premium services and automates the entire sales process from payment to confirmation. - * Map-Dot Delivery & Ride Share Integration: Facilitates 24/7 pinpoint location delivery globally by integrating with ride-share and specialized delivery services, ensuring "Kush delivered to your Tush." - * AI-Powered Business Coaching: Provides entrepreneurs with tips on branding, compliance (user-side), marketing, and drop-shipping strategies, and can even source workers for specific needs. -3. Immersive Design Studio: AR, VR, and 3DPoD Creativity -Unleash your inner cannabis artist and designer. - * 3DPoD & PoD Product Customization: Design and generate blueprints for 3D-printable and print-on-demand items, including: - * Custom bongs, pipes, dab rigs, grinders, rolling papers. - * Unique cannabis-themed stickers, decals, coloring pages, books, apparel (shirts, hats). - * Grow room components (shelves, brackets, full grow room designs to spec). - * Novelty items, toys, broken accessory parts, screens, etc. - * Augmented Reality (AR) & Virtual Reality (VR) Integration: - * Virtual Try-On: See how custom apparel or decals look on your own body or surfaces in your physical space via AR. - * 3D Interaction: Impressively interact with 3D models of bongs, grow rooms, or accessories. Spin, rotate, change colors, add/remove features (like a carb or stem position), all as if it's right in front of you. - * Spatial Visualization: Virtually place your designed grow room, bong, or shelf into your own space (e.g., your living room table, your garage) using AR/VR to ensure perfect fit and aesthetics. - * Automated Blueprinting & Shopping List Generation: Once a design is finalized, the AI generates comprehensive blueprints, a shopping list of eco-friendly products needed, and DIY instructions. -🚀 The Philosophy: The "Socket" They All Plug Into 🚀 -We built The Ganjaguru to be the ultimate connector. Think of the traditional "street dealer goes to his plug, who goes to his plug..." – We will be the "Socket" they all plug into. This decentralized, AI-driven model allows us to grow without limits, without physical inventory, and with an inherent focus on sustainability and user empowerment. -Legal Considerations: Our platform facilitates connections and designs, with the ultimate responsibility for local legal compliance resting with the user. This strategic approach allows us to operate globally, navigating the complex and ever-evolving cannabis legal landscape. -🎨 Aesthetics & Vibe: Retro-Futuristic Hues & Flow 🎨 -The Ganjaguru experience is defined by its unique visual and auditory signature: - * Color Palette: A rich blend of organic and digital: - * Spectrum of Marijuana Greens (deep forests to vibrant limes) - * Spectrum of Browns (earthy, rich, organic) - * Spectrum of Oranges and Reds (energetic, fiery accents) - * Spectrum of Purples (mystical, high-end strains) - * Spectrum of Yellows (uplifting, sunny vibes) - * Black, Silver, Gold, Grey (cyberpunk-futuristic, sleek, premium tech accents) - * Typography: A harmonious blend of classic and cutting-edge: - * Roboto (Modern, clean, legible) - * Futura (Sleek, geometric, futuristic) - * Sans (Versatile, accessible) - * Jazzy (Expressive, personality-driven accents) - * Poppin' (Dynamic, attention-grabbing) - * Times (Subtle classic touch for depth) -🛠️ Technologies & Frameworks (Conceptual) -The Ganjaguru is built on a foundation of cutting-edge technologies: - * AI/ML Core: Advanced Large Language Models (LLMs) fine-tuned for cannabis, Natural Language Understanding (NLU), Natural Language Generation (NLG), and Reinforcement Learning from Human Feedback (RLHF). - * Data Science: Massive, curated cannabis datasets, vector databases (for RAG), predictive analytics. - * E-commerce & Logistics: Custom e-commerce engine, automated drop-shipping APIs, IoT integration (for grow room automation), ride-share & delivery APIs, smart home connectivity. - * 3D/AR/VR: 3D modeling tools, WebGL, AR/VR frameworks (e.g., AR.js, A-Frame, Three.js), 3D printing APIs, Print-on-Demand (PoD) integrations. - * Voice Control: Speech-to-text and text-to-speech APIs, advanced voice recognition. - * Backend: Scalable microservices architecture, cloud infrastructure, robust database systems. - * Frontend: Immersive web technologies, possibly using frameworks like React or Vue.js with advanced animation libraries. -⚡️ Getting Started: Plug In and Elevate ⚡️ -To get the Ganjaguru Nexus up and running locally, follow these steps: -Prerequisites - * Node.js: v18.x or higher - * npm: v9.x or higher - * Docker & Docker Compose: For containerized services (PostgreSQL, Redis) - * Git: For cloning the repository -Installation - * Clone the Repository: - git clone https://github.com/your-org/ganjaguru-ai-platform.git ganjaguru-nexus -cd ganjaguru-nexus - - * Environment Setup: - * Create .env.development by copying .env.example: - cp .env.example .env.development - - * Edit .env.development and fill in your API keys, database credentials, and other necessary configurations. - * Install Root Dependencies: - npm install - - This will install dependencies for the root and all manifests and nexus-core packages. - * Start Dockerized Services: - docker-compose up -d - - This will bring up your local PostgreSQL database and Redis server. - * Database Migrations & Seeding: - npm run db:migrate -npm run db:seed - -Running in Development -To run all services (Frontend, Backend, AI Core) concurrently in development mode: -npm run dev - - * Frontend (Genesis Portal): Accessible typically at http://localhost:3000 or http://localhost:5173 (Vite default). - * Backend API (HempPimp Engine): Accessible typically at http://localhost:8080. - * AI Core Service (Oracle AI Mind): Runs internally, often listening on http://localhost:8081. -Building for Production -To build all production-ready artifacts: -npm run build - -Running Tests -To run all unit, integration, and API tests: -npm test - -🌐 Project Structure: The Ganjaguru Nexus Cosmology 🌐 -The project is organized as a monorepo, divided into two primary realms: - * nexus-core/: Houses the Core Intelligence & Shared Wisdom. These are reusable packages and libraries shared across all manifestations, including AI model interfaces, common types, universal utilities, and centralized database schemas. - * manifests/: Contains the Deployable Realms of Ganjaguru Power. Each sub-directory here represents an independent microservice or application: - * genesis-portal/: The dynamic, anti-gravity Frontend Web Application. - * hemp-pimp-engine/: The robust Backend API and automated E-commerce & Logistics Hub. - * oracle-ai-mind/: The dedicated AI Inference and Training Service. - * asset-forge-engine/: The 3D/AR/VR Asset Generation and Management Service. - * Additional microservices as the metaverse expands. -🤝 Contributing: Build the Cannabis Future 🤝 -We welcome contributions from visionaries, developers, and cannabis enthusiasts alike. - * Fork the Repository: Create your own branch from main. - * Follow the Git Flow: Adhere to our .git-flow/ conventions for branching and commit messages. - * Code Standards: Ensure your code passes npm run lint and npm run format. - * Tests: Write comprehensive tests for new features (npm test). - * Documentation: Update the docs/ as necessary to reflect changes. - * Submit a Pull Request: Describe your changes clearly and concisely. -📜 License & Legal -This project is currently UNLICENSED and intended for private development. All use of this platform requires adherence to local and international cannabis regulations. The Ganjaguru facilitates connections and designs; ultimate responsibility for legal compliance rests with the user. -Join the Revolution! -The Ganjaguru is more than a platform; it's a movement. We're breaking boundaries, defying gravity, and creating the future of cannabis. Get ready to plug in. - diff --git a/ret.sh b/run.sh similarity index 89% rename from ret.sh rename to run.sh index 36ea406f..efbd47a9 100644 --- a/ret.sh +++ b/run.sh @@ -32,14 +32,14 @@ FILES=( "story_graph.json" ) -# Generate files +# Generate files and set permissions for FILE in "${FILES[@]}"; do touch "$BASE_DIR/$FILE" chmod 777 "$BASE_DIR/$FILE" echo "🌿 Created $FILE" done -# Set environment variables +# Export environment variables echo "📦 Exporting environment variables..." echo "export GANJAGURU_HOME=$HOME/ganjaguru" >> ~/.bashrc echo "export TRAINING_DIR=$BASE_DIR" >> ~/.bashrc @@ -52,4 +52,4 @@ git init git add . git commit -m "Initial commit of GanjaGuru training structure" -echo "✅ GanjaGuru training suite ready at: $BASE_DIR" \ No newline at end of file +echo "✅ GanjaGuru training suite ready at: $BASE_DIR" From 79f7f6946c5aaedb011f7b8d3f6e246ac48eb950 Mon Sep 17 00:00:00 2001 From: pothead1 Date: Wed, 9 Jul 2025 23:22:14 +0000 Subject: [PATCH 08/20] chore: Remove run.sh script and add empty set.sh file --- SampleApp/set.sh | 0 run.sh | 55 ------------------------------------------------ 2 files changed, 55 deletions(-) create mode 100644 SampleApp/set.sh delete mode 100644 run.sh diff --git a/SampleApp/set.sh b/SampleApp/set.sh new file mode 100644 index 00000000..e69de29b diff --git a/run.sh b/run.sh deleted file mode 100644 index efbd47a9..00000000 --- a/run.sh +++ /dev/null @@ -1,55 +0,0 @@ - #!/bin/bash - -echo "🚀 Setting up GanjaGuru training suite..." - -# Base directory -BASE_DIR="$HOME/ganjaguru/training" -mkdir -p "$BASE_DIR" - -# File list -FILES=( - "intents.json" - "stories.md" - "responses.yml" - "domain.yml" - "nlu.yml" - "rules.yml" - "forms.yml" - "entities.json" - "slots.json" - "lookup_tables.json" - "synonyms.json" - "example_chats.md" - "prompts.yml" - "conversation_flows.md" - "utterances.json" - "training_data.md" - "context_examples.json" - "fallback_patterns.yml" - "dialogue_patterns.md" - "mood_templates.yml" - "question_templates.yml" - "story_graph.json" -) - -# Generate files and set permissions -for FILE in "${FILES[@]}"; do - touch "$BASE_DIR/$FILE" - chmod 777 "$BASE_DIR/$FILE" - echo "🌿 Created $FILE" -done - -# Export environment variables -echo "📦 Exporting environment variables..." -echo "export GANJAGURU_HOME=$HOME/ganjaguru" >> ~/.bashrc -echo "export TRAINING_DIR=$BASE_DIR" >> ~/.bashrc -echo "export PATH=\$GANJAGURU_HOME/bin:\$PATH" >> ~/.bashrc -source ~/.bashrc - -# Git init -cd "$HOME/ganjaguru" -git init -git add . -git commit -m "Initial commit of GanjaGuru training structure" - -echo "✅ GanjaGuru training suite ready at: $BASE_DIR" From 9ee1b627ab3d930bce6ceafe02c5201dcf5c1448 Mon Sep 17 00:00:00 2001 From: pothead1 Date: Wed, 9 Jul 2025 23:25:30 +0000 Subject: [PATCH 09/20] chore: Initialize GanjaGuru training suite setup script --- SampleApp/set.sh | 67 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/SampleApp/set.sh b/SampleApp/set.sh index e69de29b..4e151e84 100644 --- a/SampleApp/set.sh +++ b/SampleApp/set.sh @@ -0,0 +1,67 @@ + #!/bin/bash + +echo "🚀 Setting up GanjaGuru training suite..." + +BASE_DIR="$HOME/ganjaguru/training" +mkdir -p "$BASE_DIR" + +FILES=( + "intents.json" + "stories.md" + "responses.yml" + "domain.yml" + "nlu.yml" + "rules.yml" + "forms.yml" + "entities.json" + "slots.json" + "lookup_tables.json" + "synonyms.json" + "example_chats.md" + "prompts.yml" + "conversation_flows.md" + "utterances.json" + "training_data.md" + "context_examples.json" + "fallback_patterns.yml" + "dialogue_patterns.md" + "mood_templates.yml" + "question_templates.yml" + "story_graph.json" +) + +for FILE in "${FILES[@]}"; do + touch "$BASE_DIR/$FILE" + chmod 777 "$BASE_DIR/$FILE" + echo "🌿 Created $FILE" +done + +echo "📦 Exporting environment variables..." + +# Check if env vars already set in .bashrc before appending +if ! grep -q "GANJAGURU_HOME" ~/.bashrc; then + echo "export GANJAGURU_HOME=\$HOME/ganjaguru" >> ~/.bashrc +fi + +if ! grep -q "TRAINING_DIR" ~/.bashrc; then + echo "export TRAINING_DIR=\$HOME/ganjaguru/training" >> ~/.bashrc +fi + +if ! grep -q "GANJAGURU_HOME/bin" ~/.bashrc; then + echo "export PATH=\$GANJAGURU_HOME/bin:\$PATH" >> ~/.bashrc +fi + +# Source the .bashrc in a subshell to avoid issues +source ~/.bashrc + +cd "$HOME/ganjaguru" || exit +if [ ! -d ".git" ]; then + git init + git add . + git commit -m "Initial commit of GanjaGuru training structure" + echo "🌀 Git repo initialized" +else + echo "⚡ Git repo already initialized" +fi + +echo "✅ GanjaGuru training suite ready at: $BASE_DIR" \ No newline at end of file From c38204996e2c1498109b01a76955e9d28b38b320 Mon Sep 17 00:00:00 2001 From: pothead1 Date: Wed, 9 Jul 2025 23:26:19 +0000 Subject: [PATCH 10/20] dd --- SampleApp/set.sh | 67 ------------------------------------------------ 1 file changed, 67 deletions(-) delete mode 100644 SampleApp/set.sh diff --git a/SampleApp/set.sh b/SampleApp/set.sh deleted file mode 100644 index 4e151e84..00000000 --- a/SampleApp/set.sh +++ /dev/null @@ -1,67 +0,0 @@ - #!/bin/bash - -echo "🚀 Setting up GanjaGuru training suite..." - -BASE_DIR="$HOME/ganjaguru/training" -mkdir -p "$BASE_DIR" - -FILES=( - "intents.json" - "stories.md" - "responses.yml" - "domain.yml" - "nlu.yml" - "rules.yml" - "forms.yml" - "entities.json" - "slots.json" - "lookup_tables.json" - "synonyms.json" - "example_chats.md" - "prompts.yml" - "conversation_flows.md" - "utterances.json" - "training_data.md" - "context_examples.json" - "fallback_patterns.yml" - "dialogue_patterns.md" - "mood_templates.yml" - "question_templates.yml" - "story_graph.json" -) - -for FILE in "${FILES[@]}"; do - touch "$BASE_DIR/$FILE" - chmod 777 "$BASE_DIR/$FILE" - echo "🌿 Created $FILE" -done - -echo "📦 Exporting environment variables..." - -# Check if env vars already set in .bashrc before appending -if ! grep -q "GANJAGURU_HOME" ~/.bashrc; then - echo "export GANJAGURU_HOME=\$HOME/ganjaguru" >> ~/.bashrc -fi - -if ! grep -q "TRAINING_DIR" ~/.bashrc; then - echo "export TRAINING_DIR=\$HOME/ganjaguru/training" >> ~/.bashrc -fi - -if ! grep -q "GANJAGURU_HOME/bin" ~/.bashrc; then - echo "export PATH=\$GANJAGURU_HOME/bin:\$PATH" >> ~/.bashrc -fi - -# Source the .bashrc in a subshell to avoid issues -source ~/.bashrc - -cd "$HOME/ganjaguru" || exit -if [ ! -d ".git" ]; then - git init - git add . - git commit -m "Initial commit of GanjaGuru training structure" - echo "🌀 Git repo initialized" -else - echo "⚡ Git repo already initialized" -fi - -echo "✅ GanjaGuru training suite ready at: $BASE_DIR" \ No newline at end of file From 20dcbd263365c24912262ba392f16b73146b31ae Mon Sep 17 00:00:00 2001 From: pothead1 Date: Wed, 9 Jul 2025 23:28:38 +0000 Subject: [PATCH 11/20] feat: Add setup script for GanjaGuru training suite with environment variable configuration --- ganjaguru/cannabis_training.json | 105 ------------------------------- set.sh | 67 ++++++++++++++++++++ 2 files changed, 67 insertions(+), 105 deletions(-) create mode 100644 set.sh diff --git a/ganjaguru/cannabis_training.json b/ganjaguru/cannabis_training.json index 74771a1b..e69de29b 100644 --- a/ganjaguru/cannabis_training.json +++ b/ganjaguru/cannabis_training.json @@ -1,105 +0,0 @@ -{ - "training_examples": [ - { - "intent": "GetCannabisStrainInfo", - "input": "Tell me about Blue Dream.", - "parameters": { "strainName": "Blue Dream" }, - "expectedApiCall": "GET /strains/info?strainName=Blue%20Dream", - "expectedResponse": { - "strainName": "Blue Dream", - "description": "A popular hybrid strain known for its balanced effects.", - "effects": ["Relaxed", "Happy", "Creative"], - "flavors": ["Berry", "Sweet", "Earthy"], - "medicalUses": ["Stress", "Depression", "Pain"] - } - }, - { - "intent": "FindDispensaries", - "input": "Show me dispensaries in Denver with edibles.", - "parameters": { "location": "Denver", "productType": "edibles" }, - "expectedApiCall": "GET /dispensaries?location=Denver&productType=edibles", - "expectedResponse": [ - { "name": "Green Leaf", "rating": 4.8, "address": "123 Main St, Denver" }, - { "name": "Mile High Edibles", "rating": 4.6, "address": "456 Broadway, Denver" } - ] - }, - { - "intent": "GetCannabisLaws", - "input": "What are the cannabis laws in California?", - "parameters": { "location": "California" }, - "expectedApiCall": "GET /laws?location=California", - "expectedResponse": { - "location": "California", - "lawSummary": "Recreational and medical cannabis are legal for adults 21+ with possession limits." - } - }, - { - "intent": "SuggestCannabisProducts", - "input": "Suggest a strain for anxiety.", - "parameters": { "desiredEffects": "anxiety" }, - "expectedApiCall": "GET /products/suggest?desiredEffects=anxiety", - "expectedResponse": [ - { "name": "Harlequin", "type": "flower", "effects": ["Calm", "Focused"] }, - { "name": "ACDC", "type": "flower", "effects": ["Relaxed", "Uplifted"] } - ] - }, - { - "intent": "GetCannabisEvents", - "input": "Are there any cannabis expos in Las Vegas this month?", - "parameters": { "location": "Las Vegas", "eventType": "expo" }, - "expectedApiCall": "GET /events?location=Las%20Vegas&eventType=expo", - "expectedResponse": [ - { "name": "Vegas Cannabis Expo", "date": "2025-07-20", "venue": "Convention Center" } - ] - }, - { - "intent": "GetGrowAdvice", - "input": "Why are my cannabis leaves turning yellow?", - "parameters": { "issue": "yellow leaves" }, - "expectedApiCall": "GET /grow/advice?issue=yellow%20leaves", - "expectedResponse": { - "issue": "yellow leaves", - "solution": "Check for overwatering, nutrient deficiencies, or pH imbalance." - } - }, - { - "intent": "GetProductReviews", - "input": "Show reviews for Blue Dream flower.", - "parameters": { "productName": "Blue Dream flower" }, - "expectedApiCall": "GET /reviews?productName=Blue%20Dream%20flower", - "expectedResponse": [ - { "user": "420fan", "rating": 5, "comment": "Great balanced high!" }, - { "user": "medicinalMike", "rating": 4, "comment": "Helped with my pain." } - ] - }, - { - "intent": "GetCannabisNews", - "input": "Show me cannabis legalization news in Germany.", - "parameters": { "topic": "legalization", "location": "Germany" }, - "expectedApiCall": "GET /news?topic=legalization&location=Germany", - "expectedResponse": [ - { "headline": "Germany Moves Forward with Legalization", "date": "2025-07-01" } - ] - }, - { - "intent": "GetCannabisRecipes", - "input": "Give me a vegan cannabis brownie recipe.", - "parameters": { "recipeType": "edible", "dietaryPreference": "vegan" }, - "expectedApiCall": "GET /recipes?recipeType=edible&dietaryPreference=vegan", - "expectedResponse": { - "name": "Vegan Cannabis Brownies", - "ingredients": ["cannabis-infused coconut oil", "flour", "cocoa powder", "sugar", "almond milk"], - "instructions": "Mix ingredients, bake at 180C for 25 minutes." - } - }, - { - "intent": "GetWellnessTips", - "input": "How can I use cannabis for better sleep?", - "parameters": { "topic": "sleep" }, - "expectedApiCall": "GET /wellness/tips?topic=sleep", - "expectedResponse": { - "tip": "Try indica strains with higher myrcene content and avoid screens before bed." - } - } - ] -} diff --git a/set.sh b/set.sh new file mode 100644 index 00000000..4e151e84 --- /dev/null +++ b/set.sh @@ -0,0 +1,67 @@ + #!/bin/bash + +echo "🚀 Setting up GanjaGuru training suite..." + +BASE_DIR="$HOME/ganjaguru/training" +mkdir -p "$BASE_DIR" + +FILES=( + "intents.json" + "stories.md" + "responses.yml" + "domain.yml" + "nlu.yml" + "rules.yml" + "forms.yml" + "entities.json" + "slots.json" + "lookup_tables.json" + "synonyms.json" + "example_chats.md" + "prompts.yml" + "conversation_flows.md" + "utterances.json" + "training_data.md" + "context_examples.json" + "fallback_patterns.yml" + "dialogue_patterns.md" + "mood_templates.yml" + "question_templates.yml" + "story_graph.json" +) + +for FILE in "${FILES[@]}"; do + touch "$BASE_DIR/$FILE" + chmod 777 "$BASE_DIR/$FILE" + echo "🌿 Created $FILE" +done + +echo "📦 Exporting environment variables..." + +# Check if env vars already set in .bashrc before appending +if ! grep -q "GANJAGURU_HOME" ~/.bashrc; then + echo "export GANJAGURU_HOME=\$HOME/ganjaguru" >> ~/.bashrc +fi + +if ! grep -q "TRAINING_DIR" ~/.bashrc; then + echo "export TRAINING_DIR=\$HOME/ganjaguru/training" >> ~/.bashrc +fi + +if ! grep -q "GANJAGURU_HOME/bin" ~/.bashrc; then + echo "export PATH=\$GANJAGURU_HOME/bin:\$PATH" >> ~/.bashrc +fi + +# Source the .bashrc in a subshell to avoid issues +source ~/.bashrc + +cd "$HOME/ganjaguru" || exit +if [ ! -d ".git" ]; then + git init + git add . + git commit -m "Initial commit of GanjaGuru training structure" + echo "🌀 Git repo initialized" +else + echo "⚡ Git repo already initialized" +fi + +echo "✅ GanjaGuru training suite ready at: $BASE_DIR" \ No newline at end of file From e1655bc8320681ea49f5c069a3aa1f83934a47d1 Mon Sep 17 00:00:00 2001 From: pothead1 Date: Wed, 9 Jul 2025 23:33:04 +0000 Subject: [PATCH 12/20] fix: Improve setup script by adding file existence check and ensuring proper error handling --- set.sh | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/set.sh b/set.sh index 4e151e84..a2259daa 100644 --- a/set.sh +++ b/set.sh @@ -1,4 +1,6 @@ - #!/bin/bash +#!/bin/bash + +set -e echo "🚀 Setting up GanjaGuru training suite..." @@ -31,11 +33,17 @@ FILES=( ) for FILE in "${FILES[@]}"; do - touch "$BASE_DIR/$FILE" - chmod 777 "$BASE_DIR/$FILE" - echo "🌿 Created $FILE" + if [ ! -f "$BASE_DIR/$FILE" ]; then + touch "$BASE_DIR/$FILE" + echo "🌿 Created $FILE" + else + echo "⚡ $FILE already exists" + fi + chmod 666 "$BASE_DIR/$FILE" done +chmod 777 "$BASE_DIR" + echo "📦 Exporting environment variables..." # Check if env vars already set in .bashrc before appending @@ -52,7 +60,7 @@ if ! grep -q "GANJAGURU_HOME/bin" ~/.bashrc; then fi # Source the .bashrc in a subshell to avoid issues -source ~/.bashrc +bash -c 'source ~/.bashrc' cd "$HOME/ganjaguru" || exit if [ ! -d ".git" ]; then From 19ba5271c61ba2ac4f6f1f12cd13f3379c92691f Mon Sep 17 00:00:00 2001 From: pothead1 Date: Wed, 9 Jul 2025 23:35:42 +0000 Subject: [PATCH 13/20] feat: Enhance setup script with additional files and improved installation steps --- set.sh | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/set.sh b/set.sh index a2259daa..4c9259e0 100644 --- a/set.sh +++ b/set.sh @@ -2,6 +2,7 @@ set -e +# --- GanjaGuru Training Suite Setup --- echo "🚀 Setting up GanjaGuru training suite..." BASE_DIR="$HOME/ganjaguru/training" @@ -30,6 +31,28 @@ FILES=( "mood_templates.yml" "question_templates.yml" "story_graph.json" + # --- More advanced files --- + "weather_forecast_training.json" + "cannabis_strain_training.json" + "dispensary_training.json" + "law_training.json" + "product_suggestion_training.json" + "grow_advice_training.json" + "event_training.json" + "wellness_training.json" + "news_training.json" + "recipe_training.json" + "review_training.json" + "history_training.json" + "slang_training.json" + "science_training.json" + "faq_examples.md" + "test_cases.yml" + "README.md" + "setup_instructions.md" + "data_schema.json" + "metrics.json" + "changelog.md" ) for FILE in "${FILES[@]}"; do @@ -44,17 +67,22 @@ done chmod 777 "$BASE_DIR" +# --- Install recommended tools --- +echo "🔧 Installing recommended tools (jq, yq, tree, python3-pip, virtualenv, git-lfs)..." +sudo apt-get update +sudo apt-get install -y jq tree python3-pip git-lfs +pip3 install --user yq virtualenv + +git lfs install || true + echo "📦 Exporting environment variables..." -# Check if env vars already set in .bashrc before appending if ! grep -q "GANJAGURU_HOME" ~/.bashrc; then echo "export GANJAGURU_HOME=\$HOME/ganjaguru" >> ~/.bashrc fi - if ! grep -q "TRAINING_DIR" ~/.bashrc; then echo "export TRAINING_DIR=\$HOME/ganjaguru/training" >> ~/.bashrc fi - if ! grep -q "GANJAGURU_HOME/bin" ~/.bashrc; then echo "export PATH=\$GANJAGURU_HOME/bin:\$PATH" >> ~/.bashrc fi @@ -62,6 +90,7 @@ fi # Source the .bashrc in a subshell to avoid issues bash -c 'source ~/.bashrc' +# --- Git repo setup --- cd "$HOME/ganjaguru" || exit if [ ! -d ".git" ]; then git init @@ -72,4 +101,7 @@ else echo "⚡ Git repo already initialized" fi +echo "📊 Directory structure:" +tree "$HOME/ganjaguru" || ls -lR "$HOME/ganjaguru" + echo "✅ GanjaGuru training suite ready at: $BASE_DIR" \ No newline at end of file From 66fda1a1087c5daf2a868ede72bf2ca63bc79153 Mon Sep 17 00:00:00 2001 From: pothead1 Date: Wed, 9 Jul 2025 23:37:11 +0000 Subject: [PATCH 14/20] fix: Remove comments from FILES array to ensure proper file creation --- set.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/set.sh b/set.sh index 4c9259e0..99a2bc4c 100644 --- a/set.sh +++ b/set.sh @@ -56,6 +56,10 @@ FILES=( ) for FILE in "${FILES[@]}"; do + # Remove comments from FILES array (bash does not support inline comments in arrays) + if [[ "$FILE" == \#* ]] || [[ -z "$FILE" ]]; then + continue + fi if [ ! -f "$BASE_DIR/$FILE" ]; then touch "$BASE_DIR/$FILE" echo "🌿 Created $FILE" From 7b861ca68238345a16ba307b8c61b6601fa02cf0 Mon Sep 17 00:00:00 2001 From: pothead1 Date: Wed, 9 Jul 2025 23:47:33 +0000 Subject: [PATCH 15/20] refactor: Simplify setup script by replacing FILES array with FILES_CONTENT associative array and enhancing file creation logic --- set.sh | 154 ++++++++++++++++++++++++++------------------------------- 1 file changed, 70 insertions(+), 84 deletions(-) diff --git a/set.sh b/set.sh index 99a2bc4c..8c0027c1 100644 --- a/set.sh +++ b/set.sh @@ -1,100 +1,89 @@ -#!/bin/bash + #!/bin/bash -set -e - -# --- GanjaGuru Training Suite Setup --- echo "🚀 Setting up GanjaGuru training suite..." BASE_DIR="$HOME/ganjaguru/training" mkdir -p "$BASE_DIR" -FILES=( - "intents.json" - "stories.md" - "responses.yml" - "domain.yml" - "nlu.yml" - "rules.yml" - "forms.yml" - "entities.json" - "slots.json" - "lookup_tables.json" - "synonyms.json" - "example_chats.md" - "prompts.yml" - "conversation_flows.md" - "utterances.json" - "training_data.md" - "context_examples.json" - "fallback_patterns.yml" - "dialogue_patterns.md" - "mood_templates.yml" - "question_templates.yml" - "story_graph.json" - # --- More advanced files --- - "weather_forecast_training.json" - "cannabis_strain_training.json" - "dispensary_training.json" - "law_training.json" - "product_suggestion_training.json" - "grow_advice_training.json" - "event_training.json" - "wellness_training.json" - "news_training.json" - "recipe_training.json" - "review_training.json" - "history_training.json" - "slang_training.json" - "science_training.json" - "faq_examples.md" - "test_cases.yml" - "README.md" - "setup_instructions.md" - "data_schema.json" - "metrics.json" - "changelog.md" -) +declare -A FILES_CONTENT +FILES_CONTENT["intents.json"]="{\"intents\": [{\"name\": \"greet\", \"examples\": [\"Hi\", \"Hello\", \"Hey\"]}]}" +FILES_CONTENT["stories.md"]="## Greet path +* greet + - utter_greet" +FILES_CONTENT["responses.yml"]="responses: + utter_greet: + - text: \"Hey there, welcome to GanjaGuru!\"" +FILES_CONTENT["domain.yml"]="intents: + - greet +responses: + utter_greet: + - text: \"Welcome to the GanjaGuru metaverse!\"" +FILES_CONTENT["nlu.yml"]="version: \"2.0\" +nlu: +- intent: greet + examples: | + - hey + - hello + - hi" +FILES_CONTENT["rules.yml"]="rules: +- rule: Say hi + steps: + - intent: greet + - action: utter_greet" +FILES_CONTENT["forms.yml"]="forms: + order_form: + required_slots: + strain_type: + - type: from_text" +FILES_CONTENT["entities.json"]="{\"entities\": [\"strain\", \"effect\", \"symptom\"]}" +FILES_CONTENT["slots.json"]="{\"slots\": {\"strain_type\": {\"type\": \"text\"}, \"effect\": {\"type\": \"text\"}}}" +FILES_CONTENT["lookup_tables.json"]="{\"lookup_tables\": {\"strain_names\": [\"OG Kush\", \"Sour Diesel\", \"Purple Haze\"]}}" +FILES_CONTENT["synonyms.json"]="{\"synonyms\": {\"cbd\": [\"Cannabidiol\"], \"thc\": [\"Tetrahydrocannabinol\"]}}" +FILES_CONTENT["example_chats.md"]="* greet + - utter_greet +* ask_strain + - action_recommend_strain" +FILES_CONTENT["prompts.yml"]="prompts: + recommend_strain: + - What effects are you looking for?" +FILES_CONTENT["conversation_flows.md"]="User greets > Bot greets > User asks for strain > Bot recommends > User confirms" +FILES_CONTENT["utterances.json"]="{\"utterances\": {\"utter_greet\": [\"Hey!\", \"Hello there!\"]}}" +FILES_CONTENT["training_data.md"]="### Training Samples +* greet: Hello +* ask_strain: Recommend me a relaxing strain" +FILES_CONTENT["context_examples.json"]="{\"contexts\": {\"relaxation\": [\"chill\", \"calm\", \"unwind\"]}}" +FILES_CONTENT["fallback_patterns.yml"]="nlu_fallback: + threshold: 0.4" +FILES_CONTENT["dialogue_patterns.md"]="Greet → Strain Inquiry → Effects → Purchase" +FILES_CONTENT["mood_templates.yml"]="moods: + - happy + - chill + - euphoric" +FILES_CONTENT["question_templates.yml"]="questions: + - What are you looking for? + - How do you want to feel?" +FILES_CONTENT["story_graph.json"]="{\"nodes\": [{\"id\": \"start\"}, {\"id\": \"greet\"}, {\"id\": \"recommend_strain\"}]}" -for FILE in "${FILES[@]}"; do - # Remove comments from FILES array (bash does not support inline comments in arrays) - if [[ "$FILE" == \#* ]] || [[ -z "$FILE" ]]; then - continue - fi - if [ ! -f "$BASE_DIR/$FILE" ]; then - touch "$BASE_DIR/$FILE" - echo "🌿 Created $FILE" - else - echo "⚡ $FILE already exists" - fi - chmod 666 "$BASE_DIR/$FILE" +for FILE in "${!FILES_CONTENT[@]}"; do + echo "${FILES_CONTENT[$FILE]}" > "$BASE_DIR/$FILE" + chmod 777 "$BASE_DIR/$FILE" + echo "🌿 Created $FILE with content" done -chmod 777 "$BASE_DIR" - -# --- Install recommended tools --- -echo "🔧 Installing recommended tools (jq, yq, tree, python3-pip, virtualenv, git-lfs)..." -sudo apt-get update -sudo apt-get install -y jq tree python3-pip git-lfs -pip3 install --user yq virtualenv - -git lfs install || true - -echo "📦 Exporting environment variables..." - if ! grep -q "GANJAGURU_HOME" ~/.bashrc; then - echo "export GANJAGURU_HOME=\$HOME/ganjaguru" >> ~/.bashrc + echo "export GANJAGURU_HOME=$HOME/ganjaguru" >> ~/.bashrc fi + if ! grep -q "TRAINING_DIR" ~/.bashrc; then - echo "export TRAINING_DIR=\$HOME/ganjaguru/training" >> ~/.bashrc + echo "export TRAINING_DIR=$HOME/ganjaguru/training" >> ~/.bashrc fi + if ! grep -q "GANJAGURU_HOME/bin" ~/.bashrc; then - echo "export PATH=\$GANJAGURU_HOME/bin:\$PATH" >> ~/.bashrc + echo "export PATH=$GANJAGURU_HOME/bin:$PATH" >> ~/.bashrc fi -# Source the .bashrc in a subshell to avoid issues -bash -c 'source ~/.bashrc' +source ~/.bashrc -# --- Git repo setup --- cd "$HOME/ganjaguru" || exit if [ ! -d ".git" ]; then git init @@ -105,7 +94,4 @@ else echo "⚡ Git repo already initialized" fi -echo "📊 Directory structure:" -tree "$HOME/ganjaguru" || ls -lR "$HOME/ganjaguru" - -echo "✅ GanjaGuru training suite ready at: $BASE_DIR" \ No newline at end of file +echo "✅ GanjaGuru training suite ready at: $BASE_DIR" From c95a35d5ab057944dba7ed027aecca8547e05055 Mon Sep 17 00:00:00 2001 From: pothead1 Date: Wed, 9 Jul 2025 23:51:22 +0000 Subject: [PATCH 16/20] refactor: Replace associative arrays with parallel arrays in setup script for improved compatibility and clarity --- set.sh | 120 +++++++++++++++++++++++++++------------------------------ 1 file changed, 57 insertions(+), 63 deletions(-) diff --git a/set.sh b/set.sh index 8c0027c1..9c7918e3 100644 --- a/set.sh +++ b/set.sh @@ -1,73 +1,67 @@ - #!/bin/bash +#!/bin/bash + +set -e echo "🚀 Setting up GanjaGuru training suite..." BASE_DIR="$HOME/ganjaguru/training" mkdir -p "$BASE_DIR" -declare -A FILES_CONTENT -FILES_CONTENT["intents.json"]="{\"intents\": [{\"name\": \"greet\", \"examples\": [\"Hi\", \"Hello\", \"Hey\"]}]}" -FILES_CONTENT["stories.md"]="## Greet path -* greet - - utter_greet" -FILES_CONTENT["responses.yml"]="responses: - utter_greet: - - text: \"Hey there, welcome to GanjaGuru!\"" -FILES_CONTENT["domain.yml"]="intents: - - greet -responses: - utter_greet: - - text: \"Welcome to the GanjaGuru metaverse!\"" -FILES_CONTENT["nlu.yml"]="version: \"2.0\" -nlu: -- intent: greet - examples: | - - hey - - hello - - hi" -FILES_CONTENT["rules.yml"]="rules: -- rule: Say hi - steps: - - intent: greet - - action: utter_greet" -FILES_CONTENT["forms.yml"]="forms: - order_form: - required_slots: - strain_type: - - type: from_text" -FILES_CONTENT["entities.json"]="{\"entities\": [\"strain\", \"effect\", \"symptom\"]}" -FILES_CONTENT["slots.json"]="{\"slots\": {\"strain_type\": {\"type\": \"text\"}, \"effect\": {\"type\": \"text\"}}}" -FILES_CONTENT["lookup_tables.json"]="{\"lookup_tables\": {\"strain_names\": [\"OG Kush\", \"Sour Diesel\", \"Purple Haze\"]}}" -FILES_CONTENT["synonyms.json"]="{\"synonyms\": {\"cbd\": [\"Cannabidiol\"], \"thc\": [\"Tetrahydrocannabinol\"]}}" -FILES_CONTENT["example_chats.md"]="* greet - - utter_greet -* ask_strain - - action_recommend_strain" -FILES_CONTENT["prompts.yml"]="prompts: - recommend_strain: - - What effects are you looking for?" -FILES_CONTENT["conversation_flows.md"]="User greets > Bot greets > User asks for strain > Bot recommends > User confirms" -FILES_CONTENT["utterances.json"]="{\"utterances\": {\"utter_greet\": [\"Hey!\", \"Hello there!\"]}}" -FILES_CONTENT["training_data.md"]="### Training Samples -* greet: Hello -* ask_strain: Recommend me a relaxing strain" -FILES_CONTENT["context_examples.json"]="{\"contexts\": {\"relaxation\": [\"chill\", \"calm\", \"unwind\"]}}" -FILES_CONTENT["fallback_patterns.yml"]="nlu_fallback: - threshold: 0.4" -FILES_CONTENT["dialogue_patterns.md"]="Greet → Strain Inquiry → Effects → Purchase" -FILES_CONTENT["mood_templates.yml"]="moods: - - happy - - chill - - euphoric" -FILES_CONTENT["question_templates.yml"]="questions: - - What are you looking for? - - How do you want to feel?" -FILES_CONTENT["story_graph.json"]="{\"nodes\": [{\"id\": \"start\"}, {\"id\": \"greet\"}, {\"id\": \"recommend_strain\"}]}" +# Use two parallel arrays for compatibility (no associative arrays) +FILES=( + "intents.json" + "stories.md" + "responses.yml" + "domain.yml" + "nlu.yml" + "rules.yml" + "forms.yml" + "entities.json" + "slots.json" + "lookup_tables.json" + "synonyms.json" + "example_chats.md" + "prompts.yml" + "conversation_flows.md" + "utterances.json" + "training_data.md" + "context_examples.json" + "fallback_patterns.yml" + "dialogue_patterns.md" + "mood_templates.yml" + "question_templates.yml" + "story_graph.json" +) + +CONTENTS=( + '{"intents": [{"name": "greet", "examples": ["Hi", "Hello", "Hey"]}]}' + '## Greet path\n* greet\n - utter_greet' + 'responses:\n utter_greet:\n - text: "Hey there, welcome to GanjaGuru!"' + 'intents:\n - greet\nresponses:\n utter_greet:\n - text: "Welcome to the GanjaGuru metaverse!"' + 'version: "2.0"\nnlu:\n- intent: greet\n examples: |\n - hey\n - hello\n - hi' + 'rules:\n- rule: Say hi\n steps:\n - intent: greet\n - action: utter_greet' + 'forms:\n order_form:\n required_slots:\n strain_type:\n - type: from_text' + '{"entities": ["strain", "effect", "symptom"]}' + '{"slots": {"strain_type": {"type": "text"}, "effect": {"type": "text"}}}' + '{"lookup_tables": {"strain_names": ["OG Kush", "Sour Diesel", "Purple Haze"]}}' + '{"synonyms": {"cbd": ["Cannabidiol"], "thc": ["Tetrahydrocannabinol"]}}' + '* greet\n - utter_greet\n* ask_strain\n - action_recommend_strain' + 'prompts:\n recommend_strain:\n - What effects are you looking for?' + 'User greets > Bot greets > User asks for strain > Bot recommends > User confirms' + '{"utterances": {"utter_greet": ["Hey!", "Hello there!"]}}' + '### Training Samples\n* greet: Hello\n* ask_strain: Recommend me a relaxing strain' + '{"contexts": {"relaxation": ["chill", "calm", "unwind"]}}' + 'nlu_fallback:\n threshold: 0.4' + 'Greet → Strain Inquiry → Effects → Purchase' + 'moods:\n - happy\n - chill\n - euphoric' + 'questions:\n - What are you looking for?\n - How do you want to feel?' + '{"nodes": [{"id": "start"}, {"id": "greet"}, {"id": "recommend_strain"}]}' +) -for FILE in "${!FILES_CONTENT[@]}"; do - echo "${FILES_CONTENT[$FILE]}" > "$BASE_DIR/$FILE" - chmod 777 "$BASE_DIR/$FILE" - echo "🌿 Created $FILE with content" +for i in "${!FILES[@]}"; do + echo -e "${CONTENTS[$i]}" > "$BASE_DIR/${FILES[$i]}" + chmod 777 "$BASE_DIR/${FILES[$i]}" + echo "🌿 Created ${FILES[$i]} with content" done if ! grep -q "GANJAGURU_HOME" ~/.bashrc; then From 1f6161e96df79fbc3472196011e39691466a7d73 Mon Sep 17 00:00:00 2001 From: pothead1 Date: Wed, 9 Jul 2025 23:07:14 -0400 Subject: [PATCH 17/20] Update weather_forecast_training.json --- ganjaguru/weather_forecast_training.json | 110 +++++++++++------------ 1 file changed, 52 insertions(+), 58 deletions(-) diff --git a/ganjaguru/weather_forecast_training.json b/ganjaguru/weather_forecast_training.json index e7c6d146..cc4f9928 100644 --- a/ganjaguru/weather_forecast_training.json +++ b/ganjaguru/weather_forecast_training.json @@ -1,58 +1,52 @@ -{ - "training_examples": [ - { - "intent": "GetWeatherForecast", - "input": "Show me the weather forecast starting July 10.", - "parameters": { - "startDate": "2025-07-10" - }, - "expectedApiCall": "GET WeatherForecast?startDate=2025-07-10", - "expectedResponse": [ - { - "Date": "2025-07-10", - "TemperatureC": 23, - "TemperatureF": 73, - "Summary": "Sunny" - }, - { - "Date": "2025-07-11", - "TemperatureC": 21, - "TemperatureF": 70, - "Summary": "Cloudy" - } - ] - }, - { - "intent": "GetWeatherForecast", - "input": "Weather forecast for next week?", - "parameters": { - "startDate": "2025-07-14" - }, - "expectedApiCall": "GET WeatherForecast?startDate=2025-07-14", - "expectedResponse": "[ ...array of WeatherForecast objects for the week... ]" - }, - { - "intent": "GetWeatherForecast", - "input": "Give me the forecast for today.", - "parameters": { - "startDate": "2025-07-09" - }, - "expectedApiCall": "GET WeatherForecast?startDate=2025-07-09", - "expectedResponse": [ - { - "Date": "2025-07-09", - "TemperatureC": 25, - "TemperatureF": 77, - "Summary": "Partly cloudy" - } - ] - }, - { - "intent": "GetWeatherForecast", - "input": "What is the weather if I don't specify a date?", - "parameters": {}, - "expectedApiCall": "GET WeatherForecast?startDate=", - "expectedResponse": "[ ...default forecast array... ]" - } - ] -} + +1. A user wakes up feeling foggy and says, “I need a strain to feel alive again.” +2. Someone whispers into their phone, “I want to make my own bong. But stealthy.” +3. A college kid browsing stickers types: “Make me a cartoon nug hugging Snoop.” +4. A grandma asks, “How do I design rolling papers with daisies and peace signs?” +5. A grower says, “What’s the best strain to grow in a cold basement?” +6. A giggling couple says, “We want a coloring book we can smoke to.” +7. A DIY-er types, “Build me a grow tent from eco stuff only.” +8. A user says, “Give me Willie Nelson’s favorite smoke if he was on Mars.” +9. A teen drops in: “I need trippy backgrounds for my GanjaGuru avatar.” +10. A midnight shopper says: “I need edibles that taste like lemon pie.” +11. A user asks, “How do I compare Blue Dream to Green Crack with AI?” +12. Someone says, “I want a bong that looks like a galaxy floating in space.” +13. A dancer says, “Give me weed that makes me feel like I’m underwater.” +14. A rapper says, “Design me rolling papers that match my mixtape.” +15. A student says, “Teach me how to make stickers from strain names.” +16. A user says, “I just smoked Harlequin. Log it and tell me how it hit me.” +17. A mom types, “I need a gift for my husband who loves cannabis tech.” +18. A visual artist wants, “Make me a grow room I can build in VR.” +19. A beatmaker asks, “Can my AI avatar drop strain facts like bars?” +20. A curious user says, “What’s trending in hybrid strains right now?” +21. A traveler says, “Find legal weed spots near me—quiet ones.” +22. A user says, “Tell me Tupac’s spiritual strain recommendation.” +23. A stoner asks, “How do I name my homegrown strain with swagger?” +24. A dad says, “Help me design a shelf bracket that holds my grow lights.” +25. A teacher says, “Make a coloring page that explains cannabinoids.” +26. A user says, “I want weed gear that’s all biodegradable.” +27. A poet says, “Give me a strain for creativity and existential vibes.” +28. A gamer asks, “Give me concentrates for long play sessions.” +29. A sleepy person mumbles: “Something dreamy, something gentle.” +30. A party planner says, “Find strains that turn introverts into groove machines.” +31. A user types, “Record my mood and tell me how each strain makes me feel.” +32. A visual learner asks, “Show me effects with floating animations.” +33. A kid-at-heart says, “Turn weed types into a game I can play.” +34. A fan of John Lennon types, “Design a rolling tray inspired by Imagine.” +35. A musician says, “Give me strains that harmonize with jazz.” +36. A streetwear designer asks, “How do I make stickers that pop on hoodies?” +37. A meditator says, “Give me strains for floating, not for thinking.” +38. A builder says, “Build me the most futuristic shelf bracket.” +39. A food lover says, “Tell me edible recipes based on terpene flavor.” +40. A spiritual healer says, “Create an herb bundle for chakra balancing.” +41. A tourist asks, “Scan my location, and recommend local kush.” +42. A collector says, “Help me catalog my stash using AI.” +43. A young coder types, “Create a voice command to open my grow dashboard.” +44. A party host asks, “Design AR invites for a smoke session.” +45. A comic lover says, “Make coloring pages for nug superheroes.” +46. A modder asks, “Get me the files to remix a stealth grow room.” +47. A nostalgic user says, “What would Bruce Lee roll today?” +48. A high-spirited student says, “Build me a strain-based trivia game.” +49. An explorer says, “Give me a quest to discover a mystery strain.” +50. A rebel says, “Make me a rolling paper with attitude and flames.” + From b09c0006f35401d09649d2d8fcb00cd460c40268 Mon Sep 17 00:00:00 2001 From: pothead1 Date: Thu, 10 Jul 2025 03:15:06 +0000 Subject: [PATCH 18/20] feat: Add initial content to cannabis_training.json --- ganjaguru/cannabis_training.json | 1 + 1 file changed, 1 insertion(+) diff --git a/ganjaguru/cannabis_training.json b/ganjaguru/cannabis_training.json index e69de29b..f37d28e1 100644 --- a/ganjaguru/cannabis_training.json +++ b/ganjaguru/cannabis_training.json @@ -0,0 +1 @@ +make this fie From 7f57b36b3416d007e418829295f11fb4df366fc8 Mon Sep 17 00:00:00 2001 From: pothead1 Date: Thu, 10 Jul 2025 03:15:52 +0000 Subject: [PATCH 19/20] fix: Correct typo in cannabis_training.json --- ganjaguru/cannabis_training.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ganjaguru/cannabis_training.json b/ganjaguru/cannabis_training.json index f37d28e1..db99da09 100644 --- a/ganjaguru/cannabis_training.json +++ b/ganjaguru/cannabis_training.json @@ -1 +1 @@ -make this fie +make th \ No newline at end of file From 4a82bdf1d3ff4f13f343b4c6af4013b3dd2c57f7 Mon Sep 17 00:00:00 2001 From: pothead1 Date: Thu, 10 Jul 2025 03:17:35 +0000 Subject: [PATCH 20/20] Removes obsolete training command from JSON file Eliminates the outdated 'make th' command from the configuration. This change helps clean up the file by removing unnecessary entries, ensuring clarity and maintaining focus on current training commands. --- ganjaguru/cannabis_training.json | 1 - 1 file changed, 1 deletion(-) diff --git a/ganjaguru/cannabis_training.json b/ganjaguru/cannabis_training.json index db99da09..e69de29b 100644 --- a/ganjaguru/cannabis_training.json +++ b/ganjaguru/cannabis_training.json @@ -1 +0,0 @@ -make th \ No newline at end of file