alaselababatunde commited on
Commit
b71de78
·
1 Parent(s): d820927

fix: remove binary files and add .gitignore

Browse files
.gitignore ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ chroma_db/
2
+ session_memory.db
3
+ __pycache__/
4
+ .env
5
+ *.pyc
6
+ .DS_Store
7
+ frontend/node_modules/
8
+ frontend/dist/
__pycache__/llm.cpython-311.pyc DELETED
Binary file (5.45 kB)
 
__pycache__/memory.cpython-311.pyc DELETED
Binary file (5.84 kB)
 
frontend/package-lock.json CHANGED
@@ -11,6 +11,7 @@
11
  "lucide-react": "^0.562.0",
12
  "react": "^19.2.0",
13
  "react-dom": "^19.2.0",
 
14
  "uuid": "^13.0.0"
15
  },
16
  "devDependencies": {
@@ -1410,13 +1411,39 @@
1410
  "@babel/types": "^7.28.2"
1411
  }
1412
  },
 
 
 
 
 
 
 
 
 
1413
  "node_modules/@types/estree": {
1414
  "version": "1.0.8",
1415
  "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
1416
  "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
1417
- "dev": true,
1418
  "license": "MIT"
1419
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1420
  "node_modules/@types/json-schema": {
1421
  "version": "7.0.15",
1422
  "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
@@ -1424,11 +1451,25 @@
1424
  "dev": true,
1425
  "license": "MIT"
1426
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1427
  "node_modules/@types/react": {
1428
  "version": "19.2.7",
1429
  "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz",
1430
  "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==",
1431
- "dev": true,
1432
  "license": "MIT",
1433
  "dependencies": {
1434
  "csstype": "^3.2.2"
@@ -1444,6 +1485,18 @@
1444
  "@types/react": "^19.2.0"
1445
  }
1446
  },
 
 
 
 
 
 
 
 
 
 
 
 
1447
  "node_modules/@vitejs/plugin-react": {
1448
  "version": "5.1.2",
1449
  "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.2.tgz",
@@ -1528,6 +1581,16 @@
1528
  "dev": true,
1529
  "license": "Python-2.0"
1530
  },
 
 
 
 
 
 
 
 
 
 
1531
  "node_modules/balanced-match": {
1532
  "version": "1.0.2",
1533
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -1621,6 +1684,16 @@
1621
  ],
1622
  "license": "CC-BY-4.0"
1623
  },
 
 
 
 
 
 
 
 
 
 
1624
  "node_modules/chalk": {
1625
  "version": "4.1.2",
1626
  "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -1638,6 +1711,46 @@
1638
  "url": "https://github.com/chalk/chalk?sponsor=1"
1639
  }
1640
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1641
  "node_modules/color-convert": {
1642
  "version": "2.0.1",
1643
  "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -1658,6 +1771,16 @@
1658
  "dev": true,
1659
  "license": "MIT"
1660
  },
 
 
 
 
 
 
 
 
 
 
1661
  "node_modules/concat-map": {
1662
  "version": "0.0.1",
1663
  "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
@@ -1691,14 +1814,12 @@
1691
  "version": "3.2.3",
1692
  "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
1693
  "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
1694
- "dev": true,
1695
  "license": "MIT"
1696
  },
1697
  "node_modules/debug": {
1698
  "version": "4.4.3",
1699
  "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
1700
  "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
1701
- "dev": true,
1702
  "license": "MIT",
1703
  "dependencies": {
1704
  "ms": "^2.1.3"
@@ -1712,6 +1833,19 @@
1712
  }
1713
  }
1714
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
1715
  "node_modules/deep-is": {
1716
  "version": "0.1.4",
1717
  "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
@@ -1719,6 +1853,28 @@
1719
  "dev": true,
1720
  "license": "MIT"
1721
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1722
  "node_modules/electron-to-chromium": {
1723
  "version": "1.5.267",
1724
  "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz",
@@ -1965,6 +2121,16 @@
1965
  "node": ">=4.0"
1966
  }
1967
  },
 
 
 
 
 
 
 
 
 
 
1968
  "node_modules/esutils": {
1969
  "version": "2.0.3",
1970
  "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
@@ -1975,6 +2141,12 @@
1975
  "node": ">=0.10.0"
1976
  }
1977
  },
 
 
 
 
 
 
1978
  "node_modules/fast-deep-equal": {
1979
  "version": "3.1.3",
1980
  "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -2126,6 +2298,46 @@
2126
  "node": ">=8"
2127
  }
2128
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2129
  "node_modules/hermes-estree": {
2130
  "version": "0.25.1",
2131
  "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz",
@@ -2143,6 +2355,16 @@
2143
  "hermes-estree": "0.25.1"
2144
  }
2145
  },
 
 
 
 
 
 
 
 
 
 
2146
  "node_modules/ignore": {
2147
  "version": "5.3.2",
2148
  "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
@@ -2180,6 +2402,46 @@
2180
  "node": ">=0.8.19"
2181
  }
2182
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2183
  "node_modules/is-extglob": {
2184
  "version": "2.1.1",
2185
  "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -2203,6 +2465,28 @@
2203
  "node": ">=0.10.0"
2204
  }
2205
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2206
  "node_modules/isexe": {
2207
  "version": "2.0.0",
2208
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -2324,6 +2608,16 @@
2324
  "dev": true,
2325
  "license": "MIT"
2326
  },
 
 
 
 
 
 
 
 
 
 
2327
  "node_modules/lru-cache": {
2328
  "version": "5.1.1",
2329
  "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
@@ -2343,113 +2637,707 @@
2343
  "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
2344
  }
2345
  },
2346
- "node_modules/minimatch": {
2347
- "version": "3.1.2",
2348
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
2349
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
2350
- "dev": true,
2351
- "license": "ISC",
2352
  "dependencies": {
2353
- "brace-expansion": "^1.1.7"
 
 
 
 
 
 
 
 
 
 
 
2354
  },
2355
- "engines": {
2356
- "node": "*"
 
2357
  }
2358
  },
2359
- "node_modules/ms": {
2360
- "version": "2.1.3",
2361
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
2362
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
2363
- "dev": true,
2364
- "license": "MIT"
2365
- },
2366
- "node_modules/nanoid": {
2367
- "version": "3.3.11",
2368
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
2369
- "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
2370
- "dev": true,
2371
- "funding": [
2372
- {
2373
- "type": "github",
2374
- "url": "https://github.com/sponsors/ai"
2375
- }
2376
- ],
2377
  "license": "MIT",
2378
- "bin": {
2379
- "nanoid": "bin/nanoid.cjs"
 
 
 
 
 
2380
  },
2381
- "engines": {
2382
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
 
2383
  }
2384
  },
2385
- "node_modules/natural-compare": {
2386
- "version": "1.4.0",
2387
- "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
2388
- "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
2389
- "dev": true,
2390
- "license": "MIT"
2391
- },
2392
- "node_modules/node-releases": {
2393
- "version": "2.0.27",
2394
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
2395
- "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
2396
- "dev": true,
2397
- "license": "MIT"
2398
- },
2399
- "node_modules/optionator": {
2400
- "version": "0.9.4",
2401
- "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
2402
- "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
2403
- "dev": true,
2404
  "license": "MIT",
2405
  "dependencies": {
2406
- "deep-is": "^0.1.3",
2407
- "fast-levenshtein": "^2.0.6",
2408
- "levn": "^0.4.1",
2409
- "prelude-ls": "^1.2.1",
2410
- "type-check": "^0.4.0",
2411
- "word-wrap": "^1.2.5"
 
 
 
 
 
 
2412
  },
2413
- "engines": {
2414
- "node": ">= 0.8.0"
 
2415
  }
2416
  },
2417
- "node_modules/p-limit": {
2418
- "version": "3.1.0",
2419
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
2420
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
2421
- "dev": true,
2422
  "license": "MIT",
2423
  "dependencies": {
2424
- "yocto-queue": "^0.1.0"
2425
- },
2426
- "engines": {
2427
- "node": ">=10"
 
 
2428
  },
2429
  "funding": {
2430
- "url": "https://github.com/sponsors/sindresorhus"
 
2431
  }
2432
  },
2433
- "node_modules/p-locate": {
2434
- "version": "5.0.0",
2435
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
2436
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
2437
- "dev": true,
2438
  "license": "MIT",
2439
  "dependencies": {
2440
- "p-limit": "^3.0.2"
2441
- },
2442
- "engines": {
2443
- "node": ">=10"
2444
  },
2445
  "funding": {
2446
- "url": "https://github.com/sponsors/sindresorhus"
 
2447
  }
2448
  },
2449
- "node_modules/parent-module": {
2450
- "version": "1.0.1",
2451
- "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
2452
- "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2453
  "dev": true,
2454
  "license": "MIT",
2455
  "dependencies": {
@@ -2459,6 +3347,31 @@
2459
  "node": ">=6"
2460
  }
2461
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2462
  "node_modules/path-exists": {
2463
  "version": "4.0.0",
2464
  "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -2538,6 +3451,16 @@
2538
  "node": ">= 0.8.0"
2539
  }
2540
  },
 
 
 
 
 
 
 
 
 
 
2541
  "node_modules/punycode": {
2542
  "version": "2.3.1",
2543
  "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
@@ -2569,6 +3492,33 @@
2569
  "react": "^19.2.3"
2570
  }
2571
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2572
  "node_modules/react-refresh": {
2573
  "version": "0.18.0",
2574
  "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz",
@@ -2579,6 +3529,39 @@
2579
  "node": ">=0.10.0"
2580
  }
2581
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2582
  "node_modules/resolve-from": {
2583
  "version": "4.0.0",
2584
  "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
@@ -2683,6 +3666,30 @@
2683
  "node": ">=0.10.0"
2684
  }
2685
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2686
  "node_modules/strip-json-comments": {
2687
  "version": "3.1.1",
2688
  "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
@@ -2696,6 +3703,24 @@
2696
  "url": "https://github.com/sponsors/sindresorhus"
2697
  }
