From 4b9b30b57b108bce4a882db8d437b670c7330aaa Mon Sep 17 00:00:00 2001 From: yasasmiwaranga Date: Sat, 8 Aug 2026 12:52:30 +1000 Subject: [PATCH 01/11] feat: add AI knowledge assistant --- .../knowledge-base/docs/onboarding.txt | 412 +++++ .../knowledge-base/guide/Onboarding.pdf | Bin 0 -> 206668 bytes app-backend/package-lock.json | 933 +++++------ app-backend/package.json | 9 +- app-backend/src/ai/chunking/textChunker.js | 62 + .../src/ai/controllers/aiController.js | 82 + .../src/ai/embeddings/embeddingService.js | 20 + app-backend/src/ai/indexing/buildIndex.js | 95 ++ app-backend/src/ai/retrieval/similarity.js | 24 + app-backend/src/ai/retrieval/vectorSearch.js | 384 +++++ app-backend/src/ai/routes/aiRoutes.js | 8 + app-backend/src/ai/scripts/readPdf.js | 34 + app-backend/src/ai/services/documentLoader.js | 0 .../src/ai/services/knowledgeService.js | 31 + app-backend/src/ai/services/ollamaService.js | 110 ++ app-backend/src/ai/test.js | 9 + app-backend/src/ai/testEmbedding.js | 11 + app-backend/src/ai/testSearch.js | 13 + app-backend/src/routes/ai.routes.js | 9 + app-backend/src/routes/index.js | 2 + app-frontend/employer-panel/package-lock.json | 1203 +++++++++++++- app-frontend/employer-panel/package.json | 1 + app-frontend/employer-panel/src/App.js | 6 +- .../src/components/AIChatWidget.jsx | 238 +++ .../src/components/ChatHeader.jsx | 45 + .../src/components/ChatInput.jsx | 68 + .../src/components/ChatMessages.jsx | 72 + .../src/components/FloatingButton.jsx | 26 + .../src/components/MessageBubble.jsx | 113 ++ .../src/components/SuggestionCards.jsx | 41 + .../src/components/TypingIndicator.jsx | 18 + .../employer-panel/src/components/typing.css | 29 + .../employer-panel/src/pages/AIAssistant.jsx | 92 ++ .../src/pages/EmployerDashboard.js | 4 +- docker-compose.yml | 3 + package-lock.json | 1458 ++++++++++++++++- 36 files changed, 5146 insertions(+), 519 deletions(-) create mode 100644 app-backend/knowledge-base/docs/onboarding.txt create mode 100644 app-backend/knowledge-base/guide/Onboarding.pdf create mode 100644 app-backend/src/ai/chunking/textChunker.js create mode 100644 app-backend/src/ai/controllers/aiController.js create mode 100644 app-backend/src/ai/embeddings/embeddingService.js create mode 100644 app-backend/src/ai/indexing/buildIndex.js create mode 100644 app-backend/src/ai/retrieval/similarity.js create mode 100644 app-backend/src/ai/retrieval/vectorSearch.js create mode 100644 app-backend/src/ai/routes/aiRoutes.js create mode 100644 app-backend/src/ai/scripts/readPdf.js create mode 100644 app-backend/src/ai/services/documentLoader.js create mode 100644 app-backend/src/ai/services/knowledgeService.js create mode 100644 app-backend/src/ai/services/ollamaService.js create mode 100644 app-backend/src/ai/test.js create mode 100644 app-backend/src/ai/testEmbedding.js create mode 100644 app-backend/src/ai/testSearch.js create mode 100644 app-backend/src/routes/ai.routes.js create mode 100644 app-frontend/employer-panel/src/components/AIChatWidget.jsx create mode 100644 app-frontend/employer-panel/src/components/ChatHeader.jsx create mode 100644 app-frontend/employer-panel/src/components/ChatInput.jsx create mode 100644 app-frontend/employer-panel/src/components/ChatMessages.jsx create mode 100644 app-frontend/employer-panel/src/components/FloatingButton.jsx create mode 100644 app-frontend/employer-panel/src/components/MessageBubble.jsx create mode 100644 app-frontend/employer-panel/src/components/SuggestionCards.jsx create mode 100644 app-frontend/employer-panel/src/components/TypingIndicator.jsx create mode 100644 app-frontend/employer-panel/src/components/typing.css create mode 100644 app-frontend/employer-panel/src/pages/AIAssistant.jsx diff --git a/app-backend/knowledge-base/docs/onboarding.txt b/app-backend/knowledge-base/docs/onboarding.txt new file mode 100644 index 000000000..bad581471 --- /dev/null +++ b/app-backend/knowledge-base/docs/onboarding.txt @@ -0,0 +1,412 @@ + + +Secure Shift +Onboarding for the frontend +1.Welcome +Welcome to the SecureShift Frontend Panel Team! +Congratulations on joining the project. We are excited to have you on board and look forward to +working with you throughout this trimester. +SecureShift is a large, real-world software engineering project where students collaborate in agile +teams to develop a workforce management platform for the security industry. As members of the +Frontend Team, you will contribute to building intuitive, reliable, and scalable user interfaces +while working closely with the Backend and Mobile teams. +Whether you are new to React or already have frontend development experience, this guide will +help you understand the project, set up your development environment, and begin contributing +effectively. + + +2.About SecureShift +SecureShift is a workforce management platform designed to simplify the daily operations of +security companies. +The system enables employers to manage every aspect of their workforce from a single +application. +Main Features +• Shift Management +• Employee Management +• Attendance Tracking +• Payroll Management +• Incident Reporting +• Equipment Management +• Employer and Guard Communication +• Notifications +• Multi-language Support +• Dashboard and Analytics +Example Workflow +Without SecureShift: +Employer creates shifts manually → Contacts guards individually → Attendance is recorded on +paper → Payroll is calculated manually. +With SecureShift: +Employer creates a shift → Guard receives notification → Guard accepts shift → Guard checks +in using the mobile app → Attendance is recorded automatically → Payroll is generated digitally. + +3.Project Architecture +The project consists of three major components: +Frontend Panel +The Frontend Panel is developed using React and serves as the web interface for the SecureShift platform. +Currently, the frontend consists of the Employer Panel, which allows employers to manage: +• Guards +• Shifts +• Payroll +• Timesheets +• Incident Reports +• Equipment +• Notifications +• Daily Activity Tracking +• Reports +This trimester, one of our primary objectives is to develop the new Admin Panel. The Admin Panel will +provide administrators with a dedicated interface to manage the overall system, including users, roles, +platform settings, monitoring, and other administrative functions. The frontend team will be responsible +for designing, implementing, and integrating this new panel with the existing backend APIs. +Current Focus: Employer Panel (Existing) +Trimester 2 Goal: Design and develop the new Admin Panel while continuing to maintain and enhance +the Employer Panel. +This wording clearly explains the current state of the project and highlights what the new frontend team +will be working on. +Backend +Developed using Node.js and Express. +Provides REST APIs, authentication, business logic, and database communication. +Guard Mobile App +Developed using React Native. +Allows guards to apply for shifts, check in/out, report incidents, receive notifications, and +communicate with employers. +All three systems communicate through the backend APIs. + +4.Technology Stack +Technology Purpose +React Frontend Development +React Router Navigation +Axios API Communication +Material UI User Interface Components +Node.js Backend Development +Express REST API Framework +MongoDB Database +Docker Local Development Environment +GitHub Version Control +MS Planner Sprint Management +Swagger API Documentation +Postman API Testing + + + + + + +5.Employer Panel Overview +The Employer Panel allows employers to manage the entire workforce through an easy-to-use +web interface. +Some of the pages include: +• Dashboard +• Shift Management +• Timesheets +• Payroll +• Guard Management +• Incident Reports +• Equipment Management +• Notifications +• Chat +• Daily Activity Tracking +• Profile Management +Most frontend tasks involve creating user interfaces, integrating APIs, handling application state, +validating forms, and improving user experience. + +6.Development Environment Setup +Before writing any code, complete the following steps. +Step 1 +Clone both repositories. +• Frontend Repository +• Backend Repository +Step 2 +Install: +• Node.js +• Docker Desktop +• Visual Studio Code +• Git +Step 3 +Run the project using Docker. +Verify that: +• MongoDB starts successfully +• Backend runs without errors +• Frontend loads correctly +• Login page is accessible +Important: Many issues experienced by previous teams were caused by incomplete Docker +setup. Ensure your environment is working before beginning development. +Video Link- How to get project in to your locals- 2026-07-12 10-47-12.mkv +Part2- +https://1drv.ms/v/c/4916f816167acfd5/IQATx7k7xjEGRJSCV19Wpr2EARx_9Kbl5IcberniYdFI +Gto?e=9BaD0U + +1. Clone the repository +Open PowerShell: +cd "C:\Users\..................\SIT378_SIT782 - Team Project B - Execution and Delivery" +Clone: +git clone https://github.com/Gopher-Industries/SecureShift.git +Go into the project: +cd SecureShift + +2. Create your own branch +Check branches: +git branch +Update main: +git checkout main +git pull origin main +Create your branch: +git checkout -b frontend/………………. +Confirm: +git branch +You should see: +* frontend/………… + main + +Backend Setup +3. Go to backend folder +cd app-backend +Check files: +dir + +4. Create .env +Create a file: +app-backend/.env +Add: +MONGO_URI= +PORT= +JWT_SECRET= +SMTP_HOST= +SMTP_PORT= +SMTP_SECURE= +Save. +Docker Setup +5. Go back to project root +Cd .. +You should be here: +SecureShift +Check: +dir +You should see: +docker-compose.yml +app-backend +app-frontend + +6. Check Docker is installed +docker --version +docker compose version + +7. Stop old containers (if already running) +Because you already have containers: +docker compose down + +8. Build and start containers +Run: +docker compose up --build -d +Wait until it completes. + +9. Check containers +docker ps +Expected: +secureshift-backend +secureshift-db +secureshift-frontend-employer + +Testing +10. Backend +Open: +http://localhost:5000 +If you see: +Cannot GET / +that is OK. + +11. Swagger API +Open: +http://localhost:5000/api-docs +You should see API documentation. + +12. Frontend +Open: +http://localhost:3000 +You should see: +Employer Panel + +Useful Docker Commands +See logs +Backend: +docker logs secureshift-backend +Frontend: +docker logs secureshift-frontend-employer +Database: +docker logs secureshift-db + +Restart everything +docker compose restart + +Stop everything +docker compose down + +After making code changes +docker compose up --build -d + +Git workflow after changes +Check changes: +git status +Add: +git add . +Commit: +git commit -m "Setup local environment" +Push your branch: +git push origin frontend/………… + + + +7.Understanding the Frontend Project Structure +You will mainly work within the following folders: +src/ +components/ +pages/ +layouts/ +hooks/ +services/ +routes/ +assets/ +utils/ +Example +Suppose you are assigned the task: +"Improve the Payroll Page." +You may need to modify: +pages/Payroll.jsx +services/payrollService.js +components/PayrollTable.jsx +The page displays the data, the service communicates with the backend, and the component +presents reusable UI elements. + +8.How Frontend Communicates with Backend +Most pages follow the same flow: +1. User performs an action. +2. React component captures the event. +3. Axios sends a request to the backend API. +4. Backend processes the request. +5. MongoDB stores or retrieves data. +6. Backend returns a response. +7. React updates the interface. +Example +When an employer approves a shift: +User clicks "Approve" +↓ +React calls +POST /api/shifts/approve +↓ +Backend validates request +↓ +Database updates +↓ + +Frontend refreshes +↓ +Status changes to "Approved" + +9.Git Workflow +We follow a feature-branch workflow. +Never develop directly on the main branch. +Typical workflow: +1. Pull the latest main branch. +2. Create a new feature branch. +3. Implement your feature. +4. Test locally. +5. Commit changes. +6. Push your branch. +7. Create a Pull Request. +8. Wait for review before merging. +Example branch names: +frontend/yourname-payroll-page +frontend / yourname -dashboard-improvements +frontend / yourname -chat-notification +frontend / yourname -equipment-management + +10.Coding Standards +To maintain consistency across the project: +• Follow ESLint rules. +• Use Prettier formatting. +• Write reusable React components. +• Keep components modular. +• Avoid unnecessary duplication. +• Write meaningful commit messages. +• Keep Pull Requests focused on one feature. + +11.Current Project Status +The previous team completed significant development across the project. +Employer Panel +Completed: +• Timesheets +• Payroll +• Daily Activity Tracking +• Employer Dashboard +• Chat System +• Notifications +• Equipment Management +• Multi-language Support +• Privacy Policy +• Terms and Conditions +• UI Improvements +• Bug Fixes +• Security Improvements + +12.Current Priorities for This Trimester +As the new Frontend Team, our priorities include: +• Completing remaining backend integrations. +• Implementing newly designed Figma pages. +• Improving application performance. +• Fixing existing bugs. +• Strengthening frontend security. +• Increasing test coverage. +• Supporting AI feature integration. +• Improving overall user experience. + +13.Known Issues +Some issues remain from the previous trimester. +Guard Page +Currently blocked due to a backend Role-Based Access Control (RBAC) issue. +The frontend implementation is mostly complete but cannot retrieve guard data until the backend +issue is resolved. + +14.Team Communication +Our primary communication platforms are: +• Microsoft Teams +• GitHub +• MS Planner +Please keep your Planner tasks updated and communicate any blockers early. +If you are stuck on a task for an extended period, ask for assistance rather than waiting. + +15.Pull Request Checklist +Before submitting a Pull Request, ensure that: +• The application builds successfully. +• Your feature has been tested locally. +• ESLint passes without errors. +• No unnecessary files are included. +• Screenshots are attached (where applicable). +• The Pull Request description clearly explains your changes. +16.Resources +Please familiarise yourself with the following resources before starting development: +• GitHub Repository +• Swagger API Documentation +• System Architecture Document +• Entity Relationship Diagram (ERD) +• Figma Designs +• User Manual +• MS Planner + +17.Tips for Success +• Pull the latest changes regularly. +• Test before committing. +• Keep commits small and meaningful. +• Read the API documentation before integrating endpoints. +• Ask questions whenever something is unclear. +• Collaborate with teammates and support one another. +• Focus on writing clean, maintainable code rather than rushing to complete tasks. + +18.Final Message +SecureShift is more than a university assignment—it is an opportunity to experience professional +software development practices in a collaborative environment. +Throughout this trimester, you will work with modern technologies, follow Agile methodologies, +participate in code reviews, collaborate across multiple teams, and contribute to a real-world +application. +Every contribution, whether it is a new feature, a bug fix, or a code improvement, plays an +important role in the success of the project. +On behalf of the Frontend Team, welcome to SecureShift. We look forward to working with you +and wish you a successful and enjoyable trimester. \ No newline at end of file diff --git a/app-backend/knowledge-base/guide/Onboarding.pdf b/app-backend/knowledge-base/guide/Onboarding.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f454524c1777773b7d09a3713b0fe44fb2240d25 GIT binary patch literal 206668 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≥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 z%0A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 literal 0 HcmV?d00001 diff --git a/app-backend/package-lock.json b/app-backend/package-lock.json index ae4e17210..e98c907e7 100644 --- a/app-backend/package-lock.json +++ b/app-backend/package-lock.json @@ -9,9 +9,10 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "axios": "^1.19.0", + "@langchain/ollama": "^1.3.0", "bcrypt": "^6.0.0", "bcryptjs": "^3.0.2", + "chromadb": "^3.5.0", "cors": "^2.8.5", "dotenv": "^17.2.0", "express": "^5.1.0", @@ -19,10 +20,13 @@ "helmet": "^8.1.0", "install": "^0.13.0", "jsonwebtoken": "^9.0.2", + "langchain": "^1.5.5", "mongoose": "^8.16.4", "morgan": "^1.10.1", "multer": "^2.0.2", "nodemailer": "^7.0.5", + "ollama": "^0.6.3", + "pdfjs-dist": "^6.2.108", "pdfkit": "^0.18.0", "swagger-jsdoc": "^6.2.8", "swagger-ui-express": "^5.0.1" @@ -38,7 +42,6 @@ "eslint-plugin-import": "^2.32.0", "globals": "^16.3.0", "jest": "^29.7.0", - "mongodb-memory-server": "^11.2.0", "nodemon": "^3.1.11", "prettier": "^3.6.2", "supertest": "^6.3.4" @@ -1899,6 +1902,13 @@ "dev": true, "license": "MIT" }, + "node_modules/@cfworker/json-schema": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@cfworker/json-schema/-/json-schema-4.1.1.tgz", + "integrity": "sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==", + "license": "MIT", + "peer": true + }, "node_modules/@eslint-community/eslint-utils": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", @@ -2586,15 +2596,203 @@ "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", "license": "MIT" }, + "node_modules/@langchain/core": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@langchain/core/-/core-1.2.5.tgz", + "integrity": "sha512-4lXj3fTPQYGdEtOG9gWDnvmp6wpXNMo9MmWzfZxxPUxMcjulZJa93pYAZ90luFLg2YVdVuUl2tuwdD7tY5K9MA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@cfworker/json-schema": "^4.0.2", + "@standard-schema/spec": "^1.1.0", + "js-tiktoken": "^1.0.12", + "langsmith": ">=0.5.0 <1.0.0", + "mustache": "^4.2.0", + "p-queue": "^6.6.2", + "zod": "^3.25.76 || ^4" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@langchain/langgraph": { + "version": "1.4.9", + "resolved": "https://registry.npmjs.org/@langchain/langgraph/-/langgraph-1.4.9.tgz", + "integrity": "sha512-EvD9rS66Cya09y6rbMgD3Ir8miAkJQFo7FyJOPRPO736Kz3y5TeyeBDOS8ctff/jRc788bPijHx2NVFM79Qqig==", + "license": "MIT", + "dependencies": { + "@langchain/langgraph-checkpoint": "^1.1.3", + "@langchain/langgraph-sdk": "~1.9.28", + "@langchain/protocol": "^0.0.18", + "@standard-schema/spec": "1.1.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/core": "^1.1.48", + "zod": "^3.25.32 || ^4.2.0" + } + }, + "node_modules/@langchain/langgraph-checkpoint": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@langchain/langgraph-checkpoint/-/langgraph-checkpoint-1.1.3.tgz", + "integrity": "sha512-wgzdQNeEsdw1e+4lvlj0tdq/RYR/k1vPin10g0ymGoehZDDgd9nvIllGXSXN4TFgF9sf5qQP/KTkOcLfeseIhA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@langchain/core": "^1.1.48" + } + }, + "node_modules/@langchain/langgraph-sdk": { + "version": "1.9.28", + "resolved": "https://registry.npmjs.org/@langchain/langgraph-sdk/-/langgraph-sdk-1.9.28.tgz", + "integrity": "sha512-4j3XuM0PvtmAbL8mPfBS99ez3+ytRfgbOpAR/nOeaejTRF3Q9dNw2QnaGLGng8wLPtGLoSj+SYgUOVxy9Bv9vg==", + "license": "MIT", + "dependencies": { + "@langchain/protocol": "^0.0.18", + "@types/json-schema": "^7.0.15", + "p-queue": "^9.0.1", + "p-retry": "^7.1.1" + }, + "peerDependencies": { + "@langchain/core": "^1.1.48", + "react": "^18 || ^19", + "react-dom": "^18 || ^19", + "svelte": "^4.0.0 || ^5.0.0", + "vue": "^3.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "svelte": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/@langchain/langgraph-sdk/node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/@langchain/langgraph-sdk/node_modules/p-queue": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.3.3.tgz", + "integrity": "sha512-NXAOdnEe5FsZJfT4oK84lE1Y5cFFdWlRuOo5tww8DyNMxyRXwn39fIkUtNLKppcPC+UYU/bXujNCUGDv01y7CA==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.4", + "p-timeout": "^7.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@langchain/langgraph-sdk/node_modules/p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@langchain/ollama": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@langchain/ollama/-/ollama-1.3.0.tgz", + "integrity": "sha512-uzLkZVTXN0SI5zAoJbJzL4y/QN7gbmJ1txBgFfqJ5M0Qf+Yu2Zu8q98L3jIrfM+akWMaNmRU4R4APhcfQmeIsw==", + "license": "MIT", + "dependencies": { + "ollama": "^0.6.3" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@langchain/core": "^1.0.0" + } + }, + "node_modules/@langchain/protocol": { + "version": "0.0.18", + "resolved": "https://registry.npmjs.org/@langchain/protocol/-/protocol-0.0.18.tgz", + "integrity": "sha512-XW1egQtPfsGI41w2AMZNFZrUIwFSQHTjVMZs0OaTpCAvht/QLoaPN8FQcsysMVypOhupG28J29yOorrc70otBQ==", + "license": "MIT" + }, "node_modules/@mongodb-js/saslprep": { "version": "1.4.13", - "resolved": "https://registry.npmmirror.com/@mongodb-js/saslprep/-/saslprep-1.4.13.tgz", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.4.13.tgz", "integrity": "sha512-E3Sv4eCYAlKYUTx8S3ioQcDUscOif+8zZ5OnW1IzJ+Tt+EO+ke8mn+Y3FX6N1H79picwbdOavVOb1jPi2EOyrg==", "license": "MIT", "dependencies": { "sparse-bitfield": "^3.0.3" } }, + "node_modules/@napi-rs/canvas": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas/-/canvas-1.0.3.tgz", + "integrity": "sha512-OlI657a5XXvKGFX7kNeIzJ8rO7IXt87Mqu2H8rXE46viAuOfum/JA7ysX7+eBhxNKznT+RCZh418mndlcFX3+w==", + "license": "MIT", + "optional": true, + "workspaces": [ + "e2e/*" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "optionalDependencies": { + "@napi-rs/canvas-android-arm64": "1.0.3", + "@napi-rs/canvas-darwin-arm64": "1.0.3", + "@napi-rs/canvas-darwin-x64": "1.0.3", + "@napi-rs/canvas-linux-arm-gnueabihf": "1.0.3", + "@napi-rs/canvas-linux-arm64-gnu": "1.0.3", + "@napi-rs/canvas-linux-arm64-musl": "1.0.3", + "@napi-rs/canvas-linux-riscv64-gnu": "1.0.3", + "@napi-rs/canvas-linux-x64-gnu": "1.0.3", + "@napi-rs/canvas-linux-x64-musl": "1.0.3", + "@napi-rs/canvas-win32-arm64-msvc": "1.0.3", + "@napi-rs/canvas-win32-x64-msvc": "1.0.3" + } + }, + "node_modules/@napi-rs/canvas-win32-x64-msvc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-1.0.3.tgz", + "integrity": "sha512-SGhlQ8bDjL1Cz2KnsKMasr/5sTcwG/SZkB6WCJxLsmSm/3aS2C+3p39bA7iZ2/94+NkVDySZfbiGoaSZSFHYxA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, "node_modules/@noble/ciphers": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz", @@ -2670,6 +2868,12 @@ "@sinonjs/commons": "^3.0.0" } }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "license": "MIT" + }, "node_modules/@swc/helpers": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.21.tgz", @@ -2873,16 +3077,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, "node_modules/ajv": { "version": "6.14.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", @@ -3120,20 +3314,11 @@ "node": ">= 0.4" } }, - "node_modules/async-mutex": { - "version": "0.5.0", - "resolved": "https://registry.npmmirror.com/async-mutex/-/async-mutex-0.5.0.tgz", - "integrity": "sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true, "license": "MIT" }, "node_modules/available-typed-arrays": { @@ -3152,58 +3337,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/axios": { - "version": "1.19.0", - "resolved": "https://registry.npmmirror.com/axios/-/axios-1.19.0.tgz", - "integrity": "sha512-ht/iuYZXEjFxLH/Hkezgd7m6JKlHHXEUSneaDz8uZe1Gj5QZtCnpyDsckvAiEnT89OEbCLmnte4R4sn7P0EKFw==", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.16.0", - "form-data": "^4.0.6", - "https-proxy-agent": "^5.0.1", - "proxy-from-env": "^2.1.0" - } - }, - "node_modules/axios/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/axios/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/b4a": { - "version": "1.8.1", - "resolved": "https://registry.npmmirror.com/b4a/-/b4a-1.8.1.tgz", - "integrity": "sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==", - "dev": true, - "license": "Apache-2.0", - "peerDependencies": { - "react-native-b4a": "*" - }, - "peerDependenciesMeta": { - "react-native-b4a": { - "optional": true - } - } - }, "node_modules/babel-jest": { "version": "30.0.4", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.0.4.tgz", @@ -3612,91 +3745,6 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "license": "MIT" }, - "node_modules/bare-events": { - "version": "2.9.1", - "resolved": "https://registry.npmmirror.com/bare-events/-/bare-events-2.9.1.tgz", - "integrity": "sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==", - "dev": true, - "license": "Apache-2.0", - "peerDependencies": { - "bare-abort-controller": "*" - }, - "peerDependenciesMeta": { - "bare-abort-controller": { - "optional": true - } - } - }, - "node_modules/bare-fs": { - "version": "4.8.0", - "resolved": "https://registry.npmmirror.com/bare-fs/-/bare-fs-4.8.0.tgz", - "integrity": "sha512-fM+MhCvdQhZ7NV6S95a07gPSqjIYKn6mFaXfx266wN3ajZGl/+1AzH+ubkXQ0fFZvOe2nk9VHkzdYkQE5zMV3Q==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bare-events": "^2.5.4", - "bare-path": "^3.0.0", - "bare-stream": "^2.6.4", - "bare-url": "^2.2.2", - "fast-fifo": "^1.3.2" - }, - "engines": { - "bare": ">=1.28.0" - }, - "peerDependencies": { - "bare-buffer": "*" - }, - "peerDependenciesMeta": { - "bare-buffer": { - "optional": true - } - } - }, - "node_modules/bare-path": { - "version": "3.1.1", - "resolved": "https://registry.npmmirror.com/bare-path/-/bare-path-3.1.1.tgz", - "integrity": "sha512-JprUlveX3QjApC1cTpsUOiscADftCGVWkzitbHsRqv84hzYwYHw2mbluddsq5TvI8mH/8Ov1f4BiMAdcB0oYnQ==", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/bare-stream": { - "version": "2.13.3", - "resolved": "https://registry.npmmirror.com/bare-stream/-/bare-stream-2.13.3.tgz", - "integrity": "sha512-Kc+brLqvEqGkjyfiwJmImAOqLZL7OsoLKuavx+hJjgVV3nLTOjloJyPMFxjUPerGGHrNH0fLU06jjykMLWrERQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "b4a": "^1.8.1", - "streamx": "^2.25.0", - "teex": "^1.0.1" - }, - "peerDependencies": { - "bare-abort-controller": "*", - "bare-buffer": "*", - "bare-events": "*" - }, - "peerDependenciesMeta": { - "bare-abort-controller": { - "optional": true - }, - "bare-buffer": { - "optional": true - }, - "bare-events": { - "optional": true - } - } - }, - "node_modules/bare-url": { - "version": "2.4.7", - "resolved": "https://registry.npmmirror.com/bare-url/-/bare-url-2.4.7.tgz", - "integrity": "sha512-o8CRCiJtib+ycO3mE4A5UChtGX4dDP2XxsWVu9P+Zc3H8tcmKwNVEDoDTXmwN+uuMhfKeT7/i7Y26xS8W7ohoA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bare-path": "^3.0.0" - } - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -4075,6 +4123,44 @@ "node": ">= 6" } }, + "node_modules/chromadb": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/chromadb/-/chromadb-3.5.0.tgz", + "integrity": "sha512-A68f2RQjY3R95Pzy0j3ykOu6fi+WWCN1tjbvzrZXZoYQ1d7ZjgWr1FyzitZCeaz/0qmc8y2LEK7QmlxloOAs9Q==", + "license": "Apache-2.0", + "dependencies": { + "semver": "^7.7.1" + }, + "bin": { + "chroma": "dist/cli.mjs" + }, + "engines": { + "node": ">=20" + }, + "optionalDependencies": { + "chromadb-js-bindings-darwin-arm64": "^1.3.4", + "chromadb-js-bindings-darwin-x64": "^1.3.4", + "chromadb-js-bindings-linux-arm64-gnu": "^1.3.4", + "chromadb-js-bindings-linux-x64-gnu": "^1.3.4", + "chromadb-js-bindings-win32-x64-msvc": "^1.3.4" + } + }, + "node_modules/chromadb-js-bindings-win32-x64-msvc": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/chromadb-js-bindings-win32-x64-msvc/-/chromadb-js-bindings-win32-x64-msvc-1.3.4.tgz", + "integrity": "sha512-punrofQRzKspNMxHmv24qoPeRycV2T3KfedekGV4lOuPPG14i6qggS4x/OWLSAK7ozPfBbrzCejvCa5wfvujhQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, "node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -4164,6 +4250,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" @@ -4181,13 +4268,6 @@ "node": ">= 6" } }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true, - "license": "MIT" - }, "node_modules/component-emitter": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", @@ -4392,7 +4472,7 @@ }, "node_modules/debug": { "version": "4.4.3", - "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.3.tgz", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { @@ -4479,6 +4559,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.4.0" @@ -4732,6 +4813,7 @@ "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==", + "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", @@ -5109,15 +5191,11 @@ "node": ">= 0.6" } }, - "node_modules/events-universal": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/events-universal/-/events-universal-1.0.1.tgz", - "integrity": "sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bare-events": "^2.7.0" - } + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" }, "node_modules/execa": { "version": "5.1.1", @@ -5237,13 +5315,6 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "license": "MIT" }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmmirror.com/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "dev": true, - "license": "MIT" - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -5318,50 +5389,6 @@ "node": ">= 0.8" } }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dev": true, - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-cache-dir/node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -5400,26 +5427,6 @@ "dev": true, "license": "ISC" }, - "node_modules/follow-redirects": { - "version": "1.16.0", - "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.16.0.tgz", - "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, "node_modules/fontkit": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz", @@ -5455,8 +5462,9 @@ }, "node_modules/form-data": { "version": "4.0.6", - "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.6.tgz", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", + "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", @@ -5473,6 +5481,7 @@ "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -5482,6 +5491,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, "license": "MIT", "dependencies": { "mime-db": "1.52.0" @@ -5530,21 +5540,6 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "license": "ISC" }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -5835,6 +5830,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" @@ -5848,7 +5844,7 @@ }, "node_modules/hasown": { "version": "2.0.4", - "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.4.tgz", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "license": "MIT", "dependencies": { @@ -5899,20 +5895,6 @@ "node": ">= 0.8" } }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -6308,6 +6290,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-network-error": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.2.tgz", + "integrity": "sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -7228,6 +7222,16 @@ "integrity": "sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ==", "license": "MIT" }, + "node_modules/js-tiktoken": { + "version": "1.0.21", + "resolved": "https://registry.npmjs.org/js-tiktoken/-/js-tiktoken-1.0.21.tgz", + "integrity": "sha512-biOj/6M5qdgx5TKjDnFT1ymSpM5tbd3ylwDtrQvFQSu0Z7bBYko2dF+W/aUkXUPuk6IVpRxk/3Q2sHOzGlS36g==", + "license": "MIT", + "peer": true, + "dependencies": { + "base64-js": "^1.5.1" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -7373,6 +7377,57 @@ "node": ">=6" } }, + "node_modules/langchain": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/langchain/-/langchain-1.5.5.tgz", + "integrity": "sha512-KhedvQDRvaLIFMSvEy45U/pqR4G0dEfN7wPyHTBMgMIUXbcrVkaqRVlDSMPfMCwNuiRCfWFUHueYGtgSrwBcBA==", + "license": "MIT", + "dependencies": { + "@langchain/langgraph": "^1.4.8", + "@langchain/langgraph-checkpoint": "^1.1.3", + "langsmith": ">=0.5.0 <1.0.0", + "zod": "^3.25.76 || ^4" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "@langchain/core": "^1.2.5" + } + }, + "node_modules/langsmith": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/langsmith/-/langsmith-0.8.9.tgz", + "integrity": "sha512-6ikTB5SO+3SlBQ/+oH8K/JzhglxB8AM4RAe5bHzgWSEIHTgTe+b71bSjf1fDvlYuEXoiPn6uP10BbczrbznUnA==", + "license": "MIT", + "dependencies": { + "p-queue": "6.6.2" + }, + "peerDependencies": { + "@opentelemetry/api": "*", + "@opentelemetry/exporter-trace-otlp-proto": "*", + "@opentelemetry/sdk-trace-base": "*", + "openai": "*", + "ws": ">=7" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@opentelemetry/exporter-trace-otlp-proto": { + "optional": true + }, + "@opentelemetry/sdk-trace-base": { + "optional": true + }, + "openai": { + "optional": true + }, + "ws": { + "optional": true + } + } + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -7756,139 +7811,6 @@ "whatwg-url": "^14.1.0 || ^13.0.0" } }, - "node_modules/mongodb-memory-server": { - "version": "11.2.0", - "resolved": "https://registry.npmmirror.com/mongodb-memory-server/-/mongodb-memory-server-11.2.0.tgz", - "integrity": "sha512-506AD8qvClVx8Raw/WhAUUWBgIXPyi856iC01aa5vAzHmn6WOXC6ulvudkTF7oTMzJxkyA0A84VpD4BpyfqJ9w==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "mongodb-memory-server-core": "11.2.0", - "tslib": "^2.8.1" - }, - "engines": { - "node": ">=20.19.0" - } - }, - "node_modules/mongodb-memory-server-core": { - "version": "11.2.0", - "resolved": "https://registry.npmmirror.com/mongodb-memory-server-core/-/mongodb-memory-server-core-11.2.0.tgz", - "integrity": "sha512-vOoDtn0JiLrHvZY81Rp/UtKXXK0rtJHZGZFVnccvJwYitPLNspO0Ty0grqFQOe7iAET8+GI4zAQcphg+R3vxQg==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-mutex": "^0.5.0", - "camelcase": "^6.3.0", - "debug": "^4.4.3", - "find-cache-dir": "^3.3.2", - "follow-redirects": "^1.16.0", - "https-proxy-agent": "^7.0.6", - "mongodb": "^7.2.0", - "new-find-package-json": "^2.0.0", - "semver": "^7.7.3", - "tar-stream": "^3.1.8", - "tslib": "^2.8.1", - "yauzl": "^3.3.1" - }, - "engines": { - "node": ">=20.19.0" - } - }, - "node_modules/mongodb-memory-server-core/node_modules/@types/whatwg-url": { - "version": "13.0.0", - "resolved": "https://registry.npmmirror.com/@types/whatwg-url/-/whatwg-url-13.0.0.tgz", - "integrity": "sha512-N8WXpbE6Wgri7KUSvrmQcqrMllKZ9uxkYWMt+mCSGwNc0Hsw9VQTW7ApqI4XNrx6/SaM2QQJCzMPDEXE058s+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/webidl-conversions": "*" - } - }, - "node_modules/mongodb-memory-server-core/node_modules/bson": { - "version": "7.3.1", - "resolved": "https://registry.npmmirror.com/bson/-/bson-7.3.1.tgz", - "integrity": "sha512-h/C0qe6857pQhcSJHLfsR1uYGj98Ge3wKAD3Ed9KqH3wcVh+BM4Jq4xISD7vs9OPuT07n+q3QQVjslJ286j6ag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=20.19.0" - } - }, - "node_modules/mongodb-memory-server-core/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mongodb-memory-server-core/node_modules/mongodb": { - "version": "7.5.0", - "resolved": "https://registry.npmmirror.com/mongodb/-/mongodb-7.5.0.tgz", - "integrity": "sha512-5FnrEDLnvp6ycUOGLNLLU33BfCx2qmp2mJjGPDwKLruYsVzXVSK5fsGpoDXvsXJwBfBsD7ebMRdawbDxC2814g==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@mongodb-js/saslprep": "^1.4.11", - "bson": "^7.2.0", - "mongodb-connection-string-url": "^7.0.1" - }, - "engines": { - "node": ">=20.19.0" - }, - "peerDependencies": { - "@aws-sdk/credential-providers": "^3.806.0", - "@mongodb-js/zstd": "^7.0.0", - "gcp-metadata": "^7.0.1", - "kerberos": "^7.0.0", - "mongodb-client-encryption": "^7.2.0", - "snappy": "^7.3.2", - "socks": "^2.8.6" - }, - "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-memory-server-core/node_modules/mongodb-connection-string-url": { - "version": "7.0.2", - "resolved": "https://registry.npmmirror.com/mongodb-connection-string-url/-/mongodb-connection-string-url-7.0.2.tgz", - "integrity": "sha512-ZoS07RoFqpKYQwAk59qmrx8+jJHNHU30UjlU96QktiGn1ltvDr+vCznLX5DiUBLEpMAHatHNWV1nM/74ul66kA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@types/whatwg-url": "^13.0.0", - "whatwg-url": "^14.1.0" - }, - "engines": { - "node": ">=20.19.0" - } - }, "node_modules/mongoose": { "version": "8.16.4", "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.16.4.tgz", @@ -8042,6 +7964,16 @@ "node": ">= 0.6" } }, + "node_modules/mustache": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", + "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "license": "MIT", + "peer": true, + "bin": { + "mustache": "bin/mustache" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -8058,19 +7990,6 @@ "node": ">= 0.6" } }, - "node_modules/new-find-package-json": { - "version": "2.0.0", - "resolved": "https://registry.npmmirror.com/new-find-package-json/-/new-find-package-json-2.0.0.tgz", - "integrity": "sha512-lDcBsjBSMlj3LXH2v/FW3txlh2pYTjmbOXPYJD93HI5EwuLzI11tdHSIpUMmfq/IOsldj4Ps8M8flhm+pCK4Ew==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">=12.22.0" - } - }, "node_modules/node-addon-api": { "version": "8.5.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz", @@ -8294,6 +8213,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ollama": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/ollama/-/ollama-0.6.3.tgz", + "integrity": "sha512-KEWEhIqE5wtfzEIZbDCLH51VFZ6Z3ZSa6sIOg/E/tBV8S51flyqBOXi+bRxlOYKDf8i327zG9eSTb8IJxvm3Zg==", + "license": "MIT", + "dependencies": { + "whatwg-fetch": "^3.6.20" + } + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -8383,6 +8311,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -8415,6 +8352,49 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-7.1.1.tgz", + "integrity": "sha512-J5ApzjyRkkf601HpEeykoiCvzHQjWxPAHhyjFcEUP2SWq0+35NKh8TLhpLw+Dkq5TZBFvUM6UigdE9hIVYTl5w==", + "license": "MIT", + "dependencies": { + "is-network-error": "^1.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -8517,6 +8497,18 @@ "node": ">=16" } }, + "node_modules/pdfjs-dist": { + "version": "6.2.108", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-6.2.108.tgz", + "integrity": "sha512-YxFb+SQcodN2rnX9Tn3dHYlqfb7NjlzzfONPpJd+AKoKtUjEdevTfbC07d5TcczzOK6261auRkP/M8OBHs9vFQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=22.13.0 || >=24" + }, + "optionalDependencies": { + "@napi-rs/canvas": "^1.0.0" + } + }, "node_modules/pdfkit": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/pdfkit/-/pdfkit-0.18.0.tgz", @@ -8531,13 +8523,6 @@ "png-js": "^1.0.0" } }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmmirror.com/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true, - "license": "MIT" - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -8736,15 +8721,6 @@ "node": ">= 0.10" } }, - "node_modules/proxy-from-env": { - "version": "2.1.0", - "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-2.1.0.tgz", - "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", @@ -9145,7 +9121,7 @@ }, "node_modules/semver": { "version": "7.8.5", - "resolved": "https://registry.npmmirror.com/semver/-/semver-7.8.5.tgz", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "license": "ISC", "bin": { @@ -9476,18 +9452,6 @@ "node": ">=10.0.0" } }, - "node_modules/streamx": { - "version": "2.28.0", - "resolved": "https://registry.npmmirror.com/streamx/-/streamx-2.28.0.tgz", - "integrity": "sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==", - "dev": true, - "license": "MIT", - "dependencies": { - "events-universal": "^1.0.0", - "fast-fifo": "^1.3.2", - "text-decoder": "^1.1.0" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -9772,29 +9736,6 @@ "express": ">=4.0.0 || >=5.0.0-beta" } }, - "node_modules/tar-stream": { - "version": "3.2.0", - "resolved": "https://registry.npmmirror.com/tar-stream/-/tar-stream-3.2.0.tgz", - "integrity": "sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==", - "dev": true, - "license": "MIT", - "dependencies": { - "b4a": "^1.6.4", - "bare-fs": "^4.5.5", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, - "node_modules/teex": { - "version": "1.0.1", - "resolved": "https://registry.npmmirror.com/teex/-/teex-1.0.1.tgz", - "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "streamx": "^2.12.5" - } - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -9810,16 +9751,6 @@ "node": ">=8" } }, - "node_modules/text-decoder": { - "version": "1.2.7", - "resolved": "https://registry.npmmirror.com/text-decoder/-/text-decoder-1.2.7.tgz", - "integrity": "sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "b4a": "^1.6.4" - } - }, "node_modules/tiny-inflate": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", @@ -10251,6 +10182,12 @@ "node": ">=12" } }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "license": "MIT" + }, "node_modules/whatwg-url": { "version": "14.2.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", @@ -10481,19 +10418,6 @@ "node": ">=12" } }, - "node_modules/yauzl": { - "version": "3.4.0", - "resolved": "https://registry.npmmirror.com/yauzl/-/yauzl-3.4.0.tgz", - "integrity": "sha512-jIH9yLR9wqr0wOS0TpBvo/g/2UgZH5qePVbjgRliiF0BYvOZyaBknKsF+x9Iht0O6sqgnB93rCICdOZFecJuDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "pend": "~1.2.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -10536,6 +10460,15 @@ "engines": { "node": "^12.20.0 || >=14" } + }, + "node_modules/zod": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.4.3.tgz", + "integrity": "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/app-backend/package.json b/app-backend/package.json index 0b58668fc..9f3ec7e95 100644 --- a/app-backend/package.json +++ b/app-backend/package.json @@ -12,7 +12,7 @@ "dev": "nodemon server.js", "lint": "eslint \"src/**/*.js\"", "lint:fix": "eslint \"src/**/*.js\" --fix", - "test": "node --experimental-vm-modules ./node_modules/jest/bin/jest.js --runInBand", + "test": "jest --runInBand", "test:watch": "jest --watch", "seed": "node -r dotenv/config src/scripts/seed/index.js", "seed:reset": "node -r dotenv/config src/scripts/seed/index.js --reset", @@ -38,9 +38,10 @@ }, "homepage": "https://github.com/musahex/secure_backend#readme", "dependencies": { - "axios": "^1.19.0", + "@langchain/ollama": "^1.3.0", "bcrypt": "^6.0.0", "bcryptjs": "^3.0.2", + "chromadb": "^3.5.0", "cors": "^2.8.5", "dotenv": "^17.2.0", "express": "^5.1.0", @@ -48,10 +49,13 @@ "helmet": "^8.1.0", "install": "^0.13.0", "jsonwebtoken": "^9.0.2", + "langchain": "^1.5.5", "mongoose": "^8.16.4", "morgan": "^1.10.1", "multer": "^2.0.2", "nodemailer": "^7.0.5", + "ollama": "^0.6.3", + "pdfjs-dist": "^6.2.108", "pdfkit": "^0.18.0", "swagger-jsdoc": "^6.2.8", "swagger-ui-express": "^5.0.1" @@ -67,7 +71,6 @@ "eslint-plugin-import": "^2.32.0", "globals": "^16.3.0", "jest": "^29.7.0", - "mongodb-memory-server": "^11.2.0", "nodemon": "^3.1.11", "prettier": "^3.6.2", "supertest": "^6.3.4" diff --git a/app-backend/src/ai/chunking/textChunker.js b/app-backend/src/ai/chunking/textChunker.js new file mode 100644 index 000000000..b349d8095 --- /dev/null +++ b/app-backend/src/ai/chunking/textChunker.js @@ -0,0 +1,62 @@ +export function splitIntoChunks(text) { + + const lines = text.split("\n"); + + const chunks = []; + console.log("\n========== CHUNKS =========="); + +chunks.forEach((chunk, index) => { + console.log(`\n--- Chunk ${index + 1} ---`); + console.log("Section:", chunk.section); + console.log("Text:", chunk.text); +}); + +console.log("============================\n"); + + let currentSection = "General"; + + let buffer = []; + + for (const line of lines) { + + const trimmed = line.trim(); + + if (!trimmed) continue; + + const isHeading = + trimmed.startsWith("#") || + /^[0-9]+\./.test(trimmed) || + trimmed.endsWith(":"); + + if (isHeading) { + + // Save previous chunk + if (buffer.length > 0) { + chunks.push({ + section: currentSection, + text: buffer.join("\n"), + }); + } + + currentSection = trimmed; + + // IMPORTANT: + // Start the new chunk WITH the heading + buffer = [trimmed]; + + } else { + + buffer.push(trimmed); + + } + } + + if (buffer.length > 0) { + chunks.push({ + section: currentSection, + text: buffer.join("\n"), + }); + } + + return chunks; +} \ No newline at end of file diff --git a/app-backend/src/ai/controllers/aiController.js b/app-backend/src/ai/controllers/aiController.js new file mode 100644 index 000000000..eacb4b2eb --- /dev/null +++ b/app-backend/src/ai/controllers/aiController.js @@ -0,0 +1,82 @@ +import { askOllama } from "../services/ollamaService.js"; +import { semanticSearch } from "../retrieval/vectorSearch.js"; + +export async function chat(req, res) { + try { + const question = req.body?.question; + + if (!question) { + return res.status(400).json({ + success: false, + message: "Question is required.", + }); + } + + // Search the vector database + const searchResult = await semanticSearch(question); + + let chunks = []; + let mode = "general"; + let confidence = 0; + + if (searchResult.bestScore >= 0.60) { + chunks = searchResult.results; + mode = "documentation"; + confidence = Number(searchResult.bestScore.toFixed(3)); + } + + // ============================== + // DEBUG: Show retrieved chunks + // ============================== + console.log("\n========== RETRIEVED CHUNKS =========="); + + if (chunks.length === 0) { + console.log("No documentation retrieved."); + } else { + chunks.forEach((chunk, index) => { + console.log(`\nChunk ${index + 1}`); + console.log("Document :", chunk.document); + console.log("Section :", chunk.section); + console.log("Score :", chunk.score.toFixed(3)); + console.log( + "Text :", + chunk.text.substring(0, 250).replace(/\n/g, " ") + ); + }); + } + + console.log("======================================\n"); + + // Ask Ollama + const answer = await askOllama(question, chunks); + + return res.status(200).json({ + success: true, + mode, + answer, + + sources: + mode === "documentation" + ? chunks.map((chunk) => ({ + id: chunk.id, + document: chunk.document, + section: chunk.section, + score: Number(chunk.score.toFixed(3)), + })) + : [], + + confidence, + timestamp: new Date().toISOString(), + }); + + } catch (err) { + console.error("========== AI CHAT ERROR =========="); + console.error(err); + console.error("==================================="); + + return res.status(500).json({ + success: false, + message: err.message, + }); + } +} \ No newline at end of file diff --git a/app-backend/src/ai/embeddings/embeddingService.js b/app-backend/src/ai/embeddings/embeddingService.js new file mode 100644 index 000000000..e7a5c5695 --- /dev/null +++ b/app-backend/src/ai/embeddings/embeddingService.js @@ -0,0 +1,20 @@ +import { Ollama } from "ollama"; + +const host = + process.env.OLLAMA_HOST || + (process.env.NODE_ENV === "development" + ? "http://localhost:11434" + : "http://host.docker.internal:11434"); + +const ollama = new Ollama({ + host, +}); + +export async function createEmbedding(text) { + const response = await ollama.embed({ + model: "nomic-embed-text:latest", + input: text, + }); + + return response.embeddings[0]; +} \ No newline at end of file diff --git a/app-backend/src/ai/indexing/buildIndex.js b/app-backend/src/ai/indexing/buildIndex.js new file mode 100644 index 000000000..bd716772b --- /dev/null +++ b/app-backend/src/ai/indexing/buildIndex.js @@ -0,0 +1,95 @@ +import fs from "fs"; +import path from "path"; +import { fileURLToPath } from "url"; + +import { splitIntoChunks } from "../chunking/textChunker.js"; +import { createEmbedding } from "../embeddings/embeddingService.js"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const docsFolder = path.join( + __dirname, + "../../../knowledge-base/docs" +); + +const vectorsFolder = path.join( + __dirname, + "../../../knowledge-base/vectors" +); + +// Create vectors folder if it doesn't exist +if (!fs.existsSync(vectorsFolder)) { + fs.mkdirSync(vectorsFolder, { recursive: true }); +} + +async function buildIndex() { + const files = fs.readdirSync(docsFolder); + + console.log("Documents found:", files); + + for (const file of files) { + if (!file.endsWith(".txt")) continue; + + console.log(`\nProcessing ${file}`); + + const text = fs.readFileSync( + path.join(docsFolder, file), + "utf8" + ); + + // Split document into sections/chunks + const chunks = splitIntoChunks(text); + + console.log(`Found ${chunks.length} chunks`); + + // ========================================== + // DEBUG: Show generated chunks + // ========================================== + console.log("\n========== CHUNKS =========="); + + chunks.forEach((chunk, index) => { + console.log(`\n--- Chunk ${index + 1} ---`); + console.log("Section:", chunk.section); + console.log("Text:", chunk.text); + }); + + console.log("\n============================\n"); + + const vectors = []; + + for (let i = 0; i < chunks.length; i++) { + console.log( + `Embedding ${file} (${i + 1}/${chunks.length})` + ); + + const embedding = await createEmbedding( + chunks[i].text + ); + + vectors.push({ + id: i, + document: file, + section: chunks[i].section, + text: chunks[i].text, + embedding, + }); + } + + const outputFile = path.join( + vectorsFolder, + file.replace(".txt", ".json") + ); + + fs.writeFileSync( + outputFile, + JSON.stringify(vectors, null, 2) + ); + + console.log(`Saved ${outputFile}`); + } + + console.log("\n✅ All documents indexed."); +} + +buildIndex(); \ No newline at end of file diff --git a/app-backend/src/ai/retrieval/similarity.js b/app-backend/src/ai/retrieval/similarity.js new file mode 100644 index 000000000..fae5791ff --- /dev/null +++ b/app-backend/src/ai/retrieval/similarity.js @@ -0,0 +1,24 @@ +export function cosineSimilarity(vecA, vecB) { + if (vecA.length !== vecB.length) { + throw new Error("Vectors must have the same length"); + } + + let dot = 0; + let magA = 0; + let magB = 0; + + for (let i = 0; i < vecA.length; i++) { + dot += vecA[i] * vecB[i]; + magA += vecA[i] * vecA[i]; + magB += vecB[i] * vecB[i]; + } + + magA = Math.sqrt(magA); + magB = Math.sqrt(magB); + + if (magA === 0 || magB === 0) { + return 0; + } + + return dot / (magA * magB); +} \ No newline at end of file diff --git a/app-backend/src/ai/retrieval/vectorSearch.js b/app-backend/src/ai/retrieval/vectorSearch.js new file mode 100644 index 000000000..609c4a4f6 --- /dev/null +++ b/app-backend/src/ai/retrieval/vectorSearch.js @@ -0,0 +1,384 @@ +import fs from "fs"; +import path from "path"; +import { fileURLToPath } from "url"; + +import { createEmbedding } from "../embeddings/embeddingService.js"; +import { cosineSimilarity } from "./similarity.js"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +const vectorsFolder = path.join( + __dirname, + "../../../knowledge-base/vectors" +); + +// ========================================== +// Load all vectors +// ========================================== + +let vectors = []; + +const files = fs.readdirSync(vectorsFolder); + +for (const file of files) { + if (!file.endsWith(".json")) continue; + + const fileVectors = JSON.parse( + fs.readFileSync( + path.join(vectorsFolder, file), + "utf8" + ) + ); + + fileVectors.forEach((chunk) => { + chunk.document = file; + vectors.push(chunk); + }); +} + +console.log( + `✅ Loaded ${vectors.length} chunks from ${ + files.filter((file) => file.endsWith(".json")).length + } documents` +); + +// ========================================== +// Clean text +// ========================================== + +function cleanText(text) { + return text + .toLowerCase() + .replace(/[^\w\s]/g, " ") + .replace(/\s+/g, " ") + .trim(); +} + +// ========================================== +// Extract useful keywords +// ========================================== + +function getKeywords(question) { + const stopWords = new Set([ + "what", + "is", + "are", + "the", + "does", + "do", + "how", + "can", + "of", + "a", + "an", + "and", + "to", + "for", + "in", + "on", + "use", + "uses", + "used", + "with", + "about", + "tell", + "me", + "please", + "which", + ]); + + // Normalize related words + const aliases = { + technologies: "technology", + tech: "technology", + frameworks: "framework", + databases: "database", + frontends: "frontend", + backends: "backend", + }; + + return cleanText(question) + .split(" ") + .filter( + (word) => + word.length > 2 && + !stopWords.has(word) + ) + .map((word) => aliases[word] || word); +} + +// ========================================== +// Keyword score +// ========================================== + +function keywordScore(question, chunk) { + const keywords = getKeywords(question); + + if (keywords.length === 0) { + return 0; + } + + const section = cleanText(chunk.section || ""); + const text = cleanText(chunk.text || ""); + + let score = 0; + + for (const keyword of keywords) { + // Stronger weight when keyword appears in section + if (section.includes(keyword)) { + score += 2; + } + + // Normal weight when keyword appears in text + if (text.includes(keyword)) { + score += 1; + } + } + + const maxScore = keywords.length * 3; + + return Math.min(score / maxScore, 1); +} + +// ========================================== +// Section / topic matching +// ========================================== + +function sectionMatchScore(question, chunk) { + const q = cleanText(question); + const section = cleanText(chunk.section || ""); + const text = cleanText(chunk.text || ""); + + // ========================================== + // Technology questions + // ========================================== + + const isTechnologyQuestion = + q.includes("technolog") || + q.includes("tech stack") || + q.includes("framework") || + q.includes("database") || + q.includes("backend") || + q.includes("frontend"); + + if (isTechnologyQuestion) { + if (section.includes("technology stack")) { + return 1; + } + + if (text.includes("technology stack")) { + return 0.8; + } + } + + // ========================================== + // Architecture questions + // ========================================== + + const isArchitectureQuestion = + q.includes("architect") || + q.includes("system architecture") || + q.includes("project architecture"); + + if (isArchitectureQuestion) { + if (section.includes("project architecture")) { + return 1; + } + + if (text.includes("project architecture")) { + return 0.8; + } + } + + // ========================================== + // Docker questions + // ========================================== + + if (q.includes("docker")) { + if (section.includes("docker")) { + return 1; + } + + if (text.includes("docker")) { + return 0.8; + } + } + + // ========================================== + // Git questions + // ========================================== + + if ( + q.includes("git") || + q.includes("github") || + q.includes("branch") || + q.includes("commit") || + q.includes("pull request") + ) { + if (section.includes("git")) { + return 1; + } + + if (text.includes("git")) { + return 0.8; + } + } + + // ========================================== + // SecureShift overview questions + // ========================================== + + const isOverviewQuestion = + q === "secureshift" || + q.includes("what is secureshift") || + q.includes("what does secureshift do") || + q.includes("tell me about secureshift") || + q.includes("about secureshift") || + q.includes("overview of secureshift"); + + if (isOverviewQuestion) { + if (section.includes("about secureshift")) { + return 1; + } + + if ( + text.includes("secureshift is a workforce management platform") + ) { + return 0.8; + } + } + + return 0; +} + +// ========================================== +// Semantic search +// ========================================== + +export async function semanticSearch( + question, + topK = 5 +) { + const questionEmbedding = + await createEmbedding(question); + + const scored = vectors.map((chunk) => { + const semantic = cosineSimilarity( + questionEmbedding, + chunk.embedding + ); + + const keyword = keywordScore( + question, + chunk + ); + + const sectionMatch = + sectionMatchScore( + question, + chunk + ); + + /* + Final score: + + Semantic similarity = 35% + Keyword matching = 25% + Section matching = 40% + */ + + const score = + semantic * 0.35 + + keyword * 0.25 + + sectionMatch * 0.40; + + return { + ...chunk, + + semanticScore: semantic, + keywordScore: keyword, + sectionMatchScore: sectionMatch, + + score, + }; + }); + + // ========================================== + // Highest score first + // ========================================== + + scored.sort( + (a, b) => b.score - a.score + ); + + const results = scored.slice(0, topK); + + const bestScore = + results[0]?.score || 0; + + // ========================================== + // Debug output + // ========================================== + + console.log( + "\n========== SEMANTIC SEARCH ==========" + ); + + console.log( + "Question:", + question + ); + + results.forEach((result, index) => { + console.log( + `\n--- Result ${index + 1} ---` + ); + + console.log( + "Final Score:", + result.score.toFixed(3) + ); + + console.log( + "Semantic:", + result.semanticScore.toFixed(3) + ); + + console.log( + "Keyword:", + result.keywordScore.toFixed(3) + ); + + console.log( + "Section:", + result.sectionMatchScore.toFixed(3) + ); + + console.log( + "Document:", + result.document + ); + + console.log( + "Section Name:", + result.section + ); + + console.log( + "Text:", + result.text + .substring(0, 300) + .replace(/\n/g, " ") + ); + }); + + console.log( + "\n======================================\n" + ); + + return { + results, + bestScore, + }; +} \ No newline at end of file diff --git a/app-backend/src/ai/routes/aiRoutes.js b/app-backend/src/ai/routes/aiRoutes.js new file mode 100644 index 000000000..9ebf11975 --- /dev/null +++ b/app-backend/src/ai/routes/aiRoutes.js @@ -0,0 +1,8 @@ +import express from "express"; +import { chat } from "../controllers/aiController.js"; + +const router = express.Router(); + +router.post("/chat", chat); + +export default router; \ No newline at end of file diff --git a/app-backend/src/ai/scripts/readPdf.js b/app-backend/src/ai/scripts/readPdf.js new file mode 100644 index 000000000..8a5457c1a --- /dev/null +++ b/app-backend/src/ai/scripts/readPdf.js @@ -0,0 +1,34 @@ +import fs from "fs"; +import pdf from "pdf-parse"; +import path from "path"; +import { fileURLToPath } from "url"; + +// Get current directory +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +// Path to the PDF +const pdfPath = path.join( + __dirname, + "../../../knowledge-base/guides/Onboarding.pdf" +); + +async function readPDF() { + try { + console.log("📄 Reading:", pdfPath); + + const dataBuffer = fs.readFileSync(pdfPath); + + const data = await pdf(dataBuffer); + + console.log("\n========== PDF TEXT ==========\n"); + console.log(data.text); + console.log("\n==============================\n"); + + } catch (error) { + console.error("❌ Error reading PDF:"); + console.error(error); + } +} + +readPDF(); \ No newline at end of file diff --git a/app-backend/src/ai/services/documentLoader.js b/app-backend/src/ai/services/documentLoader.js new file mode 100644 index 000000000..e69de29bb diff --git a/app-backend/src/ai/services/knowledgeService.js b/app-backend/src/ai/services/knowledgeService.js new file mode 100644 index 000000000..3119fd4c2 --- /dev/null +++ b/app-backend/src/ai/services/knowledgeService.js @@ -0,0 +1,31 @@ +import { semanticSearch } from "../retrieval/vectorSearch.js"; + +/** + * Search the SecureShift knowledge base. + * + * Uses the vector-based semantic search system. + * + * The search combines: + * - Semantic similarity + * - Keyword matching + * - Technology/section matching + * + * @param {string} question - User's question + * @param {number} topK - Number of results to return + * @returns {Promise} Search results and confidence score + */ +export async function searchKnowledge(question, topK = 5) { + if (!question || typeof question !== "string") { + return { + results: [], + bestScore: 0, + }; + } + + const searchResult = await semanticSearch(question, topK); + + return { + results: searchResult.results, + bestScore: searchResult.bestScore, + }; +} \ No newline at end of file diff --git a/app-backend/src/ai/services/ollamaService.js b/app-backend/src/ai/services/ollamaService.js new file mode 100644 index 000000000..6974a8fc3 --- /dev/null +++ b/app-backend/src/ai/services/ollamaService.js @@ -0,0 +1,110 @@ +import { Ollama } from "ollama"; + +const ollama = new Ollama({ + host: + process.env.OLLAMA_HOST || + "http://host.docker.internal:11434", +}); + +export async function askOllama(question, chunks = []) { + + let systemPrompt; + let userPrompt; + + // Documentation found + if (chunks.length > 0) { + + const context = chunks + .map( + (chunk) => ` +Document: ${chunk.document} +Section: ${chunk.section} + +${chunk.text} +` + ) + .join("\n\n=============================\n\n"); + + systemPrompt = ` +You are SecureShift AI, the official AI assistant for the SecureShift workforce management platform. + +Your job is to answer questions accurately using the supplied documentation. + +Rules: + +1. The documentation below comes from the official SecureShift onboarding guide. + +2. If the documentation contains the answer, + answer from it. + +3. If Docker commands exist, + reproduce them exactly. + +4. If a list of technologies exists, + list every technology mentioned. + +5. Explain the answer in simple English. + +6. NEVER say the documentation does not contain information if it clearly appears in the supplied context. + +7. Never interpret SecureShift as malware, hacking software, or anything malicious. + +8. When someone asks + "How do I build SecureShift?" + they mean + "How do I build and run the SecureShift project locally?" + +9. If the documentation only partially answers, + answer using the documentation first, + then clearly say: + + "Additional explanation (general software engineering knowledge):" + + before adding any extra information. + +Always answer in Markdown. +`; + + userPrompt = ` +Documentation + +${context} + +Question + +${question} +`; + + } else { + + systemPrompt = ` +You are SecureShift AI. + +No SecureShift documentation matched this question. + +Answer as an experienced software engineering assistant. + +Be concise. + +Use Markdown. +`; + + userPrompt = question; + } + + const response = await ollama.chat({ + model: "llama3.2", + messages: [ + { + role: "system", + content: systemPrompt, + }, + { + role: "user", + content: userPrompt, + }, + ], + }); + + return response.message.content; +} \ No newline at end of file diff --git a/app-backend/src/ai/test.js b/app-backend/src/ai/test.js new file mode 100644 index 000000000..c77db2752 --- /dev/null +++ b/app-backend/src/ai/test.js @@ -0,0 +1,9 @@ +import { askOllama } from "./services/ollamaService.js"; + +async function test() { + const answer = await askOllama("What is React?"); + + console.log(answer); +} + +test(); \ No newline at end of file diff --git a/app-backend/src/ai/testEmbedding.js b/app-backend/src/ai/testEmbedding.js new file mode 100644 index 000000000..52d7daf44 --- /dev/null +++ b/app-backend/src/ai/testEmbedding.js @@ -0,0 +1,11 @@ +import { createEmbedding } from "./embeddings/embeddingService.js"; + +async function test() { + const embedding = await createEmbedding("Docker Setup"); + + console.log("Embedding length:", embedding.length); + console.log("First 10 values:"); + console.log(embedding.slice(0, 10)); +} + +test(); \ No newline at end of file diff --git a/app-backend/src/ai/testSearch.js b/app-backend/src/ai/testSearch.js new file mode 100644 index 000000000..b1823dca2 --- /dev/null +++ b/app-backend/src/ai/testSearch.js @@ -0,0 +1,13 @@ +import { semanticSearch } from "./retrieval/vectorSearch.js"; + +async function test() { + + const results = await semanticSearch( + "How do I run Docker?" + ); + + console.log(results); + +} + +test(); \ No newline at end of file diff --git a/app-backend/src/routes/ai.routes.js b/app-backend/src/routes/ai.routes.js new file mode 100644 index 000000000..61bb954be --- /dev/null +++ b/app-backend/src/routes/ai.routes.js @@ -0,0 +1,9 @@ +import express from "express"; +import { chat } from "../ai/controllers/aiController.js"; + +const router = express.Router(); + +// POST /api/v1/ai/chat +router.post("/chat", chat); + +export default router; \ No newline at end of file diff --git a/app-backend/src/routes/index.js b/app-backend/src/routes/index.js index 51db1c886..ba02fdfc0 100644 --- a/app-backend/src/routes/index.js +++ b/app-backend/src/routes/index.js @@ -20,6 +20,7 @@ import timesheetRoutes from "./timesheet.routes.js"; import shiftRequestRoutes from "./shiftrequest.routes.js"; import faqRoutes from "./faq.routes.js"; import verificationRoutes from "./verification.routes.js"; +import aiRoutes from "./ai.routes.js"; const router = express.Router(); router.use("/documents", documentRoutes); router.use("/health", healthRoutes); @@ -41,4 +42,5 @@ router.use("/emergency", emergencyRoutes); router.use("/sos", sosRoutes); router.use("/faqs", faqRoutes); router.use("/verification", verificationRoutes); +router.use("/ai", aiRoutes); export default router; diff --git a/app-frontend/employer-panel/package-lock.json b/app-frontend/employer-panel/package-lock.json index f90b4b32a..35e0bca35 100644 --- a/app-frontend/employer-panel/package-lock.json +++ b/app-frontend/employer-panel/package-lock.json @@ -21,6 +21,7 @@ "react-dom": "^19.1.1", "react-hook-form": "^7.62.0", "react-i18next": "^15.1.3", + "react-markdown": "^10.1.0", "react-router-dom": "^7.7.1", "react-scripts": "5.0.1", "web-vitals": "^2.1.4", @@ -3602,6 +3603,15 @@ "@types/node": "*" } }, + "node_modules/@types/debug": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/eslint": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", @@ -3628,6 +3638,15 @@ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "license": "MIT" }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, "node_modules/@types/express": { "version": "4.17.25", "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", @@ -3673,6 +3692,15 @@ "@types/node": "*" } }, + "node_modules/@types/hast": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", + "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", @@ -3730,12 +3758,27 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "license": "MIT" }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "license": "MIT" }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, "node_modules/@types/node": { "version": "25.0.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz", @@ -3784,6 +3827,16 @@ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "license": "MIT" }, + "node_modules/@types/react": { + "version": "19.2.18", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.18.tgz", + "integrity": "sha512-AnzbBERsrLKtk2XSfTbYRLjQPdy116Sty4q+T+Bp3IC4l6jNBvreVPAHmpq9qhXQM7CXZPjLVmGMw9sy+hxQ3w==", + "license": "MIT", + "peer": true, + "dependencies": { + "csstype": "^3.2.2" + } + }, "node_modules/@types/resolve": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", @@ -3865,6 +3918,12 @@ "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", "license": "MIT" }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, "node_modules/@types/ws": { "version": "8.18.1", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", @@ -5188,6 +5247,16 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -5547,6 +5616,16 @@ "node": ">=4" } }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -5572,6 +5651,46 @@ "node": ">=10" } }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/check-types": { "version": "11.2.3", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.2.3.tgz", @@ -5819,6 +5938,16 @@ "node": ">= 0.8" } }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", @@ -6422,6 +6551,13 @@ "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", "license": "MIT" }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT", + "peer": true + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -6516,6 +6652,19 @@ "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", "license": "MIT" }, + "node_modules/decode-named-character-reference": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", @@ -6676,6 +6825,19 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -7707,6 +7869,16 @@ "node": ">=4.0" } }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/estree-walker": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", @@ -7862,6 +8034,12 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -8803,6 +8981,46 @@ "node": ">= 0.4" } }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -8933,6 +9151,16 @@ "void-elements": "3.1.0" } }, + "node_modules/html-url-attributes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz", + "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/html-webpack-plugin": { "version": "5.6.5", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.5.tgz", @@ -9259,6 +9487,12 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "license": "ISC" }, + "node_modules/inline-style-parser": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", + "license": "MIT" + }, "node_modules/internal-slot": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", @@ -9282,6 +9516,30 @@ "node": ">= 10" } }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-array-buffer": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", @@ -9427,6 +9685,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -9515,6 +9783,16 @@ "node": ">=0.10.0" } }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -11257,6 +11535,16 @@ "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", "license": "MIT" }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -11338,6 +11626,159 @@ "node": ">= 0.4" } }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdn-data": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", @@ -11398,23 +11839,465 @@ "node": ">= 0.6" } }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz", + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "license": "MIT", "bin": { "mime": "cli.js" @@ -11999,6 +12882,31 @@ "node": ">=6" } }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -13703,6 +14611,16 @@ "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==", "license": "MIT" }, + "node_modules/property-information": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", + "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -13990,6 +14908,33 @@ "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "license": "MIT" }, + "node_modules/react-markdown": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-10.1.0.tgz", + "integrity": "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "html-url-attributes": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=18", + "react": ">=18" + } + }, "node_modules/react-refresh": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.11.0.tgz", @@ -14381,6 +15326,39 @@ "node": ">= 0.10" } }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/renderkid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", @@ -15286,6 +16264,16 @@ "deprecated": "Please use @jridgewell/sourcemap-codec instead", "license": "MIT" }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", @@ -15633,6 +16621,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/stringify-object": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", @@ -15726,6 +16728,24 @@ "webpack": "^5.0.0" } }, + "node_modules/style-to-js": { + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.14" + } + }, + "node_modules/style-to-object": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.7" + } + }, "node_modules/stylehacks": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", @@ -16428,6 +17448,26 @@ "node": ">=8" } }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/tryer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", @@ -16713,6 +17753,37 @@ "node": ">=4" } }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", @@ -16725,6 +17796,74 @@ "node": ">=8" } }, + "node_modules/unist-util-is": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -16882,6 +18021,34 @@ "node": ">= 0.8" } }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/void-elements": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", @@ -17836,6 +19003,16 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/app-frontend/employer-panel/package.json b/app-frontend/employer-panel/package.json index 9a02bc24e..9cec246a7 100644 --- a/app-frontend/employer-panel/package.json +++ b/app-frontend/employer-panel/package.json @@ -16,6 +16,7 @@ "react-dom": "^19.1.1", "react-hook-form": "^7.62.0", "react-i18next": "^15.1.3", + "react-markdown": "^10.1.0", "react-router-dom": "^7.7.1", "react-scripts": "5.0.1", "web-vitals": "^2.1.4", diff --git a/app-frontend/employer-panel/src/App.js b/app-frontend/employer-panel/src/App.js index 090866c5f..dfcf44528 100644 --- a/app-frontend/employer-panel/src/App.js +++ b/app-frontend/employer-panel/src/App.js @@ -30,8 +30,9 @@ import PrivacyPolicy from './pages/PrivacyPolicy'; import TermsAndConditions from './pages/TermsAndConditions'; import FAQs from './pages/FAQs'; import ContactUs from './pages/ContactUs'; - +import AIAssistant from './pages/AIAssistant'; import i18n from './i18n'; +import AIChatWidget from "./components/AIChatWidget"; function TaskRoute() { return ( @@ -47,6 +48,7 @@ function ProtectedLayout({ children, language, setLanguage }) {
{children}