2698
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2699
  "node_modules/supports-color": {
2700
  "version": "7.2.0",
2701
  "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -2726,6 +3751,26 @@
2726
  "url": "https://github.com/sponsors/SuperchupuDev"
2727
  }
2728
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2729
  "node_modules/type-check": {
2730
  "version": "0.4.0",
2731
  "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
@@ -2739,6 +3784,93 @@
2739
  "node": ">= 0.8.0"
2740
  }
2741
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2742
  "node_modules/update-browserslist-db": {
2743
  "version": "1.2.3",
2744
  "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
@@ -2793,6 +3925,34 @@
2793
  "uuid": "dist-node/bin/uuid"
2794
  }
2795
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2796
  "node_modules/vite": {
2797
  "version": "7.3.1",
2798
  "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz",
@@ -2936,6 +4096,16 @@
2936
  "peerDependencies": {
2937
  "zod": "^3.25.0 || ^4.0.0"
2938
  }
 
 
 
 
 
 
 
 
 
 
2939
  }
2940
  }
2941
  }
 
11
  "lucide-react": "^0.562.0",
12
  "react": "^19.2.0",
13
  "react-dom": "^19.2.0",
14
+ "react-markdown": "^10.1.0",
15
  "uuid": "^13.0.0"
16
  },
17
  "devDependencies": {
 
1411
  "@babel/types": "^7.28.2"
1412
  }
1413
  },
1414
+ "node_modules/@types/debug": {
1415
+ "version": "4.1.12",
1416
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
1417
+ "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
1418
+ "license": "MIT",
1419
+ "dependencies": {
1420
+ "@types/ms": "*"
1421
+ }
1422
+ },
1423
  "node_modules/@types/estree": {
1424
  "version": "1.0.8",
1425
  "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
1426
  "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
 
1427
  "license": "MIT"
1428
  },
1429
+ "node_modules/@types/estree-jsx": {
1430
+ "version": "1.0.5",
1431
+ "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz",
1432
+ "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==",
1433
+ "license": "MIT",
1434
+ "dependencies": {
1435
+ "@types/estree": "*"
1436
+ }
1437
+ },
1438
+ "node_modules/@types/hast": {
1439
+ "version": "3.0.4",
1440
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
1441
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
1442
+ "license": "MIT",
1443
+ "dependencies": {
1444
+ "@types/unist": "*"
1445
+ }
1446
+ },
1447
  "node_modules/@types/json-schema": {
1448
  "version": "7.0.15",
1449
  "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
 
1451
  "dev": true,
1452
  "license": "MIT"
1453
  },
1454
+ "node_modules/@types/mdast": {
1455
+ "version": "4.0.4",
1456
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
1457
+ "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
1458
+ "license": "MIT",
1459
+ "dependencies": {
1460
+ "@types/unist": "*"
1461
+ }
1462
+ },
1463
+ "node_modules/@types/ms": {
1464
+ "version": "2.1.0",
1465
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
1466
+ "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
1467
+ "license": "MIT"
1468
+ },
1469
  "node_modules/@types/react": {
1470
  "version": "19.2.7",
1471
  "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz",
1472
  "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==",
 
1473
  "license": "MIT",
1474
  "dependencies": {
1475
  "csstype": "^3.2.2"
 
1485
  "@types/react": "^19.2.0"
1486
  }
1487
  },
1488
+ "node_modules/@types/unist": {
1489
+ "version": "3.0.3",
1490
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
1491
+ "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
1492
+ "license": "MIT"
1493
+ },
1494
+ "node_modules/@ungap/structured-clone": {
1495
+ "version": "1.3.0",
1496
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz",
1497
+ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==",
1498
+ "license": "ISC"
1499
+ },
1500
  "node_modules/@vitejs/plugin-react": {
1501
  "version": "5.1.2",
1502
  "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-5.1.2.tgz",
 
1581
  "dev": true,
1582
  "license": "Python-2.0"
1583
  },
1584
+ "node_modules/bail": {
1585
+ "version": "2.0.2",
1586
+ "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz",
1587
+ "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==",
1588
+ "license": "MIT",
1589
+ "funding": {
1590
+ "type": "github",
1591
+ "url": "https://github.com/sponsors/wooorm"
1592
+ }
1593
+ },
1594
  "node_modules/balanced-match": {
1595
  "version": "1.0.2",
1596
  "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
 
1684
  ],
1685
  "license": "CC-BY-4.0"
1686
  },
1687
+ "node_modules/ccount": {
1688
+ "version": "2.0.1",
1689
+ "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
1690
+ "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
1691
+ "license": "MIT",
1692
+ "funding": {
1693
+ "type": "github",
1694
+ "url": "https://github.com/sponsors/wooorm"
1695
+ }
1696
+ },
1697
  "node_modules/chalk": {
1698
  "version": "4.1.2",
1699
  "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
 
1711
  "url": "https://github.com/chalk/chalk?sponsor=1"
1712
  }
1713
  },
1714
+ "node_modules/character-entities": {
1715
+ "version": "2.0.2",
1716
+ "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz",
1717
+ "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==",
1718
+ "license": "MIT",
1719
+ "funding": {
1720
+ "type": "github",
1721
+ "url": "https://github.com/sponsors/wooorm"
1722
+ }
1723
+ },
1724
+ "node_modules/character-entities-html4": {
1725
+ "version": "2.1.0",
1726
+ "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
1727
+ "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
1728
+ "license": "MIT",
1729
+ "funding": {
1730
+ "type": "github",
1731
+ "url": "https://github.com/sponsors/wooorm"
1732
+ }
1733
+ },
1734
+ "node_modules/character-entities-legacy": {
1735
+ "version": "3.0.0",
1736
+ "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
1737
+ "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
1738
+ "license": "MIT",
1739
+ "funding": {
1740
+ "type": "github",
1741
+ "url": "https://github.com/sponsors/wooorm"
1742
+ }
1743
+ },
1744
+ "node_modules/character-reference-invalid": {
1745
+ "version": "2.0.1",
1746
+ "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz",
1747
+ "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==",
1748
+ "license": "MIT",
1749
+ "funding": {
1750
+ "type": "github",
1751
+ "url": "https://github.com/sponsors/wooorm"
1752
+ }
1753
+ },
1754
  "node_modules/color-convert": {
1755
  "version": "2.0.1",
1756
  "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
 
1771
  "dev": true,
1772
  "license": "MIT"
1773
  },
1774
+ "node_modules/comma-separated-tokens": {
1775
+ "version": "2.0.3",
1776
+ "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
1777
+ "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
1778
+ "license": "MIT",
1779
+ "funding": {
1780
+ "type": "github",
1781
+ "url": "https://github.com/sponsors/wooorm"
1782
+ }
1783
+ },
1784
  "node_modules/concat-map": {
1785
  "version": "0.0.1",
1786
  "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
 
1814
  "version": "3.2.3",
1815
  "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
1816
  "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
 
1817
  "license": "MIT"
1818
  },
1819
  "node_modules/debug": {
1820
  "version": "4.4.3",
1821
  "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
1822
  "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
 
1823
  "license": "MIT",
1824
  "dependencies": {
1825
  "ms": "^2.1.3"
 
1833
  }
1834
  }
1835
  },
1836
+ "node_modules/decode-named-character-reference": {
1837
+ "version": "1.2.0",
1838
+ "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz",
1839
+ "integrity": "sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==",
1840
+ "license": "MIT",
1841
+ "dependencies": {
1842
+ "character-entities": "^2.0.0"
1843
+ },
1844
+ "funding": {
1845
+ "type": "github",
1846
+ "url": "https://github.com/sponsors/wooorm"
1847
+ }
1848
+ },
1849
  "node_modules/deep-is": {
1850
  "version": "0.1.4",
1851
  "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
 
1853
  "dev": true,
1854
  "license": "MIT"
1855
  },
1856
+ "node_modules/dequal": {
1857
+ "version": "2.0.3",
1858
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
1859
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
1860
+ "license": "MIT",
1861
+ "engines": {
1862
+ "node": ">=6"
1863
+ }
1864
+ },
1865
+ "node_modules/devlop": {
1866
+ "version": "1.1.0",
1867
+ "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
1868
+ "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
1869
+ "license": "MIT",
1870
+ "dependencies": {
1871
+ "dequal": "^2.0.0"
1872
+ },
1873
+ "funding": {
1874
+ "type": "github",
1875
+ "url": "https://github.com/sponsors/wooorm"
1876
+ }
1877
+ },
1878
  "node_modules/electron-to-chromium": {
1879
  "version": "1.5.267",
1880
  "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz",
 
2121
  "node": ">=4.0"
2122
  }
2123
  },
2124
+ "node_modules/estree-util-is-identifier-name": {
2125
+ "version": "3.0.0",
2126
+ "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz",
2127
+ "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==",
2128
+ "license": "MIT",
2129
+ "funding": {
2130
+ "type": "opencollective",
2131
+ "url": "https://opencollective.com/unified"
2132
+ }
2133
+ },
2134
  "node_modules/esutils": {
2135
  "version": "2.0.3",
2136
  "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
 
2141
  "node": ">=0.10.0"
2142
  }
2143
  },
2144
+ "node_modules/extend": {
2145
+ "version": "3.0.2",
2146
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
2147
+ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
2148
+ "license": "MIT"
2149
+ },
2150
  "node_modules/fast-deep-equal": {
2151
  "version": "3.1.3",
2152
  "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
 
2298
  "node": ">=8"
2299
  }
2300
  },
2301
+ "node_modules/hast-util-to-jsx-runtime": {
2302
+ "version": "2.3.6",
2303
+ "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz",
2304
+ "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==",
2305
+ "license": "MIT",
2306
+ "dependencies": {
2307
+ "@types/estree": "^1.0.0",
2308
+ "@types/hast": "^3.0.0",
2309
+ "@types/unist": "^3.0.0",
2310
+ "comma-separated-tokens": "^2.0.0",
2311
+ "devlop": "^1.0.0",
2312
+ "estree-util-is-identifier-name": "^3.0.0",
2313
+ "hast-util-whitespace": "^3.0.0",
2314
+ "mdast-util-mdx-expression": "^2.0.0",
2315
+ "mdast-util-mdx-jsx": "^3.0.0",
2316
+ "mdast-util-mdxjs-esm": "^2.0.0",
2317
+ "property-information": "^7.0.0",
2318
+ "space-separated-tokens": "^2.0.0",
2319
+ "style-to-js": "^1.0.0",
2320
+ "unist-util-position": "^5.0.0",
2321
+ "vfile-message": "^4.0.0"
2322
+ },
2323
+ "funding": {
2324
+ "type": "opencollective",
2325
+ "url": "https://opencollective.com/unified"
2326
+ }
2327
+ },
2328
+ "node_modules/hast-util-whitespace": {
2329
+ "version": "3.0.0",
2330
+ "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
2331
+ "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
2332
+ "license": "MIT",
2333
+ "dependencies": {
2334
+ "@types/hast": "^3.0.0"
2335
+ },
2336
+ "funding": {
2337
+ "type": "opencollective",
2338
+ "url": "https://opencollective.com/unified"
2339
+ }
2340
+ },
2341
  "node_modules/hermes-estree": {
2342
  "version": "0.25.1",
2343
  "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz",
 
2355
  "hermes-estree": "0.25.1"
2356
  }
2357
  },
2358
+ "node_modules/html-url-attributes": {
2359
+ "version": "3.0.1",
2360
+ "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz",
2361
+ "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==",
2362
+ "license": "MIT",
2363
+ "funding": {
2364
+ "type": "opencollective",
2365
+ "url": "https://opencollective.com/unified"
2366
+ }
2367
+ },
2368
  "node_modules/ignore": {
2369
  "version": "5.3.2",
2370
  "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
 
2402
  "node": ">=0.8.19"
2403
  }
2404
  },
2405
+ "node_modules/inline-style-parser": {
2406
+ "version": "0.2.7",
2407
+ "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz",
2408
+ "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==",
2409
+ "license": "MIT"
2410
+ },
2411
+ "node_modules/is-alphabetical": {
2412
+ "version": "2.0.1",
2413
+ "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz",
2414
+ "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==",
2415
+ "license": "MIT",
2416
+ "funding": {
2417
+ "type": "github",
2418
+ "url": "https://github.com/sponsors/wooorm"
2419
+ }
2420
+ },
2421
+ "node_modules/is-alphanumerical": {
2422
+ "version": "2.0.1",
2423
+ "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz",
2424
+ "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==",
2425
+ "license": "MIT",
2426
+ "dependencies": {
2427
+ "is-alphabetical": "^2.0.0",
2428
+ "is-decimal": "^2.0.0"
2429
+ },
2430
+ "funding": {
2431
+ "type": "github",
2432
+ "url": "https://github.com/sponsors/wooorm"
2433
+ }
2434
+ },
2435
+ "node_modules/is-decimal": {
2436
+ "version": "2.0.1",
2437
+ "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz",
2438
+ "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==",
2439
+ "license": "MIT",
2440
+ "funding": {
2441
+ "type": "github",
2442
+ "url": "https://github.com/sponsors/wooorm"
2443
+ }
2444
+ },
2445
  "node_modules/is-extglob": {
2446
  "version": "2.1.1",
2447
  "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
 
2465
  "node": ">=0.10.0"
2466
  }
2467
  },
2468
+ "node_modules/is-hexadecimal": {
2469
+ "version": "2.0.1",
2470
+ "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz",
2471
+ "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==",
2472
+ "license": "MIT",
2473
+ "funding": {
2474
+ "type": "github",
2475
+ "url": "https://github.com/sponsors/wooorm"
2476
+ }
2477
+ },
2478
+ "node_modules/is-plain-obj": {
2479
+ "version": "4.1.0",
2480
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
2481
+ "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
2482
+ "license": "MIT",
2483
+ "engines": {
2484
+ "node": ">=12"
2485
+ },
2486
+ "funding": {
2487
+ "url": "https://github.com/sponsors/sindresorhus"
2488
+ }
2489
+ },
2490
  "node_modules/isexe": {
2491
  "version": "2.0.0",
2492
  "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
 
2608
  "dev": true,
2609
  "license": "MIT"
2610
  },
2611
+ "node_modules/longest-streak": {
2612
+ "version": "3.1.0",
2613
+ "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz",
2614
+ "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==",
2615
+ "license": "MIT",
2616
+ "funding": {
2617
+ "type": "github",
2618
+ "url": "https://github.com/sponsors/wooorm"
2619
+ }
2620
+ },
2621
  "node_modules/lru-cache": {
2622
  "version": "5.1.1",
2623
  "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
 
2637
  "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
2638
  }
2639
  },
2640
+ "node_modules/mdast-util-from-markdown": {
2641
+ "version": "2.0.2",
2642
+ "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz",
2643
+ "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==",
2644
+ "license": "MIT",
 
2645
  "dependencies": {
2646
+ "@types/mdast": "^4.0.0",
2647
+ "@types/unist": "^3.0.0",
2648
+ "decode-named-character-reference": "^1.0.0",
2649
+ "devlop": "^1.0.0",
2650
+ "mdast-util-to-string": "^4.0.0",
2651
+ "micromark": "^4.0.0",
2652
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
2653
+ "micromark-util-decode-string": "^2.0.0",
2654
+ "micromark-util-normalize-identifier": "^2.0.0",
2655
+ "micromark-util-symbol": "^2.0.0",
2656
+ "micromark-util-types": "^2.0.0",
2657
+ "unist-util-stringify-position": "^4.0.0"
2658
  },
2659
+ "funding": {
2660
+ "type": "opencollective",
2661
+ "url": "https://opencollective.com/unified"
2662
  }
2663
  },
2664
+ "node_modules/mdast-util-mdx-expression": {
2665
+ "version": "2.0.1",
2666
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz",
2667
+ "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2668
  "license": "MIT",
2669
+ "dependencies": {
2670
+ "@types/estree-jsx": "^1.0.0",
2671
+ "@types/hast": "^3.0.0",
2672
+ "@types/mdast": "^4.0.0",
2673
+ "devlop": "^1.0.0",
2674
+ "mdast-util-from-markdown": "^2.0.0",
2675
+ "mdast-util-to-markdown": "^2.0.0"
2676
  },
2677
+ "funding": {
2678
+ "type": "opencollective",
2679
+ "url": "https://opencollective.com/unified"
2680
  }
2681
  },
2682
+ "node_modules/mdast-util-mdx-jsx": {
2683
+ "version": "3.2.0",
2684
+ "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz",
2685
+ "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==",
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2686
  "license": "MIT",
2687
  "dependencies": {
2688
+ "@types/estree-jsx": "^1.0.0",
2689
+ "@types/hast": "^3.0.0",
2690
+ "@types/mdast": "^4.0.0",
2691
+ "@types/unist": "^3.0.0",
2692
+ "ccount": "^2.0.0",
2693
+ "devlop": "^1.1.0",
2694
+ "mdast-util-from-markdown": "^2.0.0",
2695
+ "mdast-util-to-markdown": "^2.0.0",
2696
+ "parse-entities": "^4.0.0",
2697
+ "stringify-entities": "^4.0.0",
2698
+ "unist-util-stringify-position": "^4.0.0",
2699
+ "vfile-message": "^4.0.0"
2700
  },
2701
+ "funding": {
2702
+ "type": "opencollective",
2703
+ "url": "https://opencollective.com/unified"
2704
  }
2705
  },
2706
+ "node_modules/mdast-util-mdxjs-esm": {
2707
+ "version": "2.0.1",
2708
+ "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz",
2709
+ "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==",
 
2710
  "license": "MIT",
2711
  "dependencies": {
2712
+ "@types/estree-jsx": "^1.0.0",
2713
+ "@types/hast": "^3.0.0",
2714
+ "@types/mdast": "^4.0.0",
2715
+ "devlop": "^1.0.0",
2716
+ "mdast-util-from-markdown": "^2.0.0",
2717
+ "mdast-util-to-markdown": "^2.0.0"
2718
  },
2719
  "funding": {
2720
+ "type": "opencollective",
2721
+ "url": "https://opencollective.com/unified"
2722
  }
2723
  },
2724
+ "node_modules/mdast-util-phrasing": {
2725
+ "version": "4.1.0",
2726
+ "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz",
2727
+ "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==",
 
2728
  "license": "MIT",
2729
  "dependencies": {
2730
+ "@types/mdast": "^4.0.0",
2731
+ "unist-util-is": "^6.0.0"
 
 
2732
  },
2733
  "funding": {
2734
+ "type": "opencollective",
2735
+ "url": "https://opencollective.com/unified"
2736
  }
2737
  },
2738
+ "node_modules/mdast-util-to-hast": {
2739
+ "version": "13.2.1",
2740
+ "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz",
2741
+ "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==",
2742
+ "license": "MIT",
2743
+ "dependencies": {
2744
+ "@types/hast": "^3.0.0",
2745
+ "@types/mdast": "^4.0.0",
2746
+ "@ungap/structured-clone": "^1.0.0",
2747
+ "devlop": "^1.0.0",
2748
+ "micromark-util-sanitize-uri": "^2.0.0",
2749
+ "trim-lines": "^3.0.0",
2750
+ "unist-util-position": "^5.0.0",
2751
+ "unist-util-visit": "^5.0.0",
2752
+ "vfile": "^6.0.0"
2753
+ },
2754
+ "funding": {
2755
+ "type": "opencollective",
2756
+ "url": "https://opencollective.com/unified"
2757
+ }
2758
+ },
2759
+ "node_modules/mdast-util-to-markdown": {
2760
+ "version": "2.1.2",
2761
+ "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz",
2762
+ "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==",
2763
+ "license": "MIT",
2764
+ "dependencies": {
2765
+ "@types/mdast": "^4.0.0",
2766
+ "@types/unist": "^3.0.0",
2767
+ "longest-streak": "^3.0.0",
2768
+ "mdast-util-phrasing": "^4.0.0",
2769
+ "mdast-util-to-string": "^4.0.0",
2770
+ "micromark-util-classify-character": "^2.0.0",
2771
+ "micromark-util-decode-string": "^2.0.0",
2772
+ "unist-util-visit": "^5.0.0",
2773
+ "zwitch": "^2.0.0"
2774
+ },
2775
+ "funding": {
2776
+ "type": "opencollective",
2777
+ "url": "https://opencollective.com/unified"
2778
+ }
2779
+ },
2780
+ "node_modules/mdast-util-to-string": {
2781
+ "version": "4.0.0",
2782
+ "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz",
2783
+ "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==",
2784
+ "license": "MIT",
2785
+ "dependencies": {
2786
+ "@types/mdast": "^4.0.0"
2787
+ },
2788
+ "funding": {
2789
+ "type": "opencollective",
2790
+ "url": "https://opencollective.com/unified"
2791
+ }
2792
+ },
2793
+ "node_modules/micromark": {
2794
+ "version": "4.0.2",
2795
+ "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz",
2796
+ "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==",
2797
+ "funding": [
2798
+ {
2799
+ "type": "GitHub Sponsors",
2800
+ "url": "https://github.com/sponsors/unifiedjs"
2801
+ },
2802
+ {
2803
+ "type": "OpenCollective",
2804
+ "url": "https://opencollective.com/unified"
2805
+ }
2806
+ ],
2807
+ "license": "MIT",
2808
+ "dependencies": {
2809
+ "@types/debug": "^4.0.0",
2810
+ "debug": "^4.0.0",
2811
+ "decode-named-character-reference": "^1.0.0",
2812
+ "devlop": "^1.0.0",
2813
+ "micromark-core-commonmark": "^2.0.0",
2814
+ "micromark-factory-space": "^2.0.0",
2815
+ "micromark-util-character": "^2.0.0",
2816
+ "micromark-util-chunked": "^2.0.0",
2817
+ "micromark-util-combine-extensions": "^2.0.0",
2818
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
2819
+ "micromark-util-encode": "^2.0.0",
2820
+ "micromark-util-normalize-identifier": "^2.0.0",
2821
+ "micromark-util-resolve-all": "^2.0.0",
2822
+ "micromark-util-sanitize-uri": "^2.0.0",
2823
+ "micromark-util-subtokenize": "^2.0.0",
2824
+ "micromark-util-symbol": "^2.0.0",
2825
+ "micromark-util-types": "^2.0.0"
2826
+ }
2827
+ },
2828
+ "node_modules/micromark-core-commonmark": {
2829
+ "version": "2.0.3",
2830
+ "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz",
2831
+ "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==",
2832
+ "funding": [
2833
+ {
2834
+ "type": "GitHub Sponsors",
2835
+ "url": "https://github.com/sponsors/unifiedjs"
2836
+ },
2837
+ {
2838
+ "type": "OpenCollective",
2839
+ "url": "https://opencollective.com/unified"
2840
+ }
2841
+ ],
2842
+ "license": "MIT",
2843
+ "dependencies": {
2844
+ "decode-named-character-reference": "^1.0.0",
2845
+ "devlop": "^1.0.0",
2846
+ "micromark-factory-destination": "^2.0.0",
2847
+ "micromark-factory-label": "^2.0.0",
2848
+ "micromark-factory-space": "^2.0.0",
2849
+ "micromark-factory-title": "^2.0.0",
2850
+ "micromark-factory-whitespace": "^2.0.0",
2851
+ "micromark-util-character": "^2.0.0",
2852
+ "micromark-util-chunked": "^2.0.0",
2853
+ "micromark-util-classify-character": "^2.0.0",
2854
+ "micromark-util-html-tag-name": "^2.0.0",
2855
+ "micromark-util-normalize-identifier": "^2.0.0",
2856
+ "micromark-util-resolve-all": "^2.0.0",
2857
+ "micromark-util-subtokenize": "^2.0.0",
2858
+ "micromark-util-symbol": "^2.0.0",
2859
+ "micromark-util-types": "^2.0.0"
2860
+ }
2861
+ },
2862
+ "node_modules/micromark-factory-destination": {
2863
+ "version": "2.0.1",
2864
+ "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz",
2865
+ "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==",
2866
+ "funding": [
2867
+ {
2868
+ "type": "GitHub Sponsors",
2869
+ "url": "https://github.com/sponsors/unifiedjs"
2870
+ },
2871
+ {
2872
+ "type": "OpenCollective",
2873
+ "url": "https://opencollective.com/unified"
2874
+ }
2875
+ ],
2876
+ "license": "MIT",
2877
+ "dependencies": {
2878
+ "micromark-util-character": "^2.0.0",
2879
+ "micromark-util-symbol": "^2.0.0",
2880
+ "micromark-util-types": "^2.0.0"
2881
+ }
2882
+ },
2883
+ "node_modules/micromark-factory-label": {
2884
+ "version": "2.0.1",
2885
+ "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz",
2886
+ "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==",
2887
+ "funding": [
2888
+ {
2889
+ "type": "GitHub Sponsors",
2890
+ "url": "https://github.com/sponsors/unifiedjs"
2891
+ },
2892
+ {
2893
+ "type": "OpenCollective",
2894
+ "url": "https://opencollective.com/unified"
2895
+ }
2896
+ ],
2897
+ "license": "MIT",
2898
+ "dependencies": {
2899
+ "devlop": "^1.0.0",
2900
+ "micromark-util-character": "^2.0.0",
2901
+ "micromark-util-symbol": "^2.0.0",
2902
+ "micromark-util-types": "^2.0.0"
2903
+ }
2904
+ },
2905
+ "node_modules/micromark-factory-space": {
2906
+ "version": "2.0.1",
2907
+ "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz",
2908
+ "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==",
2909
+ "funding": [
2910
+ {
2911
+ "type": "GitHub Sponsors",
2912
+ "url": "https://github.com/sponsors/unifiedjs"
2913
+ },
2914
+ {
2915
+ "type": "OpenCollective",
2916
+ "url": "https://opencollective.com/unified"
2917
+ }
2918
+ ],
2919
+ "license": "MIT",
2920
+ "dependencies": {
2921
+ "micromark-util-character": "^2.0.0",
2922
+ "micromark-util-types": "^2.0.0"
2923
+ }
2924
+ },
2925
+ "node_modules/micromark-factory-title": {
2926
+ "version": "2.0.1",
2927
+ "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz",
2928
+ "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==",
2929
+ "funding": [
2930
+ {
2931
+ "type": "GitHub Sponsors",
2932
+ "url": "https://github.com/sponsors/unifiedjs"
2933
+ },
2934
+ {
2935
+ "type": "OpenCollective",
2936
+ "url": "https://opencollective.com/unified"
2937
+ }
2938
+ ],
2939
+ "license": "MIT",
2940
+ "dependencies": {
2941
+ "micromark-factory-space": "^2.0.0",
2942
+ "micromark-util-character": "^2.0.0",
2943
+ "micromark-util-symbol": "^2.0.0",
2944
+ "micromark-util-types": "^2.0.0"
2945
+ }
2946
+ },
2947
+ "node_modules/micromark-factory-whitespace": {
2948
+ "version": "2.0.1",
2949
+ "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz",
2950
+ "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==",
2951
+ "funding": [
2952
+ {
2953
+ "type": "GitHub Sponsors",
2954
+ "url": "https://github.com/sponsors/unifiedjs"
2955
+ },
2956
+ {
2957
+ "type": "OpenCollective",
2958
+ "url": "https://opencollective.com/unified"
2959
+ }
2960
+ ],
2961
+ "license": "MIT",
2962
+ "dependencies": {
2963
+ "micromark-factory-space": "^2.0.0",
2964
+ "micromark-util-character": "^2.0.0",
2965
+ "micromark-util-symbol": "^2.0.0",
2966
+ "micromark-util-types": "^2.0.0"
2967
+ }
2968
+ },
2969
+ "node_modules/micromark-util-character": {
2970
+ "version": "2.1.1",
2971
+ "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
2972
+ "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
2973
+ "funding": [
2974
+ {
2975
+ "type": "GitHub Sponsors",
2976
+ "url": "https://github.com/sponsors/unifiedjs"
2977
+ },
2978
+ {
2979
+ "type": "OpenCollective",
2980
+ "url": "https://opencollective.com/unified"
2981
+ }
2982
+ ],
2983
+ "license": "MIT",
2984
+ "dependencies": {
2985
+ "micromark-util-symbol": "^2.0.0",
2986
+ "micromark-util-types": "^2.0.0"
2987
+ }
2988
+ },
2989
+ "node_modules/micromark-util-chunked": {
2990
+ "version": "2.0.1",
2991
+ "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz",
2992
+ "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==",
2993
+ "funding": [
2994
+ {
2995
+ "type": "GitHub Sponsors",
2996
+ "url": "https://github.com/sponsors/unifiedjs"
2997
+ },
2998
+ {
2999
+ "type": "OpenCollective",
3000
+ "url": "https://opencollective.com/unified"
3001
+ }
3002
+ ],
3003
+ "license": "MIT",
3004
+ "dependencies": {
3005
+ "micromark-util-symbol": "^2.0.0"
3006
+ }
3007
+ },
3008
+ "node_modules/micromark-util-classify-character": {
3009
+ "version": "2.0.1",
3010
+ "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz",
3011
+ "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==",
3012
+ "funding": [
3013
+ {
3014
+ "type": "GitHub Sponsors",
3015
+ "url": "https://github.com/sponsors/unifiedjs"
3016
+ },
3017
+ {
3018
+ "type": "OpenCollective",
3019
+ "url": "https://opencollective.com/unified"
3020
+ }
3021
+ ],
3022
+ "license": "MIT",
3023
+ "dependencies": {
3024
+ "micromark-util-character": "^2.0.0",
3025
+ "micromark-util-symbol": "^2.0.0",
3026
+ "micromark-util-types": "^2.0.0"
3027
+ }
3028
+ },
3029
+ "node_modules/micromark-util-combine-extensions": {
3030
+ "version": "2.0.1",
3031
+ "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz",
3032
+ "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==",
3033
+ "funding": [
3034
+ {
3035
+ "type": "GitHub Sponsors",
3036
+ "url": "https://github.com/sponsors/unifiedjs"
3037
+ },
3038
+ {
3039
+ "type": "OpenCollective",
3040
+ "url": "https://opencollective.com/unified"
3041
+ }
3042
+ ],
3043
+ "license": "MIT",
3044
+ "dependencies": {
3045
+ "micromark-util-chunked": "^2.0.0",
3046
+ "micromark-util-types": "^2.0.0"
3047
+ }
3048
+ },
3049
+ "node_modules/micromark-util-decode-numeric-character-reference": {
3050
+ "version": "2.0.2",
3051
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz",
3052
+ "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==",
3053
+ "funding": [
3054
+ {
3055
+ "type": "GitHub Sponsors",
3056
+ "url": "https://github.com/sponsors/unifiedjs"
3057
+ },
3058
+ {
3059
+ "type": "OpenCollective",
3060
+ "url": "https://opencollective.com/unified"
3061
+ }
3062
+ ],
3063
+ "license": "MIT",
3064
+ "dependencies": {
3065
+ "micromark-util-symbol": "^2.0.0"
3066
+ }
3067
+ },
3068
+ "node_modules/micromark-util-decode-string": {
3069
+ "version": "2.0.1",
3070
+ "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz",
3071
+ "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==",
3072
+ "funding": [
3073
+ {
3074
+ "type": "GitHub Sponsors",
3075
+ "url": "https://github.com/sponsors/unifiedjs"
3076
+ },
3077
+ {
3078
+ "type": "OpenCollective",
3079
+ "url": "https://opencollective.com/unified"
3080
+ }
3081
+ ],
3082
+ "license": "MIT",
3083
+ "dependencies": {
3084
+ "decode-named-character-reference": "^1.0.0",
3085
+ "micromark-util-character": "^2.0.0",
3086
+ "micromark-util-decode-numeric-character-reference": "^2.0.0",
3087
+ "micromark-util-symbol": "^2.0.0"
3088
+ }
3089
+ },
3090
+ "node_modules/micromark-util-encode": {
3091
+ "version": "2.0.1",
3092
+ "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
3093
+ "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
3094
+ "funding": [
3095
+ {
3096
+ "type": "GitHub Sponsors",
3097
+ "url": "https://github.com/sponsors/unifiedjs"
3098
+ },
3099
+ {
3100
+ "type": "OpenCollective",
3101
+ "url": "https://opencollective.com/unified"
3102
+ }
3103
+ ],
3104
+ "license": "MIT"
3105
+ },
3106
+ "node_modules/micromark-util-html-tag-name": {
3107
+ "version": "2.0.1",
3108
+ "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz",
3109
+ "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==",
3110
+ "funding": [
3111
+ {
3112
+ "type": "GitHub Sponsors",
3113
+ "url": "https://github.com/sponsors/unifiedjs"
3114
+ },
3115
+ {
3116
+ "type": "OpenCollective",
3117
+ "url": "https://opencollective.com/unified"
3118
+ }
3119
+ ],
3120
+ "license": "MIT"
3121
+ },
3122
+ "node_modules/micromark-util-normalize-identifier": {
3123
+ "version": "2.0.1",
3124
+ "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz",
3125
+ "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==",
3126
+ "funding": [
3127
+ {
3128
+ "type": "GitHub Sponsors",
3129
+ "url": "https://github.com/sponsors/unifiedjs"
3130
+ },
3131
+ {
3132
+ "type": "OpenCollective",
3133
+ "url": "https://opencollective.com/unified"
3134
+ }
3135
+ ],
3136
+ "license": "MIT",
3137
+ "dependencies": {
3138
+ "micromark-util-symbol": "^2.0.0"
3139
+ }
3140
+ },
3141
+ "node_modules/micromark-util-resolve-all": {
3142
+ "version": "2.0.1",
3143
+ "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz",
3144
+ "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==",
3145
+ "funding": [
3146
+ {
3147
+ "type": "GitHub Sponsors",
3148
+ "url": "https://github.com/sponsors/unifiedjs"
3149
+ },
3150
+ {
3151
+ "type": "OpenCollective",
3152
+ "url": "https://opencollective.com/unified"
3153
+ }
3154
+ ],
3155
+ "license": "MIT",
3156
+ "dependencies": {
3157
+ "micromark-util-types": "^2.0.0"
3158
+ }
3159
+ },
3160
+ "node_modules/micromark-util-sanitize-uri": {
3161
+ "version": "2.0.1",
3162
+ "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
3163
+ "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
3164
+ "funding": [
3165
+ {
3166
+ "type": "GitHub Sponsors",
3167
+ "url": "https://github.com/sponsors/unifiedjs"
3168
+ },
3169
+ {
3170
+ "type": "OpenCollective",
3171
+ "url": "https://opencollective.com/unified"
3172
+ }
3173
+ ],
3174
+ "license": "MIT",
3175
+ "dependencies": {
3176
+ "micromark-util-character": "^2.0.0",
3177
+ "micromark-util-encode": "^2.0.0",
3178
+ "micromark-util-symbol": "^2.0.0"
3179
+ }
3180
+ },
3181
+ "node_modules/micromark-util-subtokenize": {
3182
+ "version": "2.1.0",
3183
+ "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz",
3184
+ "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==",
3185
+ "funding": [
3186
+ {
3187
+ "type": "GitHub Sponsors",
3188
+ "url": "https://github.com/sponsors/unifiedjs"
3189
+ },
3190
+ {
3191
+ "type": "OpenCollective",
3192
+ "url": "https://opencollective.com/unified"
3193
+ }
3194
+ ],
3195
+ "license": "MIT",
3196
+ "dependencies": {
3197
+ "devlop": "^1.0.0",
3198
+ "micromark-util-chunked": "^2.0.0",
3199
+ "micromark-util-symbol": "^2.0.0",
3200
+ "micromark-util-types": "^2.0.0"
3201
+ }
3202
+ },
3203
+ "node_modules/micromark-util-symbol": {
3204
+ "version": "2.0.1",
3205
+ "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
3206
+ "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
3207
+ "funding": [
3208
+ {
3209
+ "type": "GitHub Sponsors",
3210
+ "url": "https://github.com/sponsors/unifiedjs"
3211
+ },
3212
+ {
3213
+ "type": "OpenCollective",
3214
+ "url": "https://opencollective.com/unified"
3215
+ }
3216
+ ],
3217
+ "license": "MIT"
3218
+ },
3219
+ "node_modules/micromark-util-types": {
3220
+ "version": "2.0.2",
3221
+ "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
3222
+ "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
3223
+ "funding": [
3224
+ {
3225
+ "type": "GitHub Sponsors",
3226
+ "url": "https://github.com/sponsors/unifiedjs"
3227
+ },
3228
+ {
3229
+ "type": "OpenCollective",
3230
+ "url": "https://opencollective.com/unified"
3231
+ }
3232
+ ],
3233
+ "license": "MIT"
3234
+ },
3235
+ "node_modules/minimatch": {
3236
+ "version": "3.1.2",
3237
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
3238
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
3239
+ "dev": true,
3240
+ "license": "ISC",
3241
+ "dependencies": {
3242
+ "brace-expansion": "^1.1.7"
3243
+ },
3244
+ "engines": {
3245
+ "node": "*"
3246
+ }
3247
+ },
3248
+ "node_modules/ms": {
3249
+ "version": "2.1.3",
3250
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
3251
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
3252
+ "license": "MIT"
3253
+ },
3254
+ "node_modules/nanoid": {
3255
+ "version": "3.3.11",
3256
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
3257
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
3258
+ "dev": true,
3259
+ "funding": [
3260
+ {
3261
+ "type": "github",
3262
+ "url": "https://github.com/sponsors/ai"
3263
+ }
3264
+ ],
3265
+ "license": "MIT",
3266
+ "bin": {
3267
+ "nanoid": "bin/nanoid.cjs"
3268
+ },
3269
+ "engines": {
3270
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
3271
+ }
3272
+ },
3273
+ "node_modules/natural-compare": {
3274
+ "version": "1.4.0",
3275
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
3276
+ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
3277
+ "dev": true,
3278
+ "license": "MIT"
3279
+ },
3280
+ "node_modules/node-releases": {
3281
+ "version": "2.0.27",
3282
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz",
3283
+ "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==",
3284
+ "dev": true,
3285
+ "license": "MIT"
3286
+ },
3287
+ "node_modules/optionator": {
3288
+ "version": "0.9.4",
3289
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
3290
+ "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
3291
+ "dev": true,
3292
+ "license": "MIT",
3293
+ "dependencies": {
3294
+ "deep-is": "^0.1.3",
3295
+ "fast-levenshtein": "^2.0.6",
3296
+ "levn": "^0.4.1",
3297
+ "prelude-ls": "^1.2.1",
3298
+ "type-check": "^0.4.0",
3299
+ "word-wrap": "^1.2.5"
3300
+ },
3301
+ "engines": {
3302
+ "node": ">= 0.8.0"
3303
+ }
3304
+ },
3305
+ "node_modules/p-limit": {
3306
+ "version": "3.1.0",
3307
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
3308
+ "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
3309
+ "dev": true,
3310
+ "license": "MIT",
3311
+ "dependencies": {
3312
+ "yocto-queue": "^0.1.0"
3313
+ },
3314
+ "engines": {
3315
+ "node": ">=10"
3316
+ },
3317
+ "funding": {
3318
+ "url": "https://github.com/sponsors/sindresorhus"
3319
+ }
3320
+ },
3321
+ "node_modules/p-locate": {
3322
+ "version": "5.0.0",
3323
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
3324
+ "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
3325
+ "dev": true,
3326
+ "license": "MIT",
3327
+ "dependencies": {
3328
+ "p-limit": "^3.0.2"
3329
+ },
3330
+ "engines": {
3331
+ "node": ">=10"
3332
+ },
3333
+ "funding": {
3334
+ "url": "https://github.com/sponsors/sindresorhus"
3335
+ }
3336
+ },
3337
+ "node_modules/parent-module": {
3338
+ "version": "1.0.1",
3339
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
3340
+ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
3341
  "dev": true,
3342
  "license": "MIT",
3343
  "dependencies": {
 
3347
  "node": ">=6"
3348
  }
3349
  },
3350
+ "node_modules/parse-entities": {
3351
+ "version": "4.0.2",
3352
+ "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz",
3353
+ "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==",
3354
+ "license": "MIT",
3355
+ "dependencies": {
3356
+ "@types/unist": "^2.0.0",
3357
+ "character-entities-legacy": "^3.0.0",
3358
+ "character-reference-invalid": "^2.0.0",
3359
+ "decode-named-character-reference": "^1.0.0",
3360
+ "is-alphanumerical": "^2.0.0",
3361
+ "is-decimal": "^2.0.0",
3362
+ "is-hexadecimal": "^2.0.0"
3363
+ },
3364
+ "funding": {
3365
+ "type": "github",
3366
+ "url": "https://github.com/sponsors/wooorm"
3367
+ }
3368
+ },
3369
+ "node_modules/parse-entities/node_modules/@types/unist": {
3370
+ "version": "2.0.11",
3371
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz",
3372
+ "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==",
3373
+ "license": "MIT"
3374
+ },
3375
  "node_modules/path-exists": {
3376
  "version": "4.0.0",
3377
  "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
 
3451
  "node": ">= 0.8.0"
3452
  }
3453
  },
3454
+ "node_modules/property-information": {
3455
+ "version": "7.1.0",
3456
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz",
3457
+ "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==",
3458
+ "license": "MIT",
3459
+ "funding": {
3460
+ "type": "github",
3461
+ "url": "https://github.com/sponsors/wooorm"
3462
+ }
3463
+ },
3464
  "node_modules/punycode": {
3465
  "version": "2.3.1",
3466
  "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
 
3492
  "react": "^19.2.3"
3493
  }
3494
  },
3495
+ "node_modules/react-markdown": {
3496
+ "version": "10.1.0",
3497
+ "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-10.1.0.tgz",
3498
+ "integrity": "sha512-qKxVopLT/TyA6BX3Ue5NwabOsAzm0Q7kAPwq6L+wWDwisYs7R8vZ0nRXqq6rkueboxpkjvLGU9fWifiX/ZZFxQ==",
3499
+ "license": "MIT",
3500
+ "dependencies": {
3501
+ "@types/hast": "^3.0.0",
3502
+ "@types/mdast": "^4.0.0",
3503
+ "devlop": "^1.0.0",
3504
+ "hast-util-to-jsx-runtime": "^2.0.0",
3505
+ "html-url-attributes": "^3.0.0",
3506
+ "mdast-util-to-hast": "^13.0.0",
3507
+ "remark-parse": "^11.0.0",
3508
+ "remark-rehype": "^11.0.0",
3509
+ "unified": "^11.0.0",
3510
+ "unist-util-visit": "^5.0.0",
3511
+ "vfile": "^6.0.0"
3512
+ },
3513
+ "funding": {
3514
+ "type": "opencollective",
3515
+ "url": "https://opencollective.com/unified"
3516
+ },
3517
+ "peerDependencies": {
3518
+ "@types/react": ">=18",
3519
+ "react": ">=18"
3520
+ }
3521
+ },
3522
  "node_modules/react-refresh": {
3523
  "version": "0.18.0",
3524
  "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.18.0.tgz",
 
3529
  "node": ">=0.10.0"
3530
  }
3531
  },
3532
+ "node_modules/remark-parse": {
3533
+ "version": "11.0.0",
3534
+ "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz",
3535
+ "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==",
3536
+ "license": "MIT",
3537
+ "dependencies": {
3538
+ "@types/mdast": "^4.0.0",
3539
+ "mdast-util-from-markdown": "^2.0.0",
3540
+ "micromark-util-types": "^2.0.0",
3541
+ "unified": "^11.0.0"
3542
+ },
3543
+ "funding": {
3544
+ "type": "opencollective",
3545
+ "url": "https://opencollective.com/unified"
3546
+ }
3547
+ },
3548
+ "node_modules/remark-rehype": {
3549
+ "version": "11.1.2",
3550
+ "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz",
3551
+ "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==",
3552
+ "license": "MIT",
3553
+ "dependencies": {
3554
+ "@types/hast": "^3.0.0",
3555
+ "@types/mdast": "^4.0.0",
3556
+ "mdast-util-to-hast": "^13.0.0",
3557
+ "unified": "^11.0.0",
3558
+ "vfile": "^6.0.0"
3559
+ },
3560
+ "funding": {
3561
+ "type": "opencollective",
3562
+ "url": "https://opencollective.com/unified"
3563
+ }
3564
+ },
3565
  "node_modules/resolve-from": {
3566
  "version": "4.0.0",
3567
  "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
 
3666
  "node": ">=0.10.0"
3667
  }
3668
  },
3669
+ "node_modules/space-separated-tokens": {
3670
+ "version": "2.0.2",
3671
+ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
3672
+ "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
3673
+ "license": "MIT",
3674
+ "funding": {
3675
+ "type": "github",
3676
+ "url": "https://github.com/sponsors/wooorm"
3677
+ }
3678
+ },
3679
+ "node_modules/stringify-entities": {
3680
+ "version": "4.0.4",
3681
+ "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
3682
+ "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
3683
+ "license": "MIT",
3684
+ "dependencies": {
3685
+ "character-entities-html4": "^2.0.0",
3686
+ "character-entities-legacy": "^3.0.0"
3687
+ },
3688
+ "funding": {
3689
+ "type": "github",
3690
+ "url": "https://github.com/sponsors/wooorm"
3691
+ }
3692
+ },
3693
  "node_modules/strip-json-comments": {
3694
  "version": "3.1.1",
3695
  "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
 
3703
  "url": "https://github.com/sponsors/sindresorhus"
3704
  }
3705
  },
3706
+ "node_modules/style-to-js": {
3707
+ "version": "1.1.21",
3708
+ "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz",
3709
+ "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==",
3710
+ "license": "MIT",
3711
+ "dependencies": {
3712
+ "style-to-object": "1.0.14"
3713
+ }
3714
+ },
3715
+ "node_modules/style-to-object": {
3716
+ "version": "1.0.14",
3717
+ "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz",
3718
+ "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==",
3719
+ "license": "MIT",
3720
+ "dependencies": {
3721
+ "inline-style-parser": "0.2.7"
3722
+ }
3723
+ },
3724
  "node_modules/supports-color": {
3725
  "version": "7.2.0",
3726
  "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
 
3751
  "url": "https://github.com/sponsors/SuperchupuDev"
3752
  }
3753
  },
3754
+ "node_modules/trim-lines": {
3755
+ "version": "3.0.1",
3756
+ "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
3757
+ "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
3758
+ "license": "MIT",
3759
+ "funding": {
3760
+ "type": "github",
3761
+ "url": "https://github.com/sponsors/wooorm"
3762
+ }
3763
+ },
3764
+ "node_modules/trough": {
3765
+ "version": "2.2.0",
3766
+ "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz",
3767
+ "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==",
3768
+ "license": "MIT",
3769
+ "funding": {
3770
+ "type": "github",
3771
+ "url": "https://github.com/sponsors/wooorm"
3772
+ }
3773
+ },
3774
  "node_modules/type-check": {
3775
  "version": "0.4.0",
3776
  "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
 
3784
  "node": ">= 0.8.0"
3785
  }
3786
  },
3787
+ "node_modules/unified": {
3788
+ "version": "11.0.5",
3789
+ "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz",
3790
+ "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==",
3791
+ "license": "MIT",
3792
+ "dependencies": {
3793
+ "@types/unist": "^3.0.0",
3794
+ "bail": "^2.0.0",
3795
+ "devlop": "^1.0.0",
3796
+ "extend": "^3.0.0",
3797
+ "is-plain-obj": "^4.0.0",
3798
+ "trough": "^2.0.0",
3799
+ "vfile": "^6.0.0"
3800
+ },
3801
+ "funding": {
3802
+ "type": "opencollective",
3803
+ "url": "https://opencollective.com/unified"
3804
+ }
3805
+ },
3806
+ "node_modules/unist-util-is": {
3807
+ "version": "6.0.1",
3808
+ "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz",
3809
+ "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==",
3810
+ "license": "MIT",
3811
+ "dependencies": {
3812
+ "@types/unist": "^3.0.0"
3813
+ },
3814
+ "funding": {
3815
+ "type": "opencollective",
3816
+ "url": "https://opencollective.com/unified"
3817
+ }
3818
+ },
3819
+ "node_modules/unist-util-position": {
3820
+ "version": "5.0.0",
3821
+ "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
3822
+ "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
3823
+ "license": "MIT",
3824
+ "dependencies": {
3825
+ "@types/unist": "^3.0.0"
3826
+ },
3827
+ "funding": {
3828
+ "type": "opencollective",
3829
+ "url": "https://opencollective.com/unified"
3830
+ }
3831
+ },
3832
+ "node_modules/unist-util-stringify-position": {
3833
+ "version": "4.0.0",
3834
+ "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
3835
+ "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
3836
+ "license": "MIT",
3837
+ "dependencies": {
3838
+ "@types/unist": "^3.0.0"
3839
+ },
3840
+ "funding": {
3841
+ "type": "opencollective",
3842
+ "url": "https://opencollective.com/unified"
3843
+ }
3844
+ },
3845
+ "node_modules/unist-util-visit": {
3846
+ "version": "5.0.0",
3847
+ "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz",
3848
+ "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==",
3849
+ "license": "MIT",
3850
+ "dependencies": {
3851
+ "@types/unist": "^3.0.0",
3852
+ "unist-util-is": "^6.0.0",
3853
+ "unist-util-visit-parents": "^6.0.0"
3854
+ },
3855
+ "funding": {
3856
+ "type": "opencollective",
3857
+ "url": "https://opencollective.com/unified"
3858
+ }
3859
+ },
3860
+ "node_modules/unist-util-visit-parents": {
3861
+ "version": "6.0.2",
3862
+ "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz",
3863
+ "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==",
3864
+ "license": "MIT",
3865
+ "dependencies": {
3866
+ "@types/unist": "^3.0.0",
3867
+ "unist-util-is": "^6.0.0"
3868
+ },
3869
+ "funding": {
3870
+ "type": "opencollective",
3871
+ "url": "https://opencollective.com/unified"
3872
+ }
3873
+ },
3874
  "node_modules/update-browserslist-db": {
3875
  "version": "1.2.3",
3876
  "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
 
3925
  "uuid": "dist-node/bin/uuid"
3926
  }
3927
  },
3928
+ "node_modules/vfile": {
3929
+ "version": "6.0.3",
3930
+ "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
3931
+ "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
3932
+ "license": "MIT",
3933
+ "dependencies": {
3934
+ "@types/unist": "^3.0.0",
3935
+ "vfile-message": "^4.0.0"
3936
+ },
3937
+ "funding": {
3938
+ "type": "opencollective",
3939
+ "url": "https://opencollective.com/unified"
3940
+ }
3941
+ },
3942
+ "node_modules/vfile-message": {
3943
+ "version": "4.0.3",
3944
+ "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
3945
+ "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
3946
+ "license": "MIT",
3947
+ "dependencies": {
3948
+ "@types/unist": "^3.0.0",
3949
+ "unist-util-stringify-position": "^4.0.0"
3950
+ },
3951
+ "funding": {
3952
+ "type": "opencollective",
3953
+ "url": "https://opencollective.com/unified"
3954
+ }
3955
+ },
3956
  "node_modules/vite": {
3957
  "version": "7.3.1",
3958
  "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz",
 
4096
  "peerDependencies": {
4097
  "zod": "^3.25.0 || ^4.0.0"
4098
  }
4099
+ },
4100
+ "node_modules/zwitch": {
4101
+ "version": "2.0.4",
4102
+ "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
4103
+ "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
4104
+ "license": "MIT",
4105
+ "funding": {
4106
+ "type": "github",
4107
+ "url": "https://github.com/sponsors/wooorm"
4108
+ }
4109
  }
4110
  }
4111
  }
frontend/package.json CHANGED
@@ -13,6 +13,7 @@
13
  "lucide-react": "^0.562.0",
14
  "react": "^19.2.0",
15
  "react-dom": "^19.2.0",
 
16
  "uuid": "^13.0.0"
17
  },
18
  "devDependencies": {
 
13
  "lucide-react": "^0.562.0",
14
  "react": "^19.2.0",
15
  "react-dom": "^19.2.0",
16
+ "react-markdown": "^10.1.0",
17
  "uuid": "^13.0.0"
18
  },
19
  "devDependencies": {
frontend/src/App.jsx CHANGED
@@ -3,8 +3,14 @@ import ChatInterface from './components/ChatInterface';
3
  import { v4 as uuidv4 } from 'uuid';
4
 
5
  function App() {
6
- // Generate session ID on first load
7
- const [sessionId] = useState(uuidv4());
 
 
 
 
 
 
8
 
9
  return (
10
  <div className="app-container">
 
3
  import { v4 as uuidv4 } from 'uuid';
4
 
5
  function App() {
6
+ // Generate session ID on first load or retrieve from local storage
7
+ const [sessionId] = useState(() => {
8
+ const stored = localStorage.getItem('tesco_session_id');
9
+ if (stored) return stored;
10
+ const newId = uuidv4();
11
+ localStorage.setItem('tesco_session_id', newId);
12
+ return newId;
13
+ });
14
 
15
  return (
16
  <div className="app-container">
frontend/src/components/ChatInterface.jsx CHANGED
@@ -1,13 +1,19 @@
1
  import React, { useState, useRef, useEffect } from 'react';
2
- import { Send, ShoppingCart } from 'lucide-react';
 
3
 
4
  const ChatInterface = ({ sessionId }) => {
5
- const [messages, setMessages] = useState([
6
- {
7
- role: 'assistant',
8
- content: 'Hello! I’m your Tesco AI Support assistant. How can I help you with your order today?'
9
- }
10
- ]);
 
 
 
 
 
11
  const [input, setInput] = useState('');
12
  const [isLoading, setIsLoading] = useState(false);
13
  const messagesEndRef = useRef(null);
@@ -20,6 +26,31 @@ const ChatInterface = ({ sessionId }) => {
20
  scrollToBottom();
21
  }, [messages]);
22
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  const handleSubmit = async (e) => {
24
  e.preventDefault();
25
  if (!input.trim() || isLoading) return;
@@ -40,7 +71,6 @@ const ChatInterface = ({ sessionId }) => {
40
 
41
  const reader = response.body.getReader();
42
  const decoder = new TextDecoder();
43
- let assistantMessage = '';
44
 
45
  // Add initial empty assistant message
46
  setMessages(prev => [...prev, { role: 'assistant', content: '' }]);
@@ -50,14 +80,17 @@ const ChatInterface = ({ sessionId }) => {
50
  if (done) break;
51
 
52
  const chunk = decoder.decode(value, { stream: true });
53
- assistantMessage += chunk;
54
 
55
  setMessages(prev => {
56
  const newMessages = [...prev];
57
- newMessages[newMessages.length - 1] = {
58
- role: 'assistant',
59
- content: newMessages[newMessages.length - 1].content + chunk
60
- };
 
 
 
 
61
  return newMessages;
62
  });
63
  }
@@ -76,17 +109,24 @@ const ChatInterface = ({ sessionId }) => {
76
  return (
77
  <div className="chat-container">
78
  <header className="chat-header">
79
- <img src="/logo.png" alt="Tesco Logo" className="logo" />
 
 
80
  <div className="header-title">
81
- <h1>Tesco AI Support</h1>
82
- <p>Always here to help</p>
83
  </div>
84
  </header>
85
 
86
  <div className="messages-area">
87
  {messages.map((msg, index) => (
88
  <div key={index} className={`message ${msg.role}`}>
89
- {msg.content}
 
 
 
 
 
 
90
  </div>
91
  ))}
92
  {isLoading && messages[messages.length - 1]?.role === 'user' && (
@@ -105,7 +145,7 @@ const ChatInterface = ({ sessionId }) => {
105
  className="input-field"
106
  value={input}
107
  onChange={(e) => setInput(e.target.value)}
108
- placeholder="Type your message..."
109
  disabled={isLoading}
110
  />
111
  <button type="submit" className="send-button" disabled={isLoading || !input.trim()}>
 
1
  import React, { useState, useRef, useEffect } from 'react';
2
+ import { Send } from 'lucide-react';
3
+ import ReactMarkdown from 'react-markdown';
4
 
5
  const ChatInterface = ({ sessionId }) => {
6
+ // Initialize without a hardcoded greeting (let the user start or fetch history if we had it)
7
+ // However, for a fresh session, a simple "How can I help?" is okay, but user requested "No robotic greeting every time".
8
+ // Since we persist sessions, we don't want to show "Hello" if we reload.
9
+ // Ideally we would fetch history here. But for now, let's start empty or with a very subtle state if history is empty.
10
+ // For simplicity given the scope, we'll start with a "welcome" message only if the list is empty AND it's a new session.
11
+ // But since we don't fetch history here yet (we only push to it), let's keep the greeting but make it standard.
12
+ // Wait, the user said "Do not greeting every time". If I reload, `messages` state resets to default.
13
+ // To truly fix this, we'd need to fetch history from the backend on mount.
14
+ // I will add a `fetchHistory` call.
15
+
16
+ const [messages, setMessages] = useState([]);
17
  const [input, setInput] = useState('');
18
  const [isLoading, setIsLoading] = useState(false);
19
  const messagesEndRef = useRef(null);
 
26
  scrollToBottom();
27
  }, [messages]);
28
 
29
+ // Fetch history on mount
30
+ useEffect(() => {
31
+ const fetchHistory = async () => {
32
+ try {
33
+ // We need an endpoint for history. existing `main.py` might not have it exposed?
34
+ // Let's check `main.py`... assumes it doesn't.
35
+ // Creating a new endpoint is out of scope of "frontend implementation" unless deemed critical.
36
+ // Re-reading requirements: "Use memory from previous messages".
37
+ // If I reload the page, and the backend has memory, but frontend wipes it, the context is lost to the USER but kept by the AI.
38
+ // The AI will know what we talked about, but the user won't see it.
39
+ // That's acceptable for now if we don't have a history endpoint.
40
+ // I will add a simple initial greeting if messages are empty.
41
+ setMessages([
42
+ {
43
+ role: 'assistant',
44
+ content: 'Hello, I\'m Tesco Support. How can I help you today?'
45
+ }
46
+ ]);
47
+ } catch (e) {
48
+ console.error(e);
49
+ }
50
+ };
51
+ fetchHistory();
52
+ }, [sessionId]);
53
+
54
  const handleSubmit = async (e) => {
55
  e.preventDefault();
56
  if (!input.trim() || isLoading) return;
 
71
 
72
  const reader = response.body.getReader();
73
  const decoder = new TextDecoder();
 
74
 
75
  // Add initial empty assistant message
76
  setMessages(prev => [...prev, { role: 'assistant', content: '' }]);
 
80
  if (done) break;
81
 
82
  const chunk = decoder.decode(value, { stream: true });
 
83
 
84
  setMessages(prev => {
85
  const newMessages = [...prev];
86
+ const lastMsg = newMessages[newMessages.length - 1];
87
+ // Ensure we are appending to the assistant's message
88
+ if (lastMsg.role === 'assistant') {
89
+ newMessages[newMessages.length - 1] = {
90
+ ...lastMsg,
91
+ content: lastMsg.content + chunk
92
+ };
93
+ }
94
  return newMessages;
95
  });
96
  }
 
109
  return (
110
  <div className="chat-container">
111
  <header className="chat-header">
112
+ <div className="logo-area">
113
+ <span className="logo-text">TESCO</span>
114
+ </div>
115
  <div className="header-title">
116
+ <h1>Support</h1>
 
117
  </div>
118
  </header>
119
 
120
  <div className="messages-area">
121
  {messages.map((msg, index) => (
122
  <div key={index} className={`message ${msg.role}`}>
123
+ {msg.role === 'assistant' ? (
124
+ <div className="markdown-body">
125
+ <ReactMarkdown>{msg.content}</ReactMarkdown>
126
+ </div>
127
+ ) : (
128
+ msg.content
129
+ )}
130
  </div>
131
  ))}
132
  {isLoading && messages[messages.length - 1]?.role === 'user' && (
 
145
  className="input-field"
146
  value={input}
147
  onChange={(e) => setInput(e.target.value)}
148
+ placeholder="Type a message..."
149
  disabled={isLoading}
150
  />
151
  <button type="submit" className="send-button" disabled={isLoading || !input.trim()}>
frontend/src/index.css CHANGED
@@ -68,11 +68,21 @@ body {
68
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
69
  }
70
 
71
- .logo {
72
- height: 32px;
 
 
 
 
 
 
 
 
 
 
73
  background: white;
74
- padding: 4px;
75
- border-radius: 4px;
76
  }
77
 
78
  .header-title h1 {
@@ -119,6 +129,55 @@ body {
119
  }
120
  }
121
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
122
  .message.user {
123
  align-self: flex-end;
124
  background-color: var(--user-msg-bg);
@@ -133,6 +192,10 @@ body {
133
  border-bottom-left-radius: 2px;
134
  }
135
 
 
 
 
 
136
  /* Input Area */
137
  .input-area {
138
  padding: 1rem;
 
68
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
69
  }
70
 
71
+ .logo-area {
72
+ background: transparent;
73
+ padding: 0;
74
+ }
75
+
76
+ .logo-text {
77
+ font-weight: 800;
78
+ font-size: 1.5rem;
79
+ color: var(--tesco-red);
80
+ letter-spacing: 0.5px;
81
+ text-shadow: 1px 1px 0px white;
82
+ /* Simple Tesco-like text representation */
83
  background: white;
84
+ padding: 2px 6px;
85
+ border-radius: 2px;
86
  }
87
 
88
  .header-title h1 {
 
129
  }
130
  }
131
 
132
+
133
+ /* Message Rendering - Markdown Support */
134
+ .markdown-body {
135
+ font-size: 0.95rem;
136
+ line-height: 1.5;
137
+ }
138
+
139
+ .markdown-body p {
140
+ margin: 0 0 10px 0;
141
+ }
142
+
143
+ .markdown-body p:last-child {
144
+ margin-bottom: 0;
145
+ }
146
+
147
+ .markdown-body ul,
148
+ .markdown-body ol {
149
+ margin: 8px 0;
150
+ padding-left: 20px;
151
+ }
152
+
153
+ .markdown-body li {
154
+ margin-bottom: 4px;
155
+ }
156
+
157
+ .markdown-body h1,
158
+ .markdown-body h2,
159
+ .markdown-body h3,
160
+ .markdown-body h4 {
161
+ font-weight: 600;
162
+ margin: 12px 0 8px 0;
163
+ font-size: 1.1em;
164
+ }
165
+
166
+ .markdown-body h1:first-child,
167
+ .markdown-body h2:first-child {
168
+ margin-top: 0;
169
+ }
170
+
171
+ .markdown-body strong {
172
+ font-weight: 600;
173
+ }
174
+
175
+ .markdown-body a {
176
+ color: var(--tesco-blue);
177
+ text-decoration: underline;
178
+ }
179
+
180
+ /* User Message specific overrides */
181
  .message.user {
182
  align-self: flex-end;
183
  background-color: var(--user-msg-bg);
 
192
  border-bottom-left-radius: 2px;
193
  }
194
 
195
+ .message.assistant .markdown-body {
196
+ color: var(--bot-msg-text);
197
+ }
198
+
199
  /* Input Area */
200
  .input-area {
201
  padding: 1rem;
frontend/vite.config.js CHANGED
@@ -4,4 +4,9 @@ import react from '@vitejs/plugin-react'
4
  // https://vite.dev/config/
5
  export default defineConfig({
6
  plugins: [react()],
 
 
 
 
 
7
  })
 
4
  // https://vite.dev/config/
5
  export default defineConfig({
6
  plugins: [react()],
7
+ server: {
8
+ proxy: {
9
+ '/chat': 'http://localhost:7860'
10
+ }
11
+ }
12
  })
llm.py CHANGED
@@ -28,11 +28,10 @@ class LLMClient:
28
  results = self.rag.retrieve(user_message, n_results=5)
29
  # Flatten results and clean them
30
  retrieved_texts = results['documents'][0] if results.get('documents') else []
31
- # De-duplicate headers if possible or just join
32
- context_str = "\n---\n".join([t for t in retrieved_texts if t])
33
  except Exception as e:
34
  logger.error(f"RAG Retrieval failed: {e}")
35
- context_str = "No specific context available."
36
 
37
  # 2. Get History safely
38
  try:
@@ -41,66 +40,28 @@ class LLMClient:
41
  logger.error(f"Memory retrieval failed: {e}")
42
  history = []
43
 
44
- # 3. Construct System Prompt (Agentic & Reasoning Focused)
45
- system_prompt = f"""
46
 
47
- You are Tesco Groceries AI Assistant.
 
 
 
 
 
48
 
49
- You are a smart, helpful, and professional shopping assistant for Tesco Groceries.
50
- You help customers with product discovery, ordering, delivery, Click & Collect, Clubcard, and account support.
 
 
 
 
 
51
 
52
- Official Tesco website:
53
- www.tesco.com
54
- Groceries ordering:
55
- www.tesco.com/groceries
56
-
57
- Always direct users to the official Tesco website for ordering, checking products, and managing accounts.
58
-
59
- You are powered by Retrieval-Augmented Generation (RAG).
60
- Use retrieved context when available, but do not copy it word-for-word.
61
- Reason over the information and respond naturally like a real customer assistant.
62
-
63
- CRITICAL RESPONSE RULES:
64
- - Do not use markdown symbols like **, ##, -, or markdown lists
65
- - Do not wrap responses in markdown formatting
66
- - Use clean paragraphs and natural headings written in plain text
67
- - Write like a customer service chatbot, not a documentation bot
68
- - Keep responses structured, clear, and friendly
69
-
70
- FORMATTING STYLE:
71
- - Use short section titles in plain text
72
- - Separate sections with spacing
73
- - Use normal sentences and paragraphs
74
- - If steps are needed, write them as simple numbered lines
75
-
76
- Example format:
77
-
78
- Shopping with Tesco Groceries
79
-
80
- Here’s how you can place an order on Tesco Groceries:
81
-
82
- 1. Visit www.tesco.com/groceries
83
- 2. Sign in or create an account
84
- 3. Browse products and add items to your basket
85
- 4. Choose a delivery or Click & Collect slot
86
- 5. Checkout and confirm your order
87
-
88
- PERSONALITY:
89
- - Friendly
90
- - Professional
91
- - Clear
92
- - Efficient
93
- - Customer-first
94
-
95
- Never say:
96
- "Based on the retrieved context"
97
- "According to the documents"
98
- "The data says"
99
-
100
- If RAG context is missing or incomplete, use general Tesco shopping knowledge.
101
-
102
- Your job is to feel like a real Tesco assistant.
103
 
 
104
  """
105
 
106
  messages = [{"role": "system", "content": system_prompt}]
@@ -125,10 +86,8 @@ Your job is to feel like a real Tesco assistant.
125
 
126
  except Exception as e:
127
  logger.error(f"LLM Generation failed: {e}")
128
- # If we haven't sent anything, send a generic apology (but only then)
129
  if not full_response:
130
- yield "I'm sorry, I'm having trouble connecting to the service right now. Please try again later."
131
- # If we partially sent, we stop silently to avoid appending garbage.
132
 
133
  # 5. Save Interaction to Memory (Only on success)
134
  if full_response:
 
28
  results = self.rag.retrieve(user_message, n_results=5)
29
  # Flatten results and clean them
30
  retrieved_texts = results['documents'][0] if results.get('documents') else []
31
+ context_str = "\n\n".join([t for t in retrieved_texts if t])
 
32
  except Exception as e:
33
  logger.error(f"RAG Retrieval failed: {e}")
34
+ context_str = ""
35
 
36
  # 2. Get History safely
37
  try:
 
40
  logger.error(f"Memory retrieval failed: {e}")
41
  history = []
42
 
43
+ # 3. Construct System Prompt (Persona & Formatting Focused)
44
+ system_prompt = f"""You are Tesco Support, a helpful and professional customer service agent for Tesco Groceries.
45
 
46
+ CORE BEHAVIOR:
47
+ - Be natural, polite, and direct (British English).
48
+ - Do not restart the conversation or greet excessively.
49
+ - Assume the user is continuing an ongoing chat unless context suggests otherwise.
50
+ - If you don't know the answer, infer logically from the context or suggest checking www.tesco.com/groceries.
51
+ - NEVER say "Based on the context", "According to the data", or "I am an AI".
52
 
53
+ FORMATTING RULES (Strict):
54
+ - Use Markdown for structure.
55
+ - Write in clear PARAGRAPHS separated by blank lines.
56
+ - Use bullet points (-) for lists.
57
+ - Use ## for main section headers (if the response is long).
58
+ - Use **bold** for key terms or buttons.
59
+ - Do NOT dump text in a single block.
60
 
61
+ CONTEXT DATA:
62
+ {context_str}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
63
 
64
+ If the context helps, use it. If not, rely on general knowledge about Tesco services (Clubcard, Delivery, Click & Collect).
65
  """
66
 
67
  messages = [{"role": "system", "content": system_prompt}]
 
86
 
87
  except Exception as e:
88
  logger.error(f"LLM Generation failed: {e}")
 
89
  if not full_response:
90
+ yield "I'm having a bit of trouble connecting at the moment. Please try asking again in a few seconds."
 
91
 
92
  # 5. Save Interaction to Memory (Only on success)
93
  if full_response